mcpField
R
releaseguard

releaseguard

ローカル
github.com/RudrenduPaulセキュリティ05 週間前に更新

releaseguard について

releaseguard は、データセットやモデルの公開準備に使う CLI、Python ライブラリ、MCP サーバーです。Presidio で PII や秘密情報を検出し、検出結果を秘匿化して公開用文書を作成します。独自の検出機能はありません。

主な機能

  1. 01Presidio による PII・秘密情報のスキャン
  2. 02CSV、JSON/JSONL、プレーンテキストの読み込み
  3. 03元ファイルを変更しない秘匿化コピー
  4. 04Hugging Face カードと EU AI Act 要約の生成
  5. 05JSON 出力と Python API

活用シーン

  1. 01データセットやモデルの公開前スキャンと秘匿化
  2. 02公開用データセットカードやモデルカードの作成
  3. 03GPAI の学習データ要約の草案作成

MCP 対応

stdio の MCP サーバーとして、ディレクトリのスキャン、秘匿化、公開用パッケージ作成の 3 つのツールを MCP クライアントに提供します。

設定

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

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

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

パッケージ
pypireleaseguard-cli0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

ReleaseGuard

CI PyPI npm License: Apache 2.0 Python 3.10+

インストール • クイックスタート • CLI リファレンス • ライブラリ API • 比較 • FAQ

Presidio を使ってデータセットまたはモデルのディレクトリから PII とシークレットをスキャンし、検出したものをマスキングして、一般公開用のバンドル、Hugging Face のデータセット/モデルカード、および EU AI Act Art. 53(1)(d) に基づくトレーニングデータ概要を、1つのコマンドで生成します。

サンプル CSV 内の PII を releaseguard scan が検出し、その後 releaseguard package がマスキング済みコピー、Hugging Face のデータセットカード、EU AI Act のトレーニングデータ概要を書き出すターミナル録画

ReleaseGuard は、PII 検出ツールではありません。「公開したいデータセットがある」という状態から、「必要な書類の下書きも用意された、サニタイズ済みのバンドルがある」という状態にするための連携ツールです。検出はすべて Presidio が行います。Presidio は GitHub スター数が 10,000 を超える、活発に保守されているオープンソースプロジェクトです。ReleaseGuard は、Presidio のスキャン結果をそのままマスキングにつなぎ、さらに、ほとんどの一般公開データセット/モデルのリリースに必要な2つの文書も生成します。自分でスクリプトを書く必要はありません。

インストール

pip install releaseguard-cli
python -m spacy download en_core_web_sm   # Presidio's default NLP model (~13 MB, one-time)

# npm launcher (thin wrapper around the PyPI package, see "Why two registries" in FAQ)
npx releaseguard-cli --help

en_core_web_sm は spaCy の小型英語モデルで、Presidio のクイックスタートで既定として使用されるモデルです。より高精度な検出を行う場合は、代わりに大型モデルをインストールし、--spacy-model を渡してください。

python -m spacy download en_core_web_lg   # ~400 MB, Presidio's recommendation for production
releaseguard scan ./data --spacy-model en_core_web_lg

クイックスタート

これは、2行のサンプル CSV を実際に実行した結果で、編集されていません。モックアップではありません。

$ releaseguard scan dataset --score-threshold 0.4
Scanned 1 file(s) under dataset
Total findings: 7

entity type                 count
URL                         3
PERSON                      2
EMAIL_ADDRESS               2

URL: 3 という行は、隠さずに取り上げる価値のある、実際に起こる Presidio の癖です。正規表現ベースの URL 認識器は、メールアドレスのドメイン部分([email protected] 内の example.com)にも反応するため、メールアドレスが多いテキストでは EMAIL_ADDRESS と URL の両方として二重にカウントされます。これは Presidio 自体の認識器の動作で、変更は加えていません。また、検出は固定のルックアップテーブルではなく NLP に基づくため、Presidio/spaCy のバージョンによってエンティティ数が多少変わる場合がある点にも注意してください(この実行では presidio-analyzer 2.2.364 と en_core_web_sm 3.8.0 を使用しました)。メールアドレスだけに関心がある場合は、--entities で除外してください。

releaseguard scan dataset --entities EMAIL_ADDRESS,PERSON,PHONE_NUMBER

--entities で特定のエンティティタイプに絞り込み、--json で構造化出力を指定した ReleaseGuard のスキャン

マスキングしてから、1つのコマンドでリリースバンドルをパッケージ化します。

$ releaseguard package dataset --output bundle --score-threshold 0.4
Release bundle written to bundle
  dataset card: bundle/README-dataset-card.md
  EU AI Act Art. 53(1)(d) summary: bundle/eu-ai-act-training-summary.md
  redacted source: bundle-redacted-source

bundle/eu-ai-act-training-summary.md はこのように始まります。実際のスキャン件数が記入され、それ以外は人が入力するための明示的なプレースホルダーのままです。

# Training Data Summary (EU AI Act Art. 53(1)(d))

_Draft generated by ReleaseGuard... Based on the European Commission's
training-data-summary template, published 2025-07-24. This covers the
narrow, currently-binding categorical-summary requirement only -- it is
not a claim of full training-data disclosure._

## 4. Personal Data and PII Handling (from ReleaseGuard scan)

A Presidio-backed scan (detector: `presidio`) covered 1 file(s) under `dataset`.

| PII/secret category detected | Occurrences |
| --- | --- |
| `EMAIL_ADDRESS` | 2 |
| `PERSON` | 2 |
| `URL` | 3 |

すべてのコマンドで --json を指定すると、スクリプトやエージェント向けの機械可読な出力に切り替わります。

概要

  • 用途: Presidio のスキャン結果から、マスキング済みコピー、データセット/モデルカード、EU AI Act Art. 53(1)(d) に基づくトレーニングデータ概要を、3つの個別ツールと手書きのテンプレートを使う代わりに、1つのコマンドで生成します
  • 該当しないもの: 独自の PII 検出ツールではなく、「完全な透明性」やトレーニングデータの完全開示への準拠をうたうものでもありません。ReleaseGuard が該当しないものをご覧ください
  • すべてローカルで実行します。 データセットの内容、スキャン結果、マスキング済みの出力がリモートサービスに送信されることはありません。

CLI リファレンス

スキャン、編集、パッケージ化、mcp のサブコマンドを一覧表示する ReleaseGuard --help の出力

$ releaseguard --help
Usage: releaseguard [OPTIONS] COMMAND [ARGS]...

  Scan, redact, and package a dataset/model directory for public release.

  ReleaseGuard is a packaging layer on top of Presidio (originally a Microsoft
  project, now maintained by data-privacy-stack) -- it does not detect PII
  independently of Presidio. See the README's "What ReleaseGuard is not"
  section.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  mcp      Start an MCP server exposing scan/redact/package as agent tools.
  package  Scan PATH, optionally redact it, and generate a release bundle...
  redact   Scan PATH and write a redacted copy to --output.
  scan     Scan PATH (a file or directory) for PII and secrets using...
コマンド用途
scan PATHPresidio でファイルまたはディレクトリ(CSV、JSON/JSONL、プレーンテキスト)をスキャンします。--entities、--score-threshold、--spacy-model、--json を指定できます。
redact PATH --output DIRスキャン後、編集済みのコピーを DIR に書き込みます。PATH には一切変更を加えません。--strategy mask|hash|remove、--overwrite を指定できます。
package PATH --output DIRスキャンし(デフォルトでは先に編集も行います)、Hugging Face のデータセット/モデルカードと、EU AI Act Art. 53(1)(d) の概要を DIR に書き込みます。--kind dataset|model|both、--redact-first/--no-redact-first を指定できます。
mcpMCP サーバー(stdio)を起動し、scan_directory_tool、redact_directory_tool、package_release_tool を公開します。Python 3.10 以降で pip install "releaseguard-cli[mcp]" が必要です。

すべてのコマンドで --json を使用できます。フラグの全リファレンス:releaseguard <command> --help。

ライブラリ API

from releaseguard.detectors import get_detector
from releaseguard.scanner import scan_directory
from releaseguard.redactor import redact_directory
from releaseguard.packager import build_release_bundle
from releaseguard.types import RedactionStrategy

detector = get_detector("presidio", score_threshold=0.4)
scan_result = scan_directory("dataset/", detector)

redaction_result = redact_directory(
    scan_result, "dataset-redacted/", strategy=RedactionStrategy.MASK
)

bundle = build_release_bundle(
    scan_result, "bundle/", redaction_result=redaction_result, source_kind="dataset"
)
print(bundle.eu_ai_act_summary_path)

PIIDetector(releaseguard.detectors.base)と FileReader(releaseguard.readers.base)が、2 つの拡張ポイントです。現在提供されている検出器は Presidio のみで、リーダーは CSV、JSON/JSONL、プレーンテキストの 3 種類です。どちらもハードコードされた呼び出しではなくレジストリを使用しているため、新しい形式や 2 つ目の検出バックエンドを後から追加する場合も、対象を絞った変更で対応できます。CONTRIBUTING.md を参照してください。

MCP サーバー

ReleaseGuard には Model Context Protocol サーバーが付属しているため、AI エージェント(Claude、Cursor、または MCP 互換クライアント)が、人間が CLI を手動で実行しなくても、データセットまたは モデルディレクトリを直接スキャン、編集、パッケージ化できます。

追加機能をインストールします。

pip install "releaseguard-cli[mcp]"

mcp サブコマンドで直接起動します。

releaseguard mcp

MCP クライアントの設定に追加します(Claude Desktop の場合は claude_desktop_config.json)。サーバーは、独立した コンソールスクリプトではなく、公開されている releaseguard コンソールスクリプトのサブコマンドから起動します。

{
  "mcpServers": {
    "releaseguard": {
      "command": "uvx",
      "args": ["--from", "releaseguard-cli", "releaseguard", "mcp"]
    }
  }
}

トランスポートは stdio なので、ホストする必要はありません。MCP クライアントがサーバーをローカルの サブプロセスとして起動します。ソース:src/releaseguard/mcp_server.py。

サーバーは 3 つのツールを公開し、それぞれ対応する CLI の --json 出力と同じ JSON 形式を返します。

ツール用途
scan_directory_tool(path, spacy_model=None, score_threshold=0.35)Presidio でディレクトリ内の PII とシークレットをスキャンします。
redact_directory_tool(path, output, strategy="mask", overwrite=False)スキャン後、編集済みのコピーを output に書き込みます。path は変更されません。strategy は "mask"、"hash"、または "remove" です。
package_release_tool(path, output, kind="dataset", redact_first=True, strategy="mask")スキャンし、必要に応じて編集してから、リリースバンドル(データセット/モデルカードと EU AI Act Art. 53(1)(d) の概要)を output に書き込みます。

実際の呼び出し例:

scan_directory_tool(path="./dataset", score_threshold=0.4)
-> {"files_scanned": 1, "root_path": "./dataset", "findings": [...], "entity_counts": {"URL": 3, "PERSON": 2, "EMAIL_ADDRESS": 2}}

すべてのツールは、ほかの処理を行う前に path の存在を確認し、無言で誤解を招く「0 ファイルをスキャンしました」という成功結果ではなく、構造化されたエラー {"error": "Path '<path>' does not exist.", "error_type": "PathNotFound"} を返します。このサーバーの以前のバージョンではこの確認を省略していたため、不正なパスがそのまま scan_directory に渡され、エラーではなく誤った成功結果が返されていました。現在は、予期しない例外がサーバーのクラッシュではなく {"error": ..., "error_type": ...} として返るよう、すべてのツールハンドラーもラップされています。A2A 形式のディスカバリー用に、CLI と MCP の両インターフェースおよびそれらを提供するパッケージを記載した .well-known/agent.json マニフェストがリポジトリのルートに含まれています。

比較

ReleaseGuardPresidiohuggingface_hub card toolingpii-lib
PII/シークレットを検出いいえ。Presidio をラップしますはい(本来の用途です)いいえはい(正規表現+NER。コード学習データに特化)
検出したエンティティを秘匿化はい(presidio-anonymizer 経由)はい(ライブラリレベル)いいえはい
Hugging Face のデータセット/モデルカードを生成はい。実際のスキャン結果に基づきますいいえはい(手動入力項目。スキャンとの連携なし)いいえ
EU AI Act 第53条第1項(d)の概要を生成はい。実際のスキャン結果に基づきますいいえいいえいいえ
スキャンからリリースバンドルまでを1つのコマンドで実行はいいいえ(ライブラリのみ。連携部分は自分で実装します)いいえ(ライブラリのみ)いいえ
GitHub のスター数(2026-08 時点)2026年に公開約10,300約3,80016

スター数は、2026-08-03 に GitHub API でリアルタイムに確認しました:data-privacy-stack/presidio(元は microsoft/presidio。プロジェクトは組織を移転しましたが、コードベースは同じです)、huggingface/huggingface_hub、bigcode-project/pii-lib。pii-lib のスター数の少なさ自体が参考になります。これは、学習データのリリースワークフローに特化した PII 秘匿化の先行事例として最も近いものですが、目立った普及には至っていません。ReleaseGuard も、ここで状況が変わるとは想定していません。需要については FAQ の項目をご覧ください。

Databricks Unity Catalog、Credo AI、BigID などのエンタープライズ向けデータガバナンスプラットフォームは、すでに大規模組織を対象とした有料の総合プラットフォームの一部として、PII の分類と秘匿化を提供しています。ReleaseGuard は、ガバナンススイートではなく、単一のリリースに対してスキャン、秘匿化、パッケージ化のワークフローだけを実行したいチーム向けの、無料で単一目的のオープンソース代替ツールです。

ReleaseGuard とは何か、なぜ存在するのか

ReleaseGuard は、PII/シークレットの検出(Presidio 経由)、秘匿化、公開リリース用ドキュメントの作成という3つの手順を1つのコマンドにまとめた、オープンソースの CLI、Python ライブラリ、MCP サーバーです。各手順には、すでに個別のツールがあります。Presidio は検出を行い、presidio-anonymizer は秘匿化を行い、huggingface_hub にはカード生成ヘルパーがあります。また、欧州委員会は手作業で記入する学習データ概要のテンプレートを公開しています。ReleaseGuard 以前には、実際のスキャン結果を記入済みのテンプレートに直接反映する一連の処理はありませんでした。

データセットやモデルを責任を持って公開するには、PII をスキャンし、検出された内容を秘匿化したうえで、2つのドキュメント(カードと、汎用 AI モデルプロバイダー向けの EU AI Act 学習データ概要)をほぼ手作業で作成する必要があります。ReleaseGuard はこのワークフローの後半を自動化し、生成されるドキュメントが、後から誰かが記憶を頼りに書いた内容ではなく、実際にスキャンした内容を反映するようにします。

EU AI Act 第53条第1項(d)について、正確に述べると: この条項は、汎用 AI(GPAI)モデルのプロバイダーに対し、欧州委員会の AI Office が2025-07-24に公開したテンプレートを使用して、学習データの「十分に詳細な概要」を公開することを義務付けています(新規モデルには2025-08-02から適用、市場にすでに投入されているモデルの移行期限は2027-08-02、AI Office による執行確認は2026-08-02から開始)。必要なのは、データソースとモダリティのカテゴリー別概要です。生の学習サンプル、完全な学習手順、モデルの重みは求めておらず、対象となるのも GPAI モデルプロバイダーに限られ、すべてのデータセット公開者に適用されるものではありません。ReleaseGuard が生成する概要は、この限定的な実際の要件に向けた出発点となる草案であり、より広範な「完全な透明性」への準拠を主張するものでは決してありません。

ReleaseGuard ではないもの

  • PII 検出器ではありません。 すべてのエンティティタイプ、信頼度スコア、検出判断は Presidio によるものです。ReleaseGuard は NLP モデルも、認識器も追加せず、独自の精度も主張しません。Presidio が何かを見逃したり、過剰に検出したりした場合(上記のクイックスタートにある URL とメールアドレスの重複など)、ReleaseGuard もその挙動をそのまま引き継ぎます。
  • ホステッドサービスではありません。 すべてローカルで実行されます。スキャン対象、スキャン結果、マスキング済みの出力が外部に送信されることはありません。SECURITY.md の対象範囲のセクションをご覧ください。
  • 法令遵守の証明ではありません。 生成される EU AI Act の概要はドラフトであり、ReleaseGuard ではスキャンから推測できないライセンス、データソース、著作権の各セクションを人間が記入する必要があります。releaseguard package を実行しても、それだけで Art. 53(1)(d) やその他の規制を満たすことにはなりません。
  • 上記で引用した内容を超える需要の証拠ではありません。 同じワークフローを試みた最も近い先行プロジェクトである pii-lib の GitHub スター数は 16 です。ReleaseGuard は、そのプロジェクトが直面した普及の課題を解決したとは主張しません。実在し、範囲が限定され、独立して検証されたギャップ(既存のオープンソースツールには、Presidio のスキャン結果を Art. 53(1)(d) のテンプレートに直接つなぐものがない)を埋め、残りは実際の利用によって判断されると主張しています。

よくある質問

ReleaseGuard は Presidio より正確に PII を検出できますか? いいえ。すべての検出判断で Presidio 自身の AnalyzerEngine を呼び出すため、できません。精度に関する疑問は Presidio に関するものです。評価方法については、Presidio の公式ドキュメントとpresidio-researchをご覧ください。

scan で spaCy モデルのダウンロードが必要なのはなぜですか? Presidio の AnalyzerEngine は、文脈を考慮した検出(周囲のテキストから「John Smith」が単なる大文字で始まる単語ではなく、人名だと認識するなど)に spaCy 言語モデルを必要とします。spaCy モデルは pip の依存関係としてではなく、独自のインストール可能なパッケージとして提供されるため、python -m spacy download en_core_web_sm は、Presidio を直接使う場合と同じく、一度だけ実行する必要があります。

ReleaseGuard は Windows、macOS、Linux で動作しますか? OS 固有のコードパスを持たない純粋な Python 実装で、npm のランチャーシムはプラットフォームに応じて where または which を選び、インストール済みの CLI(npm-shim/bin/releaseguard-cli.js)を探します。現在、CI は Python 3.10 と 3.12 で ubuntu-latest のみ実行されているため、macOS と Windows は自動テストマトリックスの対象外です。マトリックスが拡張されるまでは、CI で検証済みではなく、動作する見込みがあるものとして扱ってください。

EU AI Act 第 53 条第 1 項(d)の概要は、それだけで法的に十分ですか? いいえ。ReleaseGuard が検証できる箇所(PII/シークレットのセクション)には実際のスキャンデータを記載し、検証できない箇所(データソース、ライセンス、著作権の状態)には明示的なプレースホルダーを置いた、構成上正しい出発点となる草案です。コンプライアンス関連の資料として公開する前に、人間が、できれば法務レビューを受けたうえで、プレースホルダーを埋める必要があります。

GPAI モデルをトレーニングする場合にだけ適用されますか? 第 53 条第 1 項(d)の概要が対象とするのは、EU AI Act に基づく汎用 AI モデルのプロバイダーであり、対象となる購入者は限定されています。ReleaseGuard の scan、redact、Hugging Face カード生成機能は、第 53 条第 1 項(d)が適用されるかどうかにかかわらず、あらゆるデータセットやモデルのリリースに役立ちます。

レジストリが 2 つあるのはなぜですか? Presidio 自体(presidio-analyzer/presidio-anonymizer)が Python 製であるため、ReleaseGuard の実装も Python です。別の言語でラップすると、外部コマンドの呼び出しを繰り返すか、バインディングを再実装することになります。npm パッケージ(releaseguard-cli)は薄いランチャーであり、再実装ではありません。PyPI からインストールされた本体の releaseguard バイナリを見つけて実行するため、Presidio の検出ロジックを 2 つの言語で重複させずに、npm を主に使うエージェントツールから npx releaseguard-cli を利用できます。

ReleaseGuard のライセンスは何ですか?商用利用できますか? Presidio 自身と同じ Apache 2.0 です。ライセンスと著作権表示を保持し、ソースに加えた変更を明記するという標準的な Apache 2.0 の条件に従えば、プロプライエタリ製品内での利用も含め、商用利用、変更、再配布が認められています。全文についてはLICENSEをご覧ください。

本当に必要としている人はいるのでしょうか?それとも「誰も求めていない接着剤コード」なのでしょうか? 率直に言うと、このプロジェクトの初期調査時点では、このワークフローそのものを実際の悩みとして説明する自然発生的な需要の兆候(HN や Reddit のスレッド)は見つかっていません。独立して検証でき、より限定的で確かな事実は、既存のオープンソースツールに、1 回のスキャンから 1 つのコマンドで Presidio のスキャンを第 53 条第 1 項(d)のテンプレート、または HF カードとの統合形式に直接つなぐものがないことです。このギャップが実際の利用につながるかどうかは、答えを決めつけず、このプロジェクトが追跡している未解決で反証可能な問いです。

ReleaseGuard が解析できないファイル(画像、モデルの重みファイル、追加機能なしでの Parquet)はどうなりますか? scan と redact はそれらをスキップします(--json 出力の files_skipped に一覧表示されます)。redact はリリース用バンドルから黙って削除するのではなく、変更せずに出力ディレクトリへコピーします。これらは PII のスキャン対象ではないため、公開前に別途確認してください。

Contributing

See CONTRIBUTING.md. Security issues: see SECURITY.md.

License

Apache 2.0

コメント

MCP は初めてですか?

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

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