MCP: connect an AI assistant
Get quotes, create shipments, track packages, and manage pickups just by talking to Claude, Cursor, or another compatible AI assistant, no code required.
Introduction
MCP (Model Context Protocol) is the standard that lets an AI assistant connect to an external service and actually use it, not just talk about it. Once Yellohu is connected to your assistant, you can ask for a quote, create a shipment, check a tracking, or book a pickup just by writing in natural language: the assistant calls the API for you.
You need a dedicated key (different from your direct API integration key, if you already have one) and an MCP-compatible client: instructions for the main ones are below.
Get your key
Go to the dashboard, Integrations section, "MCP" card. Generate a Sandbox key to try it risk-free (it never touches real couriers or payments), or a Live key for real actions. Either way, every action that creates or cancels something still requires your explicit confirmation before it actually runs.
Right after creating it you'll also see a ready-to-copy configuration snippet: the instructions below tell you where to paste it for each client.
Go to Integrations → MCPClaude Desktop
- 1
Don't use Settings → Connectors
That screen in Claude Desktop only supports OAuth authentication, not an API key like ours. The right path is editing the configuration file directly.
- 2
Open the configuration file
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json. Windows: %APPDATA%\Claude\claude_desktop_config.json. Create it if it doesn't exist yet.
- 3
Add the configuration
Claude Desktop rejects a remote server configured with just "url" and "headers" (it flags it as an invalid entry and ignores it): you need a local bridge via npx, the mcp-remote package, which forwards requests to the real server while adding the authentication header. Paste (or merge, if the file already has other servers) the block below, replacing yh_mcp_live_xxx with your key.
- 4
Restart Claude Desktop
Quit and reopen the app so the new configuration is picked up.
Claude Desktop doesn't support a remote MCP server configured directly with "url"/"headers": it requires the local mcp-remote bridge (via npx, needs Node.js installed).
{ "mcpServers": { "yellohu": { "command": "npx", "args": [ "-y", "mcp-remote", "https://yellohu.com/api/mcp", "--header", "X-Api-Key:${YELLOHU_MCP_KEY}" ], "env": { "YELLOHU_MCP_KEY": "yh_mcp_live_xxx" } } } }
Claude Code
- 1
Run the command
A single terminal command, no file editing needed.
claude mcp add --transport http yellohu https://yellohu.com/api/mcp --header "X-Api-Key: yh_mcp_live_xxx"Cursor
- 1
Open (or create) the configuration file
.cursor/mcp.json in your project folder, or the global configuration from Cursor's MCP settings.
- 2
Add the configuration
Paste (or merge) the block below with your key.
{ "mcpServers": { "yellohu": { "url": "https://yellohu.com/api/mcp", "headers": { "X-Api-Key": "yh_mcp_live_xxx" } } } }
VS Code
- 1
Open the .vscode/mcp.json file
It must be specifically this file (workspace, .vscode folder), not a generic .mcp.json at the project root: a known VS Code bug silently drops the auth header in that second case.
- 2
Add the configuration
Two differences from the other clients: the root key is "servers", not "mcpServers", and an explicit "type": "http" field is required.
VS Code uses a slightly different format from the other clients: "servers" key (not "mcpServers"), and a required "type" field.
{ "servers": { "yellohu": { "type": "http", "url": "https://yellohu.com/api/mcp", "headers": { "X-Api-Key": "yh_mcp_live_xxx" } } } }
Windsurf
- 1
Open the configuration file
~/.codeium/windsurf/mcp_config.json.
- 2
Add the configuration
Note: Windsurf calls the URL field "serverUrl", not "url" like other clients. Copying a config from another client without renaming this field is the most common mistake.
Windsurf uses "serverUrl", not "url", for the server address.
{ "mcpServers": { "yellohu": { "serverUrl": "https://yellohu.com/api/mcp", "headers": { "X-Api-Key": "yh_mcp_live_xxx" } } } }
ChatGPT (Developer Mode)
- 1
Enable developer mode
Settings → Connectors → Advanced settings → turn on "Developer mode" (requires a Plus, Pro, Team, Enterprise, or Edu plan).
- 2
Add a new connector
Enter the server URL (https://yellohu.com/api/mcp) and choose "API key" authentication (not OAuth).
- 3
Verify it actually works
ChatGPT's UI for this is the newest of the seven and may change: if the auth field doesn't let you pick the header name, try entering the key anyway and immediately ask for a quote to confirm the connection actually responds before relying on it.
The newest and most in-flux of the seven integrations: always verify with a real request that the connection works.
URL: https://yellohu.com/api/mcp
Auth: API key
Header: X-Api-KeyCodex CLI
- 1
Open (or create) ~/.codex/config.toml
You can also use .codex/config.toml inside your project folder instead of your home directory. The "codex mcp add" command only works for local (stdio) servers, not remote ones like this: it has to be configured by hand in the file.
- 2
Add the configuration
Paste the block below with your key. Note: Codex uses TOML format, not JSON like the other clients.
Codex uses TOML instead of JSON and has no terminal command for remote servers: it always has to be configured by editing the file.
[mcp_servers.yellohu]
url = "https://yellohu.com/api/mcp"
http_headers = { "X-Api-Key" = "yh_mcp_live_xxx" }Other clients
Any MCP client that supports a remote server over Streamable HTTP works the same way: same two values, only the field names may differ per client. Check your client's docs to see what it calls the URL and header fields.
URL: https://yellohu.com/api/mcp
Header: X-Api-Key: yh_mcp_live_xxxHow confirmation works
Actions that really create or cancel something (creating a shipment, cancelling it, booking a pickup) never happen on the first try. The assistant always shows you a summary (courier, price, addresses) and waits for you to explicitly say to proceed, before actually running the action. You never need to type a technical command to confirm: just reply normally, like you would to a person.
You can customize this behavior per action (creating a shipment, cancelling one, booking a pickup) from the dashboard, Integrations section, MCP, "Tool authorizations" card: you can choose to run it immediately without asking for confirmation, to always require it (the behavior just described, the default), or to disable it entirely for the AI assistant.
You: Create the shipment with BRT from the earlier quote, pickup next Tuesday.
The assistant replies with a summary (BRT Express, €10.97, pickup Tuesday) and asks for confirmation: nothing has been created yet.
You: Yes, go ahead.
Only now does the assistant actually create the shipment and confirm the order number.
Available tools
| Tool | What it does | Type |
|---|---|---|
| get_rates | Compares rates from all available couriers for a shipment, including which optional services can be added and their indicative cost. The price with one or more optionals actually selected requires a second call to this tool passing them: the assistant shouldn't add the optional's indicative cost to the base price by hand, for some couriers the total isn't a simple sum. | Read |
| list_optional_services | Lists the optionals (insurance, timed delivery, etc.) available for a specific courier or all of them. | Read |
| list_shipments | Shows your most recent shipments, with status and tracking. | Read |
| get_shipment | Shows the status, courier, service, and tracking number of a specific shipment. | Read |
| track_shipment | Shows the full tracking event history for a shipment. | Read |
| get_pickup | Shows the date and status of the scheduled pickup for a shipment. | Read |
| find_pickup_points | Searches for lockers or pickup points near an Italian postal code or an address (also abroad). | Read |
| create_shipment | Creates a real shipment (or a draft to pay later). Always requires your explicit confirmation before actually proceeding: see "How confirmation works" above. | Write |
| cancel_shipment | Cancels a shipment (irreversible). Always requires your explicit confirmation: it first shows the shipment's current status, then waits for your yes. | Write |
| book_pickup | Books a pickup for an already-created shipment. Always requires your explicit confirmation before actually booking. | Write |
Compares rates from all available couriers for a shipment, including which optional services can be added and their indicative cost. The price with one or more optionals actually selected requires a second call to this tool passing them: the assistant shouldn't add the optional's indicative cost to the base price by hand, for some couriers the total isn't a simple sum.
What to specify
- Origin address (postal code, city, country)
- Destination address (postal code, city, country)
- Packages: weight and dimensions of each
- Whether it's a pallet (typically an 80-120cm base and/or 100kg+) rather than a regular parcel: otherwise it's quoted as an oversized parcel, with the wrong margin and surcharges
You: How much would it cost to ship a 5kg package from Milan 20121 to Rome 00100?
The assistant calls get_rates and compares available couriers.
Assistant: BRT Express: €10.21, delivery in 1 business day. There are also cheaper or faster options: want to see them all?
Lists the optionals (insurance, timed delivery, etc.) available for a specific courier or all of them.
What to specify
- The courier to check (optional, if omitted shows all)
You: What optionals can I add with BRT?
The assistant calls list_optional_services filtered to BRT.
Assistant: With BRT you can add: insurance, tail lift at pickup or delivery, non-stackable, irregular shape.
Shows your most recent shipments, with status and tracking.
What to specify
- How many to show (optional, defaults to the last 20)
You: Show me my recent shipments.
The assistant calls list_shipments.
Assistant: You have 3 recent shipments: S701 (in transit, BRT), S699 (delivered, Poste), S695 (needs handling).
Shows the status, courier, service, and tracking number of a specific shipment.
What to specify
- The shipment number (e.g. S701)
You: How's shipment S701 doing?
The assistant calls get_shipment with shipment_id S701.
Assistant: S701 is in transit with BRT, tracking 020063101676184.
Shows the full tracking event history for a shipment.
What to specify
- The shipment number
You: Exactly where is package S701 right now?
The assistant calls track_shipment and reads the most recent event.
Assistant: Latest event: 'Out for delivery', today at 9:15 AM, at the Rome distribution hub.
Shows the date and status of the scheduled pickup for a shipment.
What to specify
- The shipment number
You: What time is the pickup for S701?
The assistant calls get_pickup with shipment_id S701.
Assistant: Pickup scheduled for tomorrow, status: confirmed.
Searches for lockers or pickup points near an Italian postal code or an address (also abroad).
What to specify
- Reference postal code or address
- Courier (optional)
- Type: self-service locker or staffed point (optional)
You: Is there an InPost locker near postal code 20121?
The assistant calls find_pickup_points on that postal code, filtered to InPost.
Assistant: Yes, there are 4 within 2km, the closest is on Via Dante 12.
Creates a real shipment (or a draft to pay later). Always requires your explicit confirmation before actually proceeding: see "How confirmation works" above.
What to specify
- Courier and service (usually chosen from an earlier quote)
- Sender: name, full address
- Recipient: name, full address
- Packages: weight and dimensions
- Whether it's a pallet or a document rather than a regular parcel (a pallet quoted as a parcel is priced wrong; a document is exempt from customs data for non-EU destinations)
- What's inside the package
- Value of the goods
- Desired pickup date
- Whether to pay now or save as a draft
You: Create the shipment with BRT from the earlier quote, pickup next Tuesday.
The assistant shows a summary and waits for confirmation before creating anything.
Assistant: Here's the summary: BRT Express, €10.97, pickup Tuesday. Confirm?
Cancels a shipment (irreversible). Always requires your explicit confirmation: it first shows the shipment's current status, then waits for your yes.
What to specify
- The shipment number to cancel
You: Cancel shipment S701.
The assistant shows S701's current courier/status/tracking and waits for confirmation.
Assistant: S701 is still in transit with BRT, tracking 020063101676184. Confirm the cancellation?
Books a pickup for an already-created shipment. Always requires your explicit confirmation before actually booking.
What to specify
- The shipment number
- Desired date
- Time slot (morning, afternoon, or no preference)
You: Book the pickup for S701 for Thursday morning.
The assistant shows the date and time slot and waits for confirmation before booking.
Assistant: Summary: pickup Thursday, morning slot. Confirm?