EasyPost MCP Guide
EasyPost MCP connects AI assistants and agents to your EasyPost account. It is a hosted Model Context Protocol (MCP)(opens in a new tab) server, so a client such as Claude Code, Cursor, or VS Code can answer shipping questions in plain language using live account data. There is no integration code to write and nothing to install.
Ask where a package is, what a shipment cost, or which carriers are connected, and the assistant reads the answer from your shipments, trackers, carrier accounts, pickups, refunds, insurance, and claims.
Server URL: https://app-api.easypost.com/mcp
Production mode: EasyPost MCP currently sends all EasyPost requests in production mode. Connect with a production API key; test API keys are not supported.
EasyPost MCP is an early release. Send setup issues, tool requests, or concerns to ai@easypost.com.
Support and operations teams can answer shipping questions without opening the dashboard, and developers can inspect an account without writing a script. These work on any EasyPost account with shipping history. Paste one into your assistant after you connect:
- "Which carrier accounts are connected to my EasyPost account?"
- "List my shipments from the last seven days with carrier, service, and cost."
- "Which of my shipments from the past week are still in transit?"
- "Which USPS services can carry a package over 50 pounds?"
- "Do I have any open insurance claims, and what is the status of each?"
- "Show postage refund requests from the last 30 days."
- "Do I have any carrier pickups scheduled?"
You can also ask about one record: "Where is tracking number 9405511899223197428490?" or "Show me shipment
shp_...."
- An EasyPost account with production shipping data.
- A production API key.
- An MCP client that supports remote servers over Streamable HTTP with custom request headers.
Sign in to the EasyPost API Keys page(opens in a new tab) and copy a production
key. Set it as EASYPOST_API_KEY in the environment that launches your MCP client.
# macOS or Linux
EASYPOST_API_KEY="YOUR_EASYPOST_PRODUCTION_API_KEY"; export EASYPOST_API_KEY# Windows PowerShell
$env:EASYPOST_API_KEY = "YOUR_EASYPOST_PRODUCTION_API_KEY"Do not put the key in the server URL, source control, or an agent prompt.
Choose the configuration for your client. Each example reads EASYPOST_API_KEY from the environment.
Install EasyPost MCP in Cursor(opens in a new tab),
or add the server manually to ~/.cursor/mcp.json for all projects or .cursor/mcp.json for one project:
{
"mcpServers": {
"easypost": {
"url": "https://app-api.easypost.com/mcp",
"headers": {
"Authorization": "Bearer ${env:EASYPOST_API_KEY}"
}
}
}
}Restart Cursor after saving the file.
Add the server with one command:
claude mcp add --scope project --transport http easypost \
https://app-api.easypost.com/mcp \
--header 'Authorization: Bearer ${EASYPOST_API_KEY}'Use --scope user instead of --scope project to make the server available in every project.
The command writes .mcp.json in the project root. To add it by hand, the equivalent entry is:
{
"mcpServers": {
"easypost": {
"type": "http",
"url": "https://app-api.easypost.com/mcp",
"headers": {
"Authorization": "Bearer ${EASYPOST_API_KEY}"
}
}
}
}Restart Claude Code, then run claude mcp list to check the connection.
Add the server with the Codex CLI:
codex mcp add easypost \
--url https://app-api.easypost.com/mcp \
--bearer-token-env-var EASYPOST_API_KEYThe equivalent ~/.codex/config.toml entry is:
[mcp_servers.easypost]
url = "https://app-api.easypost.com/mcp"
bearer_token_env_var = "EASYPOST_API_KEY"Add the server to your user or workspace MCP settings. VS Code prompts for the key and stores it outside the configuration file:
{
"servers": {
"easypost": {
"type": "http",
"url": "https://app-api.easypost.com/mcp",
"headers": {
"Authorization": "Bearer ${input:easypost_api_key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "easypost_api_key",
"description": "EasyPost production API key",
"password": true
}
]
}Pass the server and header on the mcp tool. The Responses API does not store the header, so send it with every
request:
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
tools=[
{
"type": "mcp",
"server_label": "easypost",
"server_url": "https://app-api.easypost.com/mcp",
"headers": {
"Authorization": f"Bearer {os.environ['EASYPOST_API_KEY']}",
},
}
],
input="Which carrier accounts are connected to my EasyPost account?",
)
print(response.output_text)Use these connection settings in any client that supports remote Streamable HTTP servers, including workflow automation tools with a native MCP client step such as n8n:
Setting | Value |
|---|---|
| Name | easypost |
| URL | https://app-api.easypost.com/mcp |
| Request header | Authorization: Bearer YOUR_EASYPOST_PRODUCTION_API_KEY |
Confirm that easypost is connected and lists tools in your client. Then ask: "Which EasyPost account am I connected
to?"
The client should call whoami and return the user associated with the production API key. Then try one of the
shipping questions above.
Tool | Purpose | API Reference |
|---|---|---|
| whoami | Identifies the EasyPost user connected to MCP. | User |
| list_shipments | Lists Shipments for the connected account. | Shipment |
| get_shipment | Retrieves a Shipment with label URLs, stored rates, and a Tracker summary. | Shipment |
| list_trackers | Lists Trackers and their current delivery status. | Tracker |
| get_tracker | Retrieves a Tracker with its latest scans. | Tracker |
| list_carrier_accounts | Lists connected carrier accounts without returning credentials. | CarrierAccount |
| carrier_metadata | Describes carrier service levels, packages, shipment options, and supported features. | Carrier Metadata |
| pickups | Retrieves scheduled Pickups. | Pickup |
| refunds | Retrieves postage Refund request status. | Refund |
| insurances | Retrieves standalone Insurance policies. | Insurance |
| claims | Retrieves insurance Claims and their status history. | Claims |
Use EasyPost MCP for interactive shipping questions and agent workflows covered by the current tools. Use the EasyPost API for application code, webhooks, high-volume automation, or capabilities that are not yet available as MCP tools.
- The authenticated EasyPost account determines which records the tools can access.
- Current tool responses omit carrier credentials, API keys, wallet balances, recharge settings, payment methods, and fees.
- Responses can include addresses, tracking details, and label URLs. Connect EasyPost only to MCP clients and other MCP servers that you trust.
- A production API key can authorize requests outside MCP. Treat it as a secret.
Q: Do I need to install anything?
No. EasyPost hosts the server. Your client connects to it over HTTPS.
Q: Does connecting change anything in my EasyPost account?
No. The current tools retrieve existing records. They do not create, modify, or purchase anything.
Q: Can I use a test API key?
No. EasyPost MCP sends requests in production mode, so it requires a production API key.
Q: Can I use the same key in more than one client?
Yes. EasyPost rate limits apply to the account, not to each client.
Q: Which clients work?
Any MCP client that supports remote servers over Streamable HTTP with custom request headers.
Q: How do I request a tool that does not exist yet?
Email ai@easypost.com with the shipping task you want an agent to complete.
Symptom | What to check |
|---|---|
| No EasyPost tools appear | Confirm the server URL, Streamable HTTP support, and custom header support. Then restart the client. |
| The client reports Authentication required | Confirm that EASYPOST_API_KEY is set in the environment that launched the client and is sent as a Bearer token. |
| The response contains MODE.UNAUTHORIZED | Replace the test key with a production API key. |
| The response contains APIKEY.INACTIVE | The key is disabled. Enable it or create a new one on the API Keys page. |