MCP SERVER
Your agent speaks APPEN natively.
APPEN ships a stdio MCP server, so Claude (Desktop, Code) and any MCP-capable agent can declare purchases, manage envelopes, and place holds as first-class tools, with no HTTP plumbing in your prompt. The security model is the point: the server process holds the agent key; the model sees only decisions. No key, no card number, and no approval power ever enter the context window.
Hook it up
{
"mcpServers": {
"appen": {
"command": "python",
"args": ["-m", "services.mcp_server"],
"env": {
"APPEN_API_BASE": "<your API base>",
"APPEN_AGENT_KEY": "ak_live_..."
}
}
}
}The tools your agent gets
declare_intent # ask to buy: merchant, category, amount → decision + per-rule trace
confirm_intent # close the loop with the actual total
list_intents # read its own decision history (including declines + reasons)
set_envelope # propose a category budget (subject to its key's tool scope)
list_envelopes
list_attached_cards # handles + last-four only — never a number
create_hold / capture_hold / release_hold / list_holds # the auth-hold patternNote what's absent: no approve tool, no key-minting tool, no card-number tool. The human gates stay human: a parked purchase waits for you in the dashboard, the TUI, or one API call, no matter what the model asks for.
Why the decline trace matters for agents
A denied intent returns the exact rules that fired. The trace doubles as feedback the agent can use: "$412 exceeds the $30 ceiling" teaches it to re-plan inside the budget instead of hammering retries into a black box.
WHERE THIS RUNS TODAY
The rule engine decides every declared intent today — live in the API, the MCP server, and the demo. Enforcement on real card swipes begins at our BIN connection with our issuing partner, when the same pre-authorized, user-directed policies execute inside the network authorization step. Card issuance opens by invite once our issuing-partner sandbox is live.