JSON-RPC 2.0 API server for Nano cryptocurrency operations with QR code generation, local work generation and auto-receive pending blocks
The NANO MCP Server has a complete set of 17 tools with schemas and descriptions, but exhibits significant quality gaps. Naming is mostly verb-based (generateWallet, getBalance, sendTransaction), which is good. However, descriptions are often too brief (average ~80 chars, below the 194 char baseline) and lack sufficient context for LLM tool selection. Most parameters have type definitions and descriptions, which is positive, but many descriptions are minimal (e.g., 'NANO address to check balance for' without format hints or when to use the tool). Error handling is present in the TypeScript type definitions (ErrorResponse with errorCode, details, nextSteps, relatedFunctions) but it's unclear if this error schema is actually implemented in the server code. Output schemas are documented in the TypeScript definitions but not fully visible in the server.js source. The test wallets feature (tools 10-14) represents a composition issue: these are utilities mixed into the main tool set rather than separated into a testing harness. Tool 1 (initialize) is a red flag, the description says 'Initialize the MCP server and get available capabilities', but this overlaps with what the MCP protocol itself should handle and doesn't appear to be a stateful operation.
Check the funding status of both test wallets to determine if they are ready for testing
Convert balance between NANO and raw units
Generate a QR code for a NANO payment with address and amount
Generate a new NANO wallet with address and private key
Get detailed account information for a NANO address
Get comprehensive status of a NANO account including balance, pending count, and readiness for transactions
Get the balance and pending amounts for a NANO address
Private key exposure in tool output (getTestWallets returns privateKeys). Violates secret-injection pattern.
Test tooling (setupTestWallets, getTestWallets, updateTestWalletBalance, checkTestWalletsFunding, resetTestWallets) mixed into main MCP tool set. Should be separated into a test harness or testing-specific endpoint.
Functional overlap between getBalance, getAccountInfo, and getAccountStatus. All three retrieve account state; LLM cannot easily distinguish when to use which.
Tool descriptions are consistently too brief (average ~65 chars vs 194 char baseline). Insufficient context for LLM tool selection. Most lack WHEN/WHY guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Get pending blocks (incoming transactions) for a NANO address
Retrieve existing test wallets with their addresses, balances, and funding status
Initialize the MCP server and get available capabilities
Initialize a NANO account by publishing the first receive block
Get help information about unit conversion for NANO cryptocurrency
Receive all pending transactions for a NANO address
Reset test wallets
Send NANO from one address to another
Generate two test wallets for integration testing. Saves wallets with private keys and prompts user to fund them with test NANO.
Update the balance and funding status for a test wallet (used after checking on-chain balance)
Parameter 'amountRaw' in sendTransaction expects raw units but lacks guidance on how to convert from decimal NANO. Description should reference convertBalance tool.
Error handling schema (ErrorResponse with errorCode, details, nextSteps) is defined in TypeScript but not visible in actual server.js implementation. Unclear if errors are structured or if LLMs receive actionable recovery guidance.
sendTransaction marked IRREVERSIBLE but description does not explicitly warn 'This cannot be undone' or mention confirmation requirements.
Tool 'initialize' suggests stateful MCP server initialization but description is vague. Overlaps with MCP protocol's own initialization handshake.
Output schema for generateQrCode not documented in visible source. Returns QR code as string, image, or data URL? Should specify return type clearly.
setupTestWallets description mentions 'prompts user', MCP tools should not rely on interactive prompts. This violates the stateless request/response model.