Skip to main content
Glama
README.md
# Japan Logistics MCP 🇯🇵 — How can my AI agent ship a parcel in Japan (Yamato / Sagawa / Japan Post via Ship&co)?

<!-- install-cta -->
## Use it in 60 seconds

Paste this into your MCP client config (Claude Desktop, Cursor, Windsurf, or any MCP-capable agent):

```json
{
  "mcpServers": {
    "japan-logistics": {
      "type": "http",
      "url": "https://logi-jp.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](https://mcp.wishpool.app/trust).

### 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:

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/junter1989k-ai/japan-logistics-mcp)

```bash
git clone https://github.com/junter1989k-ai/japan-logistics-mcp && cd japan-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 **in Japan** — over **Yamato (ヤマト運輸)**, **Sagawa (佐川急便)**, **Japan Post (日本郵便)** and **Seino (西濃運輸)**, plus international DHL / UPS / FedEx — through the [Ship&co](https://www.shipandco.com/) shipping API. Estimate carrier rates, **create a shipment and its label in one call**, track parcels and void labels. Stateless, bring-your-own Ship&co API token, never stores anything.

**Live endpoint:** `https://logi-jp.wishpool.app/mcp` · Registry: `app.wishpool/japan-logistics-mcp`

## Quick start

```json
{
  "mcpServers": {
    "japan-logistics": {
      "type": "http",
      "url": "https://logi-jp.wishpool.app/mcp",
      "headers": {
        "x-shipandco-token": "your_shipandco_api_token"
      }
    }
  }
}
```

**No shared demo — use your own Ship&co account.** Get an **API token** self-serve in the Ship&co Dashboard (*API menu → Create New Token*) and send it in the header above. The server is stateless: on every call it forwards the token to `api.shipandco.com` as the `x-access-token` header and stores nothing.

## No carrier contract needed for test mode

`create_shipment` defaults to `test:true`, which prints a **free, non-billable virtual label** end-to-end. **Yamato and Sagawa need no extra carrier account for test mode** — an agent can validate the whole flow with no carrier contract. Set `test:false` to buy a real billable label.

## Tools

| Tool | What it does |
|---|---|
| `get_rates` | Estimate rates before creating a label (read-only, spends nothing). `from_address`, `to_address`, `weight` (grams) and `products` → available carrier services with `amount` (JPY), cheapest flagged. `/rates` quotes carriers registered in your Ship&co account. |
| `create_shipment` | Create a shipment **and** issue the label in one call. `carrier` (`yamato`/`sagawa`/`japanpost`/`seino`/`dhl`/`ups`/`fedex`) + `from_address` + `to_address` + `weight` + `products`. Returns `shipment_id`, `carrier`, `tracking_number(s)`, `label_url` (PDF). `test` defaults **true** (free); `test:false` buys a real label. |
| `query_tracking` | Track by `carrier` + `tracking_number`. Status enum (Ship&co): `collected` / `transit` / `out_for_delivery` / `delivered` / `exception` / `returned`, each with a plain-English hint; non-terminal statuses carry `next_steps`. Raw current status + history always included. |
| `void_label` | Void/cancel a shipment + label by `shipment_id`. TEST labels always; real labels only 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 **declared goods value (JPY) is gated before the label is created**: `approval-above` returns an unsigned draft with no label created.

## Units & addresses

Weight in **grams (g)**, parcel dimensions in **centimetres (cm)**, money in **JPY**. Japanese addresses use a 7-digit postal code (**郵便番号**), prefecture (**都道府県**) and city/ward (**市区町村**).

## Develop

```bash
node test/serve.js   # local server on :3252 (/mcp)
node test/e2e.js     # protocol + schema + validation + policy/shipandco units + CORS + fake-token live probe to api.shipandco.com (expects native Ship&co 403 auth error)
```

## How it talks to Ship&co

Base URL `https://api.shipandco.com/v1`, auth header `x-access-token`. `create_shipment` is `POST /shipments` (creates the shipment **and** the label in one call → `delivery.label` PDF + `delivery.tracking_numbers`). `get_rates` is `POST /rates`. `query_tracking` is `GET /tracking/{carrier}/{tracking_number}`. `void_label` is `DELETE /shipments/{id}`. Test labels are requested with `setup.test:true`.

## Safety

Pure stateless translation layer. Shipments, labels and tracking are held by Ship&co and the carriers; the API token travels per-request in a header, is forwarded as the `x-access-token` header, and nothing is stored. Parcels flow sender ↔ carrier ↔ recipient directly. [Privacy policy](https://logi-jp.wishpool.app/privacy).

## Sister servers

USA labels (USPS/UPS/FedEx) via EasyPost in [usa-logistics-mcp](https://logi-us.wishpool.app); Indonesia (JNE/J&T/SiCepat) via Biteship in [indonesia-logistics-mcp](https://logi-id.wishpool.app); Taiwan CVS pickup + home delivery in [taiwan-logistics-mcp](https://logi-tw.wishpool.app). One family of stateless BYO local-commerce MCP servers: local payments in 81 countries at [mcp.wishpool.app](https://mcp.wishpool.app) and electronic invoicing at [inv.wishpool.app](https://inv.wishpool.app).

MIT licensed.