MCP server for USDC payments on Base - enable any Claude Code agent to send and receive payments
pay-mcp defines 4 tools with clear verb-noun naming (pay_balance, pay_send, pay_request, pay_history) and reasonable descriptions (100-150 chars each). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, responses are formatted as text strings rather than structured objects. Parameter descriptions lack format constraints (e.g., address format, amount precision). Error handling is minimal, no guidance on recovery or retry logic. Missing tool annotations (readOnlyHint, destructiveHint) despite clear risk profiles (pay_send is IRREVERSIBLE). No pagination support for pay_history despite accepting a limit parameter.
Check USDC balance on Base. Returns the balance for your wallet or a specified address.
Get recent USDC transaction history on Base. Shows both sent and received transfers.
Generate a payment request. Creates a payment link that others can use to send you USDC.
Send USDC payment on Base. Transfers USDC to the specified address.
Output schemas not documented. Responses are formatted as markdown text strings rather than structured JSON objects. LLMs cannot reliably extract transaction hashes, addresses, or amounts for downstream tool chaining.
Missing tool annotations. pay_send is marked IRREVERSIBLE but lacks destructiveHint annotation. pay_balance and pay_history are READ_ONLY but lack readOnlyHint. Agents cannot determine safety/retry semantics without explicit annotations.
Parameter format constraints missing. 'address' parameter lacks validation hint (must be 0x-prefixed hex). 'amount' is a string but no format specified (decimal places, max value). LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
No error recovery guidance. pay_send returns success/failure but does not guide LLM on retry logic, gas estimation failures, or insufficient balance scenarios. Error messages are user-facing, not agent-actionable.
pay_history accepts limit parameter but no pagination cursor/offset. Large transaction histories will be truncated without a way to fetch older records. No total_count returned.