Scoped, supervised, revocable authority for agents acting on a payment operations desk. Built on WebMCP.
Mandate demonstrates solid tool design with clear naming conventions (verb_noun pattern), comprehensive descriptions (avg 180 chars), and well-structured schemas. All 16 tools have explicit input schemas with typed parameters and descriptions. Tool composition is thoughtful, read-only tools (get_desk_status, search_payments) enable discovery before write operations. Error handling via refuse() pattern provides remedies. However, output schemas are not formally documented (no explicit return type declarations), and some parameter descriptions lack format constraints (e.g., rail enum values not listed in descriptions, ISO timestamp format for expiresAt not specified). Security model is strong with permission gates and audit trails, but parameter validation rules could be more explicit in descriptions.
Add a new beneficiary to the register. Provide name, country, IBAN, and category. New beneficiaries start unverified and must be verified before payments can be released to them.
Change details of a draft payment before it is released. You can amend the beneficiary, amount, rail, or reference.
Prepare a new payment for the queue. Provide the beneficiary, amount, currency, rail, and reference. The payment starts in draft status and can be amended before release.
Read the controls that are blocking a payment, and what would need to change for it to move. Explains the reasoning behind each block in plain language.
Read-only report of the limits you are already operating under on this desk, and why they apply. Use it to understand a refusal you have received. It reports only and changes nothing.
Orientation for the whole desk: who is on it, what authority you currently hold as an agent, how the payment queue breaks down, which payments are blocked and why, account balances, and how long until each payment rail closes for the day. Call this first.
Output schemas not formally documented. Tools return structured responses (via ok() helper) but no explicit return type schemas are declared in tool definitions. LLMs cannot plan downstream calls without knowing response structure.
Enum constraints not listed in parameter descriptions. draft_payment accepts 'rail' (sepa_ct, sepa_inst, swift, chaps, fps, ach) and 'ccy' (EUR, GBP, USD, etc.) but descriptions do not enumerate valid values. LLMs may hallucinate invalid rail/currency codes.
ISO timestamp format not specified. propose_mandate expiresAt parameter lacks format guidance ('ISO 8601 string, e.g. 2025-12-31T23:59:59Z'). LLMs frequently miscalculate or misformat timestamps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Ask a person at the desk to grant you scoped, time-boxed authority to release payments. Specify the per-payment ceiling, total budget, which rails, whether to restrict to verified beneficiaries, and when the mandate should expire. The person can edit any of these before granting.
Read the audit trail of all actions taken on this desk: payments released, mandates granted and revoked, amendments, and approvals. Shows who did what and when, in plain language.
Re-run sanctions and politically-exposed-person screening for one counterparty by name, against the Sentinel bureau watchlist, and return the current decision with the reason behind it. Use this when a payment is held on a screening match and you need to know whether the match still stands.
Release a single payment for settlement. Requires approval authority or a valid mandate. The payment moves to released status and settles according to its rail.
Release multiple payments at once under a standing mandate. Only releases payments that fall within the mandate scope (amount, currency, beneficiary status, rail). Returns which payments were released and why others were refused.
Route a payment to a person at the desk for approval. Opens a request that holds the tool call open until a person decides. Used when you lack authority to release something yourself.
Ask a person to take back the standing mandate. Once revoked, the agent loses all authority to release payments. The mandate cannot be revoked by the agent itself.
Find a beneficiary by name, country, or IBAN. Returns verification status, screening status, and payment history.
Find payments in the queue by ID, beneficiary name, amount, status, or reference. Returns a list of matching payments with their current status and any blocks.
Mark a beneficiary as verified after out-of-band verification. Once verified, payments to that beneficiary no longer trigger the unverified-beneficiary block.
Transport mechanism not visible in source. Package.json references 'WebMCP' but no explicit HTTP/SSE/STDIO transport implementation is shown. Cannot verify remote accessibility or protocol version.
Pagination not implemented for list-returning tools. search_payments and search_beneficiaries return unbounded result sets. No limit, offset, or cursor parameters visible. Large result sets risk context window exhaustion.