MCP server for sending cross-chain messages via the Whisper API on Base blockchain, with support for x402 payment protocol
Two tools with minimal documentation. whisper-message has a basic schema (message: string, minLength=1) and a description that includes example JSON, but lacks parameter-level description detail and output schema documentation. fetch-and-whisper-quote has an empty input schema (no parameters) and a vague description that doesn't explain what it returns or when to use it. Neither tool declares error handling, recovery guidance, or idempotency. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite both being WRITE operations. Descriptions are under 200 chars but lack LLM-optimized structure (WHAT, WHEN, RETURN). Output schemas are completely undocumented.
Fetch a quote from the resource server, pay via x402, and send it cross-chain using Whisper (Base Sepolia → Ethereum Sepolia).
Send a cross-chain Whisper message. ** Example Input (JSON):** ```json { "message": "Hello from Base Sepolia!" } ``` **Output:** A LayerZero explorer URL to view the cross-chain transaction.
fetch-and-whisper-quote has empty input schema (no parameters defined). Tool is non-functional without parameter documentation.
No output schemas documented for either tool. LLMs cannot plan downstream calls or extract required fields (e.g., txHash, explorer URL structure). Violates pattern:tool requirement.
Both tools are WRITE operations (send cross-chain messages, pay via x402) but lack tool annotations (destructiveHint=true, idempotentHint=false). Agents cannot reason about retry safety or side effects.
No error handling or recovery guidance. Code catches errors and returns 'Error: <message>' strings, but LLM receives no actionable next steps (e.g., 'Retry with different message', 'Check API key', 'Verify wallet balance').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
whisper-message description includes example JSON in docstring. LLMs tend to reuse example values literally. Should use parameter constraints (enums, patterns) instead.