Model Context Protocol
Six tools. None of them can move money.
The Paygente MCP server lets an agent look up its context and propose a payment. Everything that authorises, executes or withdraws authority is reserved for people and is not reachable from this surface.
Available tools
list_agents
agent:readRead onlyThe agents registered in the organization, with their status and assigned policy.
Returns Agent name, external identifier, status, and whether a policy is attached.
list_approved_recipients
recipient:readRead onlyRecipients that are verified, active and available to be paid. Recipients an agent cannot use are not returned at all.
Returns Display name, identifier, supported assets, risk classification.
observe_spend_request
spend_intent:submitRead onlyAsks what the policy WOULD decide about a purchase. Nothing is paid, ordered or reserved, and no one is asked to approve anything — the answer and the reasons behind it are recorded so a person can review them.
Returns The outcome the policy would have reached, every reason behind it, and a link to the recorded decision. Never a mandate: there is no path from this tool to an executed payment.
propose_payment
mandate:createChanges stateCreates a mandate and evaluates it against the agent’s policy. This is the only tool that changes anything, and it never moves value.
Returns Mandate id, policy outcome, whether human approval is required, a plain-language explanation, and a link to the mandate in the sandbox.
get_mandate
mandate:readRead onlyThe current state of one mandate, including the decision and the reasons behind it.
Returns Status, amount, recipient, policy decision, approval state, execution state.
list_pending_approvals
mandate:readRead onlyMandates waiting for a person. Useful for an agent that needs to report why it is blocked.
Returns Mandate id, amount, recipient, how long it has been waiting.
Authorization boundary
An agent’s authority does not depend on who deployed it.
An agent acting through MCP receives a fixed permission set. It does not inherit the role of the person who registered it, so an agent deployed by an Owner has exactly the same authority as one deployed by an Operator — and neither can approve a payment.
An agent may
- Read the agents in its organization
- Read recipients it is permitted to pay
- Propose a payment for itself
- Read a mandate and its decision
- See what is waiting for a person
An agent may never
- Approve a mandate
- Reject a mandate
- Revoke a mandate
- Execute a payment
- Create or change a policy
- Change a recipient’s verification status or risk level
- Use the execution kill switch
- Read another organization’s data
This is not a matter of which tools the server chooses to expose. The agent permission set does not contain those permissions, and every operation in the platform checks it — through MCP, through the REST API and through the web application alike. A prompt injection that persuades an agent to try cannot succeed, because persuasion is not the mechanism by which authority is granted here.
Connecting
The server speaks MCP over stdio. Point your client at it and pass the agent it is acting as.
{
"mcpServers": {
"paygente": {
"command": "node",
"args": ["apps/mcp-server/dist/main.js"],
"env": {
"DATABASE_URL": "postgresql://…",
"PAYGENTE_ENV": "local",
"PAYGENTE_AGENT_EXTERNAL_ID": "research-agent",
"PAYGENTE_ORGANIZATION_SLUG": "northstar-ai-labs"
}
}
}
}Mandate mnd_01JQ8F7Z9K3M4N5P6Q7R8S9T0V
Status: WAITING FOR APPROVAL
Approval required: yes
Why:
€75.00 EURC is at or above the €40.00 EURC
threshold, so a person has to approve it.
A person must approve this payment before it can
be executed. Nothing has been paid, and you cannot
approve it yourself.
https://paygente.com/app/mandates/mnd_01JQ…Every MCP input is validated by the same schemas the REST API uses, and every proposal is decided by the same policy engine. There is no softer path into the system for an agent than for a person.