Either way there is no credential to paste into the chat. You sign in on Payman’s own pages, your bank credential goes on Payman’s own pages, and nothing that moves money happens without your approval there.
Is this the page you want?
The URL
what’s my balance?Anything that moves money pauses. The exact operation is frozen, a one-time code is emailed to you, and the assistant hands you a link to Payman’s approval page — verbatim, to open yourself. Approve there. Then say so, or ask
payman_approval_status; the platform finishes the frozen operation, never a reconstructed one.
A hosted connection serves three tools: the money task, the approval check, and the connection status. Connecting and disconnecting live in your host’s own connector settings — reconnecting is re-consenting, and revoking the connection from your Payman account works from either side.
The command
Claude Desktop — Settings → Developer → Edit Config, then quit and reopen it (config is not reloaded live):"--live" to args for real institutions. Node 22.5 or newer.
Claude Code — the same block in .mcp.json at your project root. Approve it when the session asks.
If the host cannot find the server, give
command an absolute path to npx (which npx). A GUI-launched host does not inherit your shell PATH, and a version manager’s shim is the first thing missing when it does not.Why it needs no key
An app key is a secret, and a secret shipped to consumers is not one: it would be a single shared credential for every install, readable by anyone who looks. So both ways in authenticate as public clients — OAuth 2.1 with PKCE. A fresh randomcode_verifier is minted per authorization and never leaves the client; whoever intercepts the authorization code cannot redeem it without the verifier. Same mechanism as a mobile banking app, for the same reason. The local server ships a published client_id; a hosted chat registers its own on first contact (RFC 7591, /oauth/register) — that registration is a name and a callback URL, never a capability, and every connection it will ever hold still passes the consent page you decide on.
Building a product for your customers? Keep your app key and use the SDK — a server can hold a secret, and a secret is a stronger credential than a public client. Public clients exist for software in other people’s hands.
The tools
A few tools around one action, not forty. What your account can do differs by provider, and a hand-written
list_accounts / pay_invoice surface would be a second, worse copy of it. Ask in plain language and let your own Payman Wallet say what it can do.
Whose name the consent page shows
The host’s — “Claude wants to act on your behalf”, not a generic Payman label. The two ways in earn the name differently: a hosted chat registers under the name it gives; a local install maps the name the host reports atinitialize onto a per-host registered client.
Four local hosts are recognised, matched on a normalised substring so versions, platforms and rebrands still match:
Anything else, including a call that arrives before
initialize, gets the generic client, whose registered name is “An AI assistant”.
That has a second effect worth knowing: Claude and ChatGPT are different clients, so connecting one no longer disconnects the other. Two installs of the same host still replace each other — one live connection per host, per account, per provider.
Where links go
A tool result is model context, and a model that has seen one consent link will reconstruct a plausible-looking one when it next needs one. So links stay out of results wherever the host offers anywhere else to put them:
On the last rung, open the link yourself and never accept a retyped one. Whatever the rung, the wait can run out before you finish — the connection or approval still lands; say so and ask again.
Local configuration
Nothing is required. These apply to@paymanai/connect-mcp only — a hosted connector has no flags, which is the point of it.
--app-key switches to the confidential path if you would rather run your own registered Connect app; it is mutually exclusive with the public client, because a client that has a secret must use it. The local connection store is encrypted under a random per-installation secret generated on first run — never the client_id, which is published and identical for every install.
What it will not do
- Run a payment twice. One request runs the action at most once against a live connection, and a replay into an approved ticket completes that ticket rather than paying again.
- Hold your approval code. Approval happens on Payman’s page, in your own session, with a code emailed to you. Nothing here can ask for it or carry it — an assistant that asks for the code is wrong, and Payman will refuse it anyway.
- Tell you a payment landed when Payman cannot confirm it. An unconfirmed outcome is returned unretryable, with instructions not to offer a retry — a retry there risks paying twice.

