# io.github.SwikingSWE/conformy (npm · @conformy/mcp-server)

EU AI Act & NIS2 compliance — classify AI systems, check obligations, draft docs.

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

## Components

- npm · `@conformy/mcp-server`: 63/100 (this document), [markdown](https://verifymcp.io/servers/swikingswe-conformy/conformy-mcp-server.md), [page](https://verifymcp.io/servers/swikingswe-conformy/conformy-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@conformy/mcp-server`
- Version: `0.3.5`
- 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**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 71 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1933 tokens (~113/item across 17 items; 17 tools + 0 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 swikingswe-conformy -- npx -y @conformy/mcp-server
```

### Codex

```bash
codex mcp add swikingswe-conformy -- npx -y @conformy/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "swikingswe-conformy": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@conformy/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add swikingswe-conformy --command npx --arg -y --arg @conformy/mcp-server
```

### Hermes

```yaml
mcp_servers:
  swikingswe-conformy:
    command: "npx"
    args: ["-y", "@conformy/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "swikingswe-conformy": {
      "command": "npx",
      "args": [
        "-y",
        "@conformy/mcp-server"
      ]
    }
  }
}
```

## 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, +62)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-07-31 (score 0, −18)

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

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

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

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

First indexed and scored.

## MCP tools (17)

### `classify_ai_system` (~243 tokens)

Classify AI System (EU AI Act)

Classify an AI system under the EU AI Act. Determines risk level (prohibited, high-risk, limited, minimal), checks against Article 5 prohibited practices, maps to Annex III categories, lists required documentation, and provides the compliance deadline. Use this when building, deploying, or reviewing AI features to check regulatory obligations.

Input parameters:

- `annex_iii_category` (string): High-risk category under Annex III, if known. See list_annex_iii_categories for descriptions.
- `language` (string): Response language: 'sv' (Swedish) or 'en' (English). Default: 'en'
- `performs_profiling` (boolean): Does the system profile natural persons based on personal data?
- `prohibited_practices` (object): Article 5 prohibited practice checks. If any are true, the system is classified as prohibited.
- `role` (string, required): Your role: 'provider' if you build/develop/train the AI system, 'deployer' if you use/deploy it in your organisation
- `system_description` (string, required): Description of the AI system — what it does, how it works, what decisions it makes or influences

### `check_deadline` (~54 tokens)

Check EU AI Act Deadline

Check how many days remain until EU AI Act enforcement deadlines. Shows all key dates including the high-risk deadline (August 2, 2026) and the all-systems deadline (August 2, 2027).

### `get_requirements` (~87 tokens)

Get Compliance Requirements

Get the list of required compliance documents for a specific risk level and role under the EU AI Act. Use this for a quick lookup without running a full classification.

Input parameters:

- `risk_level` (string, required): The risk level of the AI system
- `role` (string, required): Your role: 'provider' if you build/develop the system, 'deployer' if you use/deploy it

### `list_annex_iii_categories` (~55 tokens)

List Annex III High-Risk Categories

List all high-risk AI system categories defined in Annex III of the EU AI Act. Use this to understand which areas trigger high-risk classification, or to look up the correct category key for the classify_ai_system tool.

### `generate_document_section` (~226 tokens)

Generate Compliance Document Section

Generate a single section of an EU AI Act compliance document using AI. Provide context about the AI system and the section topic, and receive a draft section with article references. Requires the Conformy API to be running with an LLM configured.

Input parameters:

- `answer` (string, required): Your input describing this aspect of the system — the AI will expand this into a draft compliance section
- `article_reference` (string): EU AI Act article reference for this section (e.g. 'Article 11 + Annex IV, Section 1')
- `language` (string): Language for generation: 'sv' (Swedish) or 'en' (English). Default: 'sv'
- `question_id` (string, required): Unique identifier for the question/section being answered
- `question_label` (string, required): The specific question being answered within this section
- `role` (string): Role context for generation
- `section_index` (integer, required): Section number within the document (1-based)
- `section_title` (string, required): Title of the document section (e.g. 'System Description and Purpose')

### `get_document_template` (~97 tokens)

Get Document Template

Get the full question template for a compliance document type. Returns all sections and questions that need to be answered. Use this FIRST to understand what information is needed before creating a document.

Input parameters:

- `document_type` (string, required): Type of compliance document
- `language` (string): Language for question labels: 'sv' (Swedish) or 'en' (English)
- `role` (string): Role context (only affects annex-iv)

### `list_documents` (~86 tokens)

List Documents

List all compliance documents for the authenticated organization. Use this as the starting point to continue working on an existing document — pick a document, then use `get_document` to see its current state, `update_document_answers` to change answers, and `generate_document` to regenerate changed sections. Documents created here are also visible on conformy.io.

Input parameters:

- `language` (string): Response language

### `get_document` (~106 tokens)

Get Document

Get a compliance document by ID, including all answers and generated sections. Use this to review what has been generated, identify sections that need improvement, or prepare for edits. After reviewing, use `update_document_answers` to change answers and `generate_document` to regenerate only the changed sections (1 credit per changed section). Use `export_document` to download as PDF or DOCX.

Input parameters:

- `document_id` (string, required): Document ID (UUID)
- `language` (string): Response language

### `create_document` (~159 tokens)

Create Document

Create a new compliance document with answers and optionally start AI generation. First use `get_document_template` to see what questions are needed, then provide answers as a flat object mapping question IDs to answer strings.

Input parameters:

- `answers` (object, required): Flat object mapping question IDs to answer strings, e.g. { general_purpose: 'Our system...', general_provider: 'Acme Corp' }
- `auto_generate` (boolean): Automatically start AI generation after creating the document (default: true)
- `document_type` (string, required): Document type (matches backend enum)
- `language` (string): Document language
- `role` (string): Role context
- `title` (string, required): Document title (e.g. 'MedAssist AI — Annex IV Technical Documentation')

### `generate_document` (~79 tokens)

Generate Document

Start AI generation for an existing document. The backend generates all answers in the background, only regenerating questions whose answers have changed (token-efficient). Use `get_generation_status` to poll progress.

Input parameters:

- `document_id` (string, required): Document ID (UUID)
- `language` (string): Document language
- `role` (string): Role context for generation

### `get_generation_status` (~49 tokens)

Get Generation Status

Check the progress of document generation. Returns how many questions have been generated out of the total.

Input parameters:

- `document_id` (string, required): Document ID (UUID)
- `language` (string): Response language

### `update_document_answers` (~139 tokens)

Update Document Answers

Update answers on an existing document. Only provide the answers that changed — you don't need to resend unchanged answers. After updating, use `generate_document` to regenerate. The backend uses smart diffing and only regenerates sections whose answers actually changed, so you only spend credits on what changed. Get the current answers and row version from `get_document` first.

Input parameters:

- `answers` (object, required): Answers to update — flat object mapping question IDs to new answer strings
- `document_id` (string, required): Document ID (UUID)
- `language` (string): Document language
- `row_version` (string, required): Row version from get_document (optimistic concurrency)

### `classify_nis2_entity` (~302 tokens)

Classify NIS2 Entity

Classify an organization under the NIS2 Directive (EU 2022/2555) / Swedish Cybersäkerhetslagen. Determines if the organization is an essential entity, important entity, or not in scope based on sector, size, and special designations. Returns required documents, reporting obligations, supervision regime, and maximum fines.

Input parameters:

- `annual_turnover_eur` (number, required): Annual turnover in EUR millions (e.g. 50 for €50M)
- `balance_sheet_eur` (number, required): Balance sheet total in EUR millions (e.g. 43 for €43M)
- `employee_count` (integer, required): Number of employees in the organization
- `is_public_administration` (boolean): Is the organization a central government body?
- `is_qualified_trust_service_provider` (boolean): Is the organization a qualified trust service provider under eIDAS?
- `language` (string): Response language: 'sv' (Swedish) or 'en' (English). Default: 'en'
- `organization_description` (string, required): Description of the organization and its activities
- `provides_dns_services` (boolean): Does the organization provide DNS resolution services?
- `provides_tld_registration` (boolean): Does the organization manage a TLD name registry?
- `sector` (string, required): NIS2 sector from Annex I or Annex II. Use 'None' if unsure. Use list_nis2_sectors to see all options.

### `list_nis2_sectors` (~56 tokens)

List NIS2 Sectors

List all sectors covered by the NIS2 Directive, split by Annex I (highly critical) and Annex II (other critical). Use this to find the correct sector key for the classify_nis2_entity tool.

### `check_nis2_obligations` (~59 tokens)

Check NIS2 Obligations

Quick reference for NIS2 obligations by entity level. Shows the 10 risk management measures (Article 21), incident reporting timelines (Article 23), and supervision regime.

Input parameters:

- `entity_level` (string, required): Entity classification level

### `export_document` (~102 tokens)

Export Document to PDF/DOCX

Export a generated compliance document to PDF or DOCX. Fetches the document by ID, sends it to the export endpoint, and saves the file to ~/Downloads. Returns the file path. The document must have generated sections (use `get_generation_status` to verify completion first).

Input parameters:

- `document_id` (string, required): Document ID (UUID)
- `format` (string, required): Export format: 'pdf' or 'docx'
- `language` (string): Document language

### `check_credits` (~34 tokens)

Check Credit Balance

Check how many document generation credits remain on your Conformy account. Requires an API key (CONFORMY_API_KEY).

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/swikingswe-conformy/conformy-mcp-server#diagnostics

## Score history

- 2026-08-03: 63
- 2026-08-02: 62
- 2026-08-01: 0
- 2026-07-31: 0
- 2026-07-30: 18
- 2026-07-28: 40
- 2026-07-27: 40

## Links

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