{"_id":"@ansvar/dutch-law-mcp","_rev":"4-1a5168c2e67bef1629247ee4d7c9adeb","name":"@ansvar/dutch-law-mcp","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@ansvar/dutch-law-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","ai","claude","dutch-law","netherlands","legal","compliance","wetten","bwb","rechtspraak","ansvar"],"author":{"name":"Ansvar Systems AB","email":"hello@ansvar.ai"},"license":"Apache-2.0","_id":"@ansvar/dutch-law-mcp@1.0.0","maintainers":[{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"}],"homepage":"https://github.com/Ansvar-Systems/Dutch-law-mcp#readme","bugs":{"url":"https://github.com/Ansvar-Systems/Dutch-law-mcp/issues"},"bin":{"dutch-law-mcp":"dist/index.js","dutch-law-mcp-http":"dist/http-server.js"},"dist":{"shasum":"a67ff977aa7951d24743897354cfc7e4e8f0bcdb","tarball":"https://registry.npmjs.org/@ansvar/dutch-law-mcp/-/dutch-law-mcp-1.0.0.tgz","fileCount":135,"integrity":"sha512-jpZ8ERQrDd6utiwGyTtYZTlgAQdX+GHvzb/bsdfPpje+Uhkw6Ar9w+Z3ul4Qwer1HUK1PYc2Wp4axs2eUCoE1Q==","signatures":[{"sig":"MEUCIQD94BGN3t/oWaeLfAFQaXpPpJx44wL/NMu7PaheEItUdgIgIjedxdNFkNNHAgTh0rUpBBH+3VekHz/tvvwqWx5uOyU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":285807},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b91e26872ac665da43abec2abdbe785eb8e2788e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run","build":"tsc","start":"node dist/index.js","format":"prettier --write .","ingest":"tsx scripts/ingest-bwb.ts","prepare":"node -e \"try{require('husky')}catch(e){process.exit(0)}\" && husky || true","build:db":"tsx scripts/build-db.ts","dev:http":"tsx src/http-server.ts","lint:fix":"eslint --fix src/ tests/ scripts/","ingest:all":"tsx scripts/auto-ingest-all-statutes.ts","start:http":"node dist/http-server.js","test:watch":"vitest","audit:seeds":"tsx scripts/audit-seeds.ts","postinstall":"test -d dist || npm run build || true","fetch:eurlex":"tsx scripts/fetch-eurlex-metadata.ts","format:check":"prettier --check .","ingest:cases":"tsx scripts/ingest-rechtspraak.ts","check-updates":"tsx scripts/check-updates.ts","test:coverage":"vitest run --coverage","populate:xrefs":"tsx scripts/populate-cross-references.ts","prepublishOnly":"npm run build","prepare-release":"node scripts/prepare-release.js","ingest:prep-works":"tsx scripts/ingest-preparatory-works.ts","populate:versions":"tsx scripts/populate-provision-versions.ts","extract:definitions":"tsx scripts/extract-definitions.ts","import:eurlex-documents":"tsx scripts/import-eurlex-documents.ts"},"_npmUser":{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"},"repository":{"url":"git+https://github.com/Ansvar-Systems/Dutch-law-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade Dutch legal research MCP server with comprehensive statute coverage and EU law cross-references","directories":{},"_nodeVersion":"25.2.1","dependencies":{"@ansvar/mcp-sqlite":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.27.0","vitest":"^4.0.18","prettier":"^3.5.3","@eslint/js":"^9.27.0","typescript":"^5.9.3","@types/node":"^22.15.29","lint-staged":"^16.1.0","fast-xml-parser":"^5.3.5","typescript-eslint":"^8.33.1"},"_npmOperationalInternal":{"tmp":"tmp/dutch-law-mcp_1.0.0_1771053693955_0.6314460661168717","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Ansvar MCP servers are now distributed as source from github.com/Ansvar-Systems/dutch-law-mcp under Apache 2.0. Self-hosting instructions: see the repo README. Hosted gateway: ansvar.eu"},"1.1.0":{"name":"@ansvar/dutch-law-mcp","version":"1.1.0","keywords":["mcp","model-context-protocol","ai","claude","dutch-law","netherlands","legal","compliance","wetten","bwb","rechtspraak","ansvar"],"author":{"name":"Ansvar Systems AB","email":"hello@ansvar.ai"},"license":"Apache-2.0","_id":"@ansvar/dutch-law-mcp@1.1.0","maintainers":[{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"}],"homepage":"https://github.com/Ansvar-Systems/Dutch-law-mcp#readme","bugs":{"url":"https://github.com/Ansvar-Systems/Dutch-law-mcp/issues"},"bin":{"dutch-law-mcp":"dist/index.js","dutch-law-mcp-http":"dist/http-server.js"},"dist":{"shasum":"3ecca134e3e355df4ed79de7f22039ba8c4e1b64","tarball":"https://registry.npmjs.org/@ansvar/dutch-law-mcp/-/dutch-law-mcp-1.1.0.tgz","fileCount":139,"integrity":"sha512-Uie7Cl6tuHutkpNP+8rt3luDQzGqzfjsGgLcc1stx+OeDwP1YWwnCr+UZQ++PhX/VJdRYmHpqxQ9yhW/fofS2A==","signatures":[{"sig":"MEYCIQC/LZAUy4kDrMB+T1+XW6qye0hCJq9rHBgICI5M/ZXqyAIhALD/q3b/iK6GhaqRUv1ZCabPiMfVe0pSGG9+LXrpTpUX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297653},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"83b55863afd9e38bfb757593554fd1896eefd8ba","mcpName":"eu.ansvar/dutch-law-mcp","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run","build":"tsc","start":"node dist/index.js","format":"prettier --write .","ingest":"tsx scripts/ingest-bwb.ts","prepare":"node -e \"try{require('husky')}catch(e){process.exit(0)}\" && husky || true","build:db":"tsx scripts/build-db.ts","dev:http":"tsx src/http-server.ts","lint:fix":"eslint --fix src/ tests/ scripts/","ingest:all":"tsx scripts/auto-ingest-all-statutes.ts","start:http":"node dist/http-server.js","test:watch":"vitest","audit:seeds":"tsx scripts/audit-seeds.ts","postinstall":"test -d dist || npm run build || true","fetch:eurlex":"tsx scripts/fetch-eurlex-metadata.ts","format:check":"prettier --check .","ingest:cases":"tsx scripts/ingest-rechtspraak.ts","build:db:paid":"tsx scripts/build-db-paid.ts","check-updates":"tsx scripts/check-updates.ts","test:coverage":"vitest run --coverage","populate:xrefs":"tsx scripts/populate-cross-references.ts","prepublishOnly":"npm run build","prepare-release":"node scripts/prepare-release.js","ingest:prep-works":"tsx scripts/ingest-preparatory-works.ts","populate:versions":"tsx scripts/populate-provision-versions.ts","extract:definitions":"tsx scripts/extract-definitions.ts","import:eurlex-documents":"tsx scripts/import-eurlex-documents.ts"},"_npmUser":{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"},"repository":{"url":"git+https://github.com/Ansvar-Systems/Dutch-law-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade Dutch legal research MCP server with comprehensive statute coverage and EU law cross-references","directories":{},"_nodeVersion":"25.2.1","dependencies":{"@ansvar/mcp-sqlite":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.27.0","vitest":"^4.0.18","prettier":"^3.5.3","@eslint/js":"^9.27.0","typescript":"^5.9.3","@types/node":"^22.15.29","lint-staged":"^16.1.0","@vercel/node":"^5.6.3","fast-xml-parser":"^5.3.5","typescript-eslint":"^8.33.1"},"_npmOperationalInternal":{"tmp":"tmp/dutch-law-mcp_1.1.0_1771066511182_0.5539046393732512","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Ansvar MCP servers are now distributed as source from github.com/Ansvar-Systems/dutch-law-mcp under Apache 2.0. Self-hosting instructions: see the repo README. Hosted gateway: ansvar.eu"},"1.2.1":{"name":"@ansvar/dutch-law-mcp","version":"1.2.1","keywords":["mcp","model-context-protocol","ai","claude","dutch-law","netherlands","legal","compliance","wetten","bwb","rechtspraak","ansvar"],"author":{"name":"Ansvar Systems AB","email":"hello@ansvar.ai"},"license":"Apache-2.0","_id":"@ansvar/dutch-law-mcp@1.2.1","maintainers":[{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"}],"homepage":"https://github.com/Ansvar-Systems/Dutch-law-mcp#readme","bugs":{"url":"https://github.com/Ansvar-Systems/Dutch-law-mcp/issues"},"bin":{"dutch-law-mcp":"dist/index.js","dutch-law-mcp-http":"dist/http-server.js"},"dist":{"shasum":"9f6d65c42226cf57d6d95911ca12c63cfa4d02c1","tarball":"https://registry.npmjs.org/@ansvar/dutch-law-mcp/-/dutch-law-mcp-1.2.1.tgz","fileCount":151,"integrity":"sha512-lyoQbCbvCuIjUD1J92/sDi4ibJgMql02hmJRkNCaUtlgREbEKMwSlE5nHRZ5RgGcUE0AAR5+Yq1bme69vy6zVQ==","signatures":[{"sig":"MEQCIF3/wkzISES3qmODv/yaKBty7ZrckjYJ/JeCvhwZehneAiAfMiP2qHKnBi0yWTPh7G95p8NJs5RxJZI/7NoaaV1Rqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338406},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b6717ba9b1a368f0983da0be0b38ffa888e22977","mcpName":"eu.ansvar/dutch-law-mcp","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/ tests/ scripts/","test":"vitest run","build":"tsc","start":"node dist/index.js","format":"prettier --write .","ingest":"tsx scripts/ingest-bwb.ts","prepare":"node -e \"try{require('husky')}catch(e){process.exit(0)}\" && husky || true","build:db":"tsx scripts/build-db.ts","dev:http":"tsx src/http-server.ts","lint:fix":"eslint --fix src/ tests/ scripts/","validate":"npm run lint && npm test && npm run test:contract","ingest:all":"tsx scripts/auto-ingest-all-statutes.ts","start:http":"node dist/http-server.js","test:watch":"vitest","audit:seeds":"tsx scripts/audit-seeds.ts","download:db":"bash scripts/download-db.sh","postinstall":"test -d dist || npm run build || true","drift:detect":"tsx scripts/drift-detect.ts","fetch:eurlex":"tsx scripts/fetch-eurlex-metadata.ts","format:check":"prettier --check .","ingest:cases":"tsx scripts/ingest-rechtspraak.ts","build:db:free":"tsx scripts/build-db-free.ts","build:db:paid":"tsx scripts/build-db-paid.ts","check-updates":"tsx scripts/check-updates.ts","test:contract":"vitest run --include '__tests__/contract/**/*.test.ts'","test:coverage":"vitest run --coverage","populate:xrefs":"tsx scripts/populate-cross-references.ts","prepublishOnly":"npm run build","prepare-release":"node scripts/prepare-release.js","ingest:prep-works":"tsx scripts/ingest-preparatory-works.ts","populate:versions":"tsx scripts/populate-provision-versions.ts","extract:definitions":"tsx scripts/extract-definitions.ts","import:eurlex-documents":"tsx scripts/import-eurlex-documents.ts"},"_npmUser":{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"},"repository":{"url":"git+https://github.com/Ansvar-Systems/Dutch-law-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"Production-grade Dutch legal research MCP server with comprehensive statute coverage and EU law cross-references","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@ansvar/mcp-sqlite":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","husky":"^9.1.7","eslint":"^9.27.0","vitest":"^4.0.18","prettier":"^3.5.3","@eslint/js":"^9.27.0","typescript":"^5.9.3","@types/node":"^22.15.29","lint-staged":"^16.1.0","@vercel/node":"^5.6.3","fast-xml-parser":"^5.3.5","typescript-eslint":"^8.33.1","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/dutch-law-mcp_1.2.1_1772182316956_0.15480224708322887","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Ansvar MCP servers are now distributed as source from github.com/Ansvar-Systems/dutch-law-mcp under Apache 2.0. Self-hosting instructions: see the repo README. Hosted gateway: ansvar.eu"}},"time":{"created":"2026-02-14T07:21:33.752Z","modified":"2026-05-02T05:46:41.290Z","1.0.0":"2026-02-14T07:21:34.112Z","1.1.0":"2026-02-14T10:55:11.321Z","1.2.1":"2026-02-27T08:51:57.096Z"},"bugs":{"url":"https://github.com/Ansvar-Systems/Dutch-law-mcp/issues"},"author":{"name":"Ansvar Systems AB","email":"hello@ansvar.ai"},"license":"Apache-2.0","homepage":"https://github.com/Ansvar-Systems/Dutch-law-mcp#readme","keywords":["mcp","model-context-protocol","ai","claude","dutch-law","netherlands","legal","compliance","wetten","bwb","rechtspraak","ansvar"],"repository":{"url":"git+https://github.com/Ansvar-Systems/Dutch-law-mcp.git","type":"git"},"description":"Production-grade Dutch legal research MCP server with comprehensive statute coverage and EU law cross-references","maintainers":[{"name":"ansvar","email":"jeffrey.von.rotz@ansvar.eu"}],"readme":"# Dutch Law MCP Server\n\nProduction-grade [Model Context Protocol](https://modelcontextprotocol.io/) server for Dutch legal research. Provides AI assistants with structured access to 3,248 Dutch statutes, 903,000+ court decisions, 21,000+ kamerstukken, and 1,000+ EU cross-references.\n\n## Quick Start\n\n### Use Remotely (No Install Needed)\n\n> Connect directly to the hosted version — zero dependencies, nothing to install.\n\n**Endpoint:** `https://dutch-law-mcp.vercel.app/mcp`\n\n| Client             | How to Connect                                                                   |\n| ------------------ | -------------------------------------------------------------------------------- |\n| **Claude.ai**      | Settings > Connectors > Add Integration > paste URL                              |\n| **Claude Code**    | `claude mcp add dutch-law --transport http https://dutch-law-mcp.vercel.app/mcp` |\n| **Claude Desktop** | Add to config (see below)                                                        |\n| **GitHub Copilot** | Add to VS Code settings (see below)                                              |\n\n**Claude Desktop** — add to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"dutch-law\": {\n      \"type\": \"url\",\n      \"url\": \"https://dutch-law-mcp.vercel.app/mcp\"\n    }\n  }\n}\n```\n\n**GitHub Copilot** — add to VS Code `settings.json`:\n\n```json\n{\n  \"github.copilot.chat.mcp.servers\": {\n    \"dutch-law\": {\n      \"type\": \"http\",\n      \"url\": \"https://dutch-law-mcp.vercel.app/mcp\"\n    }\n  }\n}\n```\n\n### Use Locally (npm)\n\n```bash\nnpx @ansvar/dutch-law-mcp\n```\n\n**Claude Desktop** — add to `claude_desktop_config.json`:\n\n**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"dutch-law\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ansvar/dutch-law-mcp\"]\n    }\n  }\n}\n```\n\n**Cursor / VS Code:**\n\n```json\n{\n  \"mcp.servers\": {\n    \"dutch-law\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ansvar/dutch-law-mcp\"]\n    }\n  }\n}\n```\n\n## Available Tools\n\n| Tool                        | Description                                                                       |\n| --------------------------- | --------------------------------------------------------------------------------- |\n| `search_legislation`        | Full-text search across Dutch statutes and regulations (FTS5-indexed)             |\n| `get_provision`             | Retrieve a specific provision by BWB-ID, book, and article (e.g., Art. 6:162 BW)  |\n| `search_case_law`           | Search Dutch court decisions with filters for court, legal domain, and date range |\n| `get_preparatory_works`     | Get kamerstukken (parliamentary documents) for a statute                          |\n| `validate_citation`         | Validate Dutch legal citations and check database existence                       |\n| `build_legal_stance`        | Build comprehensive research bundles combining statutes, case law, and travaux    |\n| `format_citation`           | Format citations to standard Dutch legal citation format                          |\n| `check_currency`            | Check whether a statute or provision is currently in force (geldend recht)        |\n| `get_eu_basis`              | Get EU legal basis (directives/regulations) for a Dutch statute                   |\n| `get_dutch_implementations` | Find Dutch statutes implementing a given EU directive or regulation               |\n| `search_eu_implementations` | Search EU instruments and their Dutch implementations                             |\n| `get_provision_eu_basis`    | Get EU references for a specific provision                                        |\n| `validate_eu_compliance`    | Validate EU compliance for a Dutch statute or provision                           |\n| `get_provision_at_date`     | Retrieve a specific provision as it was at a given date (historical versioning)   |\n\n## Data Sources\n\n| Source                 | Description                                                          | URL                               |\n| ---------------------- | -------------------------------------------------------------------- | --------------------------------- |\n| **wetten.overheid.nl** | Official BWB (Basiswettenbestand) for Dutch statutes and regulations | https://wetten.overheid.nl        |\n| **rechtspraak.nl**     | Open data portal for Dutch court decisions                           | https://uitspraken.rechtspraak.nl |\n| **EUR-Lex**            | Official EU legislation database                                     | https://eur-lex.europa.eu         |\n\nAll data is sourced from official open data portals and stored locally in a SQLite database for fast, offline-capable lookups.\n\n## Data Coverage\n\n| Metric           | Count                                          |\n| ---------------- | ---------------------------------------------- |\n| **Statutes**     | 3,248 (wetten, AMvBs, ministerial regulations) |\n| **Provisions**   | 79,967 individual articles                     |\n| **Case law**     | 903,000+ court decisions (ECLI-indexed)        |\n| **Kamerstukken** | 21,891 parliamentary documents                 |\n| **EU documents** | 1,008 directives and regulations               |\n| **Definitions**  | 64 extracted legal terms                       |\n\n## Supported Citation Formats\n\n- **Statute articles**: `Art. 6:162 BW`, `art. 287 Sr`, `art. 8:1 Awb`\n- **ECLI references**: `ECLI:NL:HR:2019:376`\n- **Kamerstukken**: `Kamerstukken II 2020/21, 35815, nr. 2`\n- **EU instruments**: `Verordening (EU) 2016/679`, `Richtlijn 95/46/EG`\n\n## Development\n\n### Prerequisites\n\n- Node.js >= 18\n- npm\n\n### Setup\n\n```bash\ngit clone https://github.com/Ansvar-Systems/Dutch-law-mcp.git\ncd Dutch-law-mcp\nnpm install\n```\n\n### Building\n\n```bash\nnpm run build\n```\n\n### Testing\n\n```bash\nnpm test                # Run all tests\nnpm run test:watch      # Watch mode\nnpm run test:coverage   # With coverage report\n```\n\n### Linting and Formatting\n\n```bash\nnpm run lint           # Check for lint errors\nnpm run lint:fix       # Auto-fix lint errors\nnpm run format         # Format all files\nnpm run format:check   # Check formatting\n```\n\nPre-commit hooks via Husky and lint-staged automatically run ESLint and Prettier on staged files.\n\n### Ingestion Scripts\n\n```bash\nnpm run ingest              # Ingest statutes from wetten.overheid.nl (BWB)\nnpm run ingest:all          # Comprehensive ingestion of ALL Dutch statutes\nnpm run ingest:cases        # Ingest case law from rechtspraak.nl\nnpm run ingest:prep-works   # Ingest kamerstukken (parliamentary documents)\nnpm run build:db            # Build the SQLite database from seed files\nnpm run audit:seeds         # Validate seed file schema compliance\nnpm run check-updates       # Check for legal data updates\nnpm run extract:definitions # Extract legal term definitions from statutes\nnpm run fetch:eurlex        # Fetch EU document metadata from EUR-Lex\nnpm run import:eurlex-documents  # Import EU law references into database\n```\n\n### Project Structure\n\n```\nsrc/\n  index.ts              # MCP server entry point (stdio)\n  http-server.ts        # HTTP server entry point (Streamable HTTP)\n  tools/\n    registry.ts         # Shared tool definitions and handler registration\n    ...                 # 14 MCP tool implementations\n  parsers/              # BWB XML parser, EU reference parser, amendment parser, cross-ref extractor\n  citation/             # Citation parsing and formatting\n  types/                # TypeScript type definitions\n  utils/\n    ensure-database.ts  # Download-on-first-run database management\n    ...                 # Other shared utilities\nscripts/                # Ingestion and build scripts\ntests/                  # Vitest test suites\ndocs/                   # EU integration guide, coverage limitations\ndata/\n  seed/                 # JSON seed files (one per statute/batch)\n  database.db           # SQLite database (built from seeds)\n```\n\n## Docker\n\n### Build and run (stdio mode, default)\n\n```bash\ndocker build -t dutch-law-mcp .\ndocker run --rm -i dutch-law-mcp\n```\n\n### HTTP mode\n\n```bash\ndocker run --rm -e MODE=http -p 3000:3000 dutch-law-mcp\n```\n\nVerify with:\n\n```bash\ncurl http://localhost:3000/health\n```\n\n### Docker Compose\n\n```bash\ndocker compose up -d\n```\n\nThe Docker image uses a multi-stage build with a non-root user for security. The database is baked into the image at build time.\n\n## Deployment\n\n### Railway\n\n```bash\nrailway init\nrailway up\n```\n\nSet environment variables:\n\n- `MODE=http`\n- `PORT` is set automatically by Railway\n\n### Fly.io\n\n```bash\nfly launch\nfly deploy\n```\n\nIn `fly.toml`:\n\n```toml\n[env]\n  MODE = \"http\"\n\n[[services]]\n  internal_port = 3000\n```\n\n### Vercel (Serverless)\n\nDeploy as a serverless function — no long-running server needed:\n\n```bash\nnpm i -g vercel    # Install Vercel CLI (once)\nvercel deploy      # Deploy to preview\nvercel --prod      # Deploy to production\n```\n\nThe serverless handler at `api/mcp.ts` downloads the ~1 GB SQLite database from GitHub Releases on cold start, decompresses it to `/tmp`, and caches it across warm invocations. The WASM-based SQLite driver (`node-sqlite3-wasm`) works on Vercel without native compilation.\n\n**Note:** Requires Vercel Pro plan (1 GB `/tmp` storage) and `maxDuration >= 60` for cold-start downloads. Override the download URL with `DUTCH_LAW_DB_URL` if needed.\n\n| Endpoint  | Method | Description                              |\n| --------- | ------ | ---------------------------------------- |\n| `/health` | GET    | Health check (`{ \"status\": \"ok\" }`)      |\n| `/mcp`    | GET    | Server metadata JSON                     |\n| `/mcp`    | POST   | MCP protocol (stateless Streamable HTTP) |\n\n## Releasing\n\nTo prepare a new release with the database artifact:\n\n```bash\nnpm run prepare-release   # Creates data/database.db.gz\ngh release create v1.0.0\ngh release upload v1.0.0 data/database.db.gz\nnpm publish\n```\n\nThe gzipped database is uploaded to GitHub Releases. When users install via `npx`, the database is automatically downloaded and cached on first run.\n\n## Directory Review Notes\n\n### Testing Account and Sample Data\n\nThis server is read-only and does not require a login account for functional review.\nFor directory review, use the bundled dataset and these sample prompts:\n\n- _\"Search Dutch legislation for persoonsgegevens verwerking\"_\n- _\"Get BWBR0005289 provision 6:162\"_\n- _\"Which Dutch statutes implement GDPR?\"_\n\n### Remote Authentication (OAuth 2.0)\n\nWhen deployed over Streamable HTTP, this server can run in read-only unauthenticated mode.\nIf authentication is required in your deployment, configure OAuth 2.0 over TLS with certificates from recognized authorities.\n\n### Privacy\n\nSee [PRIVACY.md](PRIVACY.md) for data handling, retention, and security disclosures.\n\n### Troubleshooting\n\n- If startup fails, confirm the database path via `DUTCH_LAW_DB_PATH`.\n- If HTTP clients fail, verify `/mcp` POST routing and session headers.\n- If results are empty, call `list_regulations` first to confirm dataset load.\n\n## Important Disclaimers\n\n### Legal Advice\n\n> **THIS TOOL IS NOT LEGAL ADVICE**\n>\n> Statute text is sourced from official wetten.overheid.nl publications. However:\n>\n> - This is a **research tool**, not a substitute for professional legal counsel\n> - **Court case coverage is limited** -- do not rely solely on this for case law research\n> - **Verify critical citations** against primary sources for court filings\n> - **EU cross-references** are extracted from Dutch statute text, not EUR-Lex full text\n\n### Client Confidentiality\n\nQueries go through the Claude API. For privileged or confidential matters, use on-premise deployment. Lawyers should consider Nederlandse Orde van Advocaten (Dutch Bar Association) confidentiality obligations when using cloud-based AI tools.\n\n## Related Projects: Complete Compliance Suite\n\nThis server is part of **Ansvar's Compliance Suite** -- MCP servers that work together for end-to-end compliance coverage:\n\n### [@ansvar/eu-regulations-mcp](https://github.com/Ansvar-Systems/EU_compliance_MCP)\n\n**Query 49 EU regulations directly from Claude** -- GDPR, AI Act, DORA, NIS2, MiFID II, eIDAS, and more. Full regulatory text with article-level search. `npx @ansvar/eu-regulations-mcp`\n\n### @ansvar/dutch-law-mcp (This Project)\n\n**Query 3,248 Dutch statutes directly from Claude** -- BW, Sr, Awb, and more. Full provision text with EU cross-references. `npx @ansvar/dutch-law-mcp`\n\n### [@ansvar/german-law-mcp](https://github.com/Ansvar-Systems/German-law-mcp)\n\n**Query 6,870 German statutes directly from Claude** -- BGB, StGB, GG, and more. Full provision text with EU cross-references. `npx @ansvar/german-law-mcp`\n\n### [@ansvar/swedish-law-mcp](https://github.com/Ansvar-Systems/swedish-law-mcp)\n\n**Query 717 Swedish statutes directly from Claude** -- DSL, BrB, ABL, MB, and more. Full provision text with EU cross-references. `npx @ansvar/swedish-law-mcp`\n\n### [@ansvar/slovenian-law-mcp](https://github.com/Ansvar-Systems/Slovenian-law-mcp)\n\n**Query Slovenian statutes directly from Claude** -- ZVOP-2, KZ-1, ZGD-1, and more. Full provision text with EU cross-references. `npx @ansvar/slovenian-law-mcp`\n\n### [@ansvar/us-regulations-mcp](https://github.com/Ansvar-Systems/US_Compliance_MCP)\n\n**Query US federal and state compliance laws** -- HIPAA, CCPA, SOX, GLBA, FERPA, and more. `npm install @ansvar/us-regulations-mcp`\n\n### [@ansvar/ot-security-mcp](https://github.com/Ansvar-Systems/ot-security-mcp)\n\n**Query IEC 62443, NIST 800-82/53, and MITRE ATT&CK for ICS** -- Specialized for OT/ICS environments. `npx @ansvar/ot-security-mcp`\n\n### [@ansvar/automotive-cybersecurity-mcp](https://github.com/Ansvar-Systems/Automotive-MCP)\n\n**Query UNECE R155/R156 and ISO 21434** -- Automotive cybersecurity compliance. `npx @ansvar/automotive-cybersecurity-mcp`\n\n### [@ansvar/sanctions-mcp](https://github.com/Ansvar-Systems/Sanctions-MCP)\n\n**Offline-capable sanctions screening** -- OFAC, EU, UN sanctions lists. `pip install ansvar-sanctions-mcp`\n\n## Citation\n\nIf you use this MCP server in academic research:\n\n```bibtex\n@software{dutch_law_mcp_2025,\n  author = {Ansvar Systems AB},\n  title = {Dutch Law MCP Server: Production-Grade Legal Research Tool},\n  year = {2025},\n  url = {https://github.com/Ansvar-Systems/Dutch-law-mcp},\n  note = {Comprehensive Dutch legal database with 3,248 statutes, 903,000+ court decisions, and EU cross-references}\n}\n```\n\n## License\n\nApache-2.0\n\n### Data Licenses\n\n- **Statutes & Regulations:** wetten.overheid.nl (public domain, Dutch government open data)\n- **Case Law:** rechtspraak.nl (public domain, open data portal)\n- **Kamerstukken:** Staten-Generaal (public domain)\n- **EU Metadata:** EUR-Lex (EU public domain)\n\n## About Ansvar Systems\n\nWe build AI-accelerated compliance and legal research tools for the European market. This MCP server is part of our growing suite of jurisdiction-specific legal research tools.\n\n**[ansvar.eu](https://ansvar.eu)** -- Stockholm, Sweden\n","readmeFilename":"README.md"}