Node.js MCP server to interact with EVM (Ethereum Virtual Machine) via JSON-RPC, providing tools for blockchain queries and smart contract interactions
Server exposes 4 Ethereum RPC tools with basic schemas and descriptions. All tools have input schemas with type definitions and parameter descriptions, meeting minimum requirements. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs alternatives. No output schemas documented. Error handling returns raw JSON-RPC errors without recovery guidance. Tool naming follows RPC conventions (eth_*) rather than action-verb patterns (get_*, execute_*), reducing clarity for LLM tool selection. The execute_eth_rpc catch-all tool violates single-responsibility principle by accepting arbitrary methods.
Get the number of the lastest block mined
Execute a read-only smart contract call
Get the balance of an Ethereum address in hex/wei
Execute any arbitrary standard Ethereum JSON-RPC method. Use this for ALL other EVM interactions (e.g. eth_getBlockByNumber, eth_getTransactionReceipt, eth_getLogs).
Tool naming does not follow action-verb convention. Names like 'eth_blockNumber' and 'eth_call' use RPC method names rather than verb_noun pattern (get_block_number, execute_contract_call). LLMs rely on verb prefixes to infer intent and disambiguate tools.
Descriptions lack LLM-optimized guidance. 'Get the number of the lastest block mined' (typo: 'lastest') does not explain WHEN to use this vs execute_eth_rpc, what the return value represents, or how it chains to other tools. Descriptions should be 50-200 chars with clear intent.
execute_eth_rpc violates single-responsibility principle. Accepting arbitrary RPC methods (method + params array) makes it a catch-all that duplicates eth_blockNumber, eth_getBalance, and eth_call. This forces LLMs to choose between 4 ways to do the same thing, wasting reasoning cycles.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
No output schemas documented. LLMs cannot predict return structure (e.g., eth_getBalance returns {hex, wei, eth} but this is not declared in tool metadata). Undocumented outputs force LLMs to guess field names for downstream operations.
Error handling returns raw JSON-RPC error messages without recovery guidance. 'Error: invalid address' tells LLM nothing about how to fix it. Should return 'Invalid Ethereum address: must be 0x-prefixed 40-char hex. Did you mean: 0x...'