loading…
Search for a command to run...
loading…
Provides unified access to German federal and state legislation, court decisions, and European Union legal databases for comprehensive legal research. It enable
Provides unified access to German federal and state legislation, court decisions, and European Union legal databases for comprehensive legal research. It enables users to search and retrieve full-text laws, parliamentary documents, and judicial rulings directly through the Model Context Protocol.
License: GPL v3 Node.js Version TypeScript MCP
⚠️ WARNING: Work in Progress
This project is currently under active development and not production-ready. APIs may change without notice, and features may be incomplete or unstable. Use at your own risk.
A Model Context Protocol (MCP) server for German legal research, providing unified access to multiple legal databases.
| Source | Status | Prefix | Authentication |
|---|---|---|---|
| Bundes- & Landesrecht | ✅ Available | legis: |
None (public) |
| Rechtsprechung im Internet | ✅ Available | rii: |
None (public) |
| InfoCuria (CJEU) | ✅ Available | icu: |
None (public) |
| EUR-Lex | ✅ Available | eul: |
None (public) |
| DIP Bundestag | ✅ Available | dip: |
Public key included |
| arXiv | ✅ Available | arxiv: |
None (public) |
| nautos.de | ✅ Available | nautos: |
Required (IP or credentials) |
legis:* tools)save_path parameter to avoid context pollutionrii:* tools)part parameter[Rn. 5]{.rn} (pandoc spans)save_path parameter to avoid context pollutionicu:* tools)[Rn. 5]{.rn}section parameter for Rn ranges, headings, or line rangessave_path parameter to avoid context pollutioneul:* tools)section parameter for articles (Art. 5), headings, or line rangessave_path parameter to avoid context pollutiondip:* tools)save_path parameter to avoid context pollutionarxiv:* tools)save_path parameter to avoid context pollutionnautos:* tools)~/.local/share/german-legal-mcp/cache/nautos/)save_path parameter to dump full document to disknpx @metaneutrons/german-legal-mcp
or add your MCP client config (e.g., claude_desktop_config.json):
{
"mcpServers": {
"german-legal": {
"command": "npx",
"args": ["-y", "@metaneutrons/german-legal-mcp"]
}
}
}
| Variable | Default | Description |
|---|---|---|
GLMCP_LEGIS_ENABLED |
true |
Bundes- & Landesrecht |
GLMCP_RII_ENABLED |
true |
Rechtsprechung im Internet |
GLMCP_ICU_ENABLED |
true |
InfoCuria (CJEU) |
GLMCP_EUL_ENABLED |
true |
EUR-Lex |
GLMCP_DIP_ENABLED |
true |
DIP Bundestag (auto-disabled after 2026-06-01 without own key) |
GLMCP_DIP_API_KEY |
Public key | Override the bundled public API key |
GLMCP_ARXIV_ENABLED |
true |
arXiv preprint search |
GLMCP_NAUTOS_ENABLED |
Auto | nautos.de. Auto-enabled with tenant key or credentials, auto-disabled without. |
| Variable | Required | Description |
|---|---|---|
GLMCP_NAUTOS_TENANT_KEY |
For IP-based | Tenant key (e.g., DWW). Enables IP-based authentication. |
GLMCP_NAUTOS_USERNAME |
For user-based | nautos.de account username |
GLMCP_NAUTOS_PASSWORD |
For user-based | nautos.de account password |
GLMCP_NAUTOS_TENANT_ID |
No | Tenant ID (auto-detected from login response) |
Authentication: IP-based login is tried first (requires GLMCP_NAUTOS_TENANT_KEY). If it fails and credentials are set, user-based login is attempted as fallback.
| Tool | Description |
|---|---|
legis:search |
Search federal and state legislation. Parameter: query, state (e.g., "BW", "BE"), limit. Note: BUND does not support search. |
legis:get |
Retrieve a specific law/norm. BUND: id = "law/section" (e.g., "bgb/823"). Länder: id from search results. Optional save_path. |
legis:toc |
Compact table of contents for a law — section numbers and headings. Supports from/to range and depth filter. BUND: id = law abbreviation (e.g., "bgb"). |
legis:states |
List available jurisdictions with implementation status. |
| Tool | Description |
|---|---|
rii:search |
Search for court decisions. Returns list with doc IDs, titles, and snippets. Use source: "BY" for Bavarian state courts. |
rii:get_decision |
Retrieve full text of a court decision by doc ID. part: K (Kurztext) or L (Langtext, default). Optional save_path to save to file. Use source: "BY" for gesetze-bayern.de IDs. |
| Tool | Description |
|---|---|
icu:search |
Search CJEU decisions and opinions. Returns case numbers, ECLI, dates, and document IDs. |
icu:get_document |
Retrieve full text by case number (C-476/17) or CELEX number. Supports section (Rn ranges, headings, line ranges) and save_path. |
| Tool | Description |
|---|---|
eul:search |
Search EU legislation via SPARQL. Filter by type (directive, regulation, decision, treaty). |
eul:get_document |
Retrieve EU legislation by CELEX number (e.g., "32016R0679" for GDPR). Supports section (Art. 5, Artikel 5-10, headings, line ranges) and save_path. |
| Tool | Description |
|---|---|
dip:search |
Search Bundestagsdrucksachen by title. Filter by type (Gesetzentwurf, Anfrage, etc.), Wahlperiode, date range. |
dip:get |
Retrieve full text of a Drucksache by Dokumentnummer (e.g., "19/27426"). Supports section and save_path. |
dip:search_vorgang |
Search legislative processes (Vorgänge) with status and linked Drucksachen. |
dip:search_plenarprotokoll |
Full text search across parliamentary debate transcripts (BT and BR). |
| Tool | Description |
|---|---|
arxiv:search |
Search preprints by keywords, author, title, abstract, or category. Returns metadata + abstract. |
arxiv:get |
Retrieve paper by arXiv ID. Default: metadata + abstract. With section or save_path: HTML full text as Markdown (~2024+, older: PDF link). |
| Tool | Description |
|---|---|
nautos:search |
Search DIN/EN/ISO standards by document number. Returns acCode, title, date, type. |
nautos:get_document |
Retrieve standard by acCode. Returns outline (metadata + TOC) by default; use section for specific parts, save_path to save full document. |
All document tools use a two-phase approach to avoid flooding the LLM context:
Section formats: "Rn 5", "Rn 5-12", "lines:100-200", or any heading text (fuzzy match).
Documents are converted to pandoc-compatible Markdown:
[Rn. 5]{.rn} (bracketed spans)^[inline footnote text] (pandoc inline footnotes)npm test # Run tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npx @modelcontextprotocol/inspector node dist/index.js
This repo uses Conventional Commits enforced via Husky + commitlint.
Types: feat, fix, docs, style, refactor, perf, test, chore, ci, build, revert
Scopes: legis, rii, icu, eul, dip, nautos, core, deps, config
src/providers/*/BaseError.toJSON() with code, userMessage, recoveryHint; Axios errors auto-wrapped; DNS failures fail fastlegis:, rii:, icu:, eul:, dip:, arxiv:, nautos:)GPL-3.0 - See LICENSE for details.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"german-legal-mcp-server": {
"command": "npx",
"args": []
}
}
}