Model Context Protocol server exposing cryptocurrency price tools from Binance, with support for resources, prompts, and activity logging. Includes multiple transport implementations (stdio, HTTP/SSE).
Critical issues: Only 2 unique tools exist (get_price, get_price_price_change), but the tool list shows 7 duplicates, indicating either a registration bug or incomplete deduplication in the server. Both tools have minimal descriptions (50-60 chars, below the 194-char baseline). Parameter schemas are present but lack type constraints (no enums, ranges, or format specs). No output schema documentation. No error handling guidance. The code shows basic HTTP calls with EnsureSuccessStatusCode() but no recovery hints for LLMs. Symbol resolution (bitcoin→BTCUSDT) is undocumented, forcing LLMs to guess valid inputs.
Get the current price of a crypto asset from Binance
Get the current price of a crypto asset from Binance
Get the current price of a crypto asset from Binance
Get the current price of a crypto asset from Binance
Get the price change of the last 24 hours of a crypto asset from Binance
Get the price change of the last 24 hours of a crypto asset from Binance
Get the price change of the last 24 hours of a crypto asset from Binance
Tool list shows 7 entries but only 2 unique tools (get_price appears 4x, get_price_price_change appears 3x). Indicates duplicate registration or incomplete deduplication. LLMs will see conflicting tool definitions.
Parameter 'symbol' lacks type constraints. Description says 'e.g. BTC, ETH, BTCUSDT' but does not document that 'bitcoin' and 'ethereum' are also valid aliases. LLMs cannot infer the symbol resolution logic (GetSymbolFromName). No enum or pattern constraint.
No output schema documented. Tools return raw JSON from Binance API (e.g. {"price": "..."}). LLMs cannot plan downstream operations or extract fields reliably. Mcp.WithPrompts variant parses and formats output, but this is not documented in tool definitions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | 2026-07-28+ | v2 |
Descriptions are 50 - 60 characters (below 194-char baseline). 'Get the current price of a crypto asset from Binance' lacks context: When should the LLM call this vs get_price_price_change? What does the response contain? What are valid symbols?
No error handling guidance. Code calls response.EnsureSuccessStatusCode() which throws on 4xx/5xx, but LLMs receive no recovery hint. E.g., if symbol is invalid, the error message should suggest 'Try a valid symbol like BTCUSDT, ETHUSDT, or call with bitcoin/ethereum aliases.'