Library of Congress (loc.gov) MCP — the world's largest library.
Two tools with clear verb-noun naming (search, get_item) and complete input schemas. Descriptions are present and adequate (100-150 chars), meeting baseline minimums. However, parameter descriptions lack actionable constraints (e.g., format enum values are listed in description text rather than schema; limit/page ranges not formally specified). Output schemas are not documented, LLMs cannot predict response structure. Error handling returns generic error objects without recovery guidance. No tool annotations (readOnlyHint, idempotentHint). Missing parameter type specificity in schema (format and limit/page lack explicit enum/min/max constraints in the JSON Schema itself).
Get full metadata for a single Library of Congress item (title, date, contributors, subjects, description, format, medium). Keyless.
Search the Library of Congress (loc.gov) — the world's largest library: digitized photographs, maps, newspapers, books, manuscripts, and audio across LoC's collections. Optionally scope to a single format. Keyless.
Output schemas not documented. LLMs cannot predict response structure (e.g., search returns {count, total, items[]} but this is not declared). Agents cannot plan downstream tool calls or extract fields reliably.
Parameter constraints not formalized in JSON Schema. 'format' enum values (photos|newspapers|maps|audio|books|manuscripts|film-and-videos) are listed in description text, not as schema enum. 'limit' (max 50) and 'page' (min 1) constraints are described but not in schema minItems/maxItems. LLMs cannot validate before calling.
Error responses lack recovery guidance. Errors return {error: string} with no actionable next steps. E.g., 'item not found' does not suggest search_item() or list available items. Agents cannot self-correct.
No tool annotations. Tools lack readOnlyHint (both are read-only), idempotentHint (both are idempotent), or destructiveHint. Agents cannot reason about retry safety or side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
get_item accepts both item IDs and full URLs but does not document the URL parsing behavior (strips query/fragment, extracts last path segment). LLMs may pass malformed URLs expecting different behavior.