aftership_calculate_ ratesQuote shipping rates before buying a label.
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
AfterShip tracking, returns, shipping, Commerce, Protection and warranty in one catalog, plus the shipment and return events PopMCP can watch.
aftership_calculate_ ratesQuote shipping rates before buying a label.
aftership_cancel_ labelCancel (void) a label so the carrier does not charge for it.
aftership_create_ labelBuy a shipping label.
aftership_create_ manifestCreate 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_ pickupSchedule 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_ labelGet one label by id: status, tracking numbers, rate charged, and the label and document file URLs.
aftership_list_ labelsList shipping labels, newest first.
aftership_list_ shipper_ accountsList your carrier (shipper) accounts.
aftership_create_ fulfillmentRecord 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_ orderSync an order into a Commerce store so AfterShip can track, notify and handle returns for it.
aftership_get_ orderGet one Commerce order by id with its items, customer, addresses, totals and statuses.
aftership_list_ ordersList a Commerce store's orders.
aftership_list_ storesList the Commerce stores in your AfterShip organization with their ids.
aftership_approve_ return_ by_ rmaApprove a submitted return by RMA number.
aftership_attach_ return_ shipments_ by_ rmaAttach a return shipment you created outside AfterShip to a return, by RMA number: shipments [{ tracking_number, slug, label { url, total_charge? } }].
aftership_create_ returnCreate a return for an order from a connected store (refund resolution only).
aftership_create_ returns_ page_ linkBuild 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_ rmaGet 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_ returnsSearch returns (RMAs), newest first.
aftership_receive_ return_ items_ by_ rmaRecord returned items as received at your warehouse, by RMA number.
aftership_reject_ return_ by_ rmaReject a submitted return by RMA number.
aftership_resolve_ return_ by_ rmaMark a return resolved (done) by RMA number, normally after the items are received and the refund or exchange is settled.
aftership_approve_ warranty_ claimApprove a warranty claim that is under_review.
aftership_get_ warranty_ claimGet one warranty claim by id: items, order, customer, status, resolution and shipments.
aftership_list_ warranty_ claimsSearch warranty claims.
aftership_reject_ warranty_ claimReject a warranty claim that is under_review.
aftership_create_ trackingStart tracking a shipment.
aftership_detect_ courierWork out which courier a tracking number belongs to.
aftership_get_ trackingGet one tracking by its AfterShip tracking id: current tag and subtag, courier, estimated delivery dates, customers, and the full checkpoint history.
aftership_list_ couriersList couriers and their slugs.
aftership_list_ trackingsSearch shipment trackings, newest first.
aftership_mark_ tracking_ completedClose a tracking manually with reason DELIVERED, LOST or RETURNED_TO_SENDER.
aftership_predict_ delivery_ datePredict 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_ trackingReactivate an Expired tracking so AfterShip resumes checking the courier.
aftership_update_ trackingUpdate a tracking's details: title, order fields, customers, custom_fields, note, slug, shipment_tags, delivery type and origin/destination info.
aftership_calculate_ protection_ premiumQuote the protection premium for an order: subtotal { amount, currency } and optional shipping_total.
aftership_create_ coverageInsure 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_ coveragesList shipping-protection coverages (insured orders).
aftership_parse_ emailExtract order and shipment details (order number, items, tracking numbers, carrier, delivery dates) from an order or shipping email.
aftership_validate_ addressValidate and standardize a postal address (USA, FRA, DEU, ESP, GBR, CHE, BEL) and get suggested corrections.
aftership_cancel_ pickupCancel a scheduled pickup.
aftership_create_ fedex_ shipper_ accountAdd a FedEx or FedEx Ground Economy account through FedEx's own registration flow: slug, description, account credentials, invoice details and address.
aftership_create_ shipper_ accountAdd a carrier account for labels: slug, description, timezone, address and the carrier-specific credentials object (each carrier needs different fields).
aftership_delete_ shipper_ accountDelete a carrier (shipper) account.
aftership_get_ cancelled_ labelGet one label cancellation by id to see whether the void succeeded.
aftership_get_ cancelled_ pickupGet one pickup cancellation by id to see whether it succeeded.
aftership_get_ manifestGet one manifest by id, including its status, labels and manifest file URL.
aftership_get_ pickupGet one pickup by id, including its confirmation number and status.
aftership_get_ rateGet one rate calculation by id, with every quoted service, its charge and transit time.
aftership_get_ shipper_ accountGet one carrier (shipper) account by id: carrier slug, status, address and settings.
aftership_list_ cancelled_ labelsList label cancellations and their status (cancelling, cancelled, failed).
aftership_list_ cancelled_ pickupsList pickup cancellations and their status.
aftership_list_ carrier_ locationsFind carrier drop-off and pickup locations near an address.
aftership_list_ manifestsList end-of-day manifests.
aftership_list_ pickupsList scheduled carrier pickups.
aftership_list_ ratesList previous rate calculations.
aftership_list_ shipping_ couriersList the carriers AfterShip Shipping can buy labels and quote rates with, including their slugs and service types.
aftership_update_ fedex_ shipper_ accountUpgrade a legacy FedEx account to FedEx's current registration.
aftership_update_ shipper_ account_ credentialsReplace a carrier account's credentials.
aftership_update_ shipper_ account_ infoUpdate a carrier account's description, timezone or address.
aftership_update_ shipper_ account_ settingsUpdate carrier account settings (FedEx only today): electronic trade documents, commercial invoice letterhead and signature images.
aftership_validate_ shipping_ addressCheck a shipping address with the carrier-backed validator (legacy beta endpoint).
aftership_create_ locationCreate 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_ itemAdd a line item to a Commerce order.
aftership_create_ productCreate 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_ variantAdd a variant to a Commerce product.
aftership_create_ storeCreate a Commerce store (for a custom or headless shop) so orders, products and fulfillments can be synced into AfterShip.
aftership_delete_ order_ itemDelete one line item from a Commerce order.
aftership_delete_ product_ variantDelete one variant from a Commerce product.
aftership_get_ fulfillmentGet one Commerce fulfillment by id, with its line items, trackings and locations.
aftership_get_ locationGet one fulfillment location by id.
aftership_get_ order_ itemGet one line item of a Commerce order.
aftership_get_ productGet one Commerce product by id, with its variants.
aftership_get_ product_ variantGet one variant of a Commerce product.
aftership_get_ storeGet one Commerce store by id.
aftership_list_ fulfillmentsList Commerce fulfillments.
aftership_list_ locationsList your organization's fulfillment locations.
aftership_list_ productsList a Commerce store's products.
aftership_update_ fulfillmentUpdate a Commerce fulfillment's trackings, pickup info or locations.
aftership_update_ fulfillment_ statusMove a Commerce fulfillment to its next status with occurred_at (ISO 8601).
aftership_update_ locationUpdate a fulfillment location.
aftership_update_ orderUpdate a Commerce order: status, financial_status, fulfillment_status, totals, customer, addresses, tags, note or custom_fields.
aftership_update_ order_ itemUpdate one line item of a Commerce order.
aftership_update_ productUpdate a Commerce product.
aftership_update_ product_ variantUpdate one variant of a Commerce product: price, sku, title, available_quantity, images, weight, options or backorder setting.
aftership_update_ storeUpdate a Commerce store's name, contact emails, timezone, weight unit, phone or address.
aftership_approve_ return_ by_ idApprove a submitted return by its internal return id.
aftership_attach_ return_ shipments_ by_ idAttach a return shipment you created outside AfterShip, by internal return id: shipments [{ tracking_number, slug, label { url } }].
aftership_get_ return_ by_ idGet 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_ tagsList the item tags available for return items (created in the Returns admin).
aftership_receive_ return_ items_ by_ idRecord returned items as received, by internal return id.
aftership_record_ return_ dropoffRecord 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_ idReject a submitted return by its internal return id.
aftership_remove_ return_ items_ by_ idRemove items the shopper no longer wants to return from an existing return, by internal return id.
aftership_remove_ return_ items_ by_ rmaRemove items the shopper no longer wants to return from an existing return, by RMA number.
aftership_resolve_ return_ by_ idMark a return resolved (done) by its internal return id.
aftership_update_ return_ item_ by_ idUpdate 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_ rmaUpdate 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_ claimCancel an approved or in-process warranty claim.
aftership_check_ warranty_ claim_ resolutionCheck which resolution methods a warranty claim supports and which stores can fulfill a replacement or store credit.
aftership_create_ warranty_ claim_ shipmentAdd a shipment to a warranty claim: label_source aftership (AfterShip generates an inbound label asynchronously) or merchant.
aftership_get_ warranty_ claim_ shipmentGet one shipment of a warranty claim, including label generation status and tracking.
aftership_invalidate_ warranty_ registrationMark a warranty registration invalid so it no longer counts toward benefits.
aftership_list_ order_ warranty_ registrationsGet the warranty registration history for every item of an order.
aftership_list_ warranty_ item_ tagsList the item tags that can be applied to warranty claim items.
aftership_process_ warranty_ claimProcess 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_ claimMark a warranty claim's returned items as received (approved or in-process claims).
aftership_resolve_ warranty_ claimMark an in-process warranty claim resolved (completed).
aftership_update_ warranty_ claimUpdate a warranty claim's merchant note, contact_email or shipping_address.
aftership_update_ warranty_ claim_ itemUpdate 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_ registrationCorrect a warranty registration's plan_name, expired_at or benefit totals.
aftership_create_ courier_ connectionConnect 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_ connectionRemove a courier connection.
aftership_delete_ trackingDelete a tracking permanently.
aftership_get_ courier_ connectionGet one courier connection by id.
aftership_list_ courier_ connectionsList the carrier account connections set up for tracking (couriers that need your own carrier credentials to fetch tracking).
aftership_predict_ delivery_ datesPredict 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_ connectionReplace the credentials of an existing courier connection.
aftership_get_ coverageGet one coverage by id: status, premium, insured items, policy details and effective dates.
aftership_get_ protection_ claimGet one shipping-protection claim by id: issue type, status and resolution.
aftership_list_ protection_ claimsList shipping-protection claims.
aftership_update_ coverage_ trackingAdd or update the tracking info on a coverage, which activates it so claims can be filed.
aftership_void_ coverageVoid an inactive coverage so it is never charged.
aftership_create_ membershipInvite someone to your AfterShip organization: account { email } and role { code }.
aftership_delete_ membershipRemove a member from your AfterShip organization.
aftership_get_ membershipGet one organization membership by id.
aftership_list_ membershipsList the members of your AfterShip organization with their roles.
aftership_list_ rolesList the roles available in your AfterShip organization and their codes.
aftership_update_ membershipChange a member's role: role { code }.
aftership_predict_ product_ tagsPredict a product's category and tags for a target platform (TTS for TikTok Shop, Walmart or AfterShip) from a partial product object.
aftership_recommend_ productsGet product recommendations from AfterShip Personalization: type BEST_SELLERS, NEW_ARRIVAL, RANDOM, BOUGHT_TOGETHER, COMPLEMENTS, SIMILAR or STRATEGY.
aftership_search_ productsSearch 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_ queriesAutocomplete a shopper's search: returns suggested product queries for a partial query.
aftership_parse_ email_ v1Legacy email parser: subject, from and content { html or text }.
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.
••••••••••••3f7aproductioncreate_label, create_coverage, create_tracking and the returns actions run as soon as the AI calls them, and on a live connection labels and coverages are billed. Tick AfterShip on the PopMCP consent screen only for clients that need it.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your AfterShip credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Which parcels hit a delivery exception this week, and what did the carrier say
aftership_list_trackingsok
Then just ask for the work
“Which parcels hit a delivery exception this week, and what did the carrier say”
“Approve return E7VN6G6L and mark its items received at the warehouse”
“Quote UPS and FedEx for this 2 kg box to Denver, buy the cheaper label and book a pickup for tomorrow afternoon”
“Pull the tracking numbers out of this supplier's shipping email and start tracking them”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting AfterShip behind an AI client.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Launch a hosted MCP endpoint for AfterShip, keep tool access under control, and start testing real workflow prompts right away.