Skip to main content
Glama
nia194
by nia194

ShipSmart-MCP

ShipSmartの配送ツール(validate_addressget_quote_previewなど)をシンプルなHTTPコントラクト経由で公開する、スタンドアロンのMCP(Model Context Protocol)サーバーです。

これは、プラットフォーム全体におけるツール動作の唯一の信頼できる情報源です。ShipSmart-API(Python / FastAPI — RAGおよびLLM)とShipSmart-Orchestrator(Java / Spring Boot — 今後のAI機能)の両方が、プロセス内でツールを実装するのではなく、このサーバーを呼び出します。


HTTPコントラクト

メソッド

パス

目的

GET

/

サービスディスカバリ(名前、バージョン、ツール数、エンドポイント)。

GET

/health

Renderで使用される生存確認(Liveness probe)。

POST

/tools/list

登録されているすべてのツールのスキーマを返す。

POST

/tools/call

指定された引数でツールを名前で実行する。

GET

/docs

Swagger UI(非本番環境のみ)。

GET

/redoc

ReDoc(非本番環境のみ)。

MCP tools/list および tools/call のセマンティクスとワイヤ互換性があります。各呼び出しは { success, content: [...], error? } を返し、content はLLMでの利用に適した {type, text} ブロックのリストです。

/docs および /redocAPP_ENV != production の場合にのみマウントされます。

認証

サーバーで MCP_API_KEY が設定されている場合、すべての POST /tools/* リクエストは X-MCP-Api-Key ヘッダーに一致する値を送信する必要があります。MCP_API_KEY が空の場合、認証は無効になります(ローカル開発のみ)。GET / および GET /health は常に認証不要であり、共有シークレットなしでヘルスチェックとサービスディスカバリが機能するように設計されています。

エラーレスポンス

条件

HTTP

ボディ

X-MCP-Api-Key が欠落または無効

401

{"detail": "Invalid or missing X-MCP-Api-Key"}

不明なツール名

404

{"detail": "Tool not found: <name>"}

入力検証失敗またはツール例外

200

{"success": false, "content": [], "error": "..."}

検証エラーや実行エラーは、コンシューマーがプロトコルレベルの失敗(4xx)とツールレベルの失敗(200 + success=false)を区別できるように、意図的にHTTP 200と success=false を返します。


Related MCP server: DB2ST MCP

ツール

名前

説明

validate_address

設定された配送業者を通じて配送先住所を検証および正規化する。

get_quote_preview

荷物の拘束力のない料金プレビュー。最終的な料金はJava APIから取得される。

ツールは、SHIPPING_PROVIDER によって選択されたプラグイン可能な ShippingProvider 実装に委譲されます。

プロバイダー

ステータス

mock

完全に動作。ローカル開発およびテスト用に決定論的な偽データを返す。

ups

スタブ — クラスは存在するが、まだ本番環境対応ではない。

fedex

スタブ — クラスは存在するが、まだ本番環境対応ではない。

dhl

スタブ — クラスは存在するが、まだ本番環境対応ではない。

usps

スタブ — クラスは存在するが、まだ本番環境対応ではない。

ツールを追加するには、新しいクラスを app/tools/ に配置し、app/main.py に登録するだけです。

プロバイダーの起動動作

  • SHIPPING_PROVIDER=mock(デフォルト)は起動時に警告(WARNING)を出力し、オペレーターが偽データに驚かないようにします。

  • 必要な資格情報がすべて揃っていない状態で実際の配送業者(ups/fedex/dhl/usps)を選択すると、起動時に ValueError が発生します。モックへのサイレントフォールバックは存在しません。設定ミスは迅速かつ目に見える形で失敗します。


設定

すべての設定は環境変数(またはローカル開発用の .env)から読み込まれます。完全なリストとデフォルト値については .env.example を参照してください。

変数

目的

APP_ENV

development または production/docs + /redoc を制御。

APP_HOST / APP_PORT

バインドアドレス。デフォルトは 0.0.0.0:8001

LOG_LEVEL

標準のログレベル(デフォルト INFO)。

CORS_ALLOWED_ORIGINS

CORSミドルウェアで許可されるカンマ区切りのオリジン。

MCP_API_KEY

/tools/* で強制される共有シークレット。空の場合は認証無効。

SHIPPING_PROVIDER

mock, ups, fedex, dhl, usps のいずれか。

UPS_* / FEDEX_* / DHL_* / USPS_*

配送業者ごとの資格情報およびベース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_KEYsync: false です。Renderダッシュボードで一度設定し、すべてのコンシューマーの SHIPSMART_MCP_API_KEY に同じ値を使用してください。

  • デフォルトの SHIPPING_PROVIDER=fedexhttps://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コードベースにはツールロジックは含まれません。

これにより、ツールレイヤーが一元化され、ツールを一度追加すればすべてのサービスがそれを利用できるようになります。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that wraps the ShipSaving logistics REST API, enabling AI assistants like Claude to perform shipping operations through natural language.
    30
    13 npm
    MIT