Keyless US Supreme Court case data from the Oyez API (api.oyez.org): case summaries, questions presented, decisions, vote breakdowns, advocates, and oral-argument metadata, back to the 1700s. Source of truth for "how did the Court rule and who voted which way."
Three well-named, read-only tools with clear descriptions (150 - 200 chars each) and complete input schemas. All parameters are typed and described. Tool names follow verb_noun convention (search_cases, get_case, cases_by_term). Schemas include proper type constraints and required fields. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is minimal (generic catch-all). No pagination metadata (total_count, next_cursor) in search results despite accepting limit parameters. Missing tool annotations (readOnlyHint). Parameter descriptions lack format/range details (e.g., term year bounds, docket format pattern).
List the SCOTUS cases for a given term year from Oyez — compact summaries (name, docket, citation, short question, oyez_url). Use to browse a full term. Keyless.
Get a full SCOTUS case from Oyez by term and docket number — question presented, facts, conclusion, decision (winning party, vote split, decision type), which justices were in the majority vs. dissent, advocates, and whether oral-argument audio exists. Keyless.
Search US Supreme Court (SCOTUS) cases from Oyez by term year and/or case-name substring. Returns compact summaries with the question presented, description, and IDs for get_case. If neither term nor name is given, defaults to the most recent term. Keyless.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining or data extraction. Responses include raw Oyez API fields (ID, href, citation object) without clear documentation of what each field contains or its type.
Parameter descriptions lack actionable constraints. 'term' accepts 'e.g. 2023' but no bounds stated (valid range?). 'docket_number' shows example '22-448' but no format pattern (always XX-XXX?). 'limit' has max but no minimum stated. LLMs cannot validate inputs without explicit constraints.
No pagination metadata returned. search_cases and cases_by_term accept 'limit' but responses do not include total_count, has_more, or next_cursor. LLMs cannot determine if results are truncated or plan multi-page retrieval.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Error handling is generic. callTool() catches all errors and returns {error: message}. No error classification (retryable vs. fatal), no recovery guidance. If Oyez API returns 404 or timeout, LLM receives bare error string with no actionable next step.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. All three tools are read-only and idempotent, but LLMs cannot infer this from definitions alone. Annotations enable safer agent planning.