# eu.ansvar/danish-law-mcp (npm · @ansvar/danish-law-mcp)

Query Danish laws and regulations, EU cross-references, case law, and preparatory works

- Trust score: 63/100 (medium)
- Change this week: +17
- Registry status: deprecated
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

> **Deprecated**: this server is marked deprecated in the MCP registry.

## Components

- npm · `@ansvar/danish-law-mcp`: 63/100 (this document), [markdown](https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp.md), [page](https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp)

## Channel facts

- Registry: `npm`
- Package: `@ansvar/danish-law-mcp`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 80/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
  - Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL redirects; it must resolve directly.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 163 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1877 tokens (~117/item across 16 items; 15 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add eu-ansvar-danish-law-mcp -- npx -y @ansvar/danish-law-mcp
```

### Codex

```bash
codex mcp add eu-ansvar-danish-law-mcp -- npx -y @ansvar/danish-law-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "eu-ansvar-danish-law-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ansvar/danish-law-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add eu-ansvar-danish-law-mcp --command npx --arg -y --arg @ansvar/danish-law-mcp
```

### Hermes

```yaml
mcp_servers:
  eu-ansvar-danish-law-mcp:
    command: "npx"
    args: ["-y", "@ansvar/danish-law-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "eu-ansvar-danish-law-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ansvar/danish-law-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 62, +10)

- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: partial → unverified
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [security] The scripts that run when this package is installed changed: postinstall
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] License: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Maintenance: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 52, −10)

- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-31 (score 62, +7)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 55, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-29 (score 73, +27)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → partial
- [security] The scripts that run when this package is installed changed: postinstall
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → good
- [functional improvement] License: unverified → pass
- [functional] Licence: Apache-2.0

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (15)

### `search_legislation` (~164 tokens)

Search Danish statutes and regulations by keyword.

Searches provision text using FTS5 with BM25 ranking. Supports boolean operators (AND, OR, NOT), phrase search ("exact phrase"), and prefix matching (term*).

Returns matched provisions with snippets, relevance scores, and document metadata.

Input parameters:

- `as_of_date` (string): Optional historical date filter (YYYY-MM-DD). Returns versions valid on that date.
- `document_id` (string): Filter to a specific statute by document ID (e.g., "2018:218")
- `limit` (number): Maximum results (default: 10, max: 50)
- `query` (string, required): Search query in Danish or English. Supports FTS5 syntax.
- `status` (string): Filter by document status

### `get_provision` (~239 tokens)

Retrieve a specific provision from a Danish statute.

Specify the document ID and either chapter+section or provision_ref directly.
Examples:
  \- document_id="2018:218", chapter="1", section="1" → 1 kap. 1 § DSL
  \- document_id="2018:218", provision_ref="1:1" → same result
  \- document_id="1998:204", section="5 a" → 5 a § PUL (flat statute, no chapter)

Omit chapter/section/provision_ref to get all provisions in the statute.

Input parameters:

- `as_of_date` (string): Optional historical date (YYYY-MM-DD). Returns the provision text valid on that date.
- `chapter` (string): Chapter number (e.g., "3"). Omit for flat statutes.
- `document_id` (string, required): document ID (e.g., "2018:218")
- `provision_ref` (string): Direct provision reference (e.g., "3:5" for Kap 3 § 5)
- `section` (string): Section number (e.g., "5", "5 a")

### `search_case_law` (~119 tokens)

Search Danish court decisions (retspraksis).

Searches case summaries and keywords. Filter by court and date range.

Input parameters:

- `court` (string): Filter by court
- `date_from` (string): Start date filter (ISO 8601, e.g., "2020-01-01")
- `date_to` (string): End date filter (ISO 8601)
- `limit` (number): Maximum results (default: 10, max: 50)
- `query` (string, required): Search query for case law summaries

### `get_preparatory_works` (~66 tokens)

Get preparatory works (forarbejder) for a Danish statute.

Returns linked preparatory documents with summaries.
Essential for understanding legislative intent behind statutory provisions.

Input parameters:

- `document_id` (string, required): document ID of the statute (e.g., "2018:218")

### `validate_citation` (~134 tokens)

Validate a Danish legal citation against the database.

Parses the citation, checks that the document and provision exist, and returns warnings about status (repealed, amended). This is the zero-hallucination enforcer.

Supported formats:
  \- "document 2018:218 1 kap. 1 §"
  \- "2018:218 1:1"
  \- "Prop. 2017/18:105"
  \- "SOU 2017:39"
  \- "NJA 2020 s. 45"

Input parameters:

- `citation` (string, required): Citation string to validate

### `build_legal_stance` (~158 tokens)

Build a comprehensive set of citations for a legal question.

Searches across statutes, case law, and preparatory works simultaneously to aggregate relevant citations. Use this for broad legal research questions.

Input parameters:

- `as_of_date` (string): Optional historical date (YYYY-MM-DD) for time-aware retrieval.
- `document_id` (string): Optionally limit statute search to one document
- `include_case_law` (boolean): Include case law results (default: true)
- `include_preparatory_works` (boolean): Include preparatory works results (default: true)
- `limit` (number): Max results per category (default: 5, max: 20)
- `query` (string, required): Legal question or topic to research

### `format_citation` (~90 tokens)

Format a Danish legal citation per standard conventions.

Formats:
  \- full: "document 2018:218 3 kap. 5 §"
  \- short: "2018:218 3:5"
  \- pinpoint: "3 kap. 5 §"

Input parameters:

- `citation` (string, required): Citation string to format
- `format` (string): Output format (default: "full")

### `check_currency` (~121 tokens)

Check if a Danish statute or provision is in force (current or historical).

Returns the document's status (in_force, amended, repealed, not_yet_in_force), dates, and warnings. Provide as_of_date for historical evaluation.

Input parameters:

- `as_of_date` (string): Optional historical date (YYYY-MM-DD). Computes in-force status as of that date.
- `document_id` (string, required): document ID (e.g., "2018:218")
- `provision_ref` (string): Optional provision reference to check (e.g., "3:5")

### `get_eu_basis` (~127 tokens)

Get EU legal basis (directives and regulations) for a Danish statute.

Returns all EU directives and regulations that this statute implements, supplements, or references. Includes reference types, article citations, and whether each EU document is a primary implementation.

Essential for understanding which EU law a Danish statute is based on.

Input parameters:

- `document_id` (string, required): document ID (e.g., "2018:218")
- `include_articles` (boolean): Include specific EU article references (default: false)
- `reference_types` (array): Filter by reference type (implements, supplements, applies, etc.)

### `get_danish_implementations` (~142 tokens)

Find Danish statutes implementing a specific EU directive or regulation.

Given an EU document ID (e.g., "regulation:2016/679" for GDPR), returns all Danish statutes that implement, supplement, or reference it. Shows implementation status and which articles are referenced.

Essential for finding Danish law corresponding to EU requirements.

Input parameters:

- `eu_document_id` (string, required): EU document ID (e.g., "regulation:2016/679", "directive:95/46")
- `in_force_only` (boolean): Return only in-force statutes (default: false)
- `primary_only` (boolean): Return only primary implementing statutes (default: false)

### `search_eu_implementations` (~168 tokens)

Search for EU directives and regulations with Danish implementation information.

Search by keyword, type, year range, or community. Returns matching EU documents with counts of Danish statutes referencing them.

Use this for exploratory searches like "data protection" or "privacy" to find relevant EU law.

Input parameters:

- `community` (string): Filter by community
- `has_danish_implementation` (boolean): Filter by Danish implementation existence
- `limit` (number): Maximum results (default: 20, max: 100)
- `query` (string): Keyword search (title, short name, CELEX, description)
- `type` (string): Filter by document type
- `year_from` (number): Filter by year (from)
- `year_to` (number): Filter by year (to)

### `get_provision_eu_basis` (~115 tokens)

Get EU legal basis for a specific provision within a Danish statute.

Returns EU directives/regulations that a specific provision implements or references, with article-level precision. For example, DSL 2:1 references GDPR Article 6.1.c.

Use this for pinpoint EU compliance checks at the provision level.

Input parameters:

- `document_id` (string, required): document ID (e.g., "2018:218")
- `provision_ref` (string, required): Provision reference (e.g., "1:1" or "3:5")

### `validate_eu_compliance` (~153 tokens)

Validate EU compliance status for a Danish statute or provision.

Checks for:
\- References to repealed EU directives (e.g., Data Protection Directive 95/46/EC)
\- Missing implementation status
\- Outdated references

Returns compliance status (compliant, partial, unclear, not_applicable) with warnings and recommendations.

Note: This is Phase 1 validation. Full compliance checking against EU requirements will be added in future phases.

Input parameters:

- `document_id` (string, required): document ID (e.g., "2018:218")
- `eu_document_id` (string): Optional: check compliance with specific EU document
- `provision_ref` (string): Optional provision reference (e.g., "1:1")

### `list_sources` (~31 tokens)

List all data sources and their provenance. Returns source URLs, licenses, and coverage information for transparency and audit compliance.

### `about` (~35 tokens)

Server metadata, dataset statistics, freshness, and provenance. Call this to verify data coverage, currency, and content basis before relying on results.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp#diagnostics

## Score history

- 2026-08-03: 63
- 2026-08-02: 62
- 2026-08-01: 52
- 2026-07-31: 62
- 2026-07-30: 55
- 2026-07-29: 73
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@ansvar/danish-law-mcp
- Socket report: https://socket.dev/npm/package/@ansvar/danish-law-mcp
- Changelog RSS feed: https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/eu-ansvar-danish-law-mcp/ansvar-danish-law-mcp
