PRIMAMCP
Server Details
Verified, citable German & EU law for any LLM. Daily updates from official sources, hosted in DE.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- PLANIT-TECH/primamcp
- GitHub Stars
- 11
- Server Listing
- PRIMAMCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 11 tools
The retrieval tools are carefully delineated: legal_lookup (single citation, semantic fallback), legal_lookup_batch (1-20 citations, exact match only), legal_search (topic/fact pattern), and legal_find_citing_decisions (citation inventory) each have a distinct job spelled out in the descriptions. The only soft overlap is legal_search's cited_norm filter versus legal_find_citing_decisions, which the descriptions address by contrasting inventory vs. ranked retrieval; legal_lookup vs. legal_lookup_batch remains a subtle distinction an agent could still fumble.
Nine of eleven tools follow a clean legal_verb_noun convention (legal_lookup, legal_search, legal_get_toc, legal_find_citing_decisions). The MCP-standard list_resources/read_resource break the legal_ prefix, but that is a conventional resource pair rather than genuine inconsistency.
Eleven tools is well within the sensible range and each maps to a specific retrieval axis: lookup, batch lookup, topic search, citing decisions, TOC, context window, legislative materials, law listing, and stats. Nothing looks like padding, and the two resource tools round out the surface without bloat.
The read-only legal research lifecycle is well covered: discovery (list_laws, get_toc), targeted retrieval (lookup, batch), exploration (search, get_context), citation graph via cited_norms, case-law application, and legislative intent. Minor gaps remain — no dedicated reverse-citation tool for 'which norms does this decision cite' beyond the cited_norms array, and no court/abbreviation reference listing.
Available Tools
11 toolslegal_find_citing_decisionsFind Citing Court DecisionsARead-onlyIdempotentInspect
List German federal court decisions (BGH, BVerwG, BFH, BAG, BSG, BVerfG, BPatG, GmSOGB), German state court decisions (Sächsisches OVG, Oberverwaltungsgericht NRW, Oberlandesgericht Düsseldorf, Oberlandesgericht Hamm, Oberlandesgericht Köln, Landesarbeitsgericht Düsseldorf, Landesarbeitsgericht Hamm, Landesarbeitsgericht Köln, Landessozialgericht NRW, Finanzgericht Düsseldorf, Finanzgericht Köln, Finanzgericht Münster, Verfassungsgerichtshof NRW) and EU court decisions (EuGH, EuG) citing a specific legal provision — the raw citation inventory, newest first. legal_search with the cited_norm filter searches within the same population and ranks the candidates against a specific question or fact pattern.
Matching is at paragraph level: '§ 280 Abs. 1 BGB' finds all decisions citing § 280 BGB. Returns decisions with Leitsatz (key legal principle summary) and ECLI identifier. Each decision also exposes a cited_norms array — a list of canonical citation strings (e.g. ['Art. 101 AEUV', '§ 280 BGB', 'Art. 6 DSGVO']) describing the other provisions the decision references. Pass an element back to legal_lookup to retrieve the norm's text and walk the citation graph (e.g. discover which BGB / DSGVO articles a BGH judgment hinges on, then resolve them in turn). German provisions, EU treaty articles (AEUV / EUV) and EU instruments with a registered short alias resolve directly — EuGH prose like 'der Verordnung (EU) 2016/679' is reverse-mapped to those aliases (DSGVO, KIVO, DSA, …) where one exists. A numbered EU instrument without a registered alias is shown in the compact 'EURL 98/59' form: it identifies the instrument but is not yet resolvable via legal_lookup.
Inputs: cited_norm (required), limit. Returns: object
legal_get_contextGet Surrounding ProvisionsARead-onlyIdempotentInspect
Get a stored text section and its neighbours in document order, including consecutive provisions, parts of a long provision or sections of a court decision. Serves questions that span consecutive provisions or need the surrounding context of a norm's scope.
Requires a norm_id from legal_search, legal_lookup or legal_get_toc. Returns target, before and after sections, with up to 10 neighbours in each direction. Each section's id is a valid norm_id for a subsequent call. A window may cross provision boundaries; norm_key identifies which provision each section belongs to. legal_get_toc gives the law-wide overview.
Inputs: norm_id (required), after, before. Returns: object
legal_get_materialsGet Legislative Materials (Begründung)ARead-onlyIdempotentInspect
Return the official legislative reasoning (Gesetzesbegründung / explanatory memorandum from a Bundestags-Drucksache) for a specific German federal provision — the source for genetic/historical interpretation: what the legislator intended with this norm.
It answers questions that turn on a norm's purpose (ratio legis / 'why does this rule exist'), the meaning of an unclear or undefined term, whether a regulatory gap is planwidrig (grounds an analogy) or a deliberate silence (grounds an Umkehrschluss), or what a specific amendment was meant to achieve — the everyday uses of materials in an Auslegung or a Schriftsatz. Weight: the Begründung is strong evidence of legislative intent but not binding, and the statutory wording stays the outer limit of any reading.
Pass a provision like '§ 823 BGB' or 'Art. 87a GG'. Returns the linked Begründungs-Abschnitte newest first, each with its 'BT-Drs.' Fundstelle, the reasoning text, and the other norms the same change amended ('target_norm_keys'). Complements legal_find_citing_decisions (how courts apply a norm) with the drafting intent behind it. Covers amendments since 1949 to German federal law (gesetze-im-internet corpus) only; an unknown or non-German provision returns no materials. Excerpts are prepared from the Bundestag-extracted text, not the original PDF.
Inputs: citation (required), limit, jurisdiction. Returns: object
legal_get_statsShow Corpus StatisticsARead-onlyIdempotentInspect
Get database and search index statistics including counts of laws, norms, and indexed vectors. Use for health checks or to understand the scope of the legal corpus.
Inputs: no named parameters. Returns: object
legal_get_tocBrowse Law Table of ContentsARead-onlyIdempotentInspect
Get the table of contents of a specific law or court decision. Returns norm keys (e.g. '§ 1', 'Art. 3'), titles, and chapter headings in document order.
Gives the overview of a law's structure; a returned norm_id feeds legal_get_context for the full text. Paginated for large laws.
Inputs: law_abbreviation (required), limit, offset, language, +2 more. Returns: object
legal_list_lawsList Available LawsARead-onlyIdempotentInspect
List available laws, regulations, and court decisions in the database. Returns abbreviation, title, source type, jurisdiction, document kind, and version date for each entry.
Unfiltered listings can contain thousands of entries; pass a search term or source_type to keep responses focused. Useful for discovering valid law abbreviations to use as filters in legal_search; legal_get_toc shows a listed law's structure.
Not an existence check for a specific law: EUR-Lex entries store the official long title, so a short name or number can miss a law that is in the corpus. legal_lookup with a citation or legal_search with a topic provides alternative retrieval paths; a missing match does not prove absence from the corpus.
Inputs: limit, query, offset, language, +3 more. Returns: object
legal_lookupLook Up Provision by CitationARead-onlyIdempotentInspect
Retrieve a specific legal provision by citation (e.g. '§ 823 BGB', 'Art. 6 DSGVO', '§ 280 Abs. 1 BGB'), or a court decision by Aktenzeichen or ECLI (e.g. 'VII ZR 184/14', 'BGH VII ZR 184/14', 'C-184/14', 'ECLI:DE:BGH:2017:050117BVIIZR184.14.0'). Citation order is flexible — '§ 9 DSGVO', 'DSGVO Art. 9', 'Artikel 9 DSGVO' all resolve correctly. is_exact_match reports whether the citation was matched exactly; non-exact results can be a semantic fallback, the first section of an annex, or an uncertain decision match. The result hint explains which case applies; found=true alone does not prove citation identity. Provision text is reassembled where available; content_truncated and the result hint identify incomplete text and its continuation. An ambiguous provision returns found=false with stored candidates and citation_forms: complete citations that select each printing, including a source occurrence where required. Select an EUR-Lex article reprint with its quoted complete key, e.g. '"Art. 45 (2)" reg_2013_153'. An unquoted paragraph qualifier does not select a printing. Quote a complete stored document-part key when its title contains article references; the quoted key takes precedence over coordinates within that title. A decision lookup returns its lead section (Leitsatz); further sections are reachable via legal_get_toc or legal_get_context on the returned norm_id. Where an abbreviation names laws of several legal orders and neither the scope nor the cited provision decides, the result is found=false with reason='ambiguous_jurisdiction' and one candidate per law, each with the legal_lookup arguments that resolve exactly it; also_exists_in on a hit lists the other laws the abbreviation names.
Inputs: citation (required), language, source_type, jurisdiction. Returns: object
legal_lookup_batchLook Up Multiple ProvisionsARead-onlyIdempotentInspect
Retrieve multiple cited provisions or decisions in a single call without semantic fallback. Accepts 1-20 citations — norm citations and court-decision references, same forms as legal_lookup (e.g. ['§ 823 BGB', 'Art. 6 DSGVO', 'VII ZR 184/14']). Citations not found appear as found=false. Norm citations require an exact match. Decision references follow the same resolution as legal_lookup and can yield ambiguous, relaxed-reference or title-only matches; is_exact_match and the hint report that uncertainty. Each entry has its own match status and any ambiguity or truncation hint. Provision ambiguities include candidates and reachable citation_forms, as in legal_lookup. Decision matches return the lead section, not the complete judgment. Fuzzy resolution of a hard-to-find provision belongs to legal_lookup, not to this tool.
Inputs: citations (required), language, source_type, jurisdiction. Returns: object
legal_searchSearch Legal DocumentsARead-onlyIdempotentInspect
Search legal documents across jurisdictions (DE federal, EU, Bavaria, North Rhine-Westphalia, Saxony) using hybrid semantic + keyword search. Returns ranked results with content snippets, not full text.
Suitable for topic questions and case facts when the relevant provision or decision is not yet known. A known citation is resolved by legal_lookup; several known citations by legal_lookup_batch. Natural-language questions using the documents' terminology usually rank better than keyword lists or doctrinal labels, e.g. 'Wann verjährt ein Schadensersatzanspruch?' or 'Wie sind mehrdeutige Vertragsklauseln auszulegen?'. Ranking indicates textual relevance, not legal applicability or exhaustive coverage. document_kind separates norms from case-law: the three norm subtypes ('statute'/'regulation'/'directive') form one filter class — any of them admits all three, so an EU regulation or directive is never hidden by a reflexive 'statute'. 'decision' restricts to court decisions and drops every norm before ranking, so it can hide the statute that answers a rule question. Without a document_kind filter, norms, case law and guidance can rank together, subject to other filters. This supports mixed questions (norm + its case-law application) and unclear German-vs-EU scope (e.g. data protection: BDSG vs DSGVO). Legislative materials are excluded by default and require explicit scope. A statute law_abbreviation combined with a decision scope ('decision', a decision source_type, court or decision_type) yields an empty set, because decisions carry file-number identifiers, not statute abbreviations; cited_norm filters decisions by the provision they cite. legal://filter_values documents the per-value definitions and the disambiguation list. law_abbreviation and source_type restrict the law and source respectively; when omitted, they add no restriction. Without jurisdiction and language the account's scope applies, named in jurisdiction_scope. legal://rechtsrahmen lists which law governs which domain (EU vs national, substantive vs procedural).
Common mix-ups (which law governs):
Procedural law by jurisdiction: ZPO (zivilrecht), STPO (strafrecht), VWGO (verwaltungsrecht), ARBGG (arbeitsrecht), SGG (sozialrecht), BVERFGG (verfassungsrecht), FAMFG (familienrecht)
AO, ESTG, KSTG, USTG, FGO: AO=procedure, EStG/KStG/UStG=substantive
VVG, BGB: Insurance rescission → BGB §§ 812ff, not VVG
VERSAUSGLG, FAMFG: VersAusglG=substantive, FamFG=procedure
APOG, AMG: ApoG=operation, AMG=drug approval
WEHRPFLG, SG: WPflG=conscription, SG=soldiers
AGG, BETRVG: AGG=anti-discrimination, BetrVG=works council
Inputs: query (required), court, limit, chapter, +9 more. Returns: object
list_resourcesList ResourcesARead-onlyInspect
List all available resources and resource templates.
Returns JSON with resource metadata. Static resources have a 'uri' field, while templates have a 'uri_template' field with placeholders like {name}.
Inputs: no named parameters. Returns: result
read_resourceRead ResourceARead-onlyInspect
Read a resource by its URI.
For static resources, provide the exact URI. For templated resources, provide the URI with template parameters filled in.
Returns the resource content as a string. Binary content is base64-encoded.
Inputs: uri (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Verified, citable German & EU law for any LLM. Daily updates from official sources, hosted in DE.
Cited answers from your organisation's documents. GDPR-compliant, hosted in Germany.
German court decisions and statutes with citation checks. OAuth 2.1 or Bearer token.
Verified, tier-0 regulatory data for AI across 850+ official sources and 50+ jurisdictions.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceCite-grade German legal-text infrastructure for LLM agents, providing access to federal, Länder, and EU laws with cryptographic provenance.39 PyPI2Apache 2.0
- AlicenseNot gradedqualityFmaintenanceEnables querying over 6,800 German federal statutes, case law, and legislative preparatory works with verbatim source text. Integrates EU law cross-references and provides citation validation and legal stance building.356 npm23Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and analyze German legal texts using vector embeddings and semantic search.91MIT

kvasir-legalofficial
FlicenseNot gradedqualityDmaintenanceVerifiable German, Austrian, Swiss and EU law: resolve citations to the wording in force, verify the citations a model produced against the official source, and walk the citation graph.-
Glama MCP Gateway
Add one secure layer between your agents and this server.