Easyship - Shipping MCP
Ship from your AI assistant. The Easyship MCP server lets ChatGPT, Claude, Cursor, VS Code, Gemini, OpenAI agents and other MCP clients compare rates, create shipments, buy labels, book pickups, track parcels and read analytics, across 550+ couriers in 200+ countries.
https://mcp.easyship.com/mcp- Quick start
- Supported platforms
- Connect your client (ChatGPT, Claude, Cursor, VS Code, Gemini, Codex, OpenAI API)
- Tools
- Sample prompts
- Authorization scopes
- Troubleshooting
- FAQ
Quick start
Get your API token
Go to Easyship Dashboard → Connect and click New Integration.
Under API Integration, choose I am developing a custom integration.
Name it Easyship MCP, keep version 2024-09, enable the scopes you need, and click Connect.
Click Access Token and copy it.
Supported platforms
| Category | Platform | How to connect |
|---|---|---|
| AI coding tools | Cursor | Plugin Cursor Directory or config file |
| VS Code | Config .vscode/mcp.json | |
| Windsurf | Config Manual MCP setup (remote URL) | |
| Assistants | Claude Code | Plugin /plugin install or CLI |
| Claude Desktop | Plugin Config file or plugin | |
| Grok | OAuth Setup guide | |
| ChatGPT | App Sign in with your Easyship account (OAuth). How to connect | |
| Builders | OpenAI Responses API / Agents SDK | Bearer token in headers |
| Gemini CLI | Extension gemini extensions install | |
| Codex CLI | Config ~/.codex/config.toml | |
| Automation | n8n, Activepieces, Zapier | MCP client Native MCP Client tool action (remote URL) |
| Skills | OpenClaw / Perplexity | Skill ClawHub skill |
Connect your client
Point your client at https://mcp.easyship.com/mcp with your token. Nothing to install.
In every example, replace YOUR_TOKEN with your API token.
ChatGPT
Easyship is available as an app in ChatGPT. Add it from ChatGPT and sign in with your Easyship account; there's no API token to copy. Each action runs on your own account under the permissions you approve. Step-by-step: How to connect ChatGPT to the Easyship MCP server.
Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global), then restart Cursor.
Claude Code
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Then quit and reopen Claude Desktop; closing the window isn't enough.
VS Code
Gemini CLI
Codex CLI
Then set export EASYSHIP_API_ACCESS_TOKEN="YOUR_TOKEN".
OpenAI Responses API / Agents SDK
For your own apps and agents, pass your API token in headers. More in the help center guide.
Any other MCP client
Clients that support Streamable HTTP (Windsurf, n8n, Activepieces, Zapier and others):
For stdio-only clients, run uvx easyship-mcp with EASYSHIP_API_ACCESS_TOKEN set in the environment.
Tools
Each tool calls one Easyship API endpoint.
| Tool | What it does |
|---|---|
| Rates | |
get_ratesPOST /rates | Compare couriers by price, delivery time and duty estimate |
| Shipments | |
create_shipmentPOST /shipments | Create a shipment, optionally buying the label in the same call |
create_labelPOST /shipments/{id}/label | Buy the label for an existing shipment |
get_shipmentGET /shipments/{id} | Full details, including label, packing slip and invoice links |
list_shipmentsGET /shipments | Find shipments by state, date, country and more |
update_shipmentPATCH /shipments/{id} | Change address, parcel, courier or settings before the label is bought |
delete_shipmentDELETE /shipments/{id} | Delete a shipment before a label is requested |
cancel_shipmentPOST /shipments/{id}/cancel | Cancel after the label was requested, before it's in transit |
track_shipmentGET /shipments/trackings | Status and checkpoints by shipment ID or order number |
get_shipment_documentsGET /shipments/{id}/documents | Shipping documents, such as the commercial invoice |
| Pickups | |
get_pickup_slotsGET /courier_services/{id}/pickup_slots | Available pickup times for a courier |
create_pickupPOST /pickups | Book a pickup for one or more shipments |
list_pickupsGET /pickups | Find pickups by courier, date or state |
get_pickupGET /pickups/{id} | Details of one pickup |
cancel_pickupPOST /pickups/{id}/cancel | Cancel a booked pickup |
list_pickup_shipmentsGET /pickups/{id}/shipments | Shipments in a pickup |
| Addresses | |
validate_addressPOST /addresses/validations (US: /addresses/validations_domestic) | Check and correct US and international addresses |
| Billing | |
list_transactionsGET /transaction_records | Transactions by type, date range or shipment |
list_billing_transactionsGET /billing_documents/{id}/transaction_records | Transactions on one billing document |
| Analytics | |
analytics_shipmentsGET /analytics/shipments | Shipment volume with daily trend |
analytics_shippedGET /analytics/shipments_shipped | Shipments with a label, for a date range |
analytics_shipment_statusGET /analytics/shipment_status | Split by status: in transit, delivered, exception and so on |
analytics_destinations_by_volumeGET /analytics/top_shipments_destinations | Top destinations by volume |
analytics_couriers_by_volumeGET /analytics/top_couriers | Top couriers by shipment count |
analytics_sale_channelsGET /analytics/sale_channels | Volume by sales channel (Shopify, WooCommerce, API...) |
The older names analytics_top_couriers and analytics_top_destinations still work and map to the new ones.
Sample prompts
"Ship a 2 kg parcel (30×20×15 cm) from New York 10001 to Toronto M5B 2H1. Category books_collectibles, value $8. Show the cheapest and fastest options."
"Is 1600 Amphitheatre Parkway, Mountain View, CA 94043, US valid for shipping? Show any corrections."
"Create a draft shipment, don't buy a label yet. From Acme LLC, 350 5th Ave, New York, NY 10001. To John Doe, 220 Yonge St, Toronto, ON M5B 2H1. 0.12 kg, 22×15×3 cm, one paperback book, $8. DDU."
"Ship a 2 kg parcel from SF to NYC with the cheapest courier. Buy the label and give me the download link."
"Buy a label for shipment ESSG10006001 and give me the download link."
"Track ESSG10006001. What's the latest status, the ETA and the last three events?"
"Book a pickup for ESSG10006001 and ESSG10006002. Find the courier's slots and take the earliest."
"Which couriers did I use most in the last 3 months? Rank them with counts and share of volume."
"Pull my shipment transactions from March 2026 and summarise the charges."
Authorization scopes
Enable these on your API token for the tools you'll use. See Scopes.
| Scope | Tools |
|---|---|
public.rate:read | get_rates |
public.shipment:read | get_shipment, list_shipments, list_pickup_shipments |
public.shipment:write | create_shipment, update_shipment, delete_shipment, cancel_shipment |
public.label:write | create_label, and create_shipment / update_shipment when buying a label |
public.track:read | track_shipment |
public.shipment_document:read | get_shipment_documents |
public.pickup:read | get_pickup_slots, list_pickups, get_pickup |
public.pickup:write | create_pickup, cancel_pickup |
public.address_validation:write | validate_address (non-US addresses) |
public.address_validation_domestic:write | validate_address (US addresses) |
public.transaction_record:read | list_transactions, list_billing_transactions |
public.analytics:read | All analytics_* tools |
A missing scope makes that tool fail with 403; the other tools keep working.
Troubleshooting
uvx) method instead, and check you're using https://mcp.easyship.com/mcp.uvx not found (local mode).FAQ
buy_label off). Buy the label later with create_label.get_shipment, finds times with get_pickup_slots, then books with create_pickup. All shipments in one pickup must use the same courier.Updated 1 day ago
