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.
What the prompt says
This is exactly what the button copies. Paste it into your agent, then set up the server below.
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.
{
"mcpServers": {
"bridle": {
"command": "npx",
"args": ["-y", "bridle-mcp"],
"env": {
"BRIDLE_CONTRACT": "bridle.testnet",
"BRIDLE_AGENT_ACCOUNT": "your-agent.testnet",
"BRIDLE_AGENT_KEY": "ed25519:..."
}
}
}
}claude mcp add bridle \
-e BRIDLE_CONTRACT=bridle.testnet \
-e BRIDLE_AGENT_ACCOUNT=your-agent.testnet \
-e BRIDLE_AGENT_KEY=ed25519:... \
-- npx -y bridle-mcpWithout the agent account and key the server is read-only: everything but propose_payment still works. To run from source instead, see the repo.
| Variable | Needed | Meaning |
|---|---|---|
| BRIDLE_CONTRACT | Yes | The NEAR account the contract is deployed to, e.g. bridle.testnet. |
| BRIDLE_AGENT_ACCOUNT | To propose | The agent's NEAR account. |
| BRIDLE_AGENT_KEY | To propose | ed25519 secret key for that account. Read only when a payment is proposed. |
| BRIDLE_RPC | No | Defaults 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
- /agents.md: setup, tools, amounts and rules on one page
- /bridle-agent-skill.md: how an agent should behave inside a mandate
- /llms.txt: index for agents
- Server source on GitHub
- Docs: the tool schema and rules