Model Context Protocol
Two MCP servers. One reads the docs. One does the work.
Point any MCP client at the hosted docs server for live search and exact endpoint schemas, no API key required. Run flint mcp serve when the agent should create real resources with your credential, behind gates it cannot talk its way around.
claude mcp add --transport http flint-docs \
https://developers.withflintpay.com/mcpThe docs server is public and read-only. It covers documentation only, so there is no account access to configure and nothing to revoke.
4 docs tools, no auth · 186 account tools via the CLI · one credential, held locally
01The read server
Live docs, exact schemas.
An agent that guesses field names from memory ships bugs. These four tools let it work from the current API surface instead.
claude mcp add --transport http flint-docs \
https://developers.withflintpay.com/mcpSearch guides, the API reference, and the blog. Returns matching pages with URLs.
search_docsFetch one docs page as Markdown by its path.
get_pageList public API endpoints with method, path, and summary, optionally filtered by resource.
list_endpointsFull reference for one endpoint: request and response schemas plus code samples.
get_endpointA typical loop is search_docs or list_endpoints to find the right operation, then get_endpoint for its exact request and response schemas before writing the call. The same corpus is also one file at llms-full.txt if you would rather load it up front.
02The write server
Real resources, your credential.
flint mcp serve exposes the CLI's canonical commands as MCP tools over stdio. The agent gets the same surface you get on the terminal, with the same names.
# import a key once, into the OS keychain
flint auth import --stdin < key.txt
# every canonical command becomes a tool
flint mcp serve
# or register it with Claude Code
claude mcp add flint -- flint mcp serveThe credential is resolved the normal CLI way, from the OS keychain or FLINT_API_KEY. The key prefix decides the environment: a sandbox key can only ever act on your sandbox.
{
"jsonrpc": "2.0", "id": 7,
"method": "tools/call",
"params": {
"name": "payment-intents.create",
"arguments": {
"amount": 1999,
"currency": "USD",
"_flint": { "idempotency_key": "agent-run-42" }
}
}
}Tool names are canonical command names, and arguments are the command's own argument names, generated from the same schemas that back the CLI's help and validation. Nothing on this page is a second, marketing-only surface.
Some of the tools
- payment-intents.create
- payment-intents.confirm
- orders.create
- orders.pay
- refunds.create
- checkout-sessions.create
- customers.create
- webhook-events.list
- request-logs.list
- sandboxes.test-key
- timeline
- listen
186 tools today, generated from the CLI's command catalog. New commands become tools when they ship.
03Guardrails
Deny by default, override by name.
An MCP server that can move money has to assume the model calling it will eventually do something wrong. This one is built so the wrong thing returns an error instead of a payment.
"_flint": {
"live": { "type": "boolean" },
"confirm": { "type": "boolean" },
"idempotency_key": { "type": "string" },
"dry_run": { "type": "string", "enum": ["client"] },
"max_events": { "type": "integer" },
"for": { "type": "string" }
}Overrides are per call and explicit. Which keys a tool advertises depends on what it is: idempotency keys and dry runs on mutations, confirmation on sensitive or destructive commands, bounds on streams.
Your secret key cannot pass through the agent. Key import is deliberately not a tool; the credential lives in the keychain or the environment.
flint auth importA live credential does nothing until the agent acknowledges live mode on that specific call.
LIVE_ACKNOWLEDGEMENT_REQUIREDDestructive commands, and sensitive writes in live mode, fail closed until explicitly confirmed. The server never prompts and never assumes.
CONFIRMATION_REQUIREDEvery tool declares whether it reads, mutates, or destroys, so a client can gate on it.
readOnlyHint · destructiveHintStreaming tools require a bound, and Flint caps them at 100 records or two minutes regardless.
_flint.max_events · _flint.for04Beyond MCP
The rest of the agent surface.
MCP is one way in. The same docs and schemas are published in the formats agents already read.
SKILL.md: the whole public API as one dense file, sized for a context window. Paste it into CLAUDE.md, AGENTS.md, or a system prompt.
developers.withflintpay.com/SKILL.mdEvery docs page serves raw Markdown when you append .md to its URL, and the full corpus ships as llms.txt and llms-full.txt.
/llms.txt · /llms-full.txtThe OpenAPI spec is public, no key required, so codegen and validators can work from the same contract the docs do.
api.withflintpay.com/v1/openapi.jsonAgents that drive the CLI directly can pull machine-readable schemas for every command, error, and event instead of scraping help text.
flint schema commands --output jsonThe LLM integration guide covers when to reach for which: one file up front, or live lookups over MCP.
05Start
Give an agent the keys. The test ones.
Connect the docs server
Install the CLI
Import a sandbox key, start flint mcp serve, and ask your agent to create an order, pay it with a test card, and read the timeline of what just happened. The whole loop runs without a browser.
FAQ
Questions worth asking first.
Does Flint have an MCP server?
Two. The docs server at developers.withflintpay.com/mcp is hosted, public, and read-only: any MCP client can search the docs and pull exact endpoint schemas without an API key. The account server is flint mcp serve, part of the Flint CLI: it runs locally over stdio and exposes every canonical CLI command as a tool, so an agent can create and inspect real resources with your credential. Use them together, one to read and one to act.
Do I need a Flint API key?
Not for the docs server, which covers documentation only and never touches an account. The account server needs a credential the normal CLI way: import a key once with flint auth import, which stores it in the OS keychain, or set FLINT_API_KEY. The key's prefix decides the environment, so a flint_test_ key can only ever act on your sandbox.
Which MCP clients work?
Any client that speaks the protocol. Claude Code and Cursor configs are on this page; the docs server is stateless JSON-RPC 2.0 over HTTP POST, so even curl works. The account server is a standard stdio server, the shape every MCP client supports for local tools.
Can an agent move real money?
Only deliberately, twice over. With a live credential, every call fails with LIVE_ACKNOWLEDGEMENT_REQUIRED until the agent explicitly passes the live control on that call. Destructive commands, and sensitive writes in live mode, additionally fail with a confirmation error until explicitly confirmed. The server never prompts and never assumes: a call that would need a human answering yes returns a structured error instead of proceeding.
Why is the account server local instead of hosted?
Credential custody. Your secret key stays in your keychain or your environment, on your machine. It never appears in agent arguments, because key import is deliberately not an MCP tool, and it never transits anyone else's server. The hosted docs server is the mirror image: it can be public precisely because it holds no credentials and touches no accounts.