For agents

Give your agent a mandate, over MCP

The Bridle MCP server lets an agent read its limits, check a payment before sending it, and propose it. The contract decides. Its restricted function-call key can submit proposals to Bridle, but cannot transfer funds.

Read it as markdown

What the prompt says

This is exactly what the button copies. Paste it into your agent, then set up the server below.

Agent prompt
You can spend money through Bridle, which limits what you are allowed to pay. Your owner signed a mandate (caps, approved recipients, a review window). A contract checks every payment you propose.

1. Read https://bridle-agent.vercel.app/agents.md and follow it. Set up the Bridle MCP server from that page if your client supports MCP. Otherwise call propose_payment on the contract as it describes.
2. Before any payment, call check_payment. Only then call propose_payment.
3. If a payment is blocked, do not retry it with a different amount or address. Tell me which rule stopped it.
4. If a payment is held for review, wait. Do not resend it.
5. Report a cleared payment as "cleared", not "paid". Bridle is on testnet.
6. I will put the agent key in the MCP config myself. Never ask me to paste a key into this chat, and never ask for my owner account.

Ask me for the mandate id if you do not have it.

Set it up

The server is the npm package bridle-mcp. It runs locally over stdio and needs Node 22.22.2 or newer. There is nothing to install or build: your client runs it with npx.

Claude Desktop, Cursor, most MCP clients
{
  "mcpServers": {
    "bridle": {
      "command": "npx",
      "args": ["-y", "bridle-mcp"],
      "env": {
        "BRIDLE_CONTRACT": "bridle.testnet",
        "BRIDLE_AGENT_ACCOUNT": "your-agent.testnet",
        "BRIDLE_AGENT_KEY": "ed25519:..."
      }
    }
  }
}
Or: Claude Code
claude mcp add bridle \
  -e BRIDLE_CONTRACT=bridle.testnet \
  -e BRIDLE_AGENT_ACCOUNT=your-agent.testnet \
  -e BRIDLE_AGENT_KEY=ed25519:... \
  -- npx -y bridle-mcp

Without the agent account and key the server is read-only: everything but propose_payment still works. To run from source instead, see the repo.

VariableNeededMeaning
BRIDLE_CONTRACTYesThe NEAR account the contract is deployed to, e.g. bridle.testnet.
BRIDLE_AGENT_ACCOUNTTo proposeThe agent's NEAR account.
BRIDLE_AGENT_KEYTo proposeed25519 secret key for that account. Read only when a payment is proposed.
BRIDLE_RPCNoDefaults to https://test.rpc.fastnear.com.

Six tools

  • list_mandatesFind the mandates that name you as the agent.
  • get_mandateCaps, what is left today, review threshold, approved recipients.
  • check_paymentDry run: allowed, held for review, or blocked, and which rule decides. Sends nothing.
  • propose_paymentPropose a payment. The contract decides. Needs the agent key.
  • get_proposalWhere one proposal stands, and why.
  • list_proposalsRecent proposals for a mandate.

Amounts are decimal USDC (18.50). The server converts to the contract's smallest unit.

What an agent cannot do

There are no tools to create, loosen, revoke or veto a mandate, flag a payment, or withdraw a bond. Those are owner actions, and a test fails if one is ever added. An agent cannot widen its own limits, add a recipient, or send to anyone off the approved list.

The agent key

propose_payment is a NEAR transaction signed by the agent account. Use a function-call access key limited to propose_payment on the Bridle contract: it identifies the agent and cannot move funds. Put it in the MCP config yourself, not in a chat.

Where this stands

Bridle runs on NEAR testnet. The server is tested against a mock chain and has not yet been run with a real agent key against the live contract. A cleared payment is reported as "cleared", not "paid": Base signing is built and Solana is planned.

For machines and for reading