MCP server for interacting with 48 blockchains via 3xpl JSON API
The server exposes 15 tools via FastMCP with visible input schemas and descriptions. However, critical gaps limit production readiness: (1) Tool descriptions are minimal (10-25 chars on average), well below the 50-200 char baseline for LLM optimization. Example: 'Fetch the height(block id) of the latest(best) block in the requested blockchain.' is only 79 chars and lacks clarity on WHEN to use vs similar tools. (2) Parameter descriptions exist but are often generic or assume domain knowledge (e.g., 'blockchain to fetch from' doesn't specify the format 'lowercase with dashes'). (3) No output schema documentation visible, tools fetch from external APIs but no explicit return type documentation is provided, forcing LLMs to guess response structure. (4) Error handling is not evident in the code, no recovery guidance, no categorization of retry-ability. (5) The aggregate_* tools accept free-form SQL queries, which is a security/injection risk not addressed. (6) No evidence of pagination defaults, limits, or structured result capping despite querying large datasets. Tools are individually sound (naming follows verb_noun, parameters are typed), but lack the polish and LLM-optimized documentation that characterizes A-grade tools.
Aggregate *address balances* for an address in requested blockchain within requested module in a sqlite table.
Aggregate *pending mempool transfers* for an address in requested blockchain within requested module in a sqlite table.
Aggregate *confirmed transfers* for an address in requested blockchain within requested module in a sqlite table.
Aggregate *individual transfers* within a block in requested blockchain within requested module in a sqlite table.
Aggregate *individual transfers* within a transaction in requested blockchain within requested module in a sqlite table.
Detect blockchains of a data string.
Tool descriptions are below LLM-optimization baseline (avg 30-50 chars vs 50-200 baseline). Example: 'Fetch the height(block id) of the latest(best) block' lacks clarity on when to call vs get_block_overview. LLMs cannot distinguish between similar tools without crisp context.
aggregate_* tools accept free-form SQL queries as string parameters with no validation or sanitization visible. This is a SQL injection risk if untrusted agents construct queries. No error guidance for malformed SQL.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Get main information about an address in requested blockchain.
Get main information about a block in requested blockchain.
Fetch the height(block id) of the latest(best) block in the requested blockchain.
Get the number of transactions pending in mempool for a requested blockchain.
Get the average transaction fee in USD for the last 24 hours for a requested blockchain.
Get main information about a transaction in requested blockchain.
Get the number of transactions in the last 24 hours for a requested blockchain.
Fetch all available blockchains and their modules in the API.
Resolve the ENS domain to EVM address
No output schema documentation. Tools fetch from external API (3xpl JSON API) and modify responses (strip context field), but no explicit return type spec is visible. LLMs must infer response structure, causing brittle downstream tool calls.
Parameter descriptions assume domain knowledge without spelling out format rules. Example: 'blockchain to fetch from' doesn't state 'must be lowercase with dashes (e.g., ethereum, arbitrum-one)'. LLMs will hallucinate invalid blockchain names.
No error recovery guidance. No evidence of try-catch blocks or error categorization (retryable vs user-fixable vs fatal). If an API call fails, agents have no guidance on what to do next.
No pagination or result-limiting logic documented. Tools query blockchain data which can be voluminous (e.g., list_blockchains_and_modules, fetch_stats), but no visible pagination parameters (page, limit, offset) or per-request result caps. Large responses will bloat context.