Local CrossRef database with 167M+ works and full-text search. Exposes academic paper search, DOI lookup, citation enrichment, and database status as MCP tools.
Server implements 8 tools with reasonable naming (all verb-prefixed: search_, get_, enrich_, check_, cache_). Descriptions are present and moderately detailed (100-250 chars range). Input schemas visible with type declarations for all parameters. However, significant gaps exist: output schemas are not documented, error handling guidance is absent, and several parameter descriptions lack actionable constraints. Parameter consistency is good across tools (e.g., limit/offset pagination pattern). Risk taxonomy is declared (READ_ONLY vs WRITE), which is positive for security awareness. Overall, definitions are functional but lack the polish and LLM-optimization expected of A-grade tools.
Create a paper cache from search query. Fetches full metadata for papers matching query and saves to disk cache. Use this to build a reusable paper collection for a research topic.
Query cached papers with field filtering. Returns minimal data to reduce context usage. Specify only fields needed.
Check all citations in a BibTeX file against the local database.
Check citations against the local CrossRef database. Validates whether DOIs exist in the database and checks metadata completeness.
Enrich DOIs with full metadata including citation counts and references. Use this after search() to get detailed metadata for papers. The search() tool returns basic info (title, authors, year, journal). This tool adds: citation_count, references, volume, issue, publisher, etc.
Report local CrossRef database status — path, work count (~167M), FTS5 index size, citation-graph edge count, and access mode (DB vs HTTP). Use when the user asks "is the CrossRef db ready?", "how many papers do I have?", "check crossref-local status", or before running a search to confirm the db is usable.
Output schemas not documented. No tool specifies what fields are returned, their types, or structure. LLMs cannot plan downstream operations or extract the right data without knowing response format.
Error handling guidance is absent. No tool describes recovery paths (e.g., 'if DOI not found, try search_works' or 'database not ready, call get_status first'). Errors will appear as opaque failures to the LLM.
Parameter constraints are weak. 'query' parameter in search_works has no guidance on FTS5 syntax constraints beyond brief mention in description. 'limit' and 'offset' lack min/max bounds. LLMs will guess and may pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Get detailed information about a work by DOI.
Search for academic works by title, abstract, or authors. Uses FTS5 full-text search index for fast searching across 167M+ papers. Supports FTS5 query syntax: AND, OR, NOT, "exact phrases".
'save_path' and 'save_format' parameters in search_works and search_by_doi accept free-form strings without validation hints. No enum declared for 'save_format' (should be enum: ['text', 'json', 'bibtex']). LLMs may invent invalid formats.
get_status description is good but output schema is not documented. LLM does not know which fields to expect (path, work_count, fts5_size, citation_graph_edges, access_mode) or their types/format.
check_citations and check_bibtex have boolean flags (validate_metadata, suggest_enrichment) with default=True but no explanation of what happens when False. What does 'suggest_enrichment' return? LLM cannot reason about the output.
enrich_dois returns full metadata but the tool description does not enumerate what fields are added (citation_count, references, volume, issue, publisher). LLM has no way to know what data is available after calling this tool.
cache_create and cache_query are stateful operations (disk write, cache name as key). No idempotency guarantee stated. What happens if cache_create is called twice with the same name? Does it overwrite, append, or error? LLM cannot safely retry.