@curless/agentbank-mcp
v0.10.0
Published
MCP server for agentbank — let your AI agent discover Curless merchants and pay them.
Downloads
174
Readme
@curless/agentbank-mcp
MCP server for agentbank — Curless's gateway for AI-agent payments. Lets your local AI agent (Claude Desktop, Cursor, etc.) discover Curless merchants and pay them through agent payment protocols.
Install
npx @curless/agentbank-mcpClaude Desktop config
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"agentbank": {
"command": "npx",
"args": ["-y", "@curless/agentbank-mcp"],
"env": {
"AGENTBANK_AGENT_TOKEN": "agt_..."
}
}
}
}No URLs to configure: it talks to two hosted services, and each has its own variable for pointing a local build elsewhere.
| Variable | Default | What lives there |
|---|---|---|
| AGENTBANK_API_URL | https://mcp.curless.ai | the gateway — merchant discovery, checkouts, payment gates |
| AGENTBANK_WALLET_URL | https://wallet.curless.ai | the buyer wallet — every wallet_* tool (/v1/buyer/*) |
They are separate services on separate origins, so moving one does not move the other.
Tools
Merchant discovery
list_merchants— list merchants, optionally by categoryget_merchant— full merchant infoget_merchant_catalog— items + prices for a merchantget_agent_card— A2A / ACP compatible agent cardinvoke_skill— call a skill (search_availability,book_room,order_item, …)
ACP checkout (the buyer's main path — discovers, orders, and pays in one go)
acp_checkout⚠️ — open an ACP checkout session for a merchant + items and complete it with a card token (Stripe Shared Payment Token; sandbox defaultpm_card_visa). Real money on capture.
PaymentIntents (the rail-agnostic money primitive — capture moves real money ⚠️)
create_payment_intent— create a PI; passidempotencyKeyfor safe retriesget_payment_intent/list_payment_intents— status + historycapture_payment_intent⚠️ — charge the rail and book the ledger
Payment Links (shareable, Stripe Payment Links)
create_payment_link— a shareableurlfor a merchant + fixed amountget_payment_link— view a link before payingpay_payment_link⚠️ — pay a shared link (mints a PI)
Wallet & paywalls (this agent's own budget)
get_my_balance— this agent's wallet budget (available / held)top_up— get a hosted top-up link to fund this agent's walletpay_payment_gate⚠️ — pay apayment_requiredgate from a paywalled MCP tool (drives the MPP two-step charge), so the gated tool runs
Buyer wallet (the PERSON's own money — a shopper, not a merchant)
wallet_login— sign in with the buyer's email, for this session. Required before any otherwallet_*tool. Demo sign-in: it does not verify the address, so it works in test mode only — a live deployment refuses it.wallet_me— profile, spend limits, spent-today / spent-this-month, and whether a card is boundwallet_balance— the buyer's own balance per currencywallet_orders— what this buyer has boughtwallet_set_limits— the buyer caps their own spending. A change, not a replacement: send only what changes,nullremoves a limit. It only tightens — lowering or adding a limit applies at once; raising or removing one comes back asneedsConfirmation.url, the wallet's limits page filled in, for the person to check and save. No merchant admin scope involved.wallet_cards— which cards are bound. Anunavailablefield means the list could not be read: that is unknown, not "no cards bound".wallet_bind_card— bind a card so the wallet can pay with it again. Takes a Stripe reference (pm_…/tok_…) only. Never send a card number, expiry or CVC — those are tokenized in the buyer's browser and are refused by the API. Test mode only; use Stripe'spm_card_visa.wallet_unbind_card— forget a bound card (detach, not delete)wallet_pay_credential— turn the bound card into a one-off credential (a Stripe shared payment token) for one merchant, one amount, 15 minutes, then hand it to that merchant's checkout. The buyer's own spend limits are checked here — this is the only place they bind, and a refusal is their own limit, not a payment failure.
These use a session obtained at runtime, not AGENTBANK_AGENT_TOKEN. The
agent token is configuration set by whoever installed the connector; the wallet
session is the person signing in, and it expires. When it does, the tools say
so — "your session expired" is never rendered as an empty balance or an empty
order list.
What you can actually do is gated by the scope of the AGENTBANK_AGENT_TOKEN
you set — give it agent:execute for buyer flows.
Local dev
export AGENTBANK_API_URL=http://localhost:3000
# only if you also run curless-buyer-wallet locally; otherwise the wallet_*
# tools keep using https://wallet.curless.ai
export AGENTBANK_WALLET_URL=http://localhost:8095
pnpm dev