MCP server that returns real, DOI-backed peer-reviewed citations for any topic (openAlex) — so AI agents stop hallucinating sources.
Single tool 'get_citations' has a clear, action-oriented name and solid description (194 chars). Input schema is well-defined with Zod types (topic: string, n: int 1-50, since: int). However, output schema is not formally documented, the tool returns markdown + JSON but no structured schema is declared. Parameter descriptions are present but minimal (e.g., 'since' lacks guidance on valid year ranges). Error handling returns isError flag with text, but lacks actionable recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite being a read-only, idempotent operation. Composition is sound (single responsibility), but output structure could be more explicit for LLM parsing.
Return real, DOI-backed peer-reviewed citations for a topic (never fabricated). Use to ground AI-written content in verifiable sources. Returns works with title, authors, year, DOI, citation count, venue, plus a ready-to-paste markdown block.
Output schema not formally documented. Tool returns {content: [{type, text}]} with markdown + JSON, but LLMs cannot infer the structure of the JSON payload (works array fields, citation object shape). Declare the return schema explicitly.
Missing tool annotations. 'get_citations' is read-only and idempotent, but does not declare readOnlyHint or idempotentHint. LLMs cannot infer safety properties without explicit hints.
Error handling lacks recovery guidance. When API returns non-200, tool returns isError=true with a text message, but does not guide the LLM on next steps (retry, check parameters, upgrade tier). Error should be actionable.
'since' parameter description is vague. States 'earliest publication year, e.g. 2015' but does not specify valid range (e.g., 1900 - current year) or behavior if since > current year. LLMs may pass invalid years.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No pagination or result-limiting guidance. Tool accepts n=1-50 but does not document what happens if OpenAlex returns fewer results, or how to handle large result sets. Baseline expects pagination docs for list-like tools.