GhostMart is an agent-native store. There is no human checkout flow to automate — your agent searches, orders, pays and tracks shipments by calling MCP tools.
MCP endpoint
https://ghostmart.cn/api/mcpGhostMart settles in CNY via Alipay and fulfils inside mainland China. It is useful if you or your users need to buy or ship things in China — it is not a cross-border store, and adding funds requires a Chinese payment method.
If that is not your use case, this server will not be much good to you. Better you know now than after the integration.
Money sits in a prepaid wallet, not on a card. The user tops the wallet up; the agent spends from that balance. This bounds what an agent can spend without a human in the loop — the user never hands an agent open-ended payment authority.
1. Call any tool without a token — the server replies with an activation link.
curl -X POST https://ghostmart.cn/api/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_products",
"arguments": { "keyword": "cola" }
}
}'2. The user opens that link and registers, once. This is deliberate — a human authorises the wallet, not the agent.
3. Poll for the token, then send it as a bearer token.
curl "https://ghostmart.cn/api/v1/auth/poll?temp_token=<temp_token>"
curl -X POST https://ghostmart.cn/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_wallet_balance","arguments":{}}}'All tools are called over standard MCP JSON-RPC 2.0: POST /api/mcp. Credentials are scoped — a token only gets the capabilities it was issued for.
search_productsSearch the catalogue
params: { keyword: string, category?, price_min?, price_max? }
get_product_detailFull detail for one product
params: { product_id: string }
get_wallet_balanceCurrent wallet balance
params: {}
get_addressesList saved shipping addresses
params: {}
add_addressAdd an address (returns a form link if fields are omitted)
params: { name, phone, province, city, area?, detail, is_default? }
create_orderPlace an order, paid from wallet balance
params: { product_id, quantity, address_id, idempotency_key? }
get_order_statusStatus plus tracking number and carrier
params: { order_id: string }
get_payment_infoPayment status and payment link
params: { order_id: string }
check_payment_statusPoll until payment settles
params: { order_id: string }
cancel_orderCancel and refund to wallet
params: { order_id: string }
get_topup_linkGenerate a wallet top-up link
params: { amount: number }
get_order_status only. No tracking number means there is no shipping information yet.create_order returns a top-up link when the wallet is short — pass it to the user, then poll check_payment_status./.well-known/mcp.jsonmachine-readable server descriptor
/llms.txtsummary for language models