MCP server for querying heterogeneous catalysis databases
Single tool 'get' has a well-structured schema with 12 parameters, all typed and described. Description is comprehensive (280+ chars) and explains multiple query modes (ID lookup, shape, search, comparison). However, output schema is not formally documented, only inferred from markdown formatting code. Parameter descriptions contain example values (e.g., 'doi:10.1021/...', 'Pd', '111') which LLMs may reuse literally. Error handling returns markdown strings but lacks actionable recovery guidance. No tool annotations (readOnlyHint, etc.) despite being read-only. Naming is clear and verb-based ('get'). Composition is sound, single responsibility. Missing: enum constraints for categorical params (facet, functional, database, sort), explicit output schema documentation, and error classification.
Query heterogeneous catalysis databases. id: identifier — "doi:10.1021/...", "pub:xyz", "sys:abc" query: FTS5 full-text search (always AND with filters) catalyst: composition, OR/comparison logic ("Pd", "Pd,Pt,Cu" = compare) facet: Miller index ("111", "100") reactants: reactant formula ("CO", "H2O") products: product formula energy: reaction energy range, eV ("-1.5..0", "<-0.5") barrier: activation barrier range, eV ("<1.0") functional: DFT method filter ("BEEF-vdW", "PBE") database: source filter ("cathub", "mp") sort: sort order ("energy", "!barrier", "energy,catalyst") page: page number (10 results/page) No args → shape of entire database (catalyst counts, energy ranges, top facets). id provided → all reactions from that publication. Any filter → search with results + shape on page 1. Multi-catalyst → comparison table (best per catalyst).
Output schema not formally documented. Tool returns markdown strings; LLM cannot parse structured fields (total, results, catalysts, facets, energy ranges). Downstream tools cannot chain on this output.
Parameter descriptions embed example values ('doi:10.1021/...', 'Pd', '111', 'BEEF-vdW'). LLMs frequently reuse examples literally rather than adapting to context, causing invalid queries.
Categorical parameters (facet, functional, database, sort) lack enum constraints. 'facet' accepts Miller indices but no enum list; 'functional' accepts DFT methods but no enum; 'database' accepts sources but no enum. Free-form strings invite hallucinated values.
Error handling returns generic markdown ('⚠ Internal error: {exc}') without recovery guidance. LLM cannot determine if error is retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Tool is read-only but lacks readOnlyHint annotation. MCP spec supports tool annotations to signal safety; absence forces LLM to infer from description.