Docs
MCP server
Gives an AI agent payment tools through the Model Context Protocol. The agent acts through a session key, so its spending limits are enforced on-chain, not by the model.
Set up
Clone the repository and install, then put these in the .env file at the repository root. Keys stay there: no tool takes a key as input.
AGENT_SESSION_KEY= # the agent's key, authorised by the owner with limits
AGENT_OWNER= # the account whose funds it spends
RELAYER_URL= # a Talaria relayer, which pays the gas
PORTALDOT_EVM_RPC=https://test-evm-rpc-v3.portaldot.devAuthorise the session key first, on the Agent page or with addSessionKey in the SDK.
Connect a client
The server runs over stdio. Add it to your MCP client's config, using your own path to the repository:
{
"mcpServers": {
"talaria": {
"command": "pnpm",
"args": ["--silent", "--dir", "/path/to/Talaria", "--filter", "@talaria-pay/mcp", "start"]
}
}
}Keep --silent. Without it, pnpm prints to stdout, which carries the MCP protocol.
Tools
| Tool | What it does | Input | Status |
|---|---|---|---|
create_checkout | Create a tUSD invoice | amount, memo (optional) | Live on Portaldot |
pay_invoice | Pay an invoice. Over-limit payments may queue for the owner's approval | invoiceId | Live on Portaldot |
get_receipts | List receipts where this account paid | None | Live on Portaldot |
get_policy | Show this agent's spending policy | None | Live on Portaldot |
subscribe | Subscribe to a merchant plan | planId | Not on Portaldot yet: returns an error |
start_stream | Start a per-second payment stream | to, ratePerMonth, deposit | Not on Portaldot yet: returns an error |
paid_fetch | Fetch a URL, paying any HTTP 402 with a channel voucher | url, maxPrice, channelDeposit (optional) | Not on Portaldot yet: returns an error |
send_remit | Send tUSD to an address, or create a claim link | to (optional), amount | Not on Portaldot yet: returns an error |
The four tools marked as not on Portaldot use rails that run on Base Sepolia today. The server connects to Portaldot only, so it can't reach them yet.
Limits and safety
A session key has a per-payment limit, a daily limit, an expiry and an allowed list of rails. Payments over the limits wait for the owner rather than going through.
Each write spends the relayer's tPOT, and the relayer has an hourly cap, so tools may fail for a while if it's reached. This is a testnet build with test tokens only.
