Odel
ProShip Thailand Post

ProShip Thailand Post

@proship1JavaScriptMITUpdated 2w ago

Create Thailand Post shipments, print labels, and track parcels in Thailand via ProShip.

Server endpointStreamable HTTPNo authProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

proship-mcp

Stateless MCP (Model Context Protocol) server that lets any AI agent create Thailand Post shipments, print labels, and track parcels through ProShip.

  • Endpoint: POST https://mcp.proship.me/mcp (JSON-RPC 2.0, application/json)
  • Docs: open https://mcp.proship.me/mcp in a browser — the docs page is generated from the live tool registry
  • Auth: Authorization: Bearer <ProShip API token>, passed through verbatim to api.proship.me. Nothing is stored server-side. New users can call the public signup tool to get a token.

Tools

Public: track_parcel, get_order_statuses, signup. Authenticated: list_shops, create_order, list_orders, get_order, update_order_status, cancel_order, check_duplicate, print_label.

The browser docs page at /mcp is the canonical, always-current tool reference.

Run

npm install
npm start          # listens on PORT (default 3000)
npm test           # node:test suite, upstream fully mocked

Environment

VarPurposeDefault
PORTlisten port3000
PUBLIC_URLabsolute base used in label URLs and docshttps://mcp.proship.me
PROSHIP_API_BASEupstream API basehttps://api.proship.me
PROSHIP_UTRACK_TOKENoptional server-side token enabling unauthenticated track_parcelunset
PROSHIP_SYNTH_EMAIL_DOMAINdomain for synthesized signup emailsproship.me

Deploy

Fly.io app proship-mcp (region sin):

fly deploy            # add --depot=false if the Depot builder fails

Notes

  • Order ids are pipe-suffixed (order-xxx|123). GET/PUT/DELETE strip the suffix internally; print_label requires the full id. Always pass the full id between tools.
  • Weights are grams. Status codes use the Thai pipeline (get_order_statuses); code 6 means out for delivery despite upstream labeling it "ERROR".
  • The only server state is a 10-minute in-memory cache for label PDFs so print_label can return a URL.