A side-by-side look at the Questlaw Library and Swiss Case Law MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Questlaw Library for legal work as a local process; choose Swiss Case Law for legal over a hosted endpoint. You can also run both side by side in one mcpServers block.
QUESTLAW_VAULT_FILE, QUESTLAW_RECOVERY_CODE, QUESTLAW_ALLOW_ENV_KEY.library_overview, list_cases, search_library.search, fetch, search_decisions.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Legal | Legal |
| Quality signal | 53/100 · Good | 61/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Remote HTTP/SSE |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | QUESTLAW_VAULT_FILEQUESTLAW_RECOVERY_CODEQUESTLAW_ALLOW_ENV_KEY | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 74 |
| Directory activity | 0 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 10 | 42 |
| Full listing | View Questlaw Library | View Swiss Case Law |
library_overviewWhat the library holds, its projects, courts, and tags, and the export datelist_casesEvery authority, or a filtered subset, in pagessearch_libraryOne ranked search across everythingsearch_casesSaved authorities that matchget_caseOne authority in full, with notes, quotations, and related casessearch_quotesSaved quotations that matchlist_project_casesEverything filed under one projectget_source_textCaptured text of a statute, regulation, rule, or opinionfind_citation_mentionsEvery place a draft cites an authority already in the libraryreload_snapshotRead the newest export from disk againsearchMinimal search tool following the deep-research search/fetch convention. Returns a ranked list of Swiss court decisions matching a query, each as {id, title, url, snippet}. Pair with `fetch` to retrieve a decision's full text by id. General (non-deep-research) clients should prefer `search_decisions`, which exposes filters (court, canton, date, language) and richer metadata.fetchMinimal fetch tool following the deep-research search/fetch convention. Fetches one Swiss decision's full text by id, returning {id, title, text, url, metadata}. The id comes from a `search` result (a decision_id like bger_6B_1234_2025; a docket number or BGE reference also resolves). General clients should prefer `get_decision`.search_decisionsUse this tool to find COURT DECISIONS (Rechtsprechung): 1,050,000+ Swiss federal and cantonal decisions plus ~2,800 ECtHR decisions concerning Switzerland. Full-text search with keywords, phrases (in quotes), Boolean operators (AND, OR, NOT), prefix matching (word*), docket lookup (6B_1234/2025) and column-scoped search (regeste:keyword). Filter by court, canton, language, date range, chamber. Results are relevance-ranked and enriched with citation counts, statute references and is_leading_case. Use offset to page. Most recent decisions: empty query + sort='date_desc' + court filter. Newly PUBLISHED decisions (alerts): published_from + sort='published_desc'. Not for statutes (search_laws), commentary (search_scholarship), or administrative guidance (search_practice).get_decisionFetch a single court decision with full text. Look up by decision_id (e.g., bger_6B_1234_2025), docket number (e.g., 6B_1234/2025), or partial match. Full text is truncated at 200,000 characters for very long decisions. Set full_text=false to get only metadata and regeste.get_decisionsUse this tool to fetch SEVERAL decisions at once (1-10 ids) instead of calling get_decision repeatedly. Same data per decision — canonical citation strings, Markdown link, Regeste, metadata — in ONE call. Prefer this whenever you are about to read more than one decision from a search result: it is the difference between one tool call and ten, which matters because clients cap tool calls per turn. full_text defaults to FALSE here (unlike get_decision) because ten full judgments exceed connector response limits; set it true only for a short id list, and each text is excerpted with the cut disclosed. Ids not found are reported individually — the rest of the batch still returns.list_courtsList all available courts with decision counts, date ranges, and language coverage. Use this to discover what data is available.get_statisticsGet aggregate statistics about the dataset. Optionally filter by court, canton, or year.find_citationsGiven a decision_id, show what it cites and what cites it. Uses the reference graph database with 9.65M citation edges. Returns resolved citations with confidence scores and unresolved references.find_appeal_chainTrace the appeal chain (Instanzenzug) for a decision. Shows prior instances (lower courts) and subsequent instances (appeals to higher courts). Reconstructs the full procedural path, e.g. Bezirksgericht → Obergericht → Bundesgericht. Uses the is_prior_instance flag from decision headers.find_leading_casesFind the most-cited decisions for a topic or statute. Authority ranking based on citation graph; a free-text topic ranks decisions whose regeste carries the query terms first (`regeste_match`: share of terms found, null without a regeste). Filter by statute (law_code + article), topic query, court, and date range. Top-3 results auto-attach a `pinpoint` field {e_number, matched_sentence, confidence, url, score, source} anchoring the most-relevant Erwägung (surface it as 'E. <e_number>' when confidence is high or medium). Each result also carries citation_string_{de,fr,it} + canonical_url + is_leading_case + citation_count for ready-to-quote Swiss-format citations. A statute reference inside `query` ("Art. 29 BV") is used as the statute filter. When the query excludes every candidate, the page is relaxed to ranked OR and flagged `filters_relaxed: true` with a `note` — nearest neighbours, not on-point authority.analyze_legal_trendYear-by-year decision counts showing jurisprudence evolution. Use with a statute reference (law_code + article), a text query, or both. Returns yearly counts with visual bar chart.draft_mock_decisionBuild a research-only mock decision outline from user facts. Combines relevant Swiss case law retrieval with statute references. If possible, enriches statutes with Fedlex text excerpts. IMPORTANT: The tool may return clarification questions (high/medium priority). High-priority clarifications must be answered (via the clarifications parameter) before the tool will provide a conclusion. Call again with clarifications to get the full analysis.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"questlaw-library": {
"command": "npx",
"args": [
"-y",
"questlaw-mcp@0.5.1"
],
"env": {
"QUESTLAW_VAULT_FILE": "YOUR_QUESTLAW_VAULT_FILE_HERE",
"QUESTLAW_RECOVERY_CODE": "YOUR_QUESTLAW_RECOVERY_CODE_HERE",
"QUESTLAW_ALLOW_ENV_KEY": "YOUR_QUESTLAW_ALLOW_ENV_KEY_HERE"
}
}
}
}
{
"mcpServers": {
"swiss-case-law": {
"url": "https://mcp.opencaselaw.ch"
}
}
}