Skip to main content
Glama

What it is

ensmcp is an MCP (Model Context Protocol) server that brings the security measures of ENS Navegable (Annex II of RD 311/2022) within reach of Claude Desktop, Claude Code and any other MCP client. It is an independent server and is not affiliated with, endorsed by or maintained by the CCN, CCN-CERT or CNI.

The data ships in the package as a snapshot, so the server responds instantly and works offline. The default mode is offline: it does not open Chrome or access the network. --check-updates checks the official source without replacing the snapshot and --live allows temporarily adopting the live data.

In addition to Annex II, it includes the verification questionnaire from the CCN-STIC 808 guide (edition for RD 311/2022): the audit questions per measure, the checks on the RD articles and the documentary evidence the auditor may request.

Main features

Feature

Description

MCP server over stdio

Integrable into Claude Desktop, Claude Code and other MCP clients

Works offline

The full corpus ships as a snapshot in the package

Deterministic snapshot

The default mode always serves the packaged corpus

Explicit check

--check-updates detects changes without replacing the served data

Applicability matrix

Calculates the regulatory basis to prepare the Applicability Statement

CCN-STIC 808 audit

Audit syllabus, essential requirements, RD articles and documentary evidence

Related MCP server: nist-mcp

Available tools

Annex II query

Tool

Args

Description

list_categories

The Annex II categories with their group (org, op, mp).

list_measures

category_code?, dimension?, level?

Measures filtered by category, security dimension or level.

get_measure

code

A measure by exact code (e.g. "org.1"), with its RD text, reinforcements and levels.

search_measures

query

Text search in code, title, description and RD wording (case- and accent-insensitive).

Applicability Statement and audit

Tool

Args

Description

declaracion_aplicabilidad

confidencialidad?, integridad?, disponibilidad?, autenticidad?, trazabilidad?

The base regulatory matrix to prepare the DdA: each dimension is rated (bajo/medio/alto, or omitted) and it returns the enforceable measures with their reinforcements.

alcance_auditoria

same as the DdA

The system's audit syllabus: the applicable measures with their accumulated verification questions and the minimum maturity level required.

requisitos_auditoria

code?, level?

The raw CCN-STIC 808 questionnaire, per measure or per tier, marking the essential requirements.

requisitos_articulos

The audit checks on the RD articles (formal DdA, categorization, INES...).

evidencias_auditoria

code?

The documentation the auditor may request, per measure.

Status and updates

Tool

Args

Description

refresh_live_page

Checks the official site now and updates the data if it has changed.

snapshot_status

Origin and freshness of the data being served.

What a measure returns

Each measure carries two texts, and both are needed: norm_text is the wording of RD 311/2022 (what the measure requires) and description is the CCN-STIC 808 questionnaire (what the auditor asks). The reinforcements come paired with the level that requires them and with their wording in the RD:

{
  "code": "mp.s.4",
  "title": "Protección frente a denegación de servicio",
  "description": "Categoría Media 1.1 ¿Se ha planificado y dotado al sistema de capacidad suficiente ...?",
  "norm_text": "Se establecerán medidas preventivas frente a ataques de denegación de servicio ...",
  "category_code": "mp.s",
  "dimensions": ["disponibilidad"],
  "levels": ["medio", "alto"],
  "reinforcements": [
    { "code": "R1", "level": "alto", "alternative": false, "text": "R1-Detección y reacción. ..." }
  ],
  "raw_levels": { "bajo": "n.a.", "medio": "aplica", "alto": "+ R1" }
}

alternative distinguishes the mandatory reinforcements (+ R1 + R2) from the alternative ones (+ [R1 or R2], where any single one suffices): confusing them changes what must be implemented.

Applicability Statement

The ENS does not apply one level to the whole system: it applies one per dimension. Each one is rated and the tool returns what that system must comply with:

{
  "categoria_sistema": "alta",
  "measures": [
    { "code": "op.acc.5", "title": "Mecanismo de autenticación (usuarios externos)",
      "required_level": "alto",
      "required_reinforcements": [
        { "code": "R2", "alternative": true,  "text": "R2-..." },
        { "code": "R5", "alternative": false, "text": "R5-..." }
      ] }
  ]
}

The rule comes from RD 311/2022: the system's category is the highest of the rated levels (Annex I, section 4), measures marked "Category" are required according to the system's category, those protecting dimensions according to the level of those dimensions, and an unrated dimension leaves out the measures that only protect it.

Audit scope

If the DdA answers "what do I have to implement?", alcance_auditoria answers "what is the auditor going to ask me?". For each applicable measure, it returns the verification requirements accumulated up to its enforceable level and the minimum maturity level required by the guide:

Category

Minimum maturity level

BASIC

L2 — Reproducible, but intuitive

MEDIUM

L3 — Defined process

HIGH

L4 — Managed and measurable

The nuance matters: the tiers that ENS Navegable labels "Basic / Medium / High Category" are cumulative according to CCN-STIC 808 §5 — "Basic Category" means enforceable for all categories, not only for basic systems. A medium-category system answers the basic questions and the medium ones. For a system with C=high, I=medium, D=low, A=medium, T=medium, the real syllabus is 382 questions (136 essential, whose non-compliance blocks certification), not the 73 in its tier.

requisitos_articulos and evidencias_auditoria cover the other half of the audit: the checks on the RD articles (whether the DdA exists and is signed, whether the system is formally categorized, whether it is reported to INES...) and the 365 documentary evidence items the guide proposes. This data comes from CCN-STIC 808; ENS Navegable does not publish it.

Where the data comes from

  • src/ensmcp/data/anexo_ii.json — the ENS Navegable corpus (measures, RD texts, questionnaire, applicability by levels), captured from the official site. Each query is an in-memory lookup.

  • src/ensmcp/data/guia_808.json — the data extracted from the CCN-STIC 808 guide with its attribution (the guide itself is not redistributed). snapshot_status indicates which edition it comes from.

To regenerate the snapshot:

python scripts/build_snapshot.py

The server does not open Chrome or use the network by default. To check for changes explicitly:

ensmcp --offline
ensmcp --check-updates
ensmcp --live

It can also be configured with ENSMCP_MODE=offline|check-updates|live.

Requirements

  • Python 3.12-3.14

Only to update the snapshot (refresh_live_page, the startup check, scripts/build_snapshot.py) you also need:

  • Google Chrome installed

  • A display (or xvfb on servers without one)

Installation

To use the server from PyPI:

pip install ensmcp
ensmcp --offline

To enable the live check:

pip install "ensmcp[live]"
ensmcp --check-updates

Development

git clone https://github.com/seifreed/ensmcp.git
cd ensmcp
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r pylock.toml   # versiones exactas, verificadas por hash
pip install -e . --no-deps   # el propio paquete, sin re-resolver
patchright install chromium

On a freshly installed Linux it may also be necessary:

patchright install-deps chromium

pyproject.toml is the only place where dependencies are declared; pylock.toml is an artifact generated from it (PEP 751) that pins all dependencies —runtime and development together— to exact version and hash, with markers for Windows, Linux and macOS on x64 and ARM. To update dependencies, edit the ranges in pyproject.toml and regenerate:

uv pip compile pyproject.toml --all-extras --universal --python-version 3.12 \
  --format pylock.toml -o pylock.toml

Quick start

python -m ensmcp

Configure it in an MCP client (e.g. Claude Desktop / Claude Code) pointing to the virtual environment interpreter:

{
  "mcpServers": {
    "ensmcp": { "command": "ensmcp", "args": ["--offline"] }
  }
}

No further configuration is needed: queries are answered from the package snapshot.

For compliance decisions, the BOE, the Technical Security Instructions, the current official guides and the criteria of the corresponding auditing or certification entity prevail.

To inspect it manually:

npx @modelcontextprotocol/inspector venv/bin/python -m ensmcp

Contributing

Contributions are welcome.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/new-feature)

  3. Commit your changes (git commit -m 'Add new feature')

  4. Push the branch (git push origin feature/new-feature)

  5. Open a Pull Request

Make sure all quality and security gates pass without errors or warnings before submitting the PR.

Support the project

If this project is useful to you, you can support its development:

Author


Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides instant access to authoritative security documentation from organizations like OWASP, NIST, and major cloud providers through natural language semantic search. It enables users to retrieve security best practices, frameworks, and vulnerability information directly from a locally cached knowledge base.
    4
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides structured access to the full NIST cybersecurity catalog, including SP 800/1800 publications, security controls, CSF 2.0, and the NVD database. It enables AI assistants to search and retrieve cybersecurity standards, CVEs, and compliance guidance directly from a local SQLite index.
    20
    1
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seifreed/ensmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server