ShipSmart-MCP
ShipSmart-MCP
ShipSmartの配送ツール(validate_address、get_quote_previewなど)をシンプルなHTTPコントラクト経由で公開する、スタンドアロンのMCP(Model Context Protocol)サーバーです。
これは、プラットフォーム全体におけるツール動作の唯一の信頼できる情報源です。ShipSmart-API(Python / FastAPI — RAGおよびLLM)とShipSmart-Orchestrator(Java / Spring Boot — 今後のAI機能)の両方が、プロセス内でツールを実装するのではなく、このサーバーを呼び出します。
HTTPコントラクト
メソッド | パス | 目的 |
GET |
| サービスディスカバリ(名前、バージョン、ツール数、エンドポイント)。 |
GET |
| Renderで使用される生存確認(Liveness probe)。 |
POST |
| 登録されているすべてのツールのスキーマを返す。 |
POST |
| 指定された引数でツールを名前で実行する。 |
GET |
| Swagger UI(非本番環境のみ)。 |
GET |
| ReDoc(非本番環境のみ)。 |
MCP tools/list および tools/call のセマンティクスとワイヤ互換性があります。各呼び出しは { success, content: [...], error? } を返し、content はLLMでの利用に適した {type, text} ブロックのリストです。
/docs および /redoc は APP_ENV != production の場合にのみマウントされます。
認証
サーバーで MCP_API_KEY が設定されている場合、すべての POST /tools/* リクエストは X-MCP-Api-Key ヘッダーに一致する値を送信する必要があります。MCP_API_KEY が空の場合、認証は無効になります(ローカル開発のみ)。GET / および GET /health は常に認証不要であり、共有シークレットなしでヘルスチェックとサービスディスカバリが機能するように設計されています。
エラーレスポンス
条件 | HTTP | ボディ |
| 401 |
|
不明なツール名 | 404 |
|
入力検証失敗またはツール例外 | 200 |
|
検証エラーや実行エラーは、コンシューマーがプロトコルレベルの失敗(4xx)とツールレベルの失敗(200 + success=false)を区別できるように、意図的にHTTP 200と success=false を返します。
Related MCP server: DB2ST MCP
ツール
名前 | 説明 |
| 設定された配送業者を通じて配送先住所を検証および正規化する。 |
| 荷物の拘束力のない料金プレビュー。最終的な料金はJava APIから取得される。 |
ツールは、SHIPPING_PROVIDER によって選択されたプラグイン可能な ShippingProvider 実装に委譲されます。
プロバイダー | ステータス |
| 完全に動作。ローカル開発およびテスト用に決定論的な偽データを返す。 |
| スタブ — クラスは存在するが、まだ本番環境対応ではない。 |
| スタブ — クラスは存在するが、まだ本番環境対応ではない。 |
| スタブ — クラスは存在するが、まだ本番環境対応ではない。 |
| スタブ — クラスは存在するが、まだ本番環境対応ではない。 |
ツールを追加するには、新しいクラスを app/tools/ に配置し、app/main.py に登録するだけです。
プロバイダーの起動動作
SHIPPING_PROVIDER=mock(デフォルト)は起動時に警告(WARNING)を出力し、オペレーターが偽データに驚かないようにします。必要な資格情報がすべて揃っていない状態で実際の配送業者(
ups/fedex/dhl/usps)を選択すると、起動時にValueErrorが発生します。モックへのサイレントフォールバックは存在しません。設定ミスは迅速かつ目に見える形で失敗します。
設定
すべての設定は環境変数(またはローカル開発用の .env)から読み込まれます。完全なリストとデフォルト値については .env.example を参照してください。
変数 | 目的 |
|
|
| バインドアドレス。デフォルトは |
| 標準のログレベル(デフォルト |
| CORSミドルウェアで許可されるカンマ区切りのオリジン。 |
|
|
|
|
| 配送業者ごとの資格情報およびベースURL。 |
ローカルでの実行
前提条件: Python 3.13+ および uv。
cp .env.example .env
# fill in credentials if you want real carrier integration; default is SHIPPING_PROVIDER=mock
uv sync
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8001スモークテスト:
curl -s http://localhost:8001/health
curl -s -X POST http://localhost:8001/tools/list
curl -s -X POST http://localhost:8001/tools/call \
-H 'Content-Type: application/json' \
-d '{
"name": "validate_address",
"arguments": {
"street": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zip_code": "94105"
}
}'テスト
uv run pytest可観測性
RequestLoggingMiddleware (app/core/middleware.py) は、すべてのリクエストの相関IDを処理します。
受信リクエストから
X-Request-Idを読み取るか、存在しない場合はUUIDの16進数を生成します。W3C
traceparentを読み取るか、存在しない、または不正な場合は新しく生成します。呼び出し元がサービス間でIDによって
grepできるように、レスポンスで両方のヘッダーをエコーバックします。shipsmart_mcp.requestsロガーでリクエストごとに1行のログを出力します。GET /health → 200 (1.4ms) [a1b2c3...]
アップストリームサービスから X-Request-Id を渡すことで、ShipSmart-API → MCP → 配送業者APIという単一のリクエストを追跡できます。
デプロイ (Render)
render.yaml は、デプロイされたサービスを定義するRenderブループリントです。
Python Webサービス。
pip install uv && uv syncでビルドし、uvicorn app.main:app --host 0.0.0.0 --port $PORTで起動します。/healthでヘルスチェックを行います。MCP_API_KEYはsync: falseです。Renderダッシュボードで一度設定し、すべてのコンシューマーのSHIPSMART_MCP_API_KEYに同じ値を使用してください。デフォルトの
SHIPPING_PROVIDER=fedexはhttps://apis-sandbox.fedex.com(FedEx サンドボックス、本番環境ではない)を指します。実際の配送業者のトラフィックに昇格させる際は、ベースURLを上書きしてください。CORSオリジンは、ブループリント内でデプロイされたコンシューマーURLに固定されています。
Renderをこのリポジトリに向けることでプロビジョニングされます。最初のデプロイが成功する前に、すべての sync: false 環境変数を入力する必要があります。
コンシューマー
ShipSmart-API (Python / FastAPI; Render上で
shipsmart-api-pythonとしてデプロイ):SHIPSMART_MCP_URLをこのサーバーに向け、オーケストレーションおよびアドバイザーサービスから/tools/list+/tools/callを呼び出します。ShipSmart-Orchestrator (Java / Spring Boot; Render上で
shipsmart-api-javaとしてデプロイ): 今後のAIアシストフローから同じHTTPコントラクトを呼び出します。Javaコードベースにはツールロジックは含まれません。
これにより、ツールレイヤーが一元化され、ツールを一度追加すればすべてのサービスがそれを利用できるようになります。
This server cannot be deployed
Maintenance
Related MCP Connectors
A paid remote MCP for ShipSwift, built to return verdicts, receipts, usage logs, and audit-ready JSO
MCP server for EasyPost — rate shipments, buy & refund labels, track packages, verify addresses.
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with ShipEngine's shipping API, allowing users to manage shipments, labels, carriers, and other shipping operations through natural language commands.-
- AlicenseNot gradedqualityDmaintenanceA horizontally scalable Model Context Protocol server for exposing shipment tracking (and other data sources) as authenticated MCP tools, starting with DB Schenker's public tracking endpoint.1MIT
- AlicenseBqualityDmaintenanceAn MCP server that wraps the ShipSaving logistics REST API, enabling AI assistants like Claude to perform shipping operations through natural language.3013 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server exposing Shopify commerce backend with ~22 typed tools for orders, inventory, logistics, and fulfillment, including read/write separation and structured errors.-