Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Servidor MCP para consultar el ENS y mantener declaraciones de aplicabilidad auditables.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"ensmcp": {
"command": "uvx",
"args": [
"ensmcp"
]
}
}
}在终端中运行这条命令
claude mcp add ensmcp -- uvx ensmcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"ensmcp": {
"command": "uvx",
"args": [
"ensmcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"ensmcp": {
"type": "stdio",
"command": "uvx",
"args": [
"ensmcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 seifreed 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.2)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Signoff
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Five gates that make an agent's 'done' provable: run them, read the verdict, audit the record.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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
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ística | Descripción |
|---|---|
| Transportes MCP | stdio por defecto y Streamable HTTP autenticado para despliegues controlados |
| Funciona sin conexión | El corpus completo viaja como snapshot en el paquete |
| Snapshot determinista | El modo predeterminado sirve siempre el corpus empaquetado |
| Comprobación explícita | --check-updates detecta cambios sin sustituir los datos servidos |
| Matriz de aplicabilidad | Calcula la base normativa para preparar la Declaración de Aplicabilidad |
| Auditoría CCN-STIC 808 | Temario de auditoría, requisitos esenciales, artículos del RD y evidencias documentales |
| Crosswalks externos | Carga data packs versionados sin acoplar otros marcos al core |
| Tool | Args | Descripción |
|---|---|---|
list_categories | — | Las categorías del Anexo II con su grupo (org, op, mp). |
list_measures | category_code?, dimension?, level? | Medidas filtradas por categoría, dimensión de seguridad o nivel. |
get_measure | code | Una medida por código exacto (p. ej. "org.1"), con su texto del RD, refuerzos y niveles. |
search_measures | query | Búsqueda por texto en código, título, descripción y redacción del RD (ignora mayúsculas y tildes). |
| Tool | Args | Descripción |
|---|---|---|
declaracion_aplicabilidad | confidencialidad?, integridad?, disponibilidad?, autenticidad?, trazabilidad? | La matriz normativa base para preparar la DdA: se valora cada dimensión (bajo/medio/alto, u omitida) y devuelve las medidas exigibles con sus refuerzos. |
evaluate_system_profile | profile | Calcula máximos por activos y servicios, aplica perfiles heredados y evalúa subsistemas. |
explain_applicability | code, profile, subsystem_id? | Explica la dimensión, nivel, celda, justificación o regla de perfil que decide una medida. |
create_dda | record_id, profile, subsystem_id? | Crea una DdA persistente con las 73 medidas y su decisión de aplicabilidad. |
list_dda | — | Lista las DdA guardadas y resume sus estados de implantación. |
get_dda | record_id | Recupera una DdA completa. |
update_dda_measure_status | record_id, code, implementation_status, ... | Registra estado, responsable, evidencias, exclusión o compensación, vigilancia y fechas. |
export_dda | record_id, output_format | Exporta como json, csv, markdown, xlsx, ods o docx; el contenido se devuelve en base64. |
alcance_auditoria | mismas que la DdA | El temario de auditoría del sistema: las medidas aplicables con sus preguntas de verificación acumuladas y el nivel de madurez mínimo exigible. |
requisitos_auditoria | code?, level? | El cuestionario CCN-STIC 808 en bruto, por medida o por tramo, marcando los requisitos esenciales. |
requisitos_articulos | — | Las comprobaciones de auditoría sobre el articulado del RD (DdA formal, categorización, INES...). |
evidencias_auditoria | code? | La documentación que puede pedir el auditor, por medida. |
| Tool | Args | Descripción |
|---|---|---|
list_data_packs | include_inactive? | Lista packs configurados con fuente, versión, cobertura y vigencia. |
query_crosswalk | pack_id, ens_code?, external_reference? | Consulta correspondencias en ambas direcciones, con paginación opcional. |
| Tool | Args | Descripción |
|---|---|---|
refresh_live_page | — | Comprueba ahora el sitio oficial y actualiza los datos si han cambiado. |
snapshot_status | — | Origen y frescura de los datos que se están sirviendo. |
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}.
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:
{
"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 distingue los refuerzos obligatorios (+ R1 + R2) de los alternativos (+ [R1 o R2], donde basta uno cualquiera): confundirlos cambia lo que hay que implantar.
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:
{
"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-..." } ] } ] }
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.
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:
| Categoría | Nivel mínimo de madurez |
|---|---|
| BÁSICA | L2 — Reproducible, pero intuitivo |
| MEDIA | L3 — Proceso definido |
| ALTA | L4 — Gestionado y medible |
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.
snapshot_status indica de qué edición procede.Para regenerar el snapshot:
python scripts/build_snapshot.py
El servidor no abre Chrome ni usa la red por defecto. Para consultar cambios explícitamente:
ensmcp --offline
ensmcp --check-updates ensmcp --live
También puede configurarse con ENSMCP_MODE=offline|check-updates|live.
El transporte HTTP escucha únicamente en loopback y exige un Bearer token de al menos 32 caracteres:
export ENSMCP_HTTP_TOKEN="$(openssl rand -hex 32)"
ensmcp --transport http
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 --allow-origin https://cliente.example
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
只显示了开头部分;其余内容请在仓库中阅读