Skip to main content
Glama
README.md
<p align="center"><img src="./assets/logo.png" alt="rechtspraak-mcp" width="120" height="120"></p>

# rechtspraak-mcp

[![npm](https://img.shields.io/npm/v/rechtspraak-mcp.svg)](https://www.npmjs.com/package/rechtspraak-mcp)
[![CI](https://github.com/Prudai/rechtspraak-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Prudai/rechtspraak-mcp/actions/workflows/ci.yml)
[![license](https://img.shields.io/npm/l/rechtspraak-mcp.svg)](./LICENSE)

A [Model Context Protocol](https://modelcontextprotocol.io) server for **Dutch case law** (jurisprudentie / uitspraken). It wraps the official **[Open Data van de Rechtspraak](https://www.rechtspraak.nl/Uitspraken/Paginas/Open-Data.aspx)** API and the **[LiDO](https://linkeddata.overheid.nl/)** 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.

```bash
npx rechtspraak-mcp
```

## Tools

| Tool | What it does |
|------|--------------|
| `search_uitspraken` | Search case law (faceted by default; full-text behind a flag). Returns ECLIs + links. |
| `search_uitspraken_bulk` | Run 3–10 searches at once. |
| `get_uitspraak` | Fetch full text + metadata + relations of one decision by ECLI. |
| `get_uitspraken_bulk` | Fetch up to 10 decisions by ECLI in one call. |
| `list_waardelijsten` | List value lists (instanties, rechtsgebieden, proceduresoorten, …) to build valid filters. |
| `lido_related` | LiDO citation graph around an ECLI: what cites it, what it cites, statute references. |

## 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`):

```json
{
  "mcpServers": {
    "rechtspraak": {
      "command": "npx",
      "args": ["-y", "rechtspraak-mcp"]
    }
  }
}
```

```bash
claude mcp add rechtspraak -- npx -y rechtspraak-mcp
```

## Citations & source links

Every result carries links for its ECLI:

- `links.deeplink` — the citation-stable `deeplink.rechtspraak.nl` URL,
- `links.rechtspraak` — the human detail page,
- `links.prudai` — a [PrudAI](https://prudai.com) 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 |
|---------|---------|-------------|
| `RECHTSPRAAK_HTTP_TIMEOUT_MS` | `30000` | Upstream request timeout. |
| `RECHTSPRAAK_BULK_CONCURRENCY` | `4` | Concurrency for bulk tools. |
| `PRUDAI_BASE_URL` | `https://prudai.com` | Base URL for the viewer deeplinks. |
| `RECHTSPRAAK_USER_AGENT` | `rechtspraak-mcp/…` | User-Agent sent upstream. |
| `LIDO_REST_ENDPOINT` | KOOP default | Override the LiDO service endpoint. |
| `RECHTSPRAAK_DEBUG` | `0` | `1` logs upstream requests to stderr. |

## Development

```bash
bun install
bun run typecheck
bun test
bun run build      # → dist/ (Node-runnable, shebang bundle)
bun src/index.ts   # run from source
```

## Data 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](https://prudai.com).

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues