Real-time crypto volume anomaly detection across 50+ tokens
CryptoSignals provides three tools with explicit, well-structured definitions visible in server.py. All three have descriptions (194 - 230 chars, aligning with the 194-char median), and parameters are typed. However, output schemas are not formally documented in code, they are implicit in the return statements. Input validation is minimal, and error messages lack recovery guidance. The domain focus (crypto volume anomaly detection) is clear and useful, but the server needs better error handling and explicit output schema documentation to reach B+ territory.
Get detailed volume analysis for a specific crypto token. Args: symbol: Token ticker symbol (e.g. BTC, ETH, SOL, DOGE) Returns metrics including price, volume, market cap, vol/mcap ratio, and anomaly assessment for the specified token.
Get high-confidence volume anomaly alerts. Returns only tokens where the volume-to-market-cap ratio exceeds 5%, indicating significant and potentially actionable volume spikes.
Scan 50+ crypto tokens for volume anomalies. Returns the top tokens with unusual volume-to-market-cap ratios, indicating potential price movement signals. Includes price, 24h change, volume, market cap, and vol/mcap ratio for each token.
Output schemas not formally documented. Tools return dicts with implicit structure (e.g., scan_all_tokens returns {signals, count, source}). LLMs cannot plan downstream tool calls or extract fields without explicit output schema documentation.
Error messages lack recovery guidance. When analyze_token does not find a token, it returns {found: False, message: 'Token not in top 50 by volume. Try a more popular token.'}, helpful but no actionable next step. No suggestion to call scan_all_tokens to discover available tokens.
No explicit parameter descriptions in tool signatures. The analyze_token tool accepts symbol: str but the parameter description is buried in the docstring. FastMCP should extract and formalise this as a JSON Schema property with type and description fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Input validation is minimal. The symbol parameter has no length limits, enum constraints, or pattern validation. The tool blindly uppercases and searches, malformed input silently fails with 'not found' instead of rejecting invalid symbols early.
No pagination or result limits documented. scan_all_tokens returns 50 tokens hardcoded in the CoinGecko API call. The description says '50+ crypto tokens' but does not clarify the limit or explain how to retrieve more. If the agent needs to iterate over all tokens, it has no pagination mechanism.
No tool annotations (readOnlyHint, idempotentHint). All three tools are read-only and idempotent, but fastmcp.tool() does not expose these hints. Modern agents benefit from knowing a tool is safe to call repeatedly without side effects.