rechtspraak-mcp
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-mcpSearch for case law about data protection from 2023"
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
A Model Context Protocol server for Dutch case law (jurisprudentie / uitspraken). It wraps the official Open Data van de Rechtspraak API and the LiDO citation graph, so any MCP-capable agent (Claude, Cursor, …) can search rulings, fetch full text by ECLI, and explore how decisions cite each other.
No API key required.
npx rechtspraak-mcpTools
Tool | What it does |
| Search case law (faceted by default; full-text behind a flag). Returns ECLIs + links. |
| Run 3–10 searches at once. |
| Fetch full text + metadata + relations of one decision by ECLI. |
| Fetch up to 10 decisions by ECLI in one call. |
| List value lists (instanties, rechtsgebieden, proceduresoorten, …) to build valid filters. |
| LiDO citation graph around an ECLI: what cites it, what it cites, statute references. |
Related MCP server: caselegis-mcp
Search
search_uitspraken is a faceted search over the official Open Data feed — filter by date, court (instantie), legal area (rechtsgebied) and document type. It does not do free-text keyword matching; pass an ECLI to query for a direct lookup, or use the facet filters. get_uitspraak fetches the full text and metadata from the documented Open Data content endpoint.
Install in an MCP client
Claude Code (or any client reading claude_desktop_config.json / .mcp.json):
{
"mcpServers": {
"rechtspraak": {
"command": "npx",
"args": ["-y", "rechtspraak-mcp"]
}
}
}claude mcp add rechtspraak -- npx -y rechtspraak-mcpCitations & source links
Every result carries links for its ECLI:
links.deeplink— the citation-stabledeeplink.rechtspraak.nlURL,links.rechtspraak— the human detail page,links.prudai— a PrudAI viewer for the ruling.
When an agent quotes a passage, the tools instruct it to render the citation as a Markdown source link anchored on the exact excerpt:
[Zie bron](https://prudai.com/uitspraak/ECLI:NL:HR:2023:1234?quote=%22<verbatim quote>%22)Configuration
Env var | Default | Description |
|
| Upstream request timeout. |
|
| Concurrency for bulk tools. |
|
| Base URL for the viewer deeplinks. |
|
| User-Agent sent upstream. |
| KOOP default | Override the LiDO service endpoint. |
|
|
|
Development
bun install
bun run typecheck
bun test
bun run build # → dist/ (Node-runnable, shebang bundle)
bun src/index.ts # run from sourceData sources & disclaimer
Case-law data is © Rechtspraak and published as Open Data via data.rechtspraak.nl; citation-graph data comes from KOOP's LiDO service (linkeddata.overheid.nl). This project is an independent open-source client and is not affiliated with or endorsed by de Rechtspraak or KOOP. Always verify against the authoritative source before relying on a result.
License
MIT © PrudAI. Maintained by PrudAI.
Available Tools
6 toolsget_uitspraakget_uitspraakA
Fetch the full text and metadata of a single Dutch court decision by ECLI, from the official Open Data API (data.rechtspraak.nl). Returns metadata (court, date, rechtsgebied, zaaknummer), the plain-text body, formal relations (conclusie/cassatie/etc.), and links to the ruling on rechtspraak.nl plus a PrudAI viewer. If the ECLI is not published or has no body text, the tool says so — do not invent or cite it in that case.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Alias for ecli. | |
| ecli | No | ECLI identifier, e.g. ECLI:NL:HR:2023:1234 (alias: id). | |
| metadataOnly | No | When true, fetch metadata only (no body text). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the data source (official Open Data API), the return contents (metadata fields like court, date, rechtsgebied, zaaknummer, plain-text body, relations, links), and the behavior when content is missing (states it, do not invent). This is solid transparency, though it omits potential details like rate limits or authentication, which are not critical for a simple read tool.
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 primary action and resource, then provides necessary detail on return values and edge-case behavior. Every clause adds value, with no redundant or filler content.
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 relatively simple fetch tool with 3 parameters and no output schema, the description thoroughly covers what the tool returns (including metadata fields, body, relations, and links) and how it behaves when the ECLI is invalid or has no body. It is complete enough for an agent to invoke the tool correctly and interpret results.
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 all three parameters with 100% coverage: id (alias for ecli), ecli (with example and alias), metadataOnly (boolean). The description adds no new parameter-level details beyond reinforcing that the tool works by ECLI, so it meets the baseline of 3 but does not exceed it.
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 'Fetch the full text and metadata of a single Dutch court decision by ECLI', specifying a concrete action (fetch), a precise resource (single court decision), and the key identifier (ECLI). It naturally distinguishes itself from sibling tools like search_uitspraken (searching) and bulk tools by emphasizing 'single'.
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?
It implies when to use: when you have a specific ECLI and need the full decision or metadata. The caution 'If the ECLI is not published or has no body text, the tool says so — do not invent or cite it' gives explicit guidance on handling missing results. However, it does not explicitly mention alternatives like search_uitspraken for discovery, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uitspraken_bulkget_uitspraken_bulkA
Fetch multiple Dutch court decisions by ECLI in one call (1–10 ECLIs) from the official Open Data API. Returns a per-ECLI result with the body text, metadata, relations, and links — or an error for any ECLI that is unpublished or not found.
| Name | Required | Description | Default |
|---|---|---|---|
| eclis | Yes | 1–10 ECLI identifiers. | |
| metadataOnly | No | When true, fetch metadata only (no body text). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses important behavior: per-ECLI results with body, metadata, relations, links, and error handling for unpublished/not-found ECLIs. It does not mention rate limits or auth, but for a public read API the disclosed return and error semantics are valuable.
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 the main purpose and followed by a concise summary of the return format and error behavior. No redundancy or filler.
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?
There is no output schema, so the description reasonably covers return values and error cases. It explains the per-ECLI result and the count limit. It could optionally include a small example, but the provided info is sufficient for an agent to understand the tool's use.
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%, with both parameters described. The description adds context about the result structure (body, metadata, relations, links) but does not elaborate on parameter semantics beyond what the schema already states. Baseline of 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 a specific verb ('Fetch'), resource ('multiple Dutch court decisions by ECLI'), and scope ('1–10 ECLIs in one call'). It distinguishes itself from siblings like get_uitspraak (single) and search_uitspraken (search-based) by emphasizing the bulk-by-ECLI nature.
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 provides clear context for when to use the tool: when fetching multiple court decisions by known ECLI identifiers. It implicitly excludes single-fetch and search scenarios, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_waardelijstenlist_waardelijstenA
List the Rechtspraak value lists (waardelijsten) used to build valid search filters: instanties, instanties_buitenlands, rechtsgebieden, proceduresoorten, niet_nederlandse_uitspraken. 'rechtsgebieden' and 'instanties' return the identifiers/URIs you pass to search_uitspraken (rechtsgebied / instanties). Call without a name to see the available lists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Which value list to fetch. Omit to list available names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals that certain lists return identifiers/URIs and that omitting the parameter lists available names, which are not evident from the schema alone. It doesn't explicitly state read-only behavior or output format, but the nature of 'list' and the described usage make this a minor gap.
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 three sentences, each contributing essential information: the function and list names, the mapping to search parameters, and the default behavior. No redundancy, well-structured, and fully front-loaded.
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 list tool with one optional parameter and no output schema, the description is complete: it names the lists, explains how to use them for search filters, and describes the no-argument behavior. It also references the primary consumer tool (search_uitspraken), providing sufficient context for correct invocation.
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%, providing the enum and a basic description, so baseline is 3. The description adds value by explaining the functional role of the parameter values (e.g., 'rechtsgebieden' and 'instanties' produce identifiers for search_uitspraken) and the effect of omitting the parameter, which goes 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 lists Rechtspraak value lists (waardelijsten) for building valid search filters, enumerating the specific lists available. It also explains the relationship to search_uitspraken parameters, which distinguishes it from the search/get sibling tools.
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 provides clear context: this tool supplies filter values for search_uitspraken, with explicit mention that 'rechtsgebieden' and 'instanties' return identifiers/URIs to pass. It also instructs to call without a name to see available lists, giving actionable guidance. However, it doesn't explicitly address when not to use it, but as a reference tool this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_uitsprakensearch_uitsprakenA
Search Dutch case law (jurisprudentie/uitspraken) via the official Open Data API and get back ECLIs with links to the ruling and a PrudAI viewer. This is a faceted search: filter by rechtsgebied, instantie, date range and document type. It does not do free-text keyword matching. If you already have an ECLI, pass it as query and the tool returns that single decision's summary. Use list_waardelijsten to discover valid rechtsgebied/instantie identifiers.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Max results to return (default 25). | |
| from | No | Zero-based pagination offset (default 0). | |
| sort | No | 'date' for newest-first; otherwise the API's default order. | |
| type | No | Restrict to rulings or AG conclusies. | |
| query | No | A single ECLI to look up directly. (Open Data has no free-text search; non-ECLI keywords are ignored — use the facet filters instead.) | |
| dateTo | No | Uitspraakdatum to, YYYY-MM-DD. | |
| dateFrom | No | Uitspraakdatum from, YYYY-MM-DD. | |
| instanties | No | Court filter: a single OWMS creator URI (find it via list_waardelijsten). | |
| rechtsgebied | No | Rechtsgebied slug (e.g. 'civielrecht', 'strafrecht', 'bestuursrecht', 'internationaalpubliekrecht') or full PSI URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It discloses the API source, the faceted-search behavior, the absence of free-text matching, the ECLI lookup behavior, and the output elements (ECLIs, links, viewer). It does not mention pagination or auth, but these are at least partly visible in the schema, and the core behavioral caveats are present.
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?
Four sentences, led by the action and output, with all content earning its place. It is front-loaded and compact, avoiding restatement of the schema properties.
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 9-parameter tool with no output schema, the description gives a complete conceptual model: what is searched, how to filter, what is ignored, and where to get identifiers. It falls slightly short by not describing pagination defaults or the shape of a 'summary', but the schema covers parameter details and the core orientation is sufficient.
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 parameter descriptions already include details like OWMS URIs, date formats, and defaults, so the baseline is 3. The description adds value by framing the API as facet-only, clarifying that `query` is exclusively an ECLI and non-ECLI values are ignored, and pointing to list_waardelijsten for valid identifiers, pushing it above 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 names a specific verb ('Search') and resource ('Dutch case law') and clearly distinguishes this from free-text and ECLI lookup modes. The tool's faceted nature and unique output (ECLIs + links + PrudAI viewer) are stated in the first sentence, so an agent can tell it apart from bulk or retrieval siblings.
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?
It explicitly warns that the tool has no free-text keyword matching and directs users to list_waardelijsten for valid facet identifiers, giving clear when-to-use guidance. It also describes the ECLI-as-query use case. However, it does not explicitly contrast against the bulk or single-decision sibling tools, so the exclusion guidance is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_uitspraken_bulksearch_uitspraken_bulkA
Run several Open Data lookups at once (3–10 entries). Pass ECLIs to resolve a batch of decisions' summaries in one call. Note: Open Data has no free-text matching, so non-ECLI terms fall back to facet-only results — prefer get_uitspraken_bulk when you already have the ECLIs. Use to cast a broad net before narrowing down via get_uitspraak.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Zero-based offset per term (default 0). | |
| terms | Yes | 3–10 distinct search terms, phrased differently. | |
| pageSize | No | Results per term (max 10, default 10). |
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 a key behavioral trait: 'Open Data has no free-text matching, so non-ECLI terms fall back to facet-only results.' This goes beyond the schema and helps the agent anticipate fallback behavior. It doesn't detail rate limits or return format, but provides the most important caveat.
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?
Three sentences, each adding distinct information: purpose, ECLI nuance, and when-to-use guidance. No filler.
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 bulk lookup tool with no annotations or output schema, the description covers the core behavior, the limitation about free-text matching, and the relationship to sibling tools. It also implies return value (summaries). A small gap is the lack of explanation of 'facet-only results,' but overall it's adequate.
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 the baseline is 3. The description adds extra meaning by specifying that terms should be ECLIs and 'phrased differently,' which goes beyond the schema's min/max constraints. This raises it slightly.
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 specific verbs ('Run several Open Data lookups at once', 'Pass ECLIs to resolve a batch') and clearly identifies the resource (Open Data lookups, decisions' summaries). It also distinguishes from siblings by directing users to get_uitspraken_bulk when ECLIs are already available and get_uitspraak for narrowing down.
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?
Explicitly states when to use this tool vs alternatives: 'prefer get_uitspraken_bulk when you already have the ECLIs' and 'Use to cast a broad net before narrowing down via get_uitspraak.' It also warns about Open Data's lack of free-text matching, providing context for when the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.1- First observed
get_uitspraak - First observed
get_uitspraken_bulk - First observed
lido_related - First observed
list_waardelijsten - First observed
search_uitspraken - First observed
search_uitspraken_bulk
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: search returns summaries with facets, get returns full text by ECLI, bulk variants handle multiple ECLIs, list_waardelijsten provides filter vocabulary, and lido_related maps citations. Even the overlap between search_uitspraken and get_uitspraak when given an ECLI is unambiguous because one returns a summary and the other full text.
The set predominantly follows a consistent verb_noun pattern (search_*, get_*, list_*) with a uniform _bulk suffix for batch operations. The sole deviation is 'lido_related', which uses a noun-adjective form instead of a verb, but it is still clear and does not disrupt overall predictability.
Six tools is well-scoped for a case law search and retrieval server. Each tool serves a distinct aspect: searching, fetching, bulk operations, value lists, and citation analysis, with no redundancy or glaring omissions.
The server covers the core workflow: discover filter values, search for summaries, retrieve full texts, bulk-fetch multiple decisions, and explore citations. Minor gaps like lack of search by case number or free-text search are noted, but the official API does not support these, so the surface is appropriate.
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
Resolve, search and verify legal citations against the official sources, with provenance.
Wrapper for the official LegalOne API (Thomson Reuters / Novajus, Premium package): lawsuits and lit
Temporal search and comparison for official Luxembourg and reviewed EU law, with provenance.
Search US federal and state court records through CourtListener and the RECAP archive
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides access to Swiss court decisions through the entscheidsuche.ch API, enabling search, retrieval, and analysis of legal documents across different cantons and courts using natural language queries.-

caselegis-mcpofficial
AlicenseNot gradedqualityDmaintenanceEnables searching, retrieving, and checking citation status of California legal opinions via the Caselegis API.MIT- AlicenseNot gradedqualityDmaintenanceEnables querying and retrieving legal texts and decisions from French public APIs Légifrance and JudiLibre for legal research.MIT

LexAPI MCPofficial
AlicenseAqualityBmaintenanceEnables querying EU legal documents, case law, and citation graphs through natural language using the LexAPI.10863MIT
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/Prudai/rechtspraak-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server