Indonesia Logistics MCP ๐ฎ๐ฉ โ How can my AI agent ship a parcel across Indonesia (JNE / J&T / SiCepat via Biteship)?
Use it in 60 seconds
Paste this into your MCP client config (Claude Desktop, Cursor, Windsurf, or any MCP-capable agent):
{
"mcpServers": {
"indonesia-logistics": {
"type": "http",
"url": "https://logi-id.wishpool.app/mcp"
}
}
}
Nothing to install. Credentials, when you need them, travel as HTTP headers on each request and are never stored โ see the threat model.
Or run it yourself
Would you rather not send production credentials to a server you do not control? Deploy this identical code to your own account and point your agent at your own URL:
git clone https://github.com/junter1989k-ai/indonesia-logistics-mcp && cd indonesia-logistics-mcp && npx vercel --prod
MIT-licensed. Self-hosting removes us from the picture entirely, at no cost and with no loss of function.
Remote MCP server that lets any AI agent ship parcels across Indonesia โ over JNE, J&T, SiCepat, AnterAja, Ninja, Pos Indonesia, Lion Parcel, Gojek and Grab โ through the Biteship shipping API. Compare courier rates by postal code (cek ongkir), create shipping orders, track parcels by waybill, and cancel orders. Stateless, bring-your-own Biteship API key, never stores anything.
Live endpoint: https://logi-id.wishpool.app/mcp ยท Registry: app.wishpool/indonesia-logistics-mcp
Quick start
{
"mcpServers": {
"indonesia-logistics": {
"type": "http",
"url": "https://logi-id.wishpool.app/mcp",
"headers": {
"x-biteship-key": "biteship_live_your_api_key"
}
}
}
}
No shared demo โ use your own Biteship account. Get an API key in the Biteship dashboard at dashboard.biteship.com (Settings โ API Key) and send it in the header above. The server is stateless: on every call it sends the key as the Authorization header directly to api.biteship.com and stores nothing. A biteship_test_ key runs in the sandbox; a biteship_live_ key ships real parcels and debits your Biteship balance.
Tools
| Tool | What it does |
|---|---|
check_rates | Call this first (cek ongkir). Given items (name/value IDR/weight grams/quantity) plus an origin (origin_postal_code or origin_area_id) and a destination, returns every available courier service (JNE, J&T, SiCepat, AnterAja, Gojek, Grabโฆ) with its price (IDR), duration and service type, and flags the cheapest. Read-only โ quotes only, spends nothing. |
create_shipment | Create a Biteship order. Origin (pickup) + destination (recipient) contact/address + one location id each, items, and courier_company (courier_code) + courier_type (courier_service_code) from check_rates. Returns order_id, status, tracking_id, waybill_id, price (IDR). delivery_type defaults to now. A biteship_live_ key debits your Biteship balance. |
query_tracking | Track by tracking_id (preferred), order_id, or waybill_id + courier_code. Returns status from the Biteship set โ confirmed / allocated / picking_up / picked / dropping_off / delivered / on_hold / returned / cancelled โ plus a plain-English hint; non-terminal statuses carry next_steps. Raw response always included. |
cancel_shipment | Cancel a Biteship order by its order_id (+ cancellation_reason). Only works before pickup. |
Owner policy guardrails ride optional headers (x-agentpay-max-amount, x-agentpay-approval-above, x-agentpay-allowed-tools) โ set by the human owner in client config; the agent cannot relax them. The order value (IDR) is gated before the order is created: approval-above returns an unsigned draft with no order created.
Units
Weight in grams (g), parcel dimensions in centimetres (cm), money in IDR.
Develop
node test/serve.js # local server on :3251 (/mcp)
node test/e2e.js # protocol + validation + policy/biteship units + fake-key live probe to api.biteship.com (expects native Biteship auth error)
How it talks to Biteship
Every tool call is a single server-to-server request with Authorization: <your key> (no login step โ Biteship is single-key). check_rates is POST /v1/rates/couriers. create_shipment is POST /v1/orders. query_tracking is GET /v1/trackings/{tracking_id} (or GET /v1/orders/{order_id}, or public GET /v1/trackings/{waybill_id}/couriers/{courier_code}). cancel_shipment is POST /v1/orders/{order_id}/cancel. Base URL https://api.biteship.com/v1.
Safety
Pure stateless translation layer. Orders, labels and tracking are held by Biteship and the couriers; the API key travels per-request in a header, is forwarded as the Authorization header, and nothing is stored. Parcels flow sender โ courier โ recipient directly. Privacy policy.
Sister servers
India labels (Delhivery/Bluedart/Ekart) via Shiprocket live in india-logistics-mcp; USA labels (USPS/UPS/FedEx) via EasyPost in usa-logistics-mcp; Taiwan CVS pickup + home delivery in taiwan-logistics-mcp. One family of stateless BYO local-commerce MCP servers: local payments in 81 countries at mcp.wishpool.app, plus electronic-invoice servers across nine countries including India GST, Mexico CFDI, Brazil NF-e, Chile DTE and Peru CPE.
MIT licensed.