MCP tool reference

The SorenPay MCP server has five tools. All of them are read-only. This page matches what the server lists in its tools/list response.

What every tool returns

A successful tools/call returns a result with two content blocks:

  1. { "type": "text", "text": "…" }: a short human-readable summary.
  2. { "type": "json", "data": … }: the full data the summary came from.

Inputs are checked before the tool runs. Unknown fields, wrong types or out-of-range numbers return invalid_arguments (code -32602) with the list of problems in error.data.issues. A key without the tool's scope gets missing_scope:<scope> (code -32001).

Known limitation

The second block uses type: "json", which isn't one of the content types in the MCP spec. Most assistants read the text summary; clients that strictly validate tool results may report an error instead. Moving the data to a spec-standard block is planned.

get_treasury

read:treasury

How much the workspace can spend right now, plus money on its way in, money on hold, and card spend this month. Use it for "how much do we have?".

Inputs: none. Pass {}.

Output

  • Text: spendable USD balance (with the time it was last confirmed), incoming, held, the stablecoin ledger balance (marked unverified and not spendable), and month-to-date card spend.
  • JSON data.snapshot: fiatUsdCents (spendable), stablecoinUsdCents, totalUsdCents (equals the spendable USD figure; stablecoins are never added in), monthSpendUsdCents. All amounts are US cents.
  • JSON data.balances: one entry for the USD account and one for the stablecoin ledger, each with available (cents, asOf, and clamped when an open reconciliation check is limiting the figure), incoming and held.
Calljson
{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "get_treasury", "arguments": {} }
}
Result (data shortened)json
{
"jsonrpc": "2.0", "id": 1,
"result": {
  "content": [
    { "type": "text", "text": "Treasury for ws_…\n  … available (spendable): $12,480.50 …" },
    { "type": "json", "data": {
        "snapshot": {
          "fiatUsdCents": 1248050,
          "stablecoinUsdCents": 0,
          "totalUsdCents": 1248050,
          "monthSpendUsdCents": 231400
        },
        "balances": [ … ]
    } }
  ]
}
}

get_recent_activity

read:treasury

The latest money movements on the workspace's accounts: card settlements, deposits, fees, withdrawals and USDC conversions. Use it to reconcile or to answer "what did we spend on?".

Inputs

FieldTypeRequiredNotes
limitintegerno1 to 200. Default 25.

Output: text Last N ledger entries. and a JSON array, newest first. Each entry has id, source (which account), direction (credit or debit), amountCents, reference, cardId (when a card was involved), postedAt, createdAt, plus state and kind of the transfer it belongs to.

Calljson
{
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": { "name": "get_recent_activity", "arguments": { "limit": 10 } }
}

list_cards

read:cards

The workspace's virtual and physical cards, newest first. Use it for "which cards are frozen?" or "what's the limit on the travel card?".

Inputs

FieldTypeRequiredNotes
statestringnoactive, frozen, shipping or terminated
limitintegerno1 to 100. Default 25.

limit is applied first, then state: you get the matching cards among the newest limit cards.

Output: text Found N cards. and a JSON array of cards with id, type (virtual or physical), holderKind (agent or human), holderLabel, last4, state, mode, perTxnLimitCents, monthlyLimitCents, allowedMccs, allowedMerchants and createdAt. Full card numbers are never included.

Calljson
{
"jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": { "name": "list_cards", "arguments": { "state": "frozen" } }
}

list_agents

read:agents

The agents registered in the workspace. Use it for "which agents can spend for us?".

Inputs: none. Pass {}.

Output: text N registered agents. and a JSON array, newest first, with id, agentName, status (active, frozen or terminated), protocols (TAP, MPP, ACP), keyFingerprint (the agent's public key ID; private keys are never stored) and createdAt.

Result (data)json
[
{
  "id": "agt_…",
  "agentName": "travel-booker",
  "status": "active",
  "protocols": ["TAP", "MPP", "ACP"],
  "keyFingerprint": "9f2c41…",
  "createdAt": "2026-09-30T14:02:11.000Z"
}
]

list_checkout_sessions

read:checkout

Checkout sessions, newest first. Use it for "which customer payments are still open?".

Inputs

FieldTypeRequiredNotes
statusstringnopending, awaiting_payment, confirming, completed, expired, underpaid or failed
limitintegerno1 to 100. Default 25.

As with list_cards, limit is applied before the status filter.

Output: text Found N checkout sessions. and a JSON array of sessions with id, merchantReference, amountUsdCents, status, expiresAt, description, the accepted and selected assets, and payment confirmation details once paid.

Calljson
{
"jsonrpc": "2.0", "id": 5, "method": "tools/call",
"params": { "name": "list_checkout_sessions", "arguments": { "status": "awaiting_payment", "limit": 10 } }
}

Planned

These don't exist yet. They'll ask you to confirm before they run.

ToolWould needWhat it would do
mint_cardwrite:cardsIssue a card with limits
submit_intentwrite:agentsSubmit a signed agent payment
create_checkout_sessionwrite:checkoutOpen a checkout for a customer
originate_intl_paymentwrite:treasurySend an international payment