
ensmcp
io.github.seifreed由 GitHub 账号 seifreed 发布v0.1.2更新于 Oct 24, 2026
Servidor MCP para consultar el ENS y mantener declaraciones de aplicabilidad auditables.
概览
本地 MCP 服务器,让助手离线查询西班牙 ENS 安全措施(RD 311/2022 附件 II)及 CCN-STIC 808 审计指南。
- 可以做什么
- 按类别、安全维度或级别浏览和搜索附件 II 的类别与措施,并查看每项措施的法规原文与强化要求。根据各维度级别计算适用性矩阵,用于编制适用性声明,并解释某项措施为何适用。创建、列出、读取、更新和导出持久化的适用性声明,包括措施状态、负责人、证据与排除项。生成审计范围,汇总 CCN-STIC 808 验证问题、基本要求、条文检查与文件证据。查询带版本的对照数据包(如 ISO/IEC 27001 与 DORA),并查看快照来源与新鲜度。
- 适用场景
- 适合西班牙公共部门合规工作:编制或维护适用性声明、将 ENS 措施对应到系统类别,或规划 CCN-STIC 808 审计。也适合希望在助手内离线完成这些查询的团队。
- 运行要求
- 需要 Python 3.12 至 3.14,并从 PyPI 本地安装;默认通过 stdio 运行,无需额外配置。更新快照(在线检查、刷新工具、构建脚本)还需要安装 Google Chrome 以及显示环境或 xvfb。可选的 HTTP 传输需要至少 32 个字符的 ENSMCP_HTTP_TOKEN;ENSMCP_DATA_DIR、ENSMCP_MODE、ENSMCP_DATA_PACKS 和 ENSMCP_TRANSPORT 为可选设置。
安装
在 SourceWeft 中
- 打开 控制台中的 ensmcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
ensmcp
Servidor MCP con las medidas de seguridad del ENS (Anexo II del RD 311/2022): consulta el Anexo II, calcula la matriz normativa de aplicabilidad y genera un checklist de auditoría, sin conexión
[Python Version] [CI Status] [MCP Server]
[GitHub Stars] [GitHub Issues] [Buy Me a Coffee]
Qué es
ensmcp es un servidor MCP (Model Context Protocol) que pone las medidas de seguridad del ENS Navegable (Anexo II del RD 311/2022) al alcance de Claude Desktop, Claude Code y cualquier otro cliente MCP. Es un servidor independiente y no está afiliado, respaldado ni mantenido por el CCN, CCN-CERT o el CNI.
Los datos viajan incluidos en el paquete como un snapshot, así que el servidor responde al instante y funciona sin conexión. El modo predeterminado es offline: no abre Chrome ni accede a la red. --check-updates comprueba la fuente oficial sin sustituir el snapshot y --live permite adoptar temporalmente los datos vivos.
La procedencia de los datos se documenta en DATA_LICENSE.md y la publicación en el registro MCP consta en MCP_REGISTRY.md.
Además del Anexo II, incorpora el cuestionario de verificación de la guía CCN-STIC 808 (edición para el RD 311/2022): las preguntas de auditoría por medida, las comprobaciones sobre el articulado del RD y las evidencias documentales que puede pedir el auditor.
Características principales
Tools disponibles
Consulta del Anexo II
Declaración de Aplicabilidad y auditoría
Crosswalks
Estado y actualización
Los contratos públicos de entrada y salida están versionados en
ens://schemas/v1/tools; cada tool también expone su schema individual en
ens://schemas/v1/tools/{name}.
Qué devuelve una medida
Cada medida trae dos textos, y hacen falta los dos: norm_text es la redacción del RD 311/2022 (lo que la medida exige) y description es el cuestionario de la CCN-STIC 808 (lo que el auditor pregunta). Los refuerzos vienen emparejados con el nivel que los exige y con su redacción en el RD:
alternative distingue los refuerzos obligatorios (+ R1 + R2) de los alternativos (+ [R1 o R2], donde basta uno cualquiera): confundirlos cambia lo que hay que implantar.
Declaración de Aplicabilidad
El ENS no aplica un nivel al sistema entero: aplica uno por dimensión. Se valora cada una y la tool devuelve lo que ese sistema debe cumplir:
La regla sale del RD 311/2022: la categoría del sistema es el mayor de los niveles valorados (Anexo I, ap. 4), las medidas marcadas «Categoría» se exigen según la categoría del sistema, las que protegen dimensiones según el nivel de esas dimensiones, y una dimensión sin valorar deja fuera las medidas que solo la protegen.
Las DdA persistentes se guardan como JSON versionado mediante escritura atómica. Por defecto viven en ~/.ensmcp/dda; ENSMCP_DATA_DIR=/ruta cambia la raíz a /ruta/dda. Los estados admitidos son not_assessed, implemented, partially_implemented, not_implemented, excluded y compensated. Una exclusión exige motivo y una compensación exige al menos una medida compensatoria.
Alcance de auditoría
Si la DdA contesta «¿qué tengo que implantar?», alcance_auditoria contesta «¿qué me va a preguntar el auditor?». Devuelve, por cada medida aplicable, los requisitos de verificación acumulados hasta su nivel exigible y el nivel de madurez mínimo que exige la guía:
El matiz importa: los tramos que el ENS Navegable etiqueta «Categoría Básica / Media / Alta» son acumulativos según la CCN-STIC 808 §5 — «Categoría Básica» significa exigible a todas las categorías, no solo para sistemas básicos. Un sistema de categoría media responde las preguntas de básica y las de media. Para un sistema C=alto, I=medio, D=bajo, A=medio, T=medio, el temario real son 382 preguntas (136 esenciales, cuyo incumplimiento bloquea la certificación), no las 73 de su tramo.
requisitos_articulos y evidencias_auditoria cubren la otra mitad de la auditoría: las comprobaciones sobre el articulado del RD (si la DdA existe y está suscrita, si el sistema está categorizado formalmente, si se reporta a INES...) y las 365 evidencias documentales que la guía propone. Estos datos salen de la CCN-STIC 808; el ENS Navegable no los publica.
De dónde salen los datos
src/ensmcp/data/anexo_ii.json— el corpus del ENS Navegable (medidas, textos del RD, cuestionario, aplicabilidad por niveles), capturado del sitio oficial. Cada consulta es un lookup en memoria.src/ensmcp/data/guia_808.json— el dato extraído de la guía CCN-STIC 808 con su atribución (la guía en sí no se redistribuye).snapshot_statusindica de qué edición procede.
Para regenerar el snapshot:
El servidor no abre Chrome ni usa la red por defecto. Para consultar cambios explícitamente:
También puede configurarse con ENSMCP_MODE=offline|check-updates|live.
Streamable HTTP autenticado
El transporte HTTP escucha únicamente en loopback y exige un Bearer token de al menos 32 caracteres:
El endpoint MCP queda en http://127.0.0.1:8000/mcp. Los clientes deben enviar
Authorization: Bearer $ENSMCP_HTTP_TOKEN. Un cliente web también necesita que
su Origin se autorice de forma exacta:
ENSMCP_TRANSPORT=http selecciona el mismo transporte. --host sólo acepta
127.0.0.1, localhost, ::1 u otra dirección loopback; --port cambia el
puerto. Si un proxy inverso conserva un Host distinto, se autoriza con
--allow-host mcp.example.
Para acceso desde otra máquina, mantén ensmcp en loopback y publícalo tras un
proxy inverso con TLS. El token nunca debe ir en la URL. Este modo implementa
autenticación por secreto compartido, no el flujo OAuth 2.1 para servicios MCP
públicos o multiusuario; esos despliegues necesitan un gateway OAuth compatible.
Data packs independientes
Los crosswalks no forman parte del paquete Python ni se activan implícitamente. ENSMCP_DATA_PACKS acepta un fichero, un directorio con ficheros JSON o varias rutas separadas por el separador del sistema (: en Unix, ; en Windows):
El repositorio incluye packs parciales para ISO/IEC 27001:2022 y DORA. Las relaciones DORA son editoriales y no equivalencias jurídicas. El pack NIS2 sólo registra el estado de la fuente: está inactivo y vacío porque el CCN retiró la CCN-STIC 892 anterior con efecto inmediato; puede inspeccionarse con include_inactive=true y no debe utilizarse como perfil vigente.
Requisitos
- Python 3.12-3.14
Solo para actualizar el snapshot (refresh_live_page, la comprobación de arranque, scripts/build_snapshot.py) hacen falta además:
- Google Chrome instalado
- Un display (o
xvfben servidores sin él)
Instalación
Para usar el servidor desde PyPI:
Para habilitar la comprobación live:
Desarrollo
En Linux recién instalado puede hacer falta además:
pyproject.toml es el único sitio donde se declaran las dependencias; pylock.toml es un artefacto generado a partir de él (PEP 751) que fija todas las dependencias —runtime y desarrollo juntas— a versión exacta y hash, con marcadores para Windows, Linux y macOS en x64 y ARM. Para actualizar dependencias, edita los rangos en pyproject.toml y regenera:
Inicio rápido
Configúralo en un cliente MCP (p. ej. Claude Desktop / Claude Code) apuntando al intérprete del entorno virtual:
No hace falta configurar nada más: las consultas se responden desde el snapshot del paquete.
Para decisiones de conformidad prevalecen el BOE, las Instrucciones Técnicas de Seguridad, las guías oficiales vigentes y el criterio de la entidad auditora o de certificación correspondiente.
Para inspeccionarlo manualmente:
Contribuir
Las contribuciones son bienvenidas.
- Haz un fork del repositorio
- Crea tu rama de funcionalidad (
git checkout -b feature/nueva-funcionalidad) - Haz commit de tus cambios (
git commit -m 'Añade nueva funcionalidad') - Sube la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Asegúrate de que todas las gates de calidad y seguridad pasen sin errores ni warnings antes de enviar el PR.
Apoya el proyecto
Si este proyecto te es útil, puedes apoyar su desarrollo:
[Buy Me A Coffee]Autor
- Marc Rivero López | @seifreed
- Repositorio: github.com/seifreed/ensmcp
Las medidas del ENS, accesibles por MCP
来源:README.md,提交 db056ac
工具
0版本历史
1- v0.1.2最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分