🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@dearmrzhang/customs-mcp-server

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dearmrzhang/customs-mcp-server

MCP server exposing 14 customs / trade capabilities (declarations, ship info, tariff, dual-use screening, AI document maker, ...) as standard Model Context Protocol tools. Built for Claude Desktop / Claude Code / Cursor / Windsurf / Trae / Codex and any M

latest
Source
npmnpm
Version
1.1.0
Version published
Maintainers
1
Created
Source

customs-mcp-server

Customs operations as MCP tools — drop into any AI agent.

14 production-grade customs / trade capabilities (declarations, ship info, tariff, dual-use screening, AI-powered declaration generation, ...) exposed as standard Model Context Protocol tools for Claude Desktop, Claude Code, Cursor, Windsurf, Trae and any other MCP-compatible AI client.

npm Node License TypeScript MCP GitHub stars

English · 简体中文 · 日本語

✨ Features

  • 14 MCP tools — every customs-skill capability exposed as a typed tool with zod-validated input
  • Universal client support — Claude Desktop / Claude Code / Cursor / Windsurf / Trae / Codex / any MCP client
  • Production auth/session/exchange → 5-min agentToken → action-code whitelist → tenant isolation
  • Per-call identity override — server-level env default + optional _identity field per tool call (multi-user / multi-tenant friendly)
  • AI document maker — multipart upload, no-wait mode, decId polling pattern
  • Error translation — backend NEED_BIND / NEED_TENANT / etc. rendered as actionable English guidance
  • Tiered timeouts — 15 s reads / 180 s upload / 660 s dual-use AI query
  • Zero runtime deps@modelcontextprotocol/sdk + zod + dotenv only; Node 18+ built-in fetch + FormData
  • Dual transport — stdio (Claude Desktop) and Streamable HTTP (remote / self-hosted)

🚀 Quick Start

1. Set up the backend identity binding

Ask your customs system admin to insert one row into agent_identity_binding mapping your chosen (platform, externalUserId) to an existing sys_user_id. Full SQL in docs/identity-binding.md.

2. Configure your AI client

Pick a ready-made config from examples/:

Or use the generic snippet:

{
  "mcpServers": {
    "customs": {
      "command": "npx",
      "args": ["-y", "@dearmrzhang/customs-mcp-server", "--transport", "stdio"],
      "env": {
        "CUSTOMS_API_BASE_URL": "http://your-backend-host:port",
        "CUSTOMS_ACCESS_KEY": "your-access-key",
        "CUSTOMS_SECRET_KEY": "your-secret-key",
        "CUSTOMS_DEFAULT_PLATFORM": "mcp",
        "CUSTOMS_DEFAULT_EXTERNAL_USER_ID": "your-bound-username",
        "CUSTOMS_DEFAULT_EXTERNAL_CORP_ID": "mcp-prod"
      }
    }
  }
}

3. Restart your client and ask

"Use customs_query_tariff to look up HS code 8471300000."

That's it. The AI agent picks the tool, the MCP server signs the request, exchanges a grant, and returns structured tariff data.

🏗 Architecture

                      ┌────────────────────────────────┐
                      │  AI client (Claude / Cursor /  │
                      │  Windsurf / Trae / ...)         │
                      └───────────────┬────────────────┘
                                      │ MCP protocol (stdio | HTTP)
                      ┌───────────────▼────────────────┐
                      │  customs-mcp-server             │
                      │                                 │
                      │  • 14 tool handlers             │
                      │  • Identity resolver            │
                      │  • Signer + GrantBroker         │
                      │    (5-min agentToken cache)     │
                      │  • Error translator             │
                      └───────────────┬────────────────┘
                                      │ HTTPS + signed headers
                      ┌───────────────▼────────────────┐
                      │  Customs backend                │
                      │  /open-api/agent/v1/...          │
                      └─────────────────────────────────┘

📚 Documentation

DocumentWhat's inside
CHANGELOG.mdAll version changes, including v0.1.2 → v1.0.0 breaking changes, v1.1.0 declaration-list enhancements
docs/tool-reference.mdComplete schema and usage for all 14 tools
docs/identity-binding.mdBackend SQL setup, multi-tenant patterns, troubleshooting
examples/Ready-to-paste config snippets for 5 AI clients

🛠 Environment Variables

VariableRequiredDefaultDescription
CUSTOMS_API_BASE_URLCustoms backend root URL
CUSTOMS_ACCESS_KEYStatic signature access key
CUSTOMS_SECRET_KEYStatic signature secret key
CUSTOMS_DEFAULT_PLATFORMIdentity platform (e.g. mcp / cursor)
CUSTOMS_DEFAULT_EXTERNAL_USER_IDBound external user identifier
CUSTOMS_DEFAULT_EXTERNAL_CORP_IDBound external corp identifier
CUSTOMS_API_PREFIX/open-api/agentAPI path prefix
CUSTOMS_TIMEOUT_MS15000Default request timeout (ms)
CUSTOMS_UPLOAD_TIMEOUT_MS180000AI-maker upload timeout (ms)
CUSTOMS_DUAL_USE_TIMEOUT_MS660000Dual-use slow query timeout (ms)
CUSTOMS_TIMESTAMP_TIMEZONEAsia/ShanghaiTimestamp tz (must match backend)
CUSTOMS_DEFAULT_CHANNEL${PLATFORM}Channel field for /session/exchange
MCP_HTTP_HOST0.0.0.0HTTP transport bind host
MCP_HTTP_PORT8787HTTP transport port
MCP_HTTP_PATH/mcpHTTP transport endpoint
CUSTOMS_DEBUG0Set 1 for verbose stderr debug logs

🧪 Available Tools

14 tools across 7 domains. Full schema and examples in tool-reference.md.

DomainTools
Declarationcustoms_get_declaration_status · customs_query_declaration_list · customs_get_declaration_detail · customs_get_import_export_status · customs_get_full_process_tracking
Shipcustoms_query_ship_info (with auto I→E fallback) · customs_query_ship_plan
Manifestcustoms_query_manifest_info · customs_query_ship_manifest_info
Tariffcustoms_query_tariff
Compliancecustoms_query_dual_use_item (slow AI query)
Orderscustoms_create_order_draft (pre-check only)
AI Makercustoms_submit_ai_maker · customs_get_ai_maker_status

⚠️ Upgrading from v0.1.x

v1.0.0 is a breaking release with mandatory new env vars. See CHANGELOG.md → 1.0.0 for the full list. TL;DR:

  • Add three identity env vars (CUSTOMS_DEFAULT_PLATFORM / CUSTOMS_DEFAULT_EXTERNAL_USER_ID / CUSTOMS_DEFAULT_EXTERNAL_CORP_ID)
  • Have your admin insert the matching agent_identity_binding row
  • Rename customs_query_tariff_infocustoms_query_tariff
  • Switch customs_get_declaration_detail callers from cusCiqNo to entryId (or decId when known)

🛡 Security

  • CUSTOMS_SECRET_KEY and cached agentTokens never leave server memory
  • Per-call _identity overrides should not embed PII — they appear in MCP structured responses
  • All write tools route through action-code whitelist on the backend
  • Cross-tenant ai-maker status access is blocked at the backend layer

🤝 Contributing

Issues and PRs welcome at github.com/yak33/customs-mcp-server.

git clone https://github.com/yak33/customs-mcp-server.git
cd customs-mcp-server
pnpm install
pnpm build
pnpm dev:stdio      # or dev:http

📄 License

MIT © ZHANGCHAO. See LICENSE.

  • customs-skill — the same 13 customs capabilities as an OpenClaw skill for Feishu/Lark integration
Built with 🦞 by ZHANGCHAO · v1.1.0 · 2026-05-27

Keywords

mcp

FAQs

Package last updated on 27 May 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts