BGB (Germany) MCP Server
by arxohqio.arxo/de-bgbv0.1.9
German Civil Code (BGB) as executable rules: periods, deadlines and more, answered with grounds
context tax
~9,551 tok/turn20 tools
security
pending
cold start
pending
freshness
pending
Our reading of BGB (Germany), from the data
BGB (Germany) is an MCP server from arxohq, listed in the official MCP Registry.
Its 20 tools add about 9,551 tokens to every model turn (measured 2026-10-19).
It runs either locally over stdio or as a hosted endpoint.
Install BGB (Germany) MCP server
Install in Claude Code
claude mcp add de-bgb -- npx -y @arxo/mcp-de-bgbInstall in Cursor
{
"mcpServers": {
"de-bgb": {
"command": "npx",
"args": [
"-y",
"@arxo/mcp-de-bgb"
]
}
}
}Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project).
Install in Claude Desktop
{
"mcpServers": {
"de-bgb": {
"command": "npx",
"args": [
"-y",
"@arxo/mcp-de-bgb"
]
}
}
}Settings → Developer → Edit Config (claude_desktop_config.json), then restart.
Install in VS Code
{
"servers": {
"de-bgb": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@arxo/mcp-de-bgb"
]
}
}
}Add to .vscode/mcp.json in your workspace.
Install in Windsurf
{
"mcpServers": {
"de-bgb": {
"command": "npx",
"args": [
"-y",
"@arxo/mcp-de-bgb"
]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json.
Remote endpoints
- streamable-http
https://mcp.arxo.io/mcp/de-bgb
Context tax
Connecting this server adds ~9,551 tokens of tool definitions to every model turn (heavy, 20 tools). Measured 2026-10-19 via its hosted endpoint; o200k tokenizer, worst case for clients that load all tools up front. How we measure
| Model | Per 1,000 turns | With prompt caching |
|---|---|---|
| Claude Opus 5.5 | $38.20 | $1.91 |
| Claude Sonnet 5.5 | $19.10 | $1.91 |
| Claude Haiku 5.5 | $0.955 | — |
Input prices as of 2026-10-06. Excludes your own prompt and output.
Tools (20)
law_ask1,570 tokPut a question to formalised law. When the answer is "not established" it carries whyNot — the engine's why_not report §185: the candidate rules and the state of every conjunct (satisfied / not satisfied / undetermined); the missing facts are visible there and need not be guessed. BEFORE THE FIRST call obtain the predicate names through law_search (a question in your own words → addresses) or law_packages (the signatures of a known instrument) — an invented name will be rejected. If the tool returned an error or "not established", THAT IS THE ANSWER: pass it to the user and do not substitute g
law_query1,018 tokEine deterministische LawQL-Abfrage über das CLIR einer Formalisierung: eine Frage an das Modell des Aktes selbst, nicht an einen Fall. Relationen: nodes(id,kind,package,package_name,path), edges(from,to,role), anchors(node,anchor,act,locator,path), labels(node,lang,text,status), fields(node,field,value,value_kind), rules(id,strength,head_predicate,head_polarity,head_variables,body_variables,body_predicates), norms(id,modality,goal_kind,condition_predicates), positions(norm,kind,bearer_type), windows(norm,kind,deadline), imports(package,imported,semantic_hash), links(from,to,kind: imports|alia
law_packages775 tokThe catalogue of formalised law: instruments, predicates with signatures, the boundaries of coverage. This is where the NAMES of predicates come from — they must never be guessed. But do NOT start from the catalogue when looking for the right instrument: the overview is large, and the title of an instrument rarely matches the words of a question ("Newton's laws of motion" contains no word "physics"). A question in your own words goes to law_search first, which returns addresses; the catalogue is for the exact signature of what you found. With no arguments — the overview: one line per instrumen
law_prepare_answer536 tokAt the explicit request of the user, repeat between 1 and 12 earlier law_ask or law_process_run calls (the course of a case, DECISION-0160), compare their replayControl strictly, and prepare a non-public frozen document for 24 hours. The client never supplies the machine answer: the server obtains it only by executing afresh. A divergence in any input, in the law, in a resource, in the server code, in the engine library or in the result rejects the document as a whole.
law_process_run437 tokHow a particular case will run, step by step (O-5, DECISION-0052): a log of {date, attempt?, facts?} is executed frame by frame, and the law of each frame is the law of ITS date. The answer says: which stages have been entered; which attempted transition produced NO legal effect (§164 — "the act was performed but did not take place"); which duties are violated and which time limits are running; what is available next and WHAT EXACTLY is missing for the rest. The names of transitions come from law_process. Stages entered means "was it ever entered", not "where it is now": the core 0.1 does not
law_sources371 tokSources: by default short excerpts (view=summary), 5 texts per page, with the address of the full text in fragments[].full. Either package or fragment is required (a StableId from law_search/law_rules). view=full returns exact parts of the text: textRange sets a range of Unicode characters, fragments[].next is the continuation with a contentHash. The hash refers to the WHOLE source, not to the excerpt or the part. textOffset/textLimit require fragment; a continuation requires contentHash. Lists are paged with offset/limit; the answer budget may shrink a page.
law_case_ask368 tokDie Operation ask §168.4 (DECISION-0165, DECISION-0399): eine registrierte Sache eines Fallpakets über ihren verankerten Abhängigkeiten ausführen und das kanonische Auswertungsdokument mit Beweis und Manifest zurückgeben. Die Frage ist JSON nach query.schema.json (query), eine evaluate-Zeichenkette (evaluate + queryId), eine gespeicherte queryId ohne query oder card + args. Eine Verweigerung der Vorbereitung ist ein Fehler mit LDC-*-Code, nie eine leere Antwort.
law_report362 tokA REPORT of a divergence between the formalisation and the source: the answer contradicts the pinned text, a norm of the source is not expressed by a rule, a §218 label diverges from the text, an address cannot be found. A report is a hypothesis for triage by a formaliser: it does NOT change the law, it never reaches the answers of the other tools, and "not derived" does not become "derived" because of it. An address is required and is checked against the catalogue: package, fragment (a StableId from law_sources) and/or predicate; callId is the X-Law-Call-Id of the answer you disagree with. Th
law_argue355 tokHow robust a conclusion is: the map of the dispute under the argumentation profile §274 (DECISION-0039). The answer falls into four classes: SKEPTICALLY_ACCEPTED — the conclusion is invulnerable (it survives in the grounded extension); CREDULOUSLY_ACCEPTED — merely defensible (there is a position for it and a position against); REJECTED — it survives nowhere; NO_ARGUMENT — there are no arguments at all. It builds ALL arguments out of the facts and the rules of the instrument (chains that did not fire in ordinary inference included), the rebut/undermine/undercut attacks and the defeats by prior
law_explain348 tokUnfold the proof of a law_ask answer into a chain "rule ← premises → conclusion". The compact input: question (the original law_ask arguments, truth/collect), resultHash and codeHash from the provenance of the answer. The server repeats the computation and compares the hashes; if anything changed it refuses explicitly. Alternatively pass the evaluation from law_ask(proof=true). answerResource=fullAnswer.uri explains a stored compact snapshot without recomputing and without the client loading pages; by default only the proofRef chain. nodeId selects one node and all of its premises (up to 24 KB
law_rules306 tokThe rules of formalised law put into words: exactly how a predicate is derived (premises, source articles). Call this BEFORE supplying facts to law_ask — the rules say which facts are needed instead of leaving them to be guessed. For large instruments package=… returns a table of contents; the full text comes from predicate=…. The listing by package is paged: limit (20 by default, 500 at most) and offset; the remainder is named in the text (`showing a–b of N; k more`) and in structuredContent (total, truncated, next — a ready-made continuation call).
law_screen299 tokBuild a necessary condition — a superset — for the preliminary selection of rows from an external source (DECISION-0120). This is NOT a legal answer and NOT SQL: the result is a typed tree and a manifest of the extensions up to TRUE. Every row that passes must then be computed in full by the engine, with a proof graph, on the same snapshot of the data. The binding is passed as a pinnable object; sourceSchemaContentHash is the actual hash of the source schema and is compared loudly with the pin. Case facts that carry provenance (origin, document, quote, extractor) are supplied to law_ask, not h
law_search244 tokA semantic SEARCH over formalised law: a question or a notion in your own words → candidates with addresses — predicates with signatures, rules, article fragments. This is the layer of DISCOVERY, not of the answer: the result says WHAT to ask next (law_ask by signature, law_rules, law_sources) and establishes neither a fact nor a norm. The ranking is a deterministic lexical embedder (DECISION-0040), and similarity of text is not applicability of a norm. If you know the exact name, go straight to law_packages/law_ask; an empty result does NOT mean the norm does not exist.
law_editions180 tokThe axis of editions (O-2): what changed in an instrument between two dates of the law — the state of the editions, the dating of the norms and the semantic diff §215 between the D1 projections. The verdict NOT_DATED means "there was nothing to date it by", not "nothing changed". The outcome of a particular question on a date comes from law_ask with legalTime.
law_passport178 tokPassport of an exact release: purpose, interface, boundaries, checks and performance. The reports section holds the history of measurements, failures included. Entries are paged by JSON Pointer; next continues the answer.
law_process174 tokWhich stages the procedure established by an instrument consists of, and whether it carries a structural defect (O-5, DECISION-0052). The stages, the transitions and the condition of every transition are reconstructed from the formalisation rather than retold: what leads from where to where, and under what condition. The check of the graph: unreachable stages, dead transitions, a transition that enters no stage at all. Without package — the list of instruments whose procedure is formalised. A stage with no exit is named but is NOT counted as a defect: whether it is terminal by design cannot be
law_revoke_answer82 tokRevoke a published document using its separate secret. The public id alone grants no control; revocation closes the HTML page, the API and the download.
law_capture_answer76 tokRun a registered producer and obtain producerControl/0.2 for a later verifiable preparation of a Lens. The producer is chosen only from the shipped registry.
law_publish_answer67 tokPublish a prepared document. Repeating it with the same preparationId idempotently returns the same URL and the same separate revocation secret.
law_answer_capabilities62 tokA machine-readable matrix of the Lens producers that are actually installed, of replay/projection checks, profiles, limits and the contract tests that confirm them. declared_only means a schema with no executable witness.
Freshness
Not enough public signals yet to judge maintenance.
Last commit (default branch)
2026-10-14 · 4d ago · GitHub
Latest release
no data · GitHub
Package published
no data · npm/PyPI
Registry entry updated
2026-10-14 · 4d ago · official registry · v0.1.9
FAQ
›How do I install the BGB (Germany) MCP server in Claude Code?
Run: claude mcp add de-bgb -- npx -y @arxo/mcp-de-bgb. For Cursor, VS Code, Claude Desktop and Windsurf, use the install tabs above.
›Does BGB (Germany) require an API key?
No required environment variables are declared in its published metadata.
›Can I use BGB (Germany) as a remote (hosted) MCP server?
Yes — it offers both a hosted endpoint and a local stdio package.
›Is BGB (Germany) in the official MCP registry?
Yes, as io.arxo/de-bgb.
›How many tokens does BGB (Germany) add to my context?
Its tool definitions total about 9,551 tokens, resent on every turn.
Sources and method
- Official MCP Registry entry
- updated 2026-10-14
- GitHub repository
- fetched 2026-10-19
- Package registry (npm / PyPI)
- listed
- Tool list (tools/list), measured by us
- 2026-10-19
- Last checked against all sources
- 2026-10-19
The description, packages and links come from the maintainer's own published metadata. Token cost, security signals, freshness and the reading above are MCPSkillHub's own measurements; see the methodology. Spot an error? Request a correction or claim the listing.