Rechtspraak MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Rechtspraak MCP Serversearch for recent cases about privacy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rechtspraak MCP Server
MCP (Model Context Protocol) server for searching and analyzing Dutch case law from rechtspraak.nl. Provides advanced search capabilities with query expansion, legal synonyms, faceting, and citation analysis.
Table of Contents
Related MCP server: korean-law-mcp
Features
π MCP Server
Advanced Search: Full-text search with query expansion and Dutch legal synonyms
Faceted Search: Filter by court, legal area, date range, and procedure type
Citation Analysis: Extract and analyze case citations (incoming and outgoing)
Similar Cases: Find similar cases using MoreLikeThis algorithm
Legal Article Search: Search cases by specific legal articles
Trend Analysis: Analyze temporal trends in case law
Query Expansion: Automatic expansion with legal terms and synonyms
Rate Limiting & Caching: Built-in governance layer for production use
π₯ Data Import
Fetch case law XML from rechtspraak.nl feeds
Extract links and download case files
Automated batch processing
π Indexing
Parse XML documents with structured sections
Enrich with metadata (court types, legal domains, procedures)
Full-text indexing in Solr
Schema management and validation
Architecture
src/
βββ mcp/ # MCP server (main feature)
β βββ mcp_server.py # MCP server implementation
β βββ mcp_schemas.py # Pydantic schemas for all tools
β βββ solr_adapter.py # Solr query adapter with advanced features
β βββ governance.py # Rate limiting & caching
β βββ legal_synonyms.py # Dutch legal synonyms expansion
β βββ reference_data.py # Court/procedure reference data
β
βββ importer/ # Data import from rechtspraak.nl
β βββ extract_links.py
β βββ fetch_link_files.py
β βββ fetch_content.py
β
βββ indexing/ # XML parsing and Solr indexing
β βββ xml_parser.py
β βββ solr_indexer.py
β βββ solr_setup.py
β βββ reindex_all.py
β
βββ cli.py # CLI for indexing
βββ config.py # ConfigurationInstallation
Prerequisites
Python 3.13+
uv (Python package manager)
Docker & Docker Compose (for Solr)
Setup
Clone the repository:
git clone <repository-url>
cd rechtspraak-solrStart Solr with Docker:
docker-compose up -d solrInstall dependencies:
uv syncConfigure environment variables (create
.envfrom.env.example):
cp .env.example .envSetup Solr collection and schema:
uv run rechtspraak-setupUsage
Interactive CLI
Run the interactive menu for all operations:
python main.pyOr use direct commands:
# Data pipeline
python main.py fetch-links 2023-01-01 2023-12-31
python main.py extract-links 2023-01-01 2023-12-31
python main.py fetch-content
# Indexing
python main.py reindex # Full reindex (delete + setup + index)
python main.py index # Index data only
python main.py fix-schema # Configure schema only
# MCP server
python main.py mcp # Start MCP server
python main.py test-mcp # Test connection
# Utilities
python main.py health # System health check
python main.py test-reference # Test reference dataMCP Server
The MCP server supports two modes:
Local Mode (stdio): For Claude Desktop/Code running on your machine
HTTP Mode (SSE): For remote access via API
Local Mode - Configuration for Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"rechtspraak": {
"command": "uv",
"args": [
"--directory",
"/path/to/rechtspraak-solr",
"run",
"rechtspraak-mcp"
],
"env": {
"SOLR_URL": "http://localhost:8983/solr",
"SOLR_COLLECTION": "rechtspraak"
}
}
}
}Local Mode - Configuration for Claude Code
Add to your Claude Code config (.claude/settings.local.json in project):
{
"mcp": {
"servers": {
"rechtspraak": {
"command": "uv",
"args": [
"--directory",
"/path/to/rechtspraak-solr",
"run",
"rechtspraak-mcp"
],
"env": {
"SOLR_URL": "http://localhost:8983/solr",
"SOLR_COLLECTION": "rechtspraak"
}
}
}
}
}HTTP Mode - Remote Access
For production deployment with remote access:
Start HTTP server:
docker-compose up -dConfigure nginx (see
config/nginx.conffor complete example):
location /sse {
proxy_pass http://127.0.0.1:8000/sse;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
}Security: Set
MCP_API_KEYenvironment variable in your.envfile
Connecting to Remote MCP Servers
Claude Desktop/Code only supports stdio transport natively, not SSE/HTTP. To connect to remote MCP servers, use the included mcp-sse-client.js bridge client:
Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"rechtspraak": {
"command": "node",
"args": [
"/path/to/rechtspraak-solr/mcp-sse-client.js"
],
"env": {
"BASE_URL": "https://rechtspraak-nl-mcp.knowably.ai",
"SSE_PATH": "/sse",
"API_KEY": "your-api-key-here"
}
}
}
}Optional environment variables for mcp-sse-client.js:
CLIENT_NAME- Custom client name (default: "mcp-sse-client")VERBOSE- Enable detailed logging (set to "true")MAX_RETRIES- Max connection attempts (default: 3)RETRY_DELAY_MS- Delay between retries in milliseconds (default: 2000)CONNECTION_TIMEOUT_MS- Connection timeout in milliseconds (default: 30000)
The bridge client acts as a local stdio process that Claude can communicate with, while internally translating requests to SSE/HTTP for the remote server. It includes automatic reconnection, configurable timeouts, and graceful error handling
Available MCP Tools
The server provides the following tools:
cases_search- Search cases with filters and facetingcases_get_by_ecli- Get specific case by ECLI identifiercases_expand_query- Expand query with legal synonymscases_highlight_passages- Extract relevant passages from a casecases_rerank- Rerank cases by relevancecases_get_similar- Find similar casescases_search_by_article- Search by legal articlecases_validate_ecli- Validate ECLI formatcases_bulk_get- Batch retrieve multiple casescases_analyze_trend- Analyze temporal trendscases_get_statistics- Get comprehensive statisticscases_get_court_stats- Compare courtscases_get_citations- Extract citationscases_compare- Compare multiple casescases_extract_entities- Extract legal entitiessystem_health- Check system health
Direct Entry Points
You can also use the entry points directly:
# Full reindex
uv run rechtspraak-reindex
# Index specific directory
uv run rechtspraak-index --data-dir ./data
# Setup collection and schema
uv run rechtspraak-setup
# Start MCP server
uv run rechtspraak-mcpDevelopment
Project Structure
MCP Server: Main feature providing search API via MCP protocol
Data Importer: Tools to fetch case law from rechtspraak.nl
Indexing: XML parsing and Solr indexing with enrichment
CLI: Command-line tools for management tasks
Testing
# Check MCP server
uv run rechtspraak-mcp
# Test indexing
uv run rechtspraak-index --data-dir ./test-data --verboseExample Queries
Once connected to an MCP client (Claude Desktop/Code), you can ask:
"Search for cases about 'aansprakelijkheid' in the last 5 years"
"Find cases citing ECLI:NL:HR:2019:1234"
"What are the trends in 'arbeidsrecht' cases from 2015 to 2023?"
"Find similar cases to ECLI:NL:RBDHA:2020:5678"
"Search cases mentioning Article 6:162 BW"
"Compare courts Hoge Raad and Rechtbank Amsterdam for tax cases"
License
Do whatever you want
Available Tools
16 toolscases_analyze_trendB
Analyze temporal trends in case law over time. Returns time-series data with insights on trend direction, peak periods, and growth patterns. Supports year/quarter/month granularity.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to analyze trends for | |
| start_year | Yes | Start year for trend analysis | |
| end_year | Yes | End year for trend analysis | |
| granularity | No | Time granularity | year |
| filters | No | Additional filters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses that the tool returns time-series data and insights, but does not mention read-only nature, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose and outputs. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains return format (time-series, insights). It covers the main functionality, though it omits mentioning the optional filters parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema, only repeating 'Supports year/quarter/month granularity' which is already an enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it analyzes temporal trends in case law and returns time-series data with insights. However, it does not distinguish from similar siblings like cases_get_statistics, which might also analyze trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool over alternatives, nor when not to use it. The description only implies usage for temporal analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_bulk_getA
Batch retrieve multiple cases by ECLI identifiers. Efficient way to fetch many cases in a single request (max 100).
| Name | Required | Description | Default |
|---|---|---|---|
| eclis | Yes | List of ECLI identifiers to fetch | |
| fields | No | Specific fields to return (default: all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only mentions max 100 and single request, but does not disclose idempotency, error handling, or that it is a read operation. Minimal behavioral disclosure beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core action. Efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description does not explain the return format or behavior (e.g., order preservation, error handling). Adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds no new meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (batch retrieve), resource (cases by ECLI identifiers), and distinguishes from sibling tools like cases_get_by_ecli by emphasizing efficient multiple-case retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for fetching many cases efficiently with a max of 100, but lacks explicit when-not-to-use or alternative comparisons. However, the sibling context provides clear differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_compareA
Compare multiple cases side-by-side. Identifies similarities and differences in metadata, subjects, and procedures. Returns divergence score (0=identical, 1=completely different).
| Name | Required | Description | Default |
|---|---|---|---|
| eclis | Yes | List of ECLIs to compare | |
| comparison_aspects | No | Aspects to compare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It clearly states the tool compares metadata, subjects, and procedures, and returns a divergence score between 0 and 1. This sufficiently discloses the behavior, though it does not explicitly state it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no extraneous content. Front-loaded with the core action ('Compare multiple cases side-by-side') followed by specifics. Every sentence is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value (divergence score). It would be more complete if it also described the format of the side-by-side differences, but the core functionality is covered. The high schema coverage and clear parameters help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value beyond schema by specifying that comparisons cover 'metadata, subjects, and procedures,' which are examples of what 'comparison_aspects' can include. This aids interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('compare') and resource ('multiple cases'), and explains the output (divergence score). It distinguishes this tool from siblings like cases_get_similar by focusing on side-by-side comparison and explicit scoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for comparing cases side-by-side but does not explicitly state when not to use it or mention alternatives like cases_get_similar for similarity search. Guidance is adequate but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_expand_queryA
Expand a user query with Dutch legal synonyms, abbreviations, entities, and temporal hints. Returns structured must/should terms for better retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Raw user question |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool enriches queries with legal terms and returns structured terms, but it does not explain the internal process, idempotency, or whether external resources are used. The behavioral disclosure is adequate but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the tool's purpose, and every word contributes meaning. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and no output schema or annotations, the description is mostly complete. It explains the action and the return. However, it could clarify the output format (e.g., JSON structure) and explicitly state the language requirement (Dutch).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'query' is described in the schema as 'Raw user question' with 100% coverage. The tool description adds no extra semantic details beyond the schema, such as expected language or format. Baseline 3 applies as schema covers the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool expands a user query with Dutch legal synonyms, abbreviations, entities, and temporal hints, and specifies the return of structured must/should terms. This clearly distinguishes it from sibling tools like cases_search or cases_extract_entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use before search for better retrieval but provides no explicit guidance on when to use this tool versus alternatives such as cases_rerank or cases_search_by_article. There are no when-not-to-use notes or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_extract_entitiesB
Extract entities from a case including cited cases, legal articles, monetary amounts, dates, and parties. Uses regex patterns for Dutch legal text.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier | |
| entity_types | No | Types of entities to extract |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states it uses regex for Dutch legal text, but does not explain safety (e.g., read-only vs mutation), permissions, failure modes, or limitations. Critical context for a tool that processes case data is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the purpose, followed by a key detail about regex and language. Every sentence adds value, and no words are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should explain the return format. It only lists entity types but not how they are returned (e.g., list, map). Does not mention pagination, ordering, or error conditions. Incomplete for a tool with 2 parameters and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters (ECLI identifier, entity types) with 100% coverage. The description adds example entity types ('cited cases, legal articles, monetary amounts, dates, and parties'), providing useful context beyond the schema. However, it does not specify the expected format for entity_types values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'extract entities from a case' and specifies the types of entities (cited cases, legal articles, monetary amounts, dates, parties). It distinguishes from sibling tools like 'cases_get_citations' and 'cases_get_by_ecli' which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it uses regex for Dutch legal text, implying it's for Dutch cases, but does not explicitly state when to use this tool vs alternatives like 'cases_get_citations' or 'cases_get_by_ecli'. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_get_by_ecliA
Retrieve a specific case by ECLI identifier with structured sections (Inhoudsindicatie, Overwegingen, Beslissing). Returns normalized metadata and paragraph-level anchors.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier | |
| section_selector | No | Section to retrieve (e.g., 'Overwegingen', 'Beslissing') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that it returns normalized metadata and paragraph-level anchors, implying a safe read operation. However, it does not explicitly state idempotency, auth requirements, or rate limits. It adds some value beyond annotations but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the main action and key details (ECLI, structured sections). No extraneous words, every part is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description adequately explains what is returned and the optional parameter. It is complete enough given the complexity and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds context by explaining the return format (structured sections and paragraph-level anchors) and that section_selector can retrieve specific sections, enhancing understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve'), the resource ('a specific case'), and the unique identifier ('ECLI'). It also mentions structured sections and paragraph-level anchors, which distinguishes it from sibling tools like cases_search or cases_bulk_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. While it's clear from the description that this is for fetching a single case by ECLI, it does not provide when-not-to-use scenarios or mention other tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_get_citationsA
Extract citations from a case. Returns both outgoing citations (cases this case cites) and incoming citations (cases that cite this case) with context snippets.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier of the case | |
| include_context | No | Include context snippets for citations | |
| direction | No | Citation direction to retrieve | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It discloses that both outgoing and incoming citations are returned with context snippets, but does not mention side effects, authorization needs, rate limits, or behavior for edge cases like missing citations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, precise and front-loaded. Every sentence adds meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description explains the core functionality and return types but lacks details on return format, pagination (if any), or how to interpret context snippets. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the meaning of the results (outgoing vs incoming) and the include_context parameter. However, it does not elaborate on the enum values for direction beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Extract' and clearly identifies the resource 'citations from a case'. It distinguishes between outgoing and incoming citations, which differentiates it from sibling tools like cases_get_similar or cases_get_by_ecli.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus siblings. It implies usage for citation extraction, but lacks when-not-to-use or alternative recommendations, which is needed given many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_get_court_statsA
Compare statistics across multiple courts for a query. Returns case counts, date ranges, top subjects and procedures for each court.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| courts | Yes | List of courts to compare | |
| date_from | No | Start date filter (ISO format) | |
| date_to | No | End date filter (ISO format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses return values (case counts, date ranges, top subjects, procedures) but lacks details on side effects, data limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence front-loads the key action and outcomes, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 4 parameters, the description covers the main output fields but could be more complete by explaining date formats or 'top subjects' details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds minimal new meaning beyond the schema, mostly restating the function purpose without deepening parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares statistics across multiple courts for a query, distinguishing it from siblings like cases_search or cases_get_statistics which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (comparing court statistics) but does not explicitly state when not to use or mention alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_get_similarA
Find similar cases using MoreLikeThis algorithm. Returns cases with similar content based on paragraphs and summary. Supports filtering by court and legal area.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier of the source case | |
| max_results | No | Maximum similar cases to return | |
| min_similarity | No | Minimum similarity threshold | |
| filters | No | Additional filters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Names the algorithm and filtering, but does not explain how similarity is computed, performance limits, or return format details beyond parameter schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose, second adds filtering. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description hints at return of similar cases. Parameters are well-covered via schema and description. Could specify sorting by similarity or scoring, but adequate for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds context that ecli is the source case and that content matching uses paragraphs and summary, which is not in schema, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Find similar cases', resource 'cases', algorithm 'MoreLikeThis', and basis 'paragraphs and summary', distinguishing it from sibling tools like cases_search or cases_get_by_ecli.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when a source case (by ECLI) is available and similar content is desired, but lacks explicit when-not-to-use or alternatives like cases_search for keyword matching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_get_statisticsA
Get comprehensive statistics for a search query including facet distributions (courts, legal areas, procedures), date ranges, and aggregate counts.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for statistics | |
| filters | No | Filter criteria | |
| include_facets | No | Facets to include in statistics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only describes the output (statistics) but does not mention if the operation is read-only, any authentication requirements, rate limits, or side effects. For a statistics tool, destructiveness is unlikely, but transparency is lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence of 16 words, efficiently conveying the tool's purpose and outputs without superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main outputs (facets, date ranges, counts) and is adequate for a tool with 3 parameters (one required) and no output schema. It could mention the query parameter, but the schema already defines it. Overall, it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context by mentioning 'facet distributions (courts, legal areas, procedures)' and 'date ranges', which relate to include_facets and filters parameters. However, it does not explain each parameter individually or their formats beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose ('Get comprehensive statistics for a search query') and lists specific outputs (facet distributions, date ranges, aggregate counts). It distinguishes this tool from sibling tools like cases_search (raw results) and cases_analyze_trend (trend analysis).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for obtaining statistical aggregations but does not explicitly state when to use this tool versus alternatives (e.g., cases_get_court_stats for court-specific stats). No when-not guidance or prerequisites are provided, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_highlight_passagesA
Extract the most relevant passages from a specific case for a given query. Returns paragraph-level snippets with anchors, ideal for compact context assembly.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier | |
| query | Yes | Search query | |
| max_passages | No | Maximum passages to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses output format (paragraph-level snippets with anchors) and query relevance, but lacks details on authentication, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with verb ('Extract'), no fluff. Every sentence adds value: the first states action and resource, the second describes output and use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains return type and structure. Parameters are fully covered by schema. However, with many sibling tools, some usage guidance would improve completeness. Still, it's nearly complete for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal parameter meaning beyond schema (e.g., 'query' is already described). The description focuses more on output than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts relevant passages from a specific case for a query, returns paragraph-level snippets with anchors. It distinguishes from siblings like cases_get_by_ecli (full case) and cases_search (cross-case search) by focusing on compact context assembly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description hints at usage ('ideal for compact context assembly') but does not explicitly state when to use this tool versus alternatives. No mention of when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_rerankA
Rerank a list of cases by relevance to a query. Takes ECLI identifiers and returns calibrated scores with original ranks.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| eclis | Yes | ECLI identifiers to rerank |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool is non-destructive (reranking) and describes the output format. However, it does not specify any potential limitations or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and clearly communicates the core functionality without redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately explains inputs and outputs for a reranking tool given no output schema. It covers the main purpose and return format. A minor improvement could be stating the output is a reranked list, but it is already sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters ('Search query' and 'ECLI identifiers to rerank'). The description adds no additional semantic context for the parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reranks cases by relevance using a query and ECLI identifiers, and mentions the output of calibrated scores with original ranks. It distinguishes from sibling tools like cases_search and cases_get_similar by specifying the reranking action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for refining an existing list of cases but does not explicitly state when to use this tool vs alternatives like cases_search or cases_get_similar. No exclusion criteria or alternative tool mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_searchB
Search for Dutch court cases with advanced query expansion, faceting, and snippet highlighting. Supports filters for court, date range, area of law, and procedure type.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query | |
| filters | No | Filter criteria | |
| rows | No | Number of results (1-100) | |
| start | No | Pagination offset | |
| return_format | No | Return format | snippet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions behavioral features like 'advanced query expansion, faceting, and snippet highlighting' which aid in understanding outcomes. However, it does not disclose read-only nature, pagination behavior, or performance implications. With no annotations, the description partially carries the transparency burden but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core functionality and key features. No unnecessary words, and it provides a clear overview without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (5 parameters, 100% coverage) and no output schema, the description adequately covers input semantics but lacks output details (e.g., return format explanation) and differentiation from 15 sibling tools. It is minimally complete for a search tool but leaves gaps in agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context by summarizing filters (court, date range, area of law, procedure type) that map to the filter parameter, and hints at query expansion behavior. However, it adds little beyond what the schema already defines for each parameter, maintaining the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Dutch court cases with advanced features (query expansion, faceting, snippet highlighting) and supported filters. While it doesn't explicitly differentiate from siblings like cases_search_by_article, the purpose is well-defined and specific enough for an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., cases_search_by_article for article-specific searches). The description lists capabilities but doesn't provide context for selection or exclusion, leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_search_by_articleA
Search for cases that mention a specific legal article (e.g., '6:162 BW', 'Art. 81 RO'). Returns cases with context snippets where the article is mentioned.
| Name | Required | Description | Default |
|---|---|---|---|
| article | Yes | Legal article reference (e.g., '6:162 BW', 'Art. 81 RO') | |
| interpretation | No | Search interpretation | narrow |
| rows | No | Number of results | |
| start | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions it returns cases with context snippets but lacks details on read-only nature, auth needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first defines purpose with examples, second describes return value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers basic functionality for a search tool with 4 params, but lacks details on interpretation enum and pagination behavior that would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds value by giving examples for the 'article' parameter but does not clarify 'broad' vs 'narrow' interpretation or pagination beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for cases mentioning a specific legal article, provides examples (e.g., '6:162 BW'), and distinguishes from sibling tools like 'cases_search' which is broader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an article reference is available but does not explicitly state when not to use or compare with alternatives like 'cases_search'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cases_validate_ecliA
Validate ECLI identifier format and check if case exists in database. Returns validation status and metadata if found.
| Name | Required | Description | Default |
|---|---|---|---|
| ecli | Yes | ECLI identifier to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It does not specify whether the tool is read-only, non-destructive, or requires authorization. As a validation tool, it likely has no side effects, but this is not made explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and output. Every word is necessary, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter validation tool, the description covers the core functionality and return value. However, it does not mention error handling (e.g., invalid format) or the nature of 'metadata if found', which would be helpful but not critical for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes the 'ecli' parameter as 'ECLI identifier to validate'. The description adds no new meaning beyond restating the validation purpose, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates ECLI format and checks existence in the database, which distinguishes it from sibling tools like cases_get_by_ecli (which retrieves full case) and cases_search (which searches). The verb 'validate' and resource 'ECLI identifier' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for validation and existence check, but does not explicitly state when to use or not use this tool versus alternatives. No exclusions or prerequisites are mentioned, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_healthA
Check system health, Solr connection status, rate limits, and cache statistics. Returns version and operational metrics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates a read operation ('check', 'returns'), but does not explicitly state it is non-destructive or safe, nor mention any authentication requirements. Minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the purpose and scope. No wasted words, but could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and no annotations, the description adequately explains what the tool checks (system health, Solr, rate limits, cache) and what it returns (version and metrics). Complete enough for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100% (empty object). The description does not need to add parameter meaning; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks system health, listing specific components (Solr connection, rate limits, cache statistics). It is distinct from sibling tools that are all case-related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or alternatives, but the context of sibling tools being case-related implies this is for system monitoring. Lacks when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct function: search, retrieval, analysis, citations, entities, validation, and health checking. There is no ambiguity between tools; even similar-sounding ones like 'cases_get_statistics' and 'cases_get_court_stats' have clear differences.
All tools except the single health check follow a consistent 'cases_verb' pattern, using snake_case for verbs. This predictability aids agent selection and understanding.
With 16 tools covering search, retrieval, analysis, and validation, the count is well-scoped for a legal research server. No tool feels superfluous, and the set is neither too sparse nor bloated.
The tool surface covers core workflows: search, fetch, compare, analyze trends, extract citations/entities, and health check. Minor gaps exist, such as a dedicated tool to list available courts or legal areas, but these are indirectly supported via search filters.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Open Archives: Dutch genealogical records and historical page transcriptions.
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Federal court records and PACER case data. 4 MCP tools for legal research.
Netherlands Open Data (data.overheid.nl/data) CKAN MCP.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server providing AI agents access to CourtListener's comprehensive legal database, featuring semantic search, hybrid search, citation verification, and research tools.7MIT
- AlicenseAqualityAmaintenanceMCP server for Korean law data (statutes, precedents, regulations) with citation verification, impact analysis, and time comparison tools.102,4732,534MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that enables searching and retrieving judicial decisions from the Uruguayan National Public Jurisprudence Database (BJN).
- AlicenseAqualityAmaintenanceMCP server for searching Swiss court decisions from federal and cantonal courts via entscheidsuche.ch. Enables full-text search, law reference lookup, and filtering by canton, court level, and date without API keys.81MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/axyr/rechtspraak-solr-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server