Connect your AI:https://purser-try.max-31b.workers.dev/mcp, 14 read tools, demo token purser-demo-read-only. Claude, Cursor, VS Code or Gemini CLI reads your books over MCP and can propose a payment; only the CFO's Face ID approves one. Try as guest in Purser Cloud opens the same read-only demo company.
Open Purser Cloud and choose Try as guest. No passkey, no e-mail.
claude.ai or Claude Desktop: Settings, Connectors, Add custom connector. Paste https://purser-try.max-31b.workers.dev/mcp. On Purser's sign-in page choose Use the demo company.
Claude Code: claude mcp add --transport http purser https://purser-try.max-31b.workers.dev/mcp --header "Authorization: Bearer purser-demo-read-only"
Then ask "what's waiting for the CFO?". The demo token reads and proposes nothing.
Connections: read or export only
Live: the MCP server, the read API and its OpenAPI (/v1/openapi.read.json), signed webhooks for payment.paid, approval.needed and books.closed.
Format exports, not live integrations: Xero, QuickBooks Online and Exact Online CSV, Slack and Teams messages, an ISO payment message.
From the runner: Moneybird's API (run once in a sandbox) and Exact Online's API (built, not tested live). Every connection, labelled ↗
Outside-agent card API (local)
An outside agent works under the CFO's policy through these tools. No tool approves, sets a limit or touches another agent's card.
request_company_card Ask for a company card
company_card My company card
pay_with_card Pay a merchant with the company card
request_limit_raise Ask for a higher card limit
ask_for_task_card Ask Purser for a card for one task
Run it: npm run -s mcp
It reads KIT11_AGENT, KIT11_AGENT_KEY, KIT11_DB, AIRWALLEX_CLIENT_ID, AIRWALLEX_API_KEY.
request_company_card: Ask Northwind's CFO for a virtual company card (Airwallex, EUR) with the limits you need. Nothing is issued until the CFO approves with Face ID; call company_card to see the outcome.
company_card: Your card request's state, and once issued: the card's last four digits, limits, this month's spend, whether it is frozen, and recent charges.
pay_with_card: Charge your company card. Airwallex approves or declines it against the card's limits (over the limit, or frozen by the CFO's emergency stop: declined). In this sandbox the merchant's charge is Airwallex's simulation.
request_limit_raise: Ask the CFO to raise your card's limit per purchase, per month, or both. Nothing changes until the CFO approves with Face ID.
ask_for_task_card: Ask, in plain words, for a single-use card for one flight, hotel or train, with the most it may cost (for example: 'a train ticket to Antwerp on 12 November, at most €40'). It becomes a proposal the CFO approves with Face ID; you never get a card at once.
What each variable is
KIT11_AGENT: the name of the outside agent this server serves
KIT11_AGENT_KEY: the agent's key, once one was issued; a rotated or missing key is refused
KIT11_DB: the runner's ledger file
AIRWALLEX_CLIENT_ID: the Airwallex sandbox keys' client id
AIRWALLEX_API_KEY: the Airwallex sandbox key; without the two, no card can be charged
Purser Cloud REST APITest preview
One JSON API for invoices, suppliers, payments and the ledger. Its OpenAPI document, /v1/openapi.json, is built from the route table. It runs publicly as a test preview: test companies, test money on a simulated bank.