Local CrossRef database with 167M+ works and full-text search
Server has 8 tools with mostly complete schemas and descriptions. Tool names follow verb_noun convention (search_works, get_status, enrich_dois). Descriptions are present and substantive (100-300 chars typical), explaining WHAT and WHEN. However, several parameters lack descriptions or type constraints. Output schemas are not documented, LLMs cannot predict return structure. Error handling is absent from visible code. No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions sometimes reference examples (e.g., 'e.g., "machine learning"') rather than formal constraints. Overall: functional but below production baseline.
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. Typical workflow: 1. search("epilepsy seizure prediction") -> get DOIs 2. enrich_dois([doi1, doi2, ...]) -> get full metadata
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. LLMs cannot predict return structure (fields, types, pagination). search_works, enrich_dois, cache_query return complex objects but no schema is visible.
No tool annotations (readOnlyHint, destructiveHint). cache_create is marked WRITE but tool definition lacks destructiveHint annotation. LLMs cannot distinguish safe from risky operations.
Parameter descriptions include example values (e.g., '"machine learning", "CRISPR"'). LLMs tend to reuse examples literally. Use formal constraints (enums, patterns) instead.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
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".
No error handling guidance visible. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next (e.g., 'DOI not found, try search_works first').
search_works and cache_query accept 'limit' and 'offset' but no total_count or next_cursor documented. Large result sets may blow context window without pagination metadata.