MCP server for the Centrapay payments API — create and test NZ payment flows directly from Claude Code
Centrapay-mcp has well-structured tool definitions with clear naming (verb_noun pattern) and complete input schemas. All 9 tools have descriptions and typed parameters. However, descriptions are brief (avg ~80 chars, below the 194-char baseline), lack actionable context for LLM selection, and omit critical details like prerequisites, return value structure, and error recovery guidance. Parameter descriptions are minimal. Output schemas are not documented. Error handling returns raw API errors without recovery hints. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. Missing idempotency guidance for irreversible operations (pay_payment_request, create_refund).
Create a merchant under an account.
Create a Centrapay payment request under a merchant config. Returns a payment URL and request id.
Refund a paid payment request. amount is in MINOR units (cents): 2500 = $25.00, must not exceed the original. Requires an idempotencyKey — a refund moves money irreversibly, so a retry without one would double-refund.
Get details for a Centrapay merchant by id.
Get the current status of a Centrapay payment request by id.
List merchants visible to the API key.
Descriptions lack actionable context. Most are 40 - 75 chars, below the 194-char baseline. They state WHAT but omit WHEN to use, prerequisites, and return structure. E.g., 'Create a Centrapay payment request' doesn't explain when to call it vs list_payment_requests, or that it returns a payment URL and request id.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. pay_payment_request and create_refund are IRREVERSIBLE but lack destructiveHint. Agents cannot infer safety implications from tool names alone.
Output schemas not documented. Tools return text responses without declaring field structure. LLMs cannot plan downstream calls or extract IDs reliably. E.g., create_payment_request returns 'a payment URL and request id' but no schema shows field names or types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
List payment requests matching an externalRef for a merchant account (Centrapay has no flat list-all).
Settle a payment request in the sandbox. Requires an assetType and asset reference — used to test webhook/settlement flows.
Void (cancel) an active Centrapay payment request.
Error handling returns raw API errors without recovery guidance. E.g., 'Centrapay API 400 POST /payment-requests: ...' gives the LLM no actionable next step. Should categorize as retryable/user-fixable/fatal and suggest recovery (e.g., 'Invalid configId. Call list_merchants() to find valid IDs.').
Idempotency keys required for pay_payment_request and create_refund but no guidance on how to generate or reuse them. Descriptions mention 'prevents double-refund' but don't explain the idempotency contract or how agents should manage keys across retries.