Multi-carrier shipping for AI agents: compare rates, buy labels, track packages, validate addresses. Local bridge to the hosted Shippo MCP server.
The Shippo MCP server exposes 9 tools with minimal schema documentation. Tool names follow verb_noun convention (CreateShipment, GetTrack, ValidateAddress, ListShipments, createWebhook, etc.), which is good. However, critical gaps exist: no visible input parameter schemas in the provided source code, descriptions are present but generic (10-50 chars), and no documented output schemas. The server acts as a bridge to a hosted API (mcp.shippo.com), which limits visibility into actual parameter definitions. Without access to the full tool registration code showing JSON Schema definitions, parameter types, and constraints, schema quality cannot be verified. Risk annotations (WRITE, READ_ONLY, DESTRUCTIVE) are present in metadata but not reflected in tool definitions.
Create a shipment for multi-carrier rate comparison and label purchase
Track a package using Shippo's tracking API
List shipments from the Shippo account
Validate and standardize shipping addresses
Create a webhook for Shippo events
Delete a webhook
Retrieve webhook details
List all webhooks for the Shippo account
No input parameter schemas visible in source code. Cannot verify parameter types, constraints, enums, or descriptions.
Tool descriptions are generic and under 50 characters (e.g., 'Create a shipment for multi-carrier rate comparison and label purchase'). Descriptions lack WHEN to use, prerequisites, or dependency hints. Baseline for A+ tools is 50-200 chars with actionable context.
No documented output schemas. LLMs cannot plan downstream tool calls or extract required fields without knowing response structure. Missing: field names, types, pagination info, chaining IDs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Update webhook configuration
Destructive tool (deleteWebhook) lacks confirmation or dry-run pattern. No error handling guidance for recovery. Agents cannot distinguish retryable vs fatal errors.
Naming inconsistency: PascalCase verbs (CreateShipment, GetTrack) mixed with camelCase verbs (createWebhook, getWebhook). LLMs may struggle to parse intent when naming conventions vary across the same tool set.