Shippo MCP server
57 operations1 webhook
Multi-carrier shipping with Shippo - quote rates across carriers, buy and refund labels, track parcels, declare customs and manage pickup paperwork.
Try Shippo with your agent
Connect Shippo, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in Shippo on my account, then run one read-only example and show me the result.
Shippo tools and triggers
Tools are what your agent can do in Shippo through Corsair's MCP server. Triggers are the Shippo events a routine can start from.
Parcel Templates
- CreateWrite
Save a reusable parcel template, optionally based on a carrier template token
parcelTemplates.create
- DeleteDestructive
Delete one of the account’s parcel templates. Anything still referring to its token stops resolving
parcelTemplates.delete
- GetRead-only
Read one of the account’s parcel templates
parcelTemplates.get
- Get CarrierRead-only
Read one carrier parcel template by its token
parcelTemplates.getCarrier
- ListRead-only
List the account’s own parcel templates
parcelTemplates.list
- List CarrierRead-only
List the carrier’s predefined parcel templates, whose tokens can be reused instead of dimensions
parcelTemplates.listCarrier
- UpdateWrite
Change one of the account’s parcel templates
parcelTemplates.update
Carrier Accounts
- CreateWrite
Connect the caller’s own carrier account, with that carrier’s credential set
carrierAccounts.create
- GetRead-only
Read one carrier account
carrierAccounts.get
- ListRead-only
List the carrier accounts on the account. Every call that asks for rates depends on one of these being active
carrierAccounts.list
- RegisterWrite
Enrol a Shippo-supplied carrier account rather than the caller’s own
carrierAccounts.register
- Registration StatusRead-only
Check whether a carrier has approved the account for live rates
carrierAccounts.registrationStatus
- UpdateWrite
Change a carrier account’s credentials or switch it on or off
carrierAccounts.update
Batches
- Add ShipmentsWrite
Add shipments to a batch that is still validating or valid
batches.addShipments
- CreateWrite
Create a batch of shipments to buy labels for together. Validation runs asynchronously
batches.create
- GetRead-only
Read a batch: its status, per-shipment results and the merged label URLs once purchased
batches.get
- PurchaseWrite
Buy every label in a batch: spends money per shipment and answers 202, so the labels arrive through `batches.get`
batches.purchase
- Remove ShipmentsWrite
Remove shipments from a batch before it is purchased
batches.removeShipments
Shipments
- CreateWrite
Create a shipment from an origin, destination and one or more parcels; Shippo starts computing carrier rates. Pass `async: false` to get them back in the response
shipments.create
- GetRead-only
Read one shipment, including any rates already computed
shipments.get
- ListRead-only
List shipments, optionally limited to a creation-date window
shipments.list
- RatesRead-only
List the rates computed for a shipment. This is what you call after an async create returned no rates
shipments.rates
- Rates In CurrencyRead-only
List a shipment’s rates expressed in a chosen currency
shipments.ratesInCurrency
Webhooks
- CreateWrite
Subscribe one URL to tracking, transaction or batch events, or to all of them
webhooks.create
- DeleteDestructive
Delete a webhook subscription. Shippo keeps creating tracking webhooks for labels it sells, so this only removes the one named
webhooks.delete
- GetRead-only
Read one webhook subscription
webhooks.get
- ListRead-only
List the webhook subscriptions on the account
webhooks.list
- UpdateWrite
Change a subscription’s URL or event, or switch it on or off
webhooks.update
Addresses
- CreateWrite
Create a reusable address. Only `country` is required, but buying a label needs a name and a street line
addresses.create
- GetRead-only
Read one saved address by `object_id`
addresses.get
- ListRead-only
List the account’s saved addresses, most recent first
addresses.list
- ValidateRead-only
Re-run validation on a saved address and read `validation_results`: whether it is valid, and what was corrected or could not be matched
addresses.validate
Customs Declarations
- CreateWrite
Create a customs declaration for an international shipment, certifying its contents and naming what to do if it cannot be delivered
customsDeclarations.create
- GetRead-only
Read one customs declaration
customsDeclarations.get
- ListRead-only
List customs declarations
customsDeclarations.list
Customs Items
- CreateWrite
Create a customs item: what it is, how many, its weight and declared value
customsItems.create
- GetRead-only
Read one customs item
customsItems.get
- ListRead-only
List customs items used in international declarations
customsItems.list
Manifests
- CreateWrite
Close out a carrier’s day with a manifest covering transactions not yet manifested
manifests.create
- GetRead-only
Read one manifest and its document URLs
manifests.get
- ListRead-only
List manifests, the end-of-day paperwork a carrier requires
manifests.list
Orders
- CreateWrite
Create an order so Shippo can group the labels bought to fulfil it
orders.create
- GetRead-only
Read one order with its line items and buyer address
orders.get
- ListRead-only
List orders, filterable by status, shop app or when they were placed
orders.list
Parcels
- CreateWrite
Create a reusable parcel with its dimensions and weight, both as decimal strings
parcels.create
- GetRead-only
Read one saved parcel by `object_id`
parcels.get
- ListRead-only
List the account’s saved parcels
parcels.list
Refunds
- CreateWrite
Ask the carrier to void a bought label and refund it. The carrier may refuse, so the outcome arrives as a status
refunds.create
- GetRead-only
Read one refund request
refunds.get
- ListRead-only
List refund requests and their outcomes
refunds.list
Transactions
- CreateWrite
Buy a label from a rate: spends money on the account’s carrier and cannot be undone except by a refund
transactions.create
- GetRead-only
Read one bought label. Re-read this rather than reusing a `label_url`, which expires
transactions.get
- ListRead-only
List bought labels, filterable by rate, object status or tracking status
transactions.list
Tracks
- GetRead-only
Read a tracking status and history for a carrier and tracking number
tracks.get
- RegisterWrite
Register a tracking number Shippo has not seen, usually from a label bought elsewhere. From then on `track_updated` webhooks fire for it
tracks.register
Pickups
- CreateWrite
Ask a carrier to collect parcels, naming the transactions it covers and a pickup window
pickups.create
Rates
- GetRead-only
Read one rate by `object_id`. Rates older than 390 days are gone
rates.get
Connect Shippo to Claude, ChatGPT or Cursor
- 1
Connect Shippo in Corsair
Add your Shippo API key once in Corsair. Corsair stores the credential encrypted and makes the Shippo API calls for your agent, so it never goes into a prompt or a config file. Connect Shippo
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs Shippo. On a ChatGPT personal plan, connect Shippo here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. In the default Cautious mode, Shippo's read and write operations run right away and its 2 destructive operations wait for your approval. Strict mode asks before every write and refuses destructive operations, and Read mode allows reads only.
FAQ
Install corsair and @corsair-dev/shippo, add the Shippo plugin, and connect with an API key. Then call methods like corsair.shippo.api.addresses.create() from your app. Corsair verifies webhooks, and keeps each tenant isolated.
Yes. Shippo requires an API key from your Shippo account or developer dashboard. Create credentials with access that matches what you automate, then paste them into Corsair or connect through managed auth in Hub.
Yes. One Corsair client can hit Shippo, GitHub, Notion, Stripe, and the rest. Trigger Shippo from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for multi-carrier shipping with Shippo - quote rates across carriers, buy and refund labels, track parcels, declare customs and manage pickup paperwork. Common builds include sync jobs, admin tooling, and agents that call Shippo APIs from your backend. Webhook handlers react to Shippo events and fan out to Slack, email, or other plugins in the same tenant.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per Shippo API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/shippo in the open repo. When Shippo ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your Shippo data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store Shippo data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put Shippo on a link in Strict mode and every write waits for your approval, while destructive actions are refused. The default Cautious mode asks only before the 2 destructive Shippo operations. You can change a link's mode at hub.corsair.dev/me.