Swiss federal and cantonal case law research server exposing 42+ tools for legal decisions, statutes, scholarship, and citation analysis via MCP and HTTP API
The OpenCaseLaw MCP server exposes 45 tools across legal research domains (decisions, legislation, scholarship, materials). However, the evaluation reveals significant quality gaps across naming, descriptions, parameter validation, output schemas, and error handling. While tool names generally follow verb_noun conventions (search_decisions, get_law, find_citations), the overwhelming majority lack substantive descriptions and parameter-level documentation. The source code shows tools are listed in scripts/tool_surface_check.py with minimal inline documentation. Many tools expose generic parameters (query, limit) without type constraints, enums, or validation guidance. No output schemas are documented in the visible code, and error handling patterns are absent. The server appears to be a research/academic prototype with good domain coverage but production-grade quality gaps.
Analyze trends in case law on a topic over time
Approve the plan and start agentic retrieval
Verify and attest to the accuracy of a legal response or argument
Browse recent changes to Swiss legislation
Check if a decision supports a specific legal claim
Parse and resolve a legal citation reference
Create an approval-gated Swiss legal source-packet job
Generic tool names lacking specificity (e.g., 'search', 'fetch', 'cite'). 'search' alone does not convey whether it searches decisions, laws, or all content. 'fetch' and 'cite' are underdescriptive action names that force LLMs to guess intent.
No output schemas are documented in the visible source code. LLMs cannot determine what fields to expect from tool responses, preventing proper downstream chaining and forcing inference from responses.
Parameter descriptions are minimal (10-60 characters). For example, 'query' is described only as 'Search query text' without guidance on format, length limits, or expected content. Parameters lack validation rules, enums for constrained values, and dependency documentation.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
Generate a mock court decision based on facts
Fetch a decision or other document by ID
Find the appeal chain for a decision (lower court to upper court path)
Find all decisions cited by a given decision
Find leading/landmark cases on a topic
Find the most relevant consideration in a decision for a given claim
Find scholarship articles that cite a specific decision
Find scholarship articles that cite a specific statute article
Generate a law exam question on a topic
Get the legislative history and revisions of a statute article
Get the purpose and legislative intent of a statute article
Get a brief summary of a case
Get a legal commentary on a statute article
Get full details of a single decision by ID
Get the hierarchical structure (Erwägungen) of a decision
Get multiple decisions by ID list
Get synthesized legal doctrine/explanation on a topic
Get a specific consideration/paragraph from a decision
Get a Swiss statute article by abbreviation and article number or SR number
Get legislation by systematic number
Get legislative materials for a law
Get a practice guide document
Get the summary (regeste) of a decision
Get details of a scholarship publication
Get the full text of a scholarship publication
Fetch the completed versioned source packet for downstream agents
Get corpus statistics and metadata
List all Swiss courts in the database
List available scholarship publication sources
Unified search across decisions, laws, scholarship, and materials
Search Swiss federal government messages (Botschaften)
Search legal commentaries on Swiss statutes
Search Swiss federal and cantonal court decisions by query text, court, date range, and fields
Search Swiss statutes and legislation
Search Swiss legislation codes and systematic numbering
Search legislative materials and travaux préparatoires
Search practical guides and administrative materials
Search legal scholarship and academic publications
Tools accepting 'limit' parameters lack guidance on valid ranges, defaults, or maximum values. No indication of pagination mechanism (offset/page/cursor) or how to handle large result sets.
No error handling guidance visible in tool definitions. No documentation of failure modes, recovery paths, or how to disambiguate invalid input from system errors.
Tool 'attest_response' (markup checking/verification) lacks security documentation about what attestation claims are made, liability boundaries, and whether the tool guarantees legal accuracy or merely flags issues.
Tools 'draft_mock_decision' and 'generate_exam_question' are generative/synthetic tools but lack documentation about output disclaimers, accuracy guarantees, or intended use. LLMs may misrepresent synthetic output as real case law.
Parameter 'fields' in search_decisions is vague ('Fields to return (e.g., 'compact')'). No enum of valid values, no description of what 'compact' vs other modes return, no indication of default behavior.
Tools for multilingual Swiss law (e.g., get_law with 'language' parameter) lack documentation of valid language codes (de, fr, it assumed but not stated as enums) and behavior when translations are unavailable.
Tool 'create_source_packet_job' creates a stateful job but has no input schema visible (empty {} input). LLM cannot understand what options to configure the job with (scope, priorities, output format, etc.).