MCP server for fetching real-time cryptocurrency data and historical price information from crypto exchanges using CCXT
This MCP server has significant structural gaps. While tool names follow verb-noun patterns (get_current_price, fetch_ticker), descriptions are minimal and parameter documentation is sparse. No output schemas are documented anywhere in the provided code. The server appears to be a custom implementation without proper MCP protocol integration, there is no visible MCP message handling, capability negotiation, or protocol compliance. Tools are defined as Python class methods but not registered via MCP's tool.call/result handshake. Error handling exists at the application level but does not follow MCP error patterns. Schemas provided in the metadata are basic (type + description) but lack depth, constraints, or examples of expected output. The codebase shows API integration logic (via CCXT) but no MCP transport layer implementation.
Fetch historical OHLCV data (Open, High, Low, Close, Volume)
Fetch data for multiple cryptocurrencies at once
Fetch current price and market data
Get current price of cryptocurrency
Get historical price data
Get prices for multiple cryptocurrencies
Return list of supported cryptocurrencies
No documented output schemas for any tool. The code returns Python dicts (e.g., {'symbol': symbol, 'price': ticker['last'], ...}) but does not declare what fields the LLM should expect in the response. LLMs cannot plan downstream operations or extract data reliably without knowing the response structure.
Tool descriptions are generic and under 100 characters. 'Get current price of cryptocurrency' and 'Fetch current price and market data' do not explain WHY an LLM should call one vs. the other, WHEN to use them, or what they return. Descriptions should be 50-200 chars and include use-case context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Parameter descriptions are minimal. For example, 'Cryptocurrency symbol like BTC, ETH, XRP' provides examples but does not explain format constraints, valid value range (how many symbols exist?), or behavior if symbol is invalid. Parameter descriptions should include format, constraints, and error guidance.
No enum constraint on symbol parameters. The 'symbol' parameter accepts free-form strings. Internally, CryptoAPI.symbols_map hardcodes 18 supported symbols (BTC, ETH, XRP, etc.). This should be declared as an enum in the schema so the LLM picks only valid values instead of guessing.
Duplicate or near-duplicate tools with no clear distinction. 'get_current_price' and 'fetch_ticker' both fetch current price and market data, the only difference is naming. Similarly, 'get_multiple_prices' and 'fetch_multiple_tickers' do nearly the same thing. LLMs waste reasoning cycles choosing between them and risk calling the wrong one.
Error handling does not follow MCP patterns. The ErrorHandler class in errors.py (not shown) returns dicts with error keys, but there is no guidance to the LLM on what to do next (e.g., 'Symbol not supported. Call get_supported_symbols() to see valid symbols'). Errors should be actionable recovery hints, not silent failure dict returns.
No MCP protocol implementation visible. The code defines an MCPServer class that starts a standalone server with print() statements and example function calls, but there is no MCP message handler, no tool.call/result handshake, no capabilities negotiation, and no transport layer (HTTP, STDIO, etc.). The server cannot integrate with MCP clients.
No pagination support. Tools like get_multiple_prices and fetch_multiple_tickers accept symbol lists but do not document limits or pagination. If an LLM passes 50+ symbols, the response could exceed token limits. Tools should enforce reasonable limits (e.g. max 20 symbols per call) and offer pagination patterns.
API rate limiting not addressed. The CCXT library (Binance) has rate limits, but tools do not declare or handle throttling. An agent in a retry loop could trigger a 429 (rate limit) error with no recovery path. Tools should document rate limits and return retry-after guidance on 429 errors.