Collector intelligence MCP server — archetype classification + soul cards over Blockscout.
Single tool 'describe_collector' has a well-structured docstring (194 chars) explaining purpose, output schema, and use cases. Input schema is present with type and description. However, the tool lacks error handling guidance for common failure modes (invalid address format, API timeouts, missing data). Output schema is documented in the docstring but not formally declared in code. No parameter validation constraints (e.g., address format, length) are visible. The tool accepts a bare string without format validation, relying on downstream fetch_profile() to handle errors. Error responses return a dict with 'error' and 'message' keys, but lack actionable recovery guidance per pattern:recovery-guide.
Return collector intelligence for a wallet — the meaning layer over raw on-chain data. Output: { "address": the input wallet, "archetype": one of Vault Keeper / Flipper / Whale / Grail Hunter / Sleeper / The Explorer, "narrative": a two-sentence human-readable story, "soul_card": a shareable markdown card (for Twitter/Discord/forum posts), "profile": the raw numeric stats used to derive the archetype } Use cases: - "What kind of collector am I looking at?" (one-shot identification) - "Generate a shareable card for this wallet" (creator tool) - "Find all wallets matching the Vault Keeper pattern" (compose with other tools) Data source: collectscan.com (Blockscout v2 API) by default. Set MOCK_MODE=1 to force fixture-only mode for offline demos and CI.
Input parameter 'address' lacks format constraints. No regex pattern, length limits, or checksum validation documented. LLMs may pass invalid addresses without guidance on expected format (0x-prefixed hex, length 42 for Ethereum).
Error handling returns generic dict with 'error' and 'message' keys but does not guide LLM on recovery. Missing actionable errors per pattern:recovery-guide. E.g., 'Invalid address format. Expected 0x-prefixed 42-character hex string.' or 'API timeout. Retry with MOCK_MODE=1 for offline testing.'
Output schema documented in docstring but not formally declared in code. LLMs cannot parse the nested 'profile' object structure from text alone. Should include JSON Schema or TypedDict annotation visible to MCP introspection.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, idempotentHint) declared. This tool is read-only and idempotent, marking it as such enables agents to retry safely and avoid unnecessary state tracking.
Tool description includes example use cases but no guidance on when NOT to use it or prerequisites (e.g., 'Requires valid Ethereum address on supported chain'). Missing dependency hints per pattern:tool-description.