Mike → Mitch: Swiss legal pivot merges BetterCallClaude in one 1,159-line commit
Commit 6595dfb drops four new modules that reorient the entire Mike codebase toward Swiss jurisdiction: an MCP HTTP client, nine legal tool definitions, an attorney-client privilege scanner, and five prebuilt Swiss workflows. The system prompt is fully replaced with a multi-page Swiss legal identity.
The MCP client in backend/src/lib/mcp/client.ts (~116 lines) speaks JSON-RPC over HTTP to seven hardcoded servers under mcp.bettercallclaude.ch: entscheidsuche, BGE search, fedlex-sparql, onlinekommentar, legal-citations, legal-persona, and TAS jurisprudence. The tool layer in mcp/tools.ts (257 lines) wraps nine legal operations (search_bge, get_bge_decision, search_swiss_decisions, verify_citation, search_federal_legislation, search_commentary, legal_strategy, legal_draft, legal_analyze) in OpenAI-style definitions.
Before any content hits those external servers, it passes through backend/src/lib/privacy.ts. This 356-line Anwaltsgeheimnis scanner checks for strong markers (terms like anwaltsgeheimnis, Art. 321 StGB, secret professionnel, segreto professionale) that always block, and weak markers (vertraulich, confidentiel, confidential) that block only when combined with client/case context words. Local document tools are exempt. When a block fires, the LLM gets a privilege warning in place of the database result.
Five prebuilt Swiss workflows land in builtinWorkflows.ts: litigation prep, contract review, due diligence, legal opinion, compliance check. The system prompt in chatTools.ts is rewritten from "You are Mike" to a multi-page Swiss identity covering Gutachtenstil reasoning, BGE/ATF/DTF citation standards, all 26 cantons, and DE/FR/IT/EN language handling.
The MCP server endpoints are fedec65's private infrastructure on Railway (EU region), rate-limited at 60 req/min per IP with no availability contract for third parties. Anyone adopting the client pattern must point it at their own servers.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?