Skip to content

MCP server

Tuppence runs a remote MCP server at https://api.tuppence.ai/mcp (streamable HTTP). Authenticate with an API key as a bearer token; the agent then has Tuppence’s tools, acting as your account.

Tool Does
create_payment_link, get_payment_link, list_payment_links, update_payment_link, expire_payment_link Payment links
create_payment, get_payment, list_payments Payments — create_payment returns an approval_url for a person to pay
charge_saved_card An off-session charge under a customer’s mandate
create_refund Refunds (destructive: marked so for the client)
get_balance The balance and what it is made of
create_customer Customers
record_usage, get_credit_balance, create_credit_topup Prepaid credit and metering
create_agent_card, freeze_card A single-use card for one purchase at one merchant — never its number — and a stop button
request_approval, get_approval Ask a person before buying, then check their answer
get_spendable_balance, list_card_authorizations, list_card_transactions What the cards can spend, what they tried to buy, what they spent
search_docs Searches these docs, section by section

Every tool that moves money requires an idempotency_key: any unique string for that operation, sent again unchanged when the agent retries — so a retry does not pay twice. (It is not derived for the agent: MCP request ids are small per-session numbers, and two unrelated calls would share one.) Tool calls appear in your request logs and audit log as made by an agent.

search_docs needs no scope: any key can search these docs — which is how an agent learns to integrate Tuppence while it does.

An agent’s card works wherever the merchant charges it without asking the cardholder — API and SaaS billing, subscriptions, top-ups — and at most checkouts under £30. When a web checkout asks for a code sent to a phone (3D Secure), that code goes to the person the card is issued to, by text, with a question only they can answer: the agent should stop and ask them, not try to get past it. That is the law on strong customer authentication, not a setting.

Give an agent a restricted key (rk_…, Developers → API keys → Restricted) with only the scopes it needs. It sees only the tools those scopes allow: a key without refunds:write has no create_refund to call. Add an IP allowlist if the agent runs somewhere fixed.

Clients that speak remote MCP: the URL above, with Authorization: Bearer <key>.

For stdio-only clients, @tuppence/mcp is a small local server that forwards to the remote one:

Terminal window
claude mcp add tuppence --env TUPPENCE_API_KEY=rk_test_… -- npx -y @tuppence/mcp
{
"mcpServers": {
"tuppence": {
"command": "npx",
"args": ["-y", "@tuppence/mcp"],
"env": { "TUPPENCE_API_KEY": "rk_test_…" }
}
}
}

That second form works for Claude Desktop and Cursor (mcpServers in their config). Prefer the environment variable to --api-key: command lines are visible to other processes.