An MCP server serving as a structured knowledge base of crypto whitepapers for AI agents to access, analyze, and learn from.
This server has well-structured tools with clear naming (verb_noun pattern) and mostly adequate descriptions, but several critical gaps prevent a higher score. All four tools have input schemas with type definitions and descriptions present. However, error handling is minimal (generic try/except with string formatting), output schemas are not formally documented, and there is no guidance on retryability or error recovery. The tool set lacks proper result limiting and pagination guidance for the ask_whitepapers tool, which could return large document chunks. Parameter descriptions are present but lack format constraints and validation rules. The server is STDIO-only (hard transport cap), but within STDIO limitations, the definition quality is moderate.
Search the knowledge base for information related to a query, optionally filtered by project. Parameters: query (str): The search query to find relevant whitepaper content. project_name (str, optional): The name of the cryptocurrency project to filter results (e.g., 'bitcoin'). If None, searches all whitepapers. Returns: str: A string containing up to 5 matching results from the knowledge base.
List all cryptocurrency projects available in the knowledge base. Parameters: None Returns: str: A JSON-formatted list of project names derived from PDF filenames.
Load a whitepaper PDF from a URL into the knowledge base. Parameters: project_name (str): The name of the cryptocurrency project (e.g., 'bitcoin', 'ethereum'). url (str): The URL of the whitepaper PDF to download and load. Returns: str: A message indicating success or failure.
Search for a cryptocurrency project's whitepaper PDF using DuckDuckGo. Parameters: project_name (str): The name of the cryptocurrency project (e.g., 'bitcoin', 'ethereum'). Returns: str: A JSON-formatted list of search results with title, URL, and snippet.
No output schema documentation. Tools return raw strings, free-form JSON, or unstructured text. LLMs cannot predict or plan around the response structure.
Error handling is generic. All tools catch exceptions and return f-string messages (e.g. 'Error loading... {str(e)}'). No guidance on retryability, user-fixable vs fatal errors, or recovery steps. LLMs cannot determine next action.
ask_whitepapers returns up to 5 raw document chunks as newline-joined strings with no pagination metadata. For large whitepapers, this can exceed context limits. No limit parameter, no cursor/offset, no total count.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
load_whitepaper takes a URL parameter and downloads arbitrary PDFs without validation, sanitization, or timeout control. No description of size limits, timeout handling, or retry behavior. Security and reliability risk.
Parameter descriptions lack format constraints and validation rules. E.g., project_name lacks constraints on case-sensitivity, special characters, or length. url parameter has no format (URI validation) or size limits documented.
No documentation of side effects. load_whitepaper modifies state (creates files, reloads knowledge base) but description does not explicitly state this is a write operation with persistence. Ask_whitepapers filters could fail silently if project not found.
ask_whitepapers has optional project_name parameter with no guidance on behavior when None. Filter logic assumes project_name.lower() but silently skips filtering if None, behavior not documented.