# EasyPost MCP connector

Connecting EasyPost to Elaichi lets Claude, ChatGPT, Cursor and the Elaichi Agent create shipments, compare rates, verify addresses, refund labels and track parcels, each action restricted per tool and recorded in an audit log.

Source: https://elaichi.ai/connectors/easypost/

## Facts

| | |
| --- | --- |
| Application | EasyPost |
| Category | Logistics |
| AI tools | 106 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once EasyPost is connected

- Compare rates for a 2 lb box to Austin, Texas
- Refund the labels we bought last week that never shipped
- Verify this address and create a shipment to it

## Connect EasyPost in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick EasyPost.
2. Optionally set Share with, then press Connect.
3. Paste an EasyPost API key. One person generates a token in EasyPost and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which EasyPost tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## EasyPost MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## EasyPost MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## EasyPost MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect EasyPost to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a EasyPost tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with EasyPost through Elaichi

### Compare rates before buying a label

Fulfillment. Give the destination and package size, see the smart rates and estimated delivery dates side by side, then buy the EasyPost label at the rate you pick.

### Answer where is my order in seconds

Support. Look up a shipment by its ID or create a tracker for a customer's parcel, and read back the latest status in plain language while they are still on the call.

### Batch the afternoon's shipments for one pickup

Warehouse. Group the day's shipments into a batch, buy them together, generate the labels and produce the scan form the carrier needs at the dock.

### Refund labels that never shipped

Finance. List the shipments bought this month, find the ones that never left the building, and request refunds on their labels before the carrier window closes.

### Verify addresses before anything goes out

Ecommerce. Check a customer's address against carrier records and catch a missing apartment number or wrong ZIP code before a label is printed.

### Insure high-value shipments as they are created

Operations. Add insurance to a shipment of expensive goods at the moment it is bought, so nothing valuable leaves without cover.

## Elaichi vs Zapier MCP vs Composio for EasyPost

All three can connect EasyPost to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over EasyPost tools | Allow or restrict single EasyPost tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per EasyPost call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect EasyPost to Claude?

First connect EasyPost in Elaichi by pasting your EasyPost API key, which takes about a minute, with no OAuth application to register and no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste the endpoint https://api.elaichi.ai/mcp. Sign in with your Elaichi account and EasyPost shipments, addresses, batches and trackers are available in Claude.

### Does EasyPost work with ChatGPT and Cursor as well as Claude?

Yes. Once EasyPost is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect EasyPost once and every client picks it up.

### What can an AI agent actually do with my EasyPost data?

It can create an EasyPost shipment, compare carrier rates and delivery dates, buy the label, insure it, refund it if it never ships, and create a tracker to follow the parcel. It can also verify an address before anything is printed, and group shipments into a batch with labels and a scan form for pickup. Short, concrete asks such as compare rates for this box to Denver work better than long paragraphs.

### Does connecting EasyPost give the AI access to everything in my account?

No. The EasyPost connection runs with the access of the API key that was entered and nothing beyond it, and each person reaches it only after signing in to Elaichi as themselves. Elaichi can narrow that access with roles and restrictions, and it can never widen it.

### Can my team share one EasyPost connection?

Yes. One person connects EasyPost in Elaichi and shares the connection with a team, and nobody else ever handles or sees the EasyPost API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who bought, refunded or tracked each shipment.

### Can I stop an agent from deleting or changing things in EasyPost?

Yes. Restrictions in Elaichi apply per action, so you can allow looking up EasyPost shipments and verifying addresses while blocking refunds, insurance or deleting batches. A restricted action is never advertised to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to an EasyPost connection when someone leaves?

Offboarding that person in Elaichi ends their access to EasyPost at once, in every client they used. A shared EasyPost connection keeps working for everyone else on the team. If you want to remove EasyPost entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client together.

### Does the EasyPost MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. EasyPost is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for EasyPost?

Yes. Both let Claude, ChatGPT or Cursor use EasyPost. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every EasyPost call.

### How is Elaichi different from Composio for EasyPost?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to EasyPost: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 106 EasyPost tools

Every tool below is callable through https://api.elaichi.ai/mcp once EasyPost is connected, subject to the toolbox it is in and the restrictions on the caller.

- **Create a EasyPost shipment** (Create). Create a shipment in EasyPost with a destination address, origin address, and parcel; valid values automatically populate shipping rates. Returns the created Shipment including its id, status, rates, parcel, to_address, and tracking_code. Requires shipment containing to_address, from_address, and parcel.
- **List all EasyPost shipments** (List). List all shipments in EasyPost. Returns each Shipment including its id, status, tracking_code, rates, parcel, and created_at.
- **Get single EasyPost shipment by ID** (Get). Get a single EasyPost shipment by id. Returns the full Shipment object including its id, status, rates, parcel, postage_label, and tracking_code. Required: id.
- **EasyPost shipments buy** (Action). Buy a Shipment in easypost by purchasing one of its returned rates, generating the postage label and tracking code. Returns the purchased Shipment object including its id, status, tracking_code, selected_rate, postage_label, fees, and rates. Required: id (the shipment, e.g. shp_...) and either a rate_id or the carrier and service pair.
- **EasyPost shipments insure** (Action). Insure a Shipment in easypost by declaring the value of its contents; coverage costs 1.0% of the declared value with a $1.00 minimum, and claims are paid within 10 days. The shipment must already be bought and insured before the carrier begins handling the package. Returns the updated Shipment object including its id, status, tracking_code, insurance, postage_label, and rates. Required: id (the…
- **EasyPost shipments refund** (Action). Refund an EasyPost shipment label by id. Returns the updated Shipment object including its id, status, refund_status (submitted, refunded, rejected, or not_applicable), tracking_code, rates, and postage_label. Required: shipment_id. USPS labels can be refunded within 30 days of generation and UPS/FedEx within 90 days; refund processing takes at least 15 days.
- **EasyPost shipments list smartrates** (List). List EasyPost SmartRates for a shipment by id, with time-in-transit predictions for every associated rate. Returns rate records including id, carrier, service, rate, currency, delivery_days, est_delivery_days, and time_in_transit percentiles. Required: shipment_id. Only available for US domestic shipments.
- **EasyPost shipments list smartrate delivery dates** (List). List EasyPost estimated delivery dates for every rate on a shipment. Returns one rate record per carrier service with carrier, service, rate, and time_in_transit percentile estimates. Required: shipment_id, planned_ship_date. US domestic shipments only.
- **EasyPost shipments list smartrate precision shipping** (List). List EasyPost precision shipping recommendations that suggest the best ship date per carrier service to meet a desired delivery date. Returns one rate record per carrier service with carrier, service, rate, and time_in_transit percentile estimates. Required: shipment_id, desired_delivery_date. US domestic shipments only.
- **Create a EasyPost address** (Create). Create an address in EasyPost with street, city, state, zip, and country details (ISO 3166 country codes supported). Returns the created address object including id, street1, city, zip, country, residential flag, and verifications. Address objects are immutable after creation.
- **EasyPost addresses verify** (Verify). Verify an existing EasyPost address to check deliverability, correct minor formatting issues, and set residential status. Returns the address object including id, street1, zip, residential, and verifications. Required: addresse_id.
- **EasyPost addresses create and verify** (Create). Create an address in EasyPost and verify it in a single call. Returns the address object including id, street1, city, zip, country, residential flag, and verifications. Address objects are immutable after creation.
- **List all EasyPost addresses** (List). List all EasyPost addresses. Returns each address object including id, street1, city, zip, country, residential flag, and created_at.
- **Get single EasyPost address by ID** (Get). Get a single EasyPost address by id. Returns the full address object including id, street1, city, zip, country, residential flag, and verifications. Required: id.
- **Create a EasyPost batch** (Create). Create a Batch in easypost with or without shipments; batch operations run asynchronously and fire a webhook Event when the state change completes. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Keep batches under 1,000 shipments to avoid timeout errors during batch buying.
- **EasyPost batches add shipments** (Add). Add shipments to an easypost Batch at any point in its life cycle; the state change is asynchronous and fires a webhook Event when completed. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
- **EasyPost batches remove shipments** (Delete). Remove shipments from an easypost Batch. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
- **EasyPost batches buy** (Action). Buy an easypost Batch, enqueuing a background job that purchases postage for its shipments and generates labels asynchronously via webhooks. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id.
- **EasyPost batches generate label** (Generate). Generate a consolidated label for all shipments in an easypost Batch. Returns: id, object, mode, state, num_shipments, reference, created_at, updated_at, scan_form, shipments, status, pickup, label_url. Required: batche_id, file_format.
- **EasyPost batches create scan form** (Create). Create a ScanForm for an EasyPost Batch, consolidating its purchased shipments into a single carrier manifest. Returns the Batch including scan_form, state, num_shipments, shipments, and status counts. Required: batche_id. Scan form creation is asynchronous and completes via webhook.
- **List all EasyPost batches** (List). List EasyPost Batches, with pagination handled automatically. Returns each Batch with id, state, num_shipments, shipments, status counts, label_url, and created_at/updated_at timestamps.
- **Get single EasyPost batch by ID** (Get). Get a single EasyPost Batch by id, useful for polling the asynchronous state changes of a Batch. Returns: id, object, mode, state, num_shipments, reference, scan_form, shipments, status, pickup, label_url, created_at, updated_at. Required: id.
- **Delete a EasyPost batch by ID** (Delete). Delete an EasyPost Batch by id. Returns the deleted Batch record including id, state, num_shipments, shipments, and status counts. Required: id.
- **Create a EasyPost tracker** (Create). Create an EasyPost tracker to track a package that was not purchased through EasyPost. Returns the tracker object including id, tracking_code, status, carrier, est_delivery_date, tracking_details, and carrier_detail. Requires a tracker object with tracking_code and carrier. EasyPost returns the existing tracker if the same tracking_code and carrier were submitted within the previous three months.
- **List all EasyPost trackers** (List). List EasyPost trackers with their current package status and full scan history. Returns: id, object, mode, tracking_code, status, status_detail, signed_by, weight, est_delivery_date, shipment_id, carrier, tracking_details, carrier_detail, public_url, fees, created_at, updated_at.
- **Get single EasyPost tracker by ID** (Get). Retrieve a single EasyPost Tracker by id. Returns the full Tracker object including its id, tracking_code, status, status_detail, carrier, tracking_details scan history, carrier_detail, fees, and public_url. Required: id.
- **EasyPost trackers create batch** (Create). Create Trackers in bulk in EasyPost for bring-your-own tracking of packages. Creation is asynchronous: the call returns a BatchJob used to track the batch creation, including its id, created_at, and updated_at. Required: an array of tracker payloads, each with tracking_code and carrier.
- **Create a EasyPost order** (Create). Create a multi-parcel Order in easypost from an order object containing to_address, from_address, and one shipment with a parcel per package. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order. Multi-parcel only; carriers: AustraliaPost, DHLExpress,…
- **Get single EasyPost order by ID** (Get). Get a single easypost Order by id, including its shipments, rates, and address objects. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: id. Only works with AustraliaPost, DHLExpress, DPD, DPDUK, Fastway, FedEx, UPS, Purolator, and LoomisExpress carriers.
- **EasyPost orders buy** (Action). Buy postage for every shipment in an easypost Order using the chosen carrier and service level; each shipment is updated with its postage_label and tracker. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order_id, carrier, service. Only works with…
- **EasyPost orders buy one** (Action). Buy postage for a single shipment within an easypost Order using the chosen carrier and service level. Returns: id, object, mode, reference, is_return, options, messages, customs_info, to_address, from_address, return_address, buyer_address, shipments, rates, created_at, updated_at. Required: order_id, shipment_id, carrier, service.
- **Create a EasyPost parcel** (Create). Create a parcel in easypost representing the physical container being shipped, defined either by dimensions or a predefined package. Returns: id, object, created_at, updated_at, length, width, height, predefined_package, weight, mode. Required: weight. Weights are in ounces and dimensions in inches, to one decimal point; the parcel object is immutable after creation.
- **Get single EasyPost parcel by ID** (Get). Get a parcel in easypost by its id. Returns: id, object, created_at, updated_at, length, width, height, predefined_package, weight, mode. Required: id. Rarely needed in automated solutions, since a parcel's id can be inlined directly into the creation calls of other objects.
- **Create a EasyPost pickup** (Create). Create a Pickup in easypost to schedule a carrier pickup for a purchased Shipment or Batch at an address; PickupRates are fetched automatically for supported carriers. Returns the created Pickup including id, status, min_datetime, max_datetime, and pickup_rates.
- **Get single EasyPost pickup by ID** (Get). Get a single Pickup in easypost by id (pickup_...) or reference. Returns: id, object, mode, status, reference, min_datetime, max_datetime, is_account_address, instructions, messages, confirmation, shipment, address, carrier_accounts, pickup_rates, created_at, updated_at. Required: id.
- **EasyPost pickups buy** (Action). Buy a Pickup in easypost to schedule it with a carrier by selecting one of its PickupRates. Returns the updated Pickup including id, status, confirmation, address, and pickup_rates. Required: pickup_id, carrier, service.
- **EasyPost pickups cancel** (Cancel). Cancel a scheduled Pickup in easypost; its status becomes canceled. Returns the updated Pickup including id, status, min_datetime, max_datetime, and pickup_rates. Required: pickup_id.
- **List all EasyPost pickups** (List). List Pickups in easypost. Returns Pickup records including id, status, min_datetime, max_datetime, address, and pickup_rates.
- **Create a EasyPost insurance** (Create). Create standalone insurance in EasyPost for a package shipped outside EasyPost, verified via its tracking code. Returns the created Insurance object: id, status, amount, provider, tracking_code, to_address, from_address, fee, created_at. Required: tracking_code.
- **List all EasyPost insurances** (List). List all Insurance objects in EasyPost, including insurance purchased via the API and registered third-party packages. Returns each insurance with id, status, amount, tracking_code, provider, tracker, addresses, and created_at.
- **Get single EasyPost insurance by ID** (Get). Get a single EasyPost Insurance by id. Returns the full insurance object including id, status, amount, tracking_code, provider, to_address, from_address, tracker, and fee. Required: id.
- **EasyPost insurances list shipment rates** (List). List available insurance rates for an EasyPost shipment. Returns Rate quotes including id, carrier, service, rate, currency, delivery_days, and carrier_account_id. Required: shipment_id.
- **Create a EasyPost rate** (Create). Retrieve stateless shipping rates from EasyPost without creating a Shipment object — ideal for displaying or comparing carrier prices. Returns a rates array whose entries include carrier, service, rate, currency, retail_rate, list_rate, and delivery_days. Requires shipment containing to_address, from_address, and parcel. Returned Rate objects do not include IDs.
- **Create a EasyPost carrier account** (Create). Create a CarrierAccount in EasyPost to store your credentials with a carrier. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: type (the CarrierType name, e.g. DhlEcsAccount).
- **List all EasyPost carrier accounts** (List). List all CarrierAccounts in EasyPost, including the automatically provided USPS account. Returns each account with id, type, fields, credentials, description, and created_at. Filter by type (e.g. UpsAccount).
- **Get single EasyPost carrier account by ID** (Get). Get a single CarrierAccount in EasyPost by id. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: id.
- **Update a EasyPost carrier account by ID** (Update). Update a CarrierAccount in EasyPost by id, e.g. its description, reference, or credentials. Returns: id, object, type, clone, description, reference, readable, billing_type, logo, fields, credentials, test_credentials, created_at, updated_at. Required: id. When clone is true, only reference and description can be updated.
- **Delete a EasyPost carrier account by ID** (Delete). Delete a CarrierAccount in EasyPost by id, e.g. when the credentials become out of date or are no longer useful. Returns an empty 204 response on success. Required: id.
- **List all EasyPost carrier types** (List). List all EasyPost CarrierType objects, which describe the credential fields required to create each type of CarrierAccount. Returns: object, type, readable, logo, fields. The list is unpaginated and only changes when a new carrier is added to EasyPost.
- **List all EasyPost carrier metadata** (List). List carrier metadata for all carriers available on the EasyPost platform, including service levels, predefined packages, supported features, and shipment options. Returns a carriers array whose entries include name, human_readable, service_levels, and predefined_packages. Optionally filter with carriers and types.
- ...and 56 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
