Connect EasyPost to ChatGPT: Automate Shipping Labels & Tracking
from the team behind Truto
EasyPost in ChatGPT, in about a minute.
The best way to connect EasyPost to ChatGPT is Elaichi: connect EasyPost to Elaichi once, then add Elaichi to ChatGPT as a connector. Two steps, about a minute, with a 14‑day free trial and no credit card required.
- No credit card required
- 500+ connectors
- Credentials vaulted, never read back
-
Start your free trial
14 days free, no credit card required.
-
Connect EasyPost
Once, in Elaichi. ChatGPT never gets more access than you have.
-
Add Elaichi to ChatGPT
In ChatGPT, open Plugins, press +, and paste the URL into Server URL. Sign in and approve.
https://api.elaichi.ai/mcp
Building EasyPost into your own product? This guide is for you.
Connect EasyPost to ChatGPT to automate shipping labels, address verification, and tracking using Truto's managed MCP server. Learn how to configure tools, manage rate limits, and secure agent workflows.
The developer guide
Learn how to connect EasyPost to ChatGPT using a managed MCP server. This step-by-step architecture guide covers shipping label automation, tool configuration, and security.
If you need to connect EasyPost to ChatGPT to automate shipping labels, track packages across multiple carriers, or manage logistics workflows via natural language, you need a Model Context Protocol (MCP) server. This infrastructure layer acts as the translation engine between ChatGPT's tool calling capabilities and EasyPost's REST APIs. You can either spend weeks building, securing, and maintaining this server in-house, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL in seconds.
If your team uses Claude, check out our guide on connecting EasyPost to Claude or explore our broader architectural overview on connecting EasyPost to AI Agents.
Giving a Large Language Model (LLM) read and write access to a core logistics platform like EasyPost is a serious engineering challenge. You have to handle immutable data objects, multi-step purchasing flows, asynchronous batch processing, and complex rate limit behaviors. Every time your logistics team needs to expose a new carrier or customs capability to your AI agent, your custom server code must be updated, redeployed, and rigorously tested.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for EasyPost, connect it natively to ChatGPT, and execute complex fulfillment workflows using natural language.
EasyPost to ChatGPT Quickstart Guide
If you want the fastest path from a fresh Truto account to ChatGPT successfully executing EasyPost API calls, follow these specific steps. We will cover both the UI-driven and API-driven approaches.
What you need:
- A Truto account with API access.
- An EasyPost account (test or production API keys).
- A ChatGPT Pro, Plus, Business, Enterprise, or Education seat with Developer mode enabled (or a local MCP client).
Step 1: Connect EasyPost as an Integrated Account
First, you need to establish the baseline connection between Truto and EasyPost.
- In the Truto dashboard, navigate to Integrated Accounts -> New Integrated Account.
- Select EasyPost from the catalog.
- Provide your EasyPost API key. Truto securely stores this credential and will proxy all future requests through it.
Step 2: Generate an EasyPost MCP Server
Once the account is connected, you need to generate the MCP server endpoint. Truto scopes an MCP server to a single integrated account and applies dynamic tool generation.
Method A: Via the Truto UI
- Navigate to the integrated account page for your EasyPost connection.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., naming the server, applying method or tag filters to restrict access to specific EasyPost operations).
- Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/<token>). Treat this URL as a sensitive credential.
Method B: Via the API You can generate the MCP server programmatically by making a POST request to the Truto API. This is ideal for provisioning agent access dynamically.
curl -X POST https://api.truto.one/integrated-account/$INTEGRATED_ACCOUNT_ID/mcp \
-H "Authorization: Bearer $TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "ChatGPT Logistics Agent",
"config": {
"methods": ["read", "write", "custom"],
"tags": ["shipments", "trackers", "addresses"]
}
}'The response will return a JSON object containing the url field.
Step 3: Connect the MCP Server to ChatGPT
Now you must point ChatGPT to the Truto MCP URL so it can discover and call the EasyPost tools.
Method A: Via the ChatGPT UI
- Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
- Ensure Developer mode is enabled.
- Under the Custom Connectors or MCP servers section, click to add a new server.
- Give it a recognizable name like "EasyPost Logistics".
- Paste the Truto MCP URL into the Server URL field and save.
Method B: Via Manual Config File (SSE)
If you are using the Claude Desktop app, cursor, or a custom ChatGPT client that reads standard MCP configuration files, you can use the @modelcontextprotocol/server-sse package to connect to Truto's Server-Sent Events endpoint.
Update your mcp_servers.json (or equivalent config file) with the following structure:
{
"mcpServers": {
"easypost-truto": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/YOUR_TOKEN_HERE"
]
}
}
}Once connected, the LLM will perform the MCP handshake, request tools/list, and dynamically ingest the EasyPost proxy capabilities.
The Engineering Reality of the EasyPost API
Integrating an LLM with a shipping API is significantly different than integrating with a standard CRM or helpdesk. EasyPost operates under strict physical-world constraints, which translates into specific API quirks that your integration architecture must handle.
Immutability of Core Objects
In a standard REST API, you can usually PATCH an object to update it. In EasyPost, core objects like Address, Parcel, and Shipment are entirely immutable once created. If an LLM drafts a shipment and realizes the weight was wrong, it cannot simply update the existing parcel. It must generate an entirely new Shipment object. The MCP tool descriptions generated by Truto explicitly handle these schemas, ensuring the LLM understands it must recreate, rather than update, fulfillment data.
The Two-Step Purchasing Flow
Generating a shipping label in EasyPost is rarely a single API call. First, you create a Shipment object (providing origin, destination, and parcel data). EasyPost responds with an array of available rates across different carriers. Second, you must extract a specific rate_id from that array and pass it to the buy endpoint. When building a custom MCP server, you have to write custom orchestration logic to handle this state. Truto exposes these as discrete tools (create_a_easy_post_shipment and easy_post_shipments_buy), allowing the LLM's natural reasoning capabilities to execute the multi-step flow seamlessly.
Asynchronous Batch Processing
When dealing with high-volume logistics (e.g., printing 500 labels at once), EasyPost utilizes asynchronous Batch objects. You create a batch, add shipments to it, and initiate a buy operation. The actual label generation happens in the background, eventually firing a webhook. If you build this in-house, your MCP server has to implement polling mechanisms or complex webhook catchers to return the final state to the LLM.
Strict Rate Limits and Error Handling
EasyPost enforces strict rate limits to protect its infrastructure. A critical architectural note: Truto does not retry, throttle, or apply backoff on rate limit errors. When the EasyPost upstream API returns an HTTP 429 Too Many Requests, Truto passes that exact error back to the caller. Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. The AI agent framework (or ChatGPT client) is entirely responsible for detecting the 429 and applying its own retry or backoff logic.
Hero Tools for EasyPost Automations
Truto automatically derives MCP tools from the EasyPost OpenAPI definitions and documentation. Instead of maintaining boilerplate code for every endpoint, Truto dynamically generates the JSON-RPC tool schemas. Here are the most powerful "hero" tools available to your ChatGPT agents.
Create a Shipment
Tool name: create_a_easy_post_shipment
This is the foundational tool for logistics workflows. It accepts an origin address, a destination address, and a parcel definition. EasyPost uses this data to automatically fetch real-time shipping rates from all configured carriers. The LLM must use this tool first to see pricing before committing to a purchase.
"I need to ship a 15-ounce package measuring 10x8x4 inches from our main warehouse to 123 Main St, Austin TX. Create the shipment and tell me what rate options we have."
Buy a Shipment Label
Tool name: easy_post_shipments_buy
Once a shipment is created and rates are returned, this tool executes the financial transaction. It requires the shipment_id and the selected rate_id. The response includes the actual postage label (usually a URL to a PNG or PDF) and the finalized tracking code.
"Buy the shipment shp_987654321 using the cheapest available USPS Ground Advantage rate. Give me the tracking number and the label URL."
Create and Verify an Address
Tool name: easy_post_addresses_create_and_verify
Shipping to an invalid address results in costly return-to-sender fees. This tool creates an address object and synchronously verifies its deliverability against global postal databases, correcting minor formatting issues (like missing ZIP+4 codes) and determining if the address is residential or commercial.
"We received a new order for John Doe at 456 Elm Street, Apt 2, Seattle WA. Create and verify this address in EasyPost, and warn me if there are any deliverability issues."
Refund a Shipment
Tool name: easy_post_shipments_refund
If a customer cancels an order before it ships, or an agent spots an error, labels can often be refunded. This tool requests a refund for a specific shipment ID. Note that USPS labels must be refunded within 30 days, while UPS/FedEx generally allow 90 days. The LLM can use this to automate cancellation workflows.
"The customer for order #5555 canceled. Find the tracking number, pull up the shipment ID, and process a refund for the label."
Track an External Package
Tool name: create_a_easy_post_tracker
If a package was shipped outside of your primary EasyPost account (e.g., dropshipped by a vendor), you can still track it in EasyPost using Bring-Your-Own-Tracking (BYOT). This tool accepts a tracking code and a carrier name, establishing a webhook subscription that monitors the package's journey.
"Our vendor shipped the replacement parts via FedEx. The tracking number is 771234567890. Create a tracker in EasyPost so we can monitor its delivery status."
List SmartRates for Precision Delivery
Tool name: easy_post_shipments_list_smartrates
For US domestic shipments, SmartRates provides statistical time-in-transit predictions for every rate associated with a shipment. Instead of guessing when a package will arrive based on service level, the LLM can use this tool to pick the most cost-effective rate that statistically guarantees delivery by a specific date.
"We need this package to arrive by Friday. Look at the SmartRates for shipment shp_112233 and find the cheapest carrier option that has a 95% or higher probability of delivering within 3 transit days."
To view the complete schema definitions and the full list of available EasyPost tools, visit the EasyPost integration page.
Workflows in Action
Connecting EasyPost to ChatGPT transforms static logistics operations into dynamic, conversational workflows. Here are two concrete examples of how personas leverage these tools in the real world.
Scenario 1: Customer Support Handling an Address Error
A customer support agent receives a ticket: the customer accidentally entered the wrong shipping address on a recent order, and the label has already been generated but not yet shipped.
User Prompt:
"The customer for order #9988 reached out. They gave us the wrong address. The old shipment ID is shp_abc123. Please refund that label. Then, verify their new address: 789 Oak Lane, Denver CO 80204. If it's valid, create a new shipment using our standard 2lb box from the Denver warehouse, and buy the cheapest USPS rate."
Step-by-step Execution:
- Call
easy_post_shipments_refund: The agent passesshp_abc123to initiate the refund process on the incorrect label. - Call
easy_post_addresses_create_and_verify: The agent passes the new 789 Oak Lane address. The tool returns the verified address object, confirming deliverability and returning a newaddress_id. - Call
create_a_easy_post_shipment: The agent constructs the new shipment using the origin warehouse address ID, the new verified destination address ID, and the predefined 2lb parcel payload. The tool returns the shipment object containing an array of available rates. - Call
easy_post_shipments_buy: The agent identifies the cheapest USPS rate ID from the previous step and executes the purchase. - Output: ChatGPT replies with a summary: "I have successfully submitted a refund for the old label. The new address was verified successfully. I created a new shipment and purchased the USPS Ground Advantage rate for $5.45. The new tracking number is 9400123456789, and the label URL is ready for printing."
sequenceDiagram
participant User as Support Agent
participant AI as ChatGPT
participant Truto as Truto MCP
participant EP as EasyPost API
User->>AI: "Refund shp_abc123 and ship to new address..."
AI->>Truto: Call easy_post_shipments_refund(shp_abc123)
Truto->>EP: POST /v2/shipments/shp_abc123/refund
EP-->>Truto: Status: submitted
Truto-->>AI: Refund confirmation
AI->>Truto: Call easy_post_addresses_create_and_verify(789 Oak Lane)
Truto->>EP: POST /v2/addresses/create_and_verify
EP-->>Truto: Address ID: adr_789
Truto-->>AI: Verified Address Object
AI->>Truto: Call create_a_easy_post_shipment(adr_789, warehouse, parcel)
Truto->>EP: POST /v2/shipments
EP-->>Truto: Shipment ID + Rates Array
Truto-->>AI: Available Rates
AI->>Truto: Call easy_post_shipments_buy(rate_id)
Truto->>EP: POST /v2/shipments/shp_new/buy
EP-->>Truto: Tracking Number + Label URL
Truto-->>AI: Purchase complete
AI-->>User: "Refund processed, new tracking is 9400123..."Scenario 2: Operations Manager Auditing Delayed Shipments
An e-commerce operations manager wants to quickly investigate a batch of dropshipped orders that customers claim are delayed.
User Prompt:
"I have three external tracking numbers from our supplier that customers are complaining about: 1Z9999999999999999, 1Z8888888888888888, and 1Z7777777777777777. Create trackers for all of them under carrier UPS. Summarize their current status and tell me if there are any documented exceptions."
Step-by-step Execution:
- Call
create_a_easy_post_tracker(Loop): The AI agent calls this tool three consecutive times, passing each tracking number and"carrier": "UPS". - Evaluate Results: EasyPost returns the full tracker object for each, including the
status,status_detail, and the deep array oftracking_detailsrepresenting every scan event. - Output: ChatGPT synthesizes the complex JSON responses: "Tracker 1 (1Z999...) is marked as 'out_for_delivery' today. Tracker 2 (1Z888...) encountered an 'exception' due to severe weather in Chicago and is delayed by 2 days. Tracker 3 (1Z777...) was successfully 'delivered' yesterday at the front porch."
Security and Access Control
Exposing an enterprise logistics account to an LLM requires rigorous governance. You do not want a rogue prompt generating thousands of dollars in fraudulent shipping labels. Truto's MCP architecture provides native security controls configured at the token level during server creation:
- Method Filtering: You can strictly limit the MCP server to specific HTTP verbs. For example, setting
methods: ["read"]ensures the LLM can only track packages (list_all_easy_post_trackers) or view addresses, outright preventing the agent from buying postage. - Tag Filtering: You can scope the server to specific functional domains. Setting
tags: ["trackers"]ensures the LLM never even sees the schemas for shipments, batches, or carrier accounts, narrowing its context window and blast radius. - Require API Token Auth: By setting
require_api_token_auth: true, possession of the MCP URL is no longer enough to execute a tool. The client must also pass a valid Truto API user token, ensuring only authenticated human operators within your organization can trigger the agent. - Ephemeral Servers: You can pass an
expires_attimestamp when creating the server. Truto will automatically destroy the MCP token and its associated KV storage when the time expires, perfect for granting temporary access to contractors or isolated automation scripts.
Moving Forward with Logistics Automation
Connecting EasyPost to ChatGPT transforms how your team interacts with the physical supply chain. By utilizing Truto's dynamically generated MCP servers, you eliminate the need to write and maintain complex REST wrappers, handle dynamic endpoint schemas, or write custom authentication middleware.
Your AI agents get instant, heavily governed access to EasyPost's full suite of tools - from address verification to batch label generation - allowing your engineering team to focus on building core product value instead of wrangling shipping integrations.
FAQ
- What is the easiest way to connect EasyPost to ChatGPT?
- The best way to connect EasyPost to ChatGPT is Elaichi: connect EasyPost to Elaichi once, then add Elaichi to ChatGPT as a connector. Two steps, about a minute, with a 14-day free trial and no credit card required.
- Does Truto automatically retry failed EasyPost API calls due to rate limits?
- No. Truto passes upstream HTTP 429 errors directly to the client and normalizes the rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller is responsible for retry and backoff logic.
- Can I prevent ChatGPT from accidentally purchasing shipping labels?
- Yes. When generating the MCP server in Truto, you can use Method Filtering (e.g., methods: ["read"]) to ensure the AI agent only has access to read-only tools like package tracking and address listing, blocking any purchase operations.
- How do I connect the Truto MCP URL to ChatGPT?
- In ChatGPT, go to Settings -> Apps -> Advanced settings, enable Developer mode, and add a new Custom Connector by pasting the generated Truto MCP URL.
- How does ChatGPT handle EasyPost's multi-step label purchasing flow?
- Truto exposes discrete MCP tools for each step. ChatGPT will first call `create_a_easy_post_shipment` to fetch available carrier rates, then use the selected rate ID to call `easy_post_shipments_buy` and generate the final postage label.