Educational MCP server repository demonstrating research paper search, sentiment analysis, and chatbot implementations with arXiv integration
This server exhibits fundamental structural and quality issues that make it unsuitable for production. The most critical problems: (1) Duplicate tool definitions, search_papers and extract_info appear three times each across mpc_0, mpc_1, and mpc_2, violating the single-responsibility principle and creating confusion about which implementation is canonical. (2) Tool descriptions are vague and generic; they lack actionable guidance for LLM selection. (3) Input schemas are present but minimally documented, parameter descriptions are brief and lack constraints (min/max for max_results, format hints for topic). (4) No output schema documentation, what does search_papers actually return? A list of strings? Objects with metadata? This forces LLMs to guess. (5) No error handling guidance, what happens if arXiv is unreachable? If a paper_id is not found? (6) Tools like get_available_folders, get_topic_papers, generate_search_prompt exist in mpc_3/research_server.py but their full implementations are not visible in the source provided, preventing verification of schema completeness. (7) The weather tools (get_weather, weather_resource, weather_report) in mcp_gradio_server/simple_server.py are contextually disconnected from the research paper domain, suggesting incomplete refactoring or test code left in production.
Search for information about a specific paper across all topic directories.
Search for information about a specific paper across all topic directories.
Search for information about a specific paper across all topic directories.
Generate a prompt for Claude to find and discuss academic papers on a specific topic.
List all available topic folders in the papers directory. This resource provides a simple list of all available topic folders.
Get detailed information about papers on a specific topic.
Get the current weather for a specified location.
Duplicate tool definitions across three modules (mpc_0, mpc_1, mpc_2). search_papers and extract_info appear verbatim in all three files, creating maintenance debt and LLM confusion about which implementation is authoritative.
Tool descriptions lack LLM-optimized guidance. Descriptions are generic and do not explain WHEN to use each tool, what preconditions exist, or how tools compose. E.g., search_papers says 'store their information' but does not explain that this creates persistent state; extract_info does not say it must search post-search_papers results.
Output schemas are not documented. Tools return values (List[str], str, implied JSON) but the response structure is undefined. For search_papers, what does the list contain, full paper IDs, short IDs, or URLs? For get_topic_papers, is the structure identical to search_papers output? LLMs cannot plan downstream calls without knowing what fields exist.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Search for papers on arXiv based on a topic and store their information.
Search for papers on arXiv based on a topic and store their information.
Search for papers on arXiv based on a topic and store their information.
Create a weather report prompt.
Provide weather data as a resource.
Parameter constraints are missing. max_results has a default (5) but no documented min/max range. topic has no format guidance (free text? keywords?). location parameter in weather tools does not specify accepted formats (city name, coordinates, zip code, etc.). LLMs frequently hallucinate invalid values when constraints are absent.
No error handling guidance. Code contains try/except blocks (FileNotFoundError, json.JSONDecodeError) but tools do not document what errors can occur or how LLMs should respond. If arXiv is unreachable, does search_papers return an empty list or an error? If paper_id is malformed, does extract_info return a string error or raise an exception? Undefined behavior forces LLMs to guess.
Tools 10 - 12 (weather tools) are contextually disconnected from the research paper domain, suggesting incomplete refactoring, test code, or a misaligned server scope. This dilutes the server's coherence and increases the token cost of tool listing for clients that only need paper search.
Inconsistent return types. extract_info returns a string (JSON if found, plain text error if not). This requires LLMs to detect the response type at runtime and parse context-dependently. Structured returns (always JSON with a 'found' boolean and 'data' field) are more reliable.
Tools inferred from descriptions (get_available_folders, get_topic_papers, generate_search_prompt, weather tools). Full implementations not visible in the provided source code snippet. This limits confidence in schema completeness and error handling.