MCP servers for AgentLedger — user agent and supervisor agent payment authorization and budget management
AgentLedger MCP has well-structured tool definitions with clear descriptions and proper Zod schemas. All 11 tools have descriptions (avg ~150 chars) and typed parameters. However, output schemas are not documented, responses are returned as JSON text without formal schema declarations. Error handling is basic (try/catch with error text). Parameter descriptions are good but lack explicit constraints (e.g., amount must be positive, no format specs for card fields). Tool naming is clear and verb-driven. Missing: pagination guidance, idempotency hints, and recovery instructions in error messages.
Approve a pending payment request. Once approved, the transaction transitions to 'spent' and the reserved budget is consumed. Card details are NOT returned in this response — the user agent retrieves them by polling get_status with a matching agent_id. Only call this after reviewing the transaction via list_pending_transactions.
Check the available budget for a specific agent. Use this before requesting a payment to ensure funds are available.
Restore previously consumed budget for an agent. Use this after a payment bounces, a refund is received, or a transaction needs to be reversed. A reason is mandatory for audit trail purposes.
Deny a pending payment request. The reserved budget is fully refunded to the agent. The requesting agent will receive a 'denied' status when it next polls for its transaction status.
Check the current status of a transaction. Returns status ('pending', 'spent', or 'denied'), amount, merchant, purpose, and expiry time for pending transactions. Card details are included only when the status is 'spent' and agent_id matches the transaction's owning agent. Use this to poll for approval results and retrieve card details after a request_payment call in manual approval mode.
Output schemas not documented. Tools return JSON text without formal response schema declarations. LLMs cannot plan downstream calls or extract structured fields reliably.
Error handling returns raw error text without recovery guidance. Errors like 'Error: ...' do not tell the LLM what to do next or whether to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Retrieve the transaction history for a specific agent. Returns all recorded transactions including their status, amounts, merchants, purposes, and timestamps.
Retrieve the transaction history for a specific agent. Returns all recorded transactions including their status, amounts, merchants, purposes, and timestamps.
List all payment requests currently awaiting supervisor approval. Returns transaction IDs, amounts, merchants, purposes, and expiry times. Use this to discover what needs to be approved or denied.
Request payment authorization for a specific merchant and amount. In auto mode, if the request is under the agent's budget, funds are consumed and credit card details are returned immediately. In manual mode, the transaction enters 'pending' state and the agent must poll get_status to retrieve card details after supervisor approval. There is no confirmation step — authorize is final.
Create or update the spending budget for a user agent. Period can be 'cumulative' (never resets) or 'monthly' (resets on the 1st of each month). Defaults to 'cumulative'.
Replace the vaulted payment card with new credentials. REQUIRES SUPERVISOR TIER 3. This is a high-privilege operation: after this call, all future approved transactions will use the new card. Only available when the human operator explicitly enabled Tier 3 during 'agentledger init'. Use with extreme caution.
update_vault accepts sensitive card details (card_number, cvv, expiry_date) as parameters. These should never be exposed in tool parameters, use server-side secret injection or a secure vault API instead.
Duplicate tool: get_transactions appears in both supervisor-server.ts and user-server.ts with identical names and descriptions. LLMs will conflate them. Rename one (e.g., get_my_transactions) or merge into a single tool with role-based access.
No pagination support documented. list_pending_transactions and get_transactions may return unbounded results. Add limit/offset parameters and document max result size.