Skip to main content
Glama
axyr

Rechtspraak MCP Server

by axyr

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        # Configuration

Installation

Prerequisites

  • Python 3.13+

  • uv (Python package manager)

  • Docker & Docker Compose (for Solr)

Setup

  1. Clone the repository:

git clone <repository-url>
cd rechtspraak-solr
  1. Start Solr with Docker:

docker-compose up -d solr
  1. Install dependencies:

uv sync
  1. Configure environment variables (create .env from .env.example):

cp .env.example .env
  1. Setup Solr collection and schema:

uv run rechtspraak-setup

Usage

Interactive CLI

Run the interactive menu for all operations:

python main.py

Or 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 data

MCP Server

The MCP server supports two modes:

  1. Local Mode (stdio): For Claude Desktop/Code running on your machine

  2. 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:

  1. Start HTTP server:

docker-compose up -d
  1. Configure nginx (see config/nginx.conf for 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;
}
  1. Security: Set MCP_API_KEY environment variable in your .env file

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 faceting

  • cases_get_by_ecli - Get specific case by ECLI identifier

  • cases_expand_query - Expand query with legal synonyms

  • cases_highlight_passages - Extract relevant passages from a case

  • cases_rerank - Rerank cases by relevance

  • cases_get_similar - Find similar cases

  • cases_search_by_article - Search by legal article

  • cases_validate_ecli - Validate ECLI format

  • cases_bulk_get - Batch retrieve multiple cases

  • cases_analyze_trend - Analyze temporal trends

  • cases_get_statistics - Get comprehensive statistics

  • cases_get_court_stats - Compare courts

  • cases_get_citations - Extract citations

  • cases_compare - Compare multiple cases

  • cases_extract_entities - Extract legal entities

  • system_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-mcp

Development

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 --verbose

Example 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 tools
cases_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query to analyze trends for
start_yearYesStart year for trend analysis
end_yearYesEnd year for trend analysis
granularityNoTime granularityyear
filtersNoAdditional filters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
eclisYesList of ECLI identifiers to fetch
fieldsNoSpecific fields to return (default: all)

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
eclisYesList of ECLIs to compare
comparison_aspectsNoAspects to compare

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRaw user question

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier
entity_typesNoTypes of entities to extract

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier
section_selectorNoSection to retrieve (e.g., 'Overwegingen', 'Beslissing')

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier of the case
include_contextNoInclude context snippets for citations
directionNoCitation direction to retrieveboth

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
courtsYesList of courts to compare
date_fromNoStart date filter (ISO format)
date_toNoEnd date filter (ISO format)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier of the source case
max_resultsNoMaximum similar cases to return
min_similarityNoMinimum similarity threshold
filtersNoAdditional filters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for statistics
filtersNoFilter criteria
include_facetsNoFacets to include in statistics

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier
queryYesSearch query
max_passagesNoMaximum passages to return

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
eclisYesECLI identifiers to rerank

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
articleYesLegal article reference (e.g., '6:162 BW', 'Art. 81 RO')
interpretationNoSearch interpretationnarrow
rowsNoNumber of results
startNoPagination offset

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecliYesECLI identifier to validate

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that enables searching and retrieving judicial decisions from the Uruguayan National Public Jurisprudence Database (BJN).
  • A
    license
    A
    quality
    A
    maintenance
    MCP 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.
    8
    1
    MIT

Latest Blog Posts

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