ShipSmart-MCP
ShipSmart-MCP
Eigenständiger MCP-Server (Model Context Protocol), der die Versand-Tools von ShipSmart (validate_address, get_quote_preview, …) über einen kompakten HTTP-Vertrag bereitstellt.
Er ist die einzige Quelle der Wahrheit für das Tool-Verhalten innerhalb der Plattform. Sowohl ShipSmart-API (Python / FastAPI — RAG & LLMs) als auch ShipSmart-Orchestrator (Java / Spring Boot — kommende KI-Funktionen) rufen diesen Server auf, anstatt die Tools prozessintern zu implementieren.
HTTP-Vertrag
Methode | Pfad | Zweck |
GET |
| Service-Discovery (Name, Version, Tool-Anzahl, Endpunkte). |
GET |
| Liveness-Probe, verwendet von Render. |
POST |
| Gibt Schemas für alle registrierten Tools zurück. |
POST |
| Führt ein Tool anhand des Namens mit den bereitgestellten Argumenten aus. |
GET |
| Swagger UI (nur außerhalb der Produktion). |
GET |
| ReDoc (nur außerhalb der Produktion). |
Wire-kompatibel mit der MCP tools/list und tools/call Semantik: Jeder Aufruf gibt { success, content: [...], error? } zurück, wobei content eine Liste von {type, text}-Blöcken ist, die für die LLM-Verarbeitung geeignet sind.
/docs und /redoc werden nur eingebunden, wenn APP_ENV != production ist.
Authentifizierung
Wenn MCP_API_KEY auf dem Server gesetzt ist, muss jede POST /tools/*-Anfrage den passenden Wert im Header X-MCP-Api-Key senden. Wenn MCP_API_KEY leer ist, ist die Authentifizierung deaktiviert (nur für lokale Entwicklung). GET / und GET /health sind immer unauthentifiziert, damit Health-Checks und Service-Discovery ohne das geteilte Geheimnis funktionieren.
Fehlerantworten
Bedingung | HTTP | Body |
Fehlender oder ungültiger | 401 |
|
Unbekannter Tool-Name | 404 |
|
Eingabevalidierungsfehler oder Tool-Ausnahme | 200 |
|
Validierungs- und Ausführungsfehler geben bewusst HTTP 200 mit success=false zurück, damit Konsumenten zwischen Fehlern auf Protokollebene (4xx) und Fehlern auf Tool-Ebene (200 + success=false) unterscheiden können.
Related MCP server: DB2ST MCP
Tools
Name | Beschreibung |
| Validierung + Normalisierung einer Versandadresse durch den konfigurierten Versanddienstleister. |
| Unverbindliche Preisvorschau für ein Paket. Endgültige Preise kommen von der Java-API. |
Tools delegieren an austauschbare ShippingProvider-Implementierungen, die über SHIPPING_PROVIDER ausgewählt werden.
Provider | Status |
| Voll funktionsfähig. Gibt deterministische Fake-Daten für lokale Entwicklung und Tests zurück. |
| Stub — Klasse existiert, ist aber noch nicht produktionsreif. |
| Stub — Klasse existiert, ist aber noch nicht produktionsreif. |
| Stub — Klasse existiert, ist aber noch nicht produktionsreif. |
| Stub — Klasse existiert, ist aber noch nicht produktionsreif. |
Das Hinzufügen eines Tools erfolgt durch das Ablegen einer neuen Klasse in app/tools/ und deren Registrierung in app/main.py.
Startverhalten des Providers
SHIPPING_PROVIDER=mock(Standard) gibt beim Start eine deutlicheWARNINGaus, damit Betreiber nicht von Fake-Daten überrascht werden.Die Auswahl eines echten Versanddienstleisters (
ups/fedex/dhl/usps) ohne alle erforderlichen Anmeldedaten löst beim Start einenValueErroraus. Es gibt kein stilles Fallback aufmock— Fehlkonfigurationen schlagen sofort und sichtbar fehl.
Konfiguration
Alle Einstellungen werden aus Umgebungsvariablen (oder .env für die lokale Entwicklung) geladen. Siehe .env.example für die vollständige Liste und Standardwerte.
Variable | Zweck |
|
|
| Bind-Adresse. Standard |
| Standard-Logging-Level (Standard |
| Kommagetrennte Ursprünge, die durch die CORS-Middleware erlaubt sind. |
| Geteiltes Geheimnis, erzwungen bei |
| Einer der Werte |
| Anmeldedaten und Basis-URLs pro Versanddienstleister. |
Lokal ausführen
Voraussetzungen: Python 3.13+ und 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 8001Smoke-Test:
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"
}
}'Tests
uv run pytestObservability
RequestLoggingMiddleware (app/core/middleware.py) verwaltet Korrelations-IDs für jede Anfrage:
Liest
X-Request-Idaus der eingehenden Anfrage oder erstellt ein UUID-Hex, falls nicht vorhanden.Liest W3C
traceparentoder erstellt ein neues, falls nicht vorhanden oder fehlerhaft.Spiegelt beide Header in der Antwort, damit Aufrufer nach ID über Dienste hinweg
grepen können.Gibt eine Log-Zeile pro Anfrage im
shipsmart_mcp.requests-Logger aus:GET /health → 200 (1.4ms) [a1b2c3...]
Übergeben Sie X-Request-Id von Upstream-Diensten, um eine einzelne Anfrage über ShipSmart-API → MCP → Carrier-APIs hinweg zu verknüpfen.
Deployment (Render)
render.yaml ist ein Render-Blueprint, der den bereitgestellten Dienst definiert:
Python-Webdienst, Build via
pip install uv && uv sync, Start viauvicorn app.main:app --host 0.0.0.0 --port $PORT.Health-Check unter
/health.MCP_API_KEYistsync: false— setzen Sie ihn einmal im Render-Dashboard und verwenden Sie denselben Wert für denSHIPSMART_MCP_API_KEYjedes Konsumenten.Standard
SHIPPING_PROVIDER=fedexzeigt aufhttps://apis-sandbox.fedex.com(FedEx Sandbox, nicht Produktion). Überschreiben Sie die Basis-URL bei der Umstellung auf Live-Versandverkehr.CORS-Ursprünge sind im Blueprint auf die bereitgestellten Konsumenten-URLs festgelegt.
Stellen Sie den Dienst bereit, indem Sie Render auf dieses Repository verweisen; alle sync: false Umgebungsvariablen müssen ausgefüllt sein, bevor das erste Deployment erfolgreich ist.
Konsumenten
ShipSmart-API (Python / FastAPI; bereitgestellt als
shipsmart-api-pythonauf Render): verweistSHIPSMART_MCP_URLauf diesen Server und ruft/tools/list+/tools/callvon seinen Orchestrierungs- und Advisor-Diensten aus auf.ShipSmart-Orchestrator (Java / Spring Boot; bereitgestellt als
shipsmart-api-javaauf Render): wird denselben HTTP-Vertrag aus seinen kommenden KI-Assistenz-Flows aufrufen. Im Java-Codebase befindet sich keine Tool-Logik.
Dies hält die Tool-Ebene zentralisiert — fügen Sie ein Tool einmal hinzu, und jeder Dienst erhält es.
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.-