MCP server for the Library of Congress. Search inside digitised newspaper pages, browse the catalogue by format, and read records and collections. No API key required.
Four tools with complete schemas and descriptions. Naming follows verb_noun pattern (search_*, get_*, list_*). Descriptions are adequate (50-100 chars) but lack WHEN-to-use guidance and dependency hints. Parameters have types and descriptions, but lack enums for constrained values (e.g., media_type in search_items). Output schemas are documented in separate files but not visible in the provided source. Error handling and recovery guidance are absent. Tool composition is sound, each does one thing. No security issues detected (read-only, no secrets). Baseline: avg tool description ~75 chars (below 194-char production median); all params described but no enums used.
Read a record
List the digital collections
Search the catalogue
Search inside scanned newspaper pages
Descriptions lack WHEN-to-use guidance and dependency hints. E.g., search_items says 'Search the catalogue' but does not explain when to use it vs search_newspapers or how to discover media_type values.
Parameter 'media_type' in search_items accepts free-form strings with no enum constraint. LLMs will hallucinate invalid values. Should declare valid media types (e.g., 'books', 'maps', 'photographs') as an enum.
No error handling or recovery guidance in tool descriptions. If search_newspapers returns empty results, the LLM has no guidance on next steps (try broader query? use search_items instead?). Errors should include actionable recovery hints.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Output schemas are not visible in provided source code. Cannot verify that responses include all fields needed for downstream tool chaining (e.g., does search_items return an identifier that get_item accepts?).
Pagination parameters (page, limit) lack constraints. No min/max specified. LLMs may pass page=999999 or limit=10000, causing API strain or timeouts. Should document valid ranges in parameter descriptions.