mcpField
E
ensmcp

ensmcp

ローカル
github.com/seifreed法務・行政07 週間前に更新

ensmcp について

ensmcpは、スペインのENSセキュリティ対策を参照し、適用宣言や監査チェックリストを作成するオフライン対応のMCPサーバーです。RD 311/2022の附属書IIとCCN-STIC 808の監査資料を収録し、宣言記録も保存できます。

主な機能

  1. 01ENS対策の検索と参照
  2. 02セキュリティ次元ごとの適用性評価
  3. 03適用宣言の作成と管理
  4. 04監査範囲と証拠一覧の生成
  5. 05バージョン管理された外部対応表の読み込み

活用シーン

  1. 01ENS適用宣言の準備
  2. 02システムの監査チェックリスト作成
  3. 03実装状況と監査証拠の追跡

MCP 対応

ensmcpは、ENS対策の検索、適用性評価、宣言管理、監査、対応表のツールをMCPクライアントに提供します。既定では同梱スナップショットでオフライン動作し、更新確認やライブデータ利用は明示的に選択します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"seifreed-ensmcp": {
"command": "uvx",
"args": [
"ensmcp"
]
}
}
}
起動コマンドuvx ensmcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiensmcp0.1.2

ツール

19

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

ensmcp

ensmcp

ENS(RD 311/2022 の附属書 II)のセキュリティ対策に対応した MCP サーバーです。附属書 II の参照、適用性に関する規範マトリクスの計算、監査チェックリストの生成をオフラインで行えます。

Python Version CI Status MCP Server

GitHub Stars GitHub Issues Buy Me a Coffee


概要

ensmcp は、ENS Navegable(RD 311/2022 の附属書 II)のセキュリティ対策を、Claude Desktop、Claude Code、その他あらゆる MCP クライアントから利用できるようにするMCP(Model Context Protocol)サーバーです。独立したサーバーであり、CCN、CCN-CERT、CNI との提携、支援、保守関係はありません。

データはスナップショットとしてパッケージに含まれているため、サーバーは即座に応答し、オフラインで動作します。デフォルトモードはofflineで、Chrome を起動せず、ネットワークにもアクセスしません。--check-updatesは公式ソースを確認しますが、スナップショットは置き換えません。--liveを指定すると、ライブデータを一時的に使用できます。

データの出典はDATA_LICENSE.mdに記載されており、MCP レジストリへの公開についてはMCP_REGISTRY.mdに記載されています。

附属書 II に加えて、CCN-STIC 808 ガイド(RD 311/2022 版)の検証用質問票も含まれています。対策ごとの監査質問、RD の条文に関する確認事項、監査人が求める可能性のある文書証拠を収録しています。

主な特徴
特徴説明
MCP トランスポートデフォルトではstdioを使用し、管理されたデプロイメント向けに認証済み Streamable HTTP を利用できます
オフラインで動作コーパス全体がスナップショットとしてパッケージに含まれています
決定論的なスナップショットデフォルトモードでは、常にパッケージ内のコーパスを提供します
明示的な確認--check-updatesは、提供するデータを置き換えずに変更を検出します
適用性マトリクス適用性宣言の作成に向けた規範上の基準を計算します
CCN-STIC 808 監査監査項目、必須要件、RD の条文、文書証拠を収録しています
外部クロスウォーク他のフレームワークをコアに結合せず、バージョン管理されたデータパックを読み込みます

利用可能なツール

附属書 II の照会
ツール引数説明
list_categories—グループ(org、op、mp)ごとの附属書 II のカテゴリです。
list_measurescategory_code?、dimension?、level?カテゴリ、セキュリティディメンション、またはレベルで絞り込んだ対策です。
get_measurecode正確なコード(例:"org.1")で対策を取得し、RD の文言、強化策、レベルを返します。
search_measuresqueryコード、タイトル、説明、RD の文言を対象にしたテキスト検索です(大文字・小文字とアクセント記号は区別しません)。
適用宣言と監査
ツール引数説明
declaracion_aplicabilidadconfidencialidad?、integridad?、disponibilidad?、autenticidad?、trazabilidad?DdA の作成に用いる基本的な規範マトリクスです。各ディメンション(bajo/medio/alto、または省略)を評価し、必要な対策とその強化策を返します。
evaluate_system_profileprofile資産とサービスごとの最大値を計算し、継承されたプロファイルを適用して、サブシステムを評価します。
explain_applicabilitycode、profile、subsystem_id?対策の適用可否を決定するディメンション、レベル、セル、根拠、またはプロファイルルールを説明します。
create_ddarecord_id、profile、subsystem_id?適用可否の判断とともに、73 件の対策を含む永続的な DdA を作成します。
list_dda—保存済みの DdA を一覧表示し、実装状況を要約します。
get_ddarecord_idDdA 全体を取得します。
update_dda_measure_statusrecord_id、code、implementation_status、...状況、責任者、証拠、除外または代替措置、監視、日付を記録します。
export_ddarecord_id、output_formatjson、csv、markdown、xlsx、ods、または docx 形式でエクスポートします。内容は base64 で返されます。
alcance_auditoriaDdA と同じ項目システムの監査項目です。適用される対策、それに付随する累積検証質問、および必要な最低成熟度レベルが含まれます。
requisitos_auditoriacode?、level?CCN-STIC 808 の質問票を、対策別または範囲別にそのまま返し、必須要件を示します。
requisitos_articulos—RD の条文に関する監査チェック項目(正式な DdA、カテゴリ分類、INES など)です。
evidencias_auditoriacode?対策ごとに、監査人が求める可能性のある文書を返します。
クロスウォーク
ツール引数説明
list_data_packsinclude_inactive?設定済みのデータパックを、ソース、バージョン、対象範囲、有効期間とともに一覧表示します。
query_crosswalkpack_id、ens_code?、external_reference?ページネーションを任意で指定し、双方向の対応関係を照会します。
状態と更新
ツール引数説明
refresh_live_page—公式サイトをその場で確認し、変更があればデータを更新します。
snapshot_status—現在提供しているデータの出所と鮮度を示します。

入出力の公開コントラクトは ens://schemas/v1/tools でバージョン管理されています。また、各ツールは個別のスキーマを ens://schemas/v1/tools/{name} で公開しています。

対策が返す内容

各対策には 2 つのテキストがあり、どちらも必要です。norm_text は RD 311/2022 の文言(対策が要求する内容)で、description は CCN-STIC 808 の質問票(監査人が質問する内容)です。強化策には、それを要求するレベルと 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 は、必須の強化策(+ R1 + R2)と代替の強化策(+ [R1 o R2]。いずれか 1 つで足ります)を区別します。これらを混同すると、実装すべき内容が変わります。

適用宣言

ENS はシステム全体に 1 つのレベルを適用するのではなく、各次元に 1 つずつ適用します。それぞれを評価すると、ツールがシステムで満たすべき内容を返します。

{
  "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-..." }
      ] }
  ]
}

このルールは RD 311/2022 に基づいています。システムのカテゴリは、評価されたレベルのうち最も高いものになります(附属書 I、項 4)。「カテゴリ」と記された対策はシステムのカテゴリに応じて求められ、次元を保護する対策はその次元のレベルに応じて求められます。また、評価されていない次元がある場合、その次元のみを保護する対策は対象外になります。

永続化された DdA は、アトミック書き込みによってバージョン管理された JSON として保存されます。デフォルトでは ~/.ensmcp/dda に保存されます。ENSMCP_DATA_DIR=/ruta を指定すると、ルートが /ruta/dda に変わります。使用できる状態は not_assessed、implemented、partially_implemented、not_implemented、excluded、compensated です。除外には理由が必要で、代替策には少なくとも 1 つの補完対策が必要です。

監査範囲

DdA が「何を実施する必要があるか?」に答えるものだとすれば、alcance_auditoria は「監査人から何を質問されるか?」に答えます。適用される各対策について、要求されるレベルまでに累積した検証要件と、ガイドが求める最低成熟度レベルを返します。

カテゴリ最低成熟度レベル
BÁSICAL2 — 再現可能だが、直感に依存
MEDIAL3 — 定義されたプロセス
ALTAL4 — 管理され、測定可能

この点は重要です。ENS Navegable が「カテゴリ Básica/Media/Alta」とラベル付けしている区分は、CCN-STIC 808 §5 に従って累積されます。「カテゴリ Básica」は、すべてのカテゴリに求められるという意味であり、基本システムのみに求められるという意味ではありません。中カテゴリのシステムでは、基本の質問と中カテゴリの質問に回答します。C=alto、I=medio、D=bajo、A=medio、T=medio のシステムでは、実際の設問は382 問(うち必須項目は 136 問で、これを満たさないと認証が阻まれます)であり、その区分の 73 問ではありません。

requisitos_articulos と evidencias_auditoria は、監査のもう半分をカバーします。つまり、RD の条文に関する確認(DdA が存在し、署名されているか、システムが正式に分類されているか、INES に報告されているかなど)と、ガイドが提示する 365 件の文書証拠です。これらのデータは CCN-STIC 808 に由来し、ENS Navegable は公開していません。

データの由来

  • src/ensmcp/data/anexo_ii.json — ENS Navegable のコーパス(対策、RD の文章、質問票、レベルごとの適用性)を公式サイトから取得したものです。各クエリはメモリ内で検索されます。
  • src/ensmcp/data/guia_808.json — CCN-STIC 808 ガイドから抽出したデータと、その出典情報です(ガイド自体は再配布されません)。snapshot_status は、どの版に由来するかを示します。

スナップショットを再生成するには:

python scripts/build_snapshot.py

サーバーはデフォルトでは Chrome を起動せず、ネットワークも使用しません。変更を明示的に確認するには:

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

ENSMCP_MODE=offline|check-updates|live を使って設定することもできます。

認証付き Streamable HTTP

HTTP トランスポートはループバックでのみリッスンし、32 文字以上の Bearer トークンを要求します。

export ENSMCP_HTTP_TOKEN="$(openssl rand -hex 32)"
ensmcp --transport http

MCP エンドポイントは http://127.0.0.1:8000/mcp です。クライアントは Authorization: Bearer $ENSMCP_HTTP_TOKEN を送信する必要があります。ウェブクライアントでは、 Origin も完全一致で許可する必要があります。

ensmcp --transport http --allow-origin https://cliente.example

ENSMCP_TRANSPORT=http は同じトランスポートを選択します。--host には 127.0.0.1、localhost、::1、またはその他のループバックアドレスのみを指定できます。--port でポートを変更できます。リバースプロキシが異なる Host を保持する場合は、 --allow-host mcp.example で許可します。

別のマシンからアクセスする場合は、ensmcp をループバックで稼働させたまま、TLS 対応のリバースプロキシの背後に公開してください。トークンを URL に含めてはいけません。このモードは共有シークレットによる認証を実装しており、一般公開またはマルチユーザー向け MCP サービスの OAuth 2.1 フローには対応していません。そのようなデプロイには、互換性のある OAuth ゲートウェイが必要です。

独立したデータパック

クロスウォークは Python パッケージには含まれておらず、暗黙的に有効化されることもありません。ENSMCP_DATA_PACKS には、ファイル、JSON ファイルを含むディレクトリ、またはシステムのパス区切り文字(Unix では :、Windows では ;)で区切った複数のパスを指定できます。

ENSMCP_DATA_PACKS=./packs ensmcp --offline

リポジトリには、ISO/IEC 27001:2022 と DORA の部分的なパックが含まれています。DORA の対応関係は編集上のものであり、法的な同等性を示すものではありません。NIS2 パックには情報源の状態のみが記録されています。CCN が以前の CCN-STIC 892 を即時発効で撤回したため、無効かつ空の状態です。include_inactive=true を指定して内容を確認できますが、現行のプロファイルとして使用してはいけません。

要件

  • Python 3.12-3.14

スナップショットを更新する場合(refresh_live_page、起動時のチェック、scripts/build_snapshot.py)に限り、さらに以下が必要です。

  • Google Chrome のインストール
  • ディスプレイ(または、ディスプレイのないサーバーでは xvfb)

インストール

PyPI からサーバーを使用するには:

pip install ensmcp
ensmcp --offline

ライブチェックを有効にするには:

pip install "ensmcp[live]"
ensmcp --check-updates
開発
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

新規インストールした Linux では、さらに以下が必要になる場合があります。

patchright install-deps chromium

依存関係を宣言する場所は pyproject.toml のみです。pylock.toml はそこから生成される成果物(PEP 751)で、Windows、Linux、macOS の x64 と ARM 向けのマーカーを含め、すべての依存関係(実行時と開発時の両方)を正確なバージョンとハッシュに固定します。依存関係を更新するには、pyproject.toml のバージョン範囲を編集して再生成します。

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

クイックスタート

python -m ensmcp

仮想環境のインタープリターを指定して、MCP クライアント(例:Claude Desktop / Claude Code)で設定します。

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

追加の設定は不要です。クエリにはパッケージのスナップショットから回答します。

適合性に関する判断では、BOE、安全保障技術指示書、現行の公式ガイド、および該当する監査機関または認証機関の判断が優先されます。

手動で内容を確認するには:

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

貢献

貢献を歓迎します。

  1. リポジトリをフォークします
  2. 機能ブランチを作成します(git checkout -b feature/nueva-funcionalidad)
  3. 変更をコミットします(git commit -m 'Añade nueva funcionalidad')
  4. ブランチをプッシュします(git push origin feature/nueva-funcionalidad)
  5. Pull Request を作成します

PR を送信する前に、すべての品質およびセキュリティゲートがエラーや警告なしで通過することを確認してください。

プロジェクトを支援する

このプロジェクトがお役に立った場合は、開発を支援できます。

コーヒーをおごる

作者


MCP から参照できる ENS の対策

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。