MCP server for downloading academic papers from multiple sources
Three tools with good naming (verb_noun pattern) and acceptable descriptions. Parameters are mostly well-structured with types and constraints (minLength, maxLength, minItems, maxItems). However, output schemas are completely undocumented, the response structure is inferred from code but never formally declared in tool definitions. Error handling guidance is absent. The batch tool caps at 50 items but lacks pagination for future scaling. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear semantic differences between read and write operations.
Download multiple academic papers in batch by DOI or URL
Download a single academic paper by DOI or URL
Get metadata for an academic paper by DOI or URL
Output schemas completely undocumented. Tool returns DownloadResult and metadata but no formal schema declared in tool registration. LLMs cannot plan downstream tool calls or extract fields without explicit schema.
No tool annotations despite clear semantic differences. paper_download and paper_batch_download are destructive (WRITE risk); paper_get_metadata is read-only. Missing destructiveHint and readOnlyHint annotations force LLMs to infer permissions from descriptions alone.
No error handling guidance. Descriptions lack recovery hints (e.g., 'If paper not found, try alternative sources or check identifier format'). Errors from missing papers, invalid DOIs, or network failures are not addressed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
paper_batch_download lacks pagination or continuation mechanism. Capped at 50 items hardcoded but no offset/limit parameters, no cursor, no next_token. Future batches >50 papers require multiple sequential calls.
Parameter identifier in paper_download and paper_get_metadata lacks format guidance. Description says 'DOI or URL' but no regex pattern, minLength=5 is too permissive (allows '12345'). Example values like '10.1038/nature12373' in description could bias LLMs to reuse literal values.
No idempotency guidance. paper_download writes files, retrying with the same DOI twice likely overwrites the first file. Description should clarify: is this safe to retry? Or will it create duplicates/overwrite?