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.
Cards at a checkout
Section titled “Cards at a checkout”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.
Scope it with a restricted key
Section titled “Scope it with a restricted key”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.
Connect a client
Section titled “Connect a client”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:
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.