Evidence-backed scholarly discovery and citation tools for MCP, from open metadata to institutional databases.
CiteNexus demonstrates strong naming conventions, comprehensive parameter schemas, and good tool descriptions aligned with scholarly research workflows. All 12 tools follow verb-noun patterns (search-papers, resolve-paper, get-citation, etc.). Tool descriptions are clear and domain-specific, ranging from 80-220 characters with actionable guidance. Input schemas are well-structured with proper type definitions, enums, and range constraints. Tool annotations (READ_ONLY, LOCAL) are properly applied. However, output schemas are not explicitly documented in the source code, only inferred from tool descriptions. Error handling lacks explicit recovery guidance and categorization in the visible code. No tool annotations for destructiveHint/idempotentHint are visible despite read_only_hint being set. Parameter descriptions are generally good but some lack explicit format constraints (e.g., identifier formats for resolve-paper could be clearer in the description itself).
Query a scholarly knowledge graph (Semantic Scholar, OpenAlex) for advanced searches, paper recommendations, and relationship queries.
Query an explicitly configured institutional or commercial database (Scopus, Web of Science, etc.). Requires valid API keys and entitlements.
Resolve and export up to 20 identifiers, preserving order and per-item failures. Reports progress; no durable background task is created.
Normalize BibTeX formatting without inferring or modifying metadata. Supports default and compact templates.
Discover open-access locations for a paper by DOI or identifier. Returns reported legal OA URLs; empty results mean no OA evidence found, not paywalled.
Export a paper (resolved by identifier) to BibTeX, RIS, or CSL-JSON. Deterministic, no metadata inference.
Output schemas not explicitly documented in source code. Tool responses are inferred from descriptions rather than declared in structured format. This prevents LLMs from understanding return value structure and planning downstream tool chains.
resolve-paper and get-citation accept both 'identifier' and 'scholar_id' parameters with unclear mutual exclusivity. Description states 'provide identifier or scholar_id, not both' but this constraint is not enforced in visible schema validation or parameter type definitions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2025-06-18+ | v2 |
Retrieve citation metrics and impact data for a paper by identifier. Provider-specific observations, never aggregated.
Retrieve cached resource data by URI: templates (citation export formats), methodology, or workflows.
List all available scholarly data providers with their status, coverage, and required API keys. Inspect this to select subject-appropriate sources.
Resolve a paper by identifier (DOI, arXiv ID, PubMed ID, OpenAlex ID, or Scholar cluster ID). Returns authoritative metadata from the source.
Search scholarly sources by title, author, DOI, or free text. Returns candidates; verify identifiers before citing.
Verify a citation by DOI, title/author/year, or BibTeX entry against source metadata. Checks completeness and flags mismatches.
Error handling philosophy is documented in METHODOLOGY string but no explicit error recovery guidance or categorization visible in tool-level error responses. Tools should indicate whether failures are retryable, user-fixable, or fatal.
Tool annotation destructiveHint and idempotentHint not explicitly set despite all tools being read-only. While ToolAnnotations(read_only_hint=True) is applied, explicit idempotent_hint=True declarations strengthen LLM reasoning about retry safety.
get-resource accepts free-form 'uri' parameter with examples in description ('templates/default', 'templates/compact', 'methodology', 'workflows') but no enum constraint. LLMs may hallucinate invalid URIs. Should be enum: ['templates/default', 'templates/compact', 'methodology', 'workflows'].
access-institutional-api and access-graph-api 'provider' parameters accept free-form strings instead of enums. Should enumerate configured providers (e.g., provider enum: ['scopus', 'wos', 'semantic_scholar', 'openalex']) or dynamically derive from list-providers response.
find-open-access description states 'empty results mean no OA evidence found, not paywalled' but this nuance may not be obvious to LLMs. Should explicitly state: 'Returns empty list if no open-access URLs found (does not indicate paywalling)'.