100+ integrations are ready to connect to your AI.Connect your first MCP

AfterShip MCP server for your AI

Find a stuck parcel and its predicted delivery date, approve and receive a return by RMA, quote rates and buy a label, book a carrier pickup, insure an order and settle a warranty claim.

PopMCPAfterShip

Which parcels hit a delivery exception this week, and what did the carrier say

Supported AfterShip tools

AfterShip tracking, returns, shipping, Commerce, Protection and warranty in one catalog, plus the shipment and return events PopMCP can watch.

aftership_calculate_rates

Quote shipping rates before buying a label.

aftership_cancel_label

Cancel (void) a label so the carrier does not charge for it.

aftership_create_label

Buy a shipping label.

aftership_create_manifest

Create an end-of-day manifest (SCAN form) that hands a shipper account's labels to the carrier: shipper_account { id } and optionally label_ids (otherwise all eligible labels are included).

aftership_create_pickup

Schedule a carrier pickup (FedEx, UPS, DHL Express, Purolator): pickup_from address, pickup_start_time and pickup_end_time (HH:mm:ss), pickup_date (YYYY-MM-DD), shipper_account { id }, and label_ids or pickup_parcels.

aftership_get_label

Get one label by id: status, tracking numbers, rate charged, and the label and document file URLs.

aftership_list_labels

List shipping labels, newest first.

aftership_list_shipper_accounts

List your carrier (shipper) accounts.

aftership_create_fulfillment

Record a fulfillment (shipment or pickup) for a Commerce order: order_id, delivery_method, status, line_items, and trackings [{ tracking_number, slug }] so AfterShip starts tracking it.

aftership_create_order

Sync an order into a Commerce store so AfterShip can track, notify and handle returns for it.

aftership_get_order

Get one Commerce order by id with its items, customer, addresses, totals and statuses.

aftership_list_orders

List a Commerce store's orders.

aftership_list_stores

List the Commerce stores in your AfterShip organization with their ids.

aftership_approve_return_by_rma

Approve a submitted return by RMA number.

aftership_attach_return_shipments_by_rma

Attach a return shipment you created outside AfterShip to a return, by RMA number: shipments [{ tracking_number, slug, label { url, total_charge? } }].

aftership_create_return

Create a return for an order from a connected store (refund resolution only).

aftership_create_returns_page_link

Build a deep link to your returns page pre-filled with an order_number (plus customer_email or postal_code) so a shopper can start a return in one click.

aftership_get_return_by_rma

Get a return's full detail by its RMA number, the code shown to the shopper (for example E7VN6G6L): items, reasons, exchange and refund status, shipments and receiving records.

aftership_list_returns

Search returns (RMAs), newest first.

aftership_receive_return_items_by_rma

Record returned items as received at your warehouse, by RMA number.

aftership_reject_return_by_rma

Reject a submitted return by RMA number.

aftership_resolve_return_by_rma

Mark a return resolved (done) by RMA number, normally after the items are received and the refund or exchange is settled.

aftership_approve_warranty_claim

Approve a warranty claim that is under_review.

aftership_get_warranty_claim

Get one warranty claim by id: items, order, customer, status, resolution and shipments.

aftership_list_warranty_claims

Search warranty claims.

aftership_reject_warranty_claim

Reject a warranty claim that is under_review.

aftership_create_tracking

Start tracking a shipment.

aftership_detect_courier

Work out which courier a tracking number belongs to.

aftership_get_tracking

Get one tracking by its AfterShip tracking id: current tag and subtag, courier, estimated delivery dates, customers, and the full checkpoint history.

aftership_list_couriers

List couriers and their slugs.

aftership_list_trackings

Search shipment trackings, newest first.

aftership_mark_tracking_completed

Close a tracking manually with reason DELIVERED, LOST or RETURNED_TO_SENDER.

aftership_predict_delivery_date

Predict an AI estimated delivery date (earliest, latest and most likely) for a shipment before it has a tracking number, e.g. for a product page or checkout.

aftership_retrack_tracking

Reactivate an Expired tracking so AfterShip resumes checking the courier.

aftership_update_tracking

Update a tracking's details: title, order fields, customers, custom_fields, note, slug, shipment_tags, delivery type and origin/destination info.

aftership_calculate_protection_premium

Quote the protection premium for an order: subtotal { amount, currency } and optional shipping_total.

aftership_create_coverage

Insure an order with AfterShip Protection: order { source_id, items [{ source_id, title, quantity, unit_insured_amount }], shipping_address, sender_address, order_date, subtotal }.

aftership_list_coverages

List shipping-protection coverages (insured orders).

aftership_parse_email

Extract order and shipment details (order number, items, tracking numbers, carrier, delivery dates) from an order or shipping email.

aftership_validate_address

Validate and standardize a postal address (USA, FRA, DEU, ESP, GBR, CHE, BEL) and get suggested corrections.

aftership_cancel_pickup

Cancel a scheduled pickup.

aftership_create_fedex_shipper_account

Add a FedEx or FedEx Ground Economy account through FedEx's own registration flow: slug, description, account credentials, invoice details and address.

aftership_create_shipper_account

Add a carrier account for labels: slug, description, timezone, address and the carrier-specific credentials object (each carrier needs different fields).

aftership_delete_shipper_account

Delete a carrier (shipper) account.

aftership_get_cancelled_label

Get one label cancellation by id to see whether the void succeeded.

aftership_get_cancelled_pickup

Get one pickup cancellation by id to see whether it succeeded.

aftership_get_manifest

Get one manifest by id, including its status, labels and manifest file URL.

aftership_get_pickup

Get one pickup by id, including its confirmation number and status.

aftership_get_rate

Get one rate calculation by id, with every quoted service, its charge and transit time.

aftership_get_shipper_account

Get one carrier (shipper) account by id: carrier slug, status, address and settings.

aftership_list_cancelled_labels

List label cancellations and their status (cancelling, cancelled, failed).

aftership_list_cancelled_pickups

List pickup cancellations and their status.

aftership_list_carrier_locations

Find carrier drop-off and pickup locations near an address.

aftership_list_manifests

List end-of-day manifests.

aftership_list_pickups

List scheduled carrier pickups.

aftership_list_rates

List previous rate calculations.

aftership_list_shipping_couriers

List the carriers AfterShip Shipping can buy labels and quote rates with, including their slugs and service types.

aftership_update_fedex_shipper_account

Upgrade a legacy FedEx account to FedEx's current registration.

aftership_update_shipper_account_credentials

Replace a carrier account's credentials.

aftership_update_shipper_account_info

Update a carrier account's description, timezone or address.

aftership_update_shipper_account_settings

Update carrier account settings (FedEx only today): electronic trade documents, commercial invoice letterhead and signature images.

aftership_validate_shipping_address

Check a shipping address with the carrier-backed validator (legacy beta endpoint).

aftership_create_location

Create a fulfillment location (warehouse or pickup store) for your organization: name and address, plus optional timezone, opening_hours, order_processing and pickup_setting.

aftership_create_order_item

Add a line item to a Commerce order.

aftership_create_product

Create a product in a Commerce store: variants [{ id, sku, price, … }] and image_urls are required; add title, slug, description, url, categories, tags and published.

aftership_create_product_variant

Add a variant to a Commerce product.

aftership_create_store

Create a Commerce store (for a custom or headless shop) so orders, products and fulfillments can be synced into AfterShip.

aftership_delete_order_item

Delete one line item from a Commerce order.

aftership_delete_product_variant

Delete one variant from a Commerce product.

aftership_get_fulfillment

Get one Commerce fulfillment by id, with its line items, trackings and locations.

aftership_get_location

Get one fulfillment location by id.

aftership_get_order_item

Get one line item of a Commerce order.

aftership_get_product

Get one Commerce product by id, with its variants.

aftership_get_product_variant

Get one variant of a Commerce product.

aftership_get_store

Get one Commerce store by id.

aftership_list_fulfillments

List Commerce fulfillments.

aftership_list_locations

List your organization's fulfillment locations.

aftership_list_products

List a Commerce store's products.

aftership_update_fulfillment

Update a Commerce fulfillment's trackings, pickup info or locations.

aftership_update_fulfillment_status

Move a Commerce fulfillment to its next status with occurred_at (ISO 8601).

aftership_update_location

Update a fulfillment location.

aftership_update_order

Update a Commerce order: status, financial_status, fulfillment_status, totals, customer, addresses, tags, note or custom_fields.

aftership_update_order_item

Update one line item of a Commerce order.

aftership_update_product

Update a Commerce product.

aftership_update_product_variant

Update one variant of a Commerce product: price, sku, title, available_quantity, images, weight, options or backorder setting.

aftership_update_store

Update a Commerce store's name, contact emails, timezone, weight unit, phone or address.

aftership_approve_return_by_id

Approve a submitted return by its internal return id.

aftership_attach_return_shipments_by_id

Attach a return shipment you created outside AfterShip, by internal return id: shipments [{ tracking_number, slug, label { url } }].

aftership_get_return_by_id

Get a return's full detail by its internal return id (the id field from list_returns): items with reasons and prices, exchange items, approval and refund status, shipments, receiving records and timestamps.

aftership_list_return_item_tags

List the item tags available for return items (created in the Returns admin).

aftership_receive_return_items_by_id

Record returned items as received, by internal return id.

aftership_record_return_dropoff

Record return items dropped off at a QR-code drop-off point: rma_number and dropoff_id come from the scanned QR code, body items [{ external_order_item_id, quantity }] and dropped_at.

aftership_reject_return_by_id

Reject a submitted return by its internal return id.

aftership_remove_return_items_by_id

Remove items the shopper no longer wants to return from an existing return, by internal return id.

aftership_remove_return_items_by_rma

Remove items the shopper no longer wants to return from an existing return, by RMA number.

aftership_resolve_return_by_id

Mark a return resolved (done) by its internal return id.

aftership_update_return_item_by_id

Update one item on a return (by internal return id): either set its item_tags [{ id }] (ids from list_return_item_tags) or attach merchant_uploaded_image_urls.

aftership_update_return_item_by_rma

Update one item on a return (by RMA number): either set its item_tags [{ id }] (ids from list_return_item_tags) or attach merchant_uploaded_image_urls.

aftership_cancel_warranty_claim

Cancel an approved or in-process warranty claim.

aftership_check_warranty_claim_resolution

Check which resolution methods a warranty claim supports and which stores can fulfill a replacement or store credit.

aftership_create_warranty_claim_shipment

Add a shipment to a warranty claim: label_source aftership (AfterShip generates an inbound label asynchronously) or merchant.

aftership_get_warranty_claim_shipment

Get one shipment of a warranty claim, including label generation status and tracking.

aftership_invalidate_warranty_registration

Mark a warranty registration invalid so it no longer counts toward benefits.

aftership_list_order_warranty_registrations

Get the warranty registration history for every item of an order.

aftership_list_warranty_item_tags

List the item tags that can be applied to warranty claim items.

aftership_process_warranty_claim

Process an approved warranty claim: per item choose resolution_method (repair_item, replace_item, send_repair_kit, issue_store_credit, other) with its replacement_order or store_credit details.

aftership_receive_warranty_claim

Mark a warranty claim's returned items as received (approved or in-process claims).

aftership_resolve_warranty_claim

Mark an in-process warranty claim resolved (completed).

aftership_update_warranty_claim

Update a warranty claim's merchant note, contact_email or shipping_address.

aftership_update_warranty_claim_item

Update one warranty claim item: set item_tags [{ id }] or merchant_image_urls (one of the two per call; an empty array clears it).

aftership_update_warranty_registration

Correct a warranty registration's plan_name, expired_at or benefit totals.

aftership_create_courier_connection

Connect a carrier account for tracking: courier_slug plus that carrier's credentials object (the API keys, usernames or account numbers the carrier requires).

aftership_delete_courier_connection

Remove a courier connection.

aftership_delete_tracking

Delete a tracking permanently.

aftership_get_courier_connection

Get one courier connection by id.

aftership_list_courier_connections

List the carrier account connections set up for tracking (couriers that need your own carrier credentials to fetch tracking).

aftership_predict_delivery_dates

Predict estimated delivery dates for several shipments in one call: estimated_delivery_dates is an array of the same objects predict_delivery_date takes.

aftership_update_courier_connection

Replace the credentials of an existing courier connection.

aftership_get_coverage

Get one coverage by id: status, premium, insured items, policy details and effective dates.

aftership_get_protection_claim

Get one shipping-protection claim by id: issue type, status and resolution.

aftership_list_protection_claims

List shipping-protection claims.

aftership_update_coverage_tracking

Add or update the tracking info on a coverage, which activates it so claims can be filed.

aftership_void_coverage

Void an inactive coverage so it is never charged.

aftership_create_membership

Invite someone to your AfterShip organization: account { email } and role { code }.

aftership_delete_membership

Remove a member from your AfterShip organization.

aftership_get_membership

Get one organization membership by id.

aftership_list_memberships

List the members of your AfterShip organization with their roles.

aftership_list_roles

List the roles available in your AfterShip organization and their codes.

aftership_update_membership

Change a member's role: role { code }.

aftership_predict_product_tags

Predict a product's category and tags for a target platform (TTS for TikTok Shop, Walmart or AfterShip) from a partial product object.

aftership_recommend_products

Get product recommendations from AfterShip Personalization: type BEST_SELLERS, NEW_ARRIVAL, RANDOM, BOUGHT_TOGETHER, COMPLEMENTS, SIMILAR or STRATEGY.

aftership_search_products

Search a store's products semantically (query) or visually (image_url or image_base64), with optional include/exclude filters, faceting, sort, page and limit.

aftership_suggest_search_queries

Autocomplete a shopper's search: returns suggested product queries for a partial query.

aftership_parse_email_v1

Legacy email parser: subject, from and content { html or text }.

Connect AfterShip to your AI

Credentials off one AfterShip screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

Paste an API key from AfterShip → Settings → API keys. Keep its signature header on API key and tick Read or Write for each product the AI should use. Type sandbox in the optional Environment field to test labels and Protection without charges.

API key••••••••••••3f7a
Environment (optional)production
ConnectionVerified

Then just ask for the work

  • “Which parcels hit a delivery exception this week, and what did the carrier say”

    • list_trackings
    • get_tracking
  • “Approve return E7VN6G6L and mark its items received at the warehouse”

    • get_return_by_rma
    • approve_return_by_rma
    • receive_return_items_by_rma
  • “Quote UPS and FedEx for this 2 kg box to Denver, buy the cheaper label and book a pickup for tomorrow afternoon”

    • list_shipper_accounts
    • calculate_rates
    • create_label
    • create_pickup
  • “Pull the tracking numbers out of this supplier's shipping email and start tracking them”

    • parse_email
    • detect_courier
    • list_trackings
    • create_tracking

Use AfterShip from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

AfterShip MCP server questions

What teams ask before putting AfterShip behind an AI client.

What permissions does an AfterShip API key need for the MCP server?

Read or Write for each AfterShip product you want the AI to use. Create the key under Settings → API keys, keep the signature header on API key (AES and RSA keys need every request signed, which this connection doesn't do), and tick Tracking, Returns, Shipping, Protection, Parser, Commerce and Organization as needed. When you connect, PopMCP test-reads Tracking, Returns, Shipping, Commerce, Protection, Warranty and Organization and records which ones the key reaches, so the AI knows up front which products will answer.

Can I test AfterShip shipping labels without paying for them?

Yes. Type sandbox in the optional Environment field and Shipping and Protection calls go to AfterShip's test environment, with free test labels and no coverage charges, using the same API key. Sandbox shipper accounts are separate from live ones, and every other product, such as Tracking, Returns and Commerce, still uses live data. Left blank, the connection is live and labels and coverages are real and billed.

Does the AI need the AfterShip tracking ID or the carrier's tracking number?

The tracking number is enough to start. list_trackings filters by tracking_numbers (up to 50 at once), order_id or delivery status and returns each shipment's status and checkpoints, plus the AfterShip tracking id that get_tracking, update_tracking and retrack_tracking take. detect_courier works out the carrier slug for an unknown number. create_tracking uses plan quota, so the tool tells the AI to check list_trackings first rather than create a duplicate.

How does the AI handle AfterShip returns by RMA number?

By the RMA code the shopper sees, such as E7VN6G6L. Every returns action exists in two forms, by RMA and by internal return id, and the default set loads the RMA versions: approve_return_by_rma, receive_return_items_by_rma, resolve_return_by_rma, and reject_return_by_rma for returns still submitted. Receiving items isn't idempotent, so if a call's outcome is unclear the AI is told to re-read the return before retrying. create_return supports refund resolutions only.

Which AfterShip events can PopMCP watch?

16. Checked on a short polling cycle: shipment added, shipment status changed, out for delivery, shipment delivered, delivery exception, tracking went quiet, return requested, shipping label created and cancelled, manifest created, pickup scheduled and warranty claim filed. Found by comparing snapshots: return status changed, Protection claim filed, order protected and team member added. Because AfterShip events are checked rather than pushed, they land minutes after the change, not instantly.

Do AfterShip Commerce tools need a store ID?

Only when your organization has more than one Commerce store. AfterShip expects the store in an as-store-id header; the AI just passes store_id and PopMCP moves it into the header. With a single store the id is filled in for you, and with several the error lists each store's name and id so the AI can pick one. list_stores returns them too, and create_store sets one up for a custom or headless shop.

Do I have to run or host the AfterShip MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

Why do only 40 of the 134 tools load by default?

Loading 134 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 40-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 134 here. A trigger is something PopMCP watches for you: 16 AfterShip events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into AfterShip.

Connect AfterShip to your AI in minutes

Launch a hosted MCP endpoint for AfterShip, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP