An MCP server that provides tools to search and retrieve papers from arXiv by author, title, category, or keywords
The server defines 4 READ_ONLY tools for arxiv search with reasonable naming but significant gaps in parameter descriptions and output documentation. Tool names follow verb_noun pattern (get*) which is good. However, parameter descriptions are minimal ('The name of the papers author', 'The maximum number of results to return') and lack detail on valid ranges, formats, or constraints. Tool descriptions are present but generic (10-60 chars, below the 50-200 char baseline for LLM-optimized descriptions). Output schemas are not documented in the code, responses are inferred from implementation (formatPapers returns formatted text, not structured data). No pagination, no error classification, no guidance on retryability.
Fetches a list of Arxiv papers by a given author
Fetches a list of Arxiv papers by a given category
Fetches a list of Arxiv papers by a given title
Fetches a list of Arxiv papers by a given keywords
Tool descriptions are too short and generic. 'Fetches a list of Arxiv papers by a given author' (42 chars) is below the 50-200 char baseline for LLM-optimized descriptions. Missing context on when to use this vs. title/category/keywords search.
Parameter 'maxResults' lacks constraints. No min/max range specified; LLM could request 10000 results, blowing context window or exhausting API quota. Should document: 'Max results to return (1-100, default 10)' with hard server-side cap.
Tool 'getArxivPapersBykeywords' has mismatched parameter description: inputSchema shows 'keywords' param but description says 'The name of the papers author' (copy-paste error from getArxivPapersByAuthor). This will confuse LLMs.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Output schema not documented. Code returns formatted text via formatPapers() but no schema visible showing field names, types, or structure. LLM cannot plan downstream tool calls or extract structured data. Should document: 'Returns array of objects with fields: title (string), authors (string), published (ISO 8601), summary (string), arxivId (string)'.
No pagination support. Tools accept 'maxResults' but do not return offset, cursor, or total_count. If query matches 500 papers and maxResults=10, LLM has no way to get next batch. Should add page/offset and limit parameters.
Error handling returns generic text ('Failed to retrieve Arxiv papers', 'No papers by X') with no recovery guidance. Should categorize: 'Not found - refine search keywords' vs 'Service unavailable - retry in 10s' vs 'Invalid category name - try: cs.AI, cs.CV, ...'
No tool annotations (readOnlyHint/idempotentHint) despite all tools being READ_ONLY. Tools should declare: readOnlyHint=true so agents know these are safe to retry and do not modify state.