assay について
Assayは、特権的なMCP操作を監査するチーム向けのポリシーゲート兼証拠ツールです。許可・拒否の判断を記録し、レビューやCI向けにオフライン検証可能な証拠バンドルを作成できます。
主な機能
- 01決定論的な許可・拒否ポリシーゲート
- 02改ざん検知可能な証拠バンドル
- 03オフライン検証と再生
- 04Trust Basisによる主張の分類
- 05SARIFとGitHub ActionのCI出力
活用シーン
- 01CIでの特権MCP呼び出しのレビュー
- 02ホスト型バックエンドなしでの証拠再生
- 03宣言された主張と観測結果の照合
MCP 対応
AssayはルーティングされたMCP `tools/call` リクエストをプロキシし、ポリシーに基づいて転送可否を判断します。記録を設定すると、判断と観測結果を証拠バンドルとして出力できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Assay
特権ツールアクションのための、オープンで再計算可能なエビデンスプロファイルです。
Assay は、特権ツール呼び出しで何が判断され、何が観測され、何が未証明のままなのかを記録します。そのため、レビュー担当者はエージェント自身の説明を信頼する代わりに、オフラインで主張を再現できます。強制モードでは、ルーティングされた MCP tools/call リクエストに対するプロキシゲートは決定論的に動作し、フェイルクローズ方式です。また、強制を行うプロキシは参照用の生成元であり、コントラクトそのものではありません。対応する Linux ホストでは、オプションの eBPF/LSM 計測によりカーネルレベルの観測が追加されます。CI ネイティブで、バックエンドは不要、設計上の制約範囲も明確です。
クイックスタート · 仕組み · 動作を見る · MCP の例 · OWASP MCP Top 10 · ディスカッション
エージェントは MCP を通じて実際のツールアクセスを得ました。そして、ツールポイズニング、ラグプル、混乱した代理人となる OAuth も伴いました。Assay はツール呼び出しの境界に位置し、次の 3 つを順に行います。
1 つのゴールデンパス: リリース固定のエージェントジャーニーには、実行された 9 つの CLI/MCP ステップと、それぞれの終了コード/標準出力のコントラクトが記録されています。保護対象アクションのフィクスチャは examples/privileged-action-gate/ にあります。
強制、証明、誠実さの維持
- 強制します。 強制モードでは、ゲートは経由する
tools/callリクエストを転送前に判定し、許可または拒否の正確な理由を示します。対応する Linux ホストでは、別個の制御として、cgroup eBPF による IPv4/TCP 接続フィルタリング(フックのエラーパスでは接続を許可します)と、Landlock による TCP 接続ポートの許可リストがあります。利用できないバックエンドや競合するファイルシステムポリシーがある場合、assay sandbox --enforceは--allow-audit-fallbackが明示されていない限り実行を拒否します。--enforce-netには--enforceが必要です。Landlock のネットワーク強制が有効な場合、監査フォールバックが有効でも、TCP ポートの許可リストとして表現できないポリシーは拒否されます。 - 証明します。 設定済みの生成元は、オフラインで検証可能な改ざん検知機能付きエビデンスバンドルにエクスポートするための判定と、範囲を限定した観測結果を記録できます。特権アクションのフローでは、ホスト型バックエンドなしで CI レビューを行えるよう、判定結果、呼び出し前の確立までの経路、宣言と観測の適合性が記録されます。基本的な
assay mcp wrapはバンドルを自動作成しません。必要な記録とエクスポートの手順を有効にしてください。 - 誠実さを保ちます。 Trust Basis は、サポート対象の主張を
verified、self_reported、inferred、absentに分類し、そのゲートで宣言された主張の境界を確認します。ツールが「成功」を返しても、それはプロバイダーの主張であり、証明ではありません。Assay は単一の安全性スコアを提供しません。成果物を信頼する前に、それぞれの情報源、対象範囲、明示されていない事項を確認してください。
クイックスタート
# Fast path: release installer for Linux and macOS.
curl -fsSL https://getassay.dev/install.sh | sh
# Confirm the command resolves; if setup fails, run `assay doctor`.
assay --version
# Source-build alternative (requires Rust):
cargo install assay-cli --version 6.17.0 --locked
python3 examples/mcp-quickstart/run.py
v6.17.0 では、ソースコードをチェックアウトした環境、または公開済み CLI アーカイブを展開した環境で最後のコマンドを実行してください。
インストーラーはバイナリのみで、クイックスタート用の範囲限定アセットは含まれていません。公開中の
getassay.dev インストーラーは、選択したアーカイブを展開する前に、公開済みの SHA-256 サイドカーファイルと照合して検証します。さらに GitHub アーティファクトの来歴を必須にするには、ASSAY_REQUIRE_PROVENANCE=1 を設定します。既定では provenance_not_requested と報告され、厳格な検証に成功すると provenance_verified と報告されます。
チェックサムは公開済みサイドカーファイルとのバイト単位の一致を証明するものであり、生成者の身元を証明するものではありません。来歴はソースとビルドを特定するものであり、実行時の安全性や意味的な正しさを保証するものではありません。
キャプチャされたランナーの出力(同梱のローカルモックは外部に対する操作を行いません):
assay quickstart: PASS
mcp_requests=initialize,tools/list,tools/call
decision=allow tool=read_file
decision_artifact=.assay/quickstart/decisions.ndjson
non_claim=forwarded_to_local_mock_only
リリース済みの提供物:
- 静的なプロジェクトマニフェストは Claude Code と Cursor 向けに提供されています。Codex では、エディター向け MCP レシピに記載された同等の TOML エントリーを使用します。マニフェストが存在していても、ホストによる検出が証明されるわけではありません。
assay mcp config-pathが対応するのは Claude Desktop と Cursor のみです。 - 公開済みの v6.17.0 CLI アーカイブは、Linux x86_64/arm64、macOS x86_64/arm64、Windows x86_64 に対応しています。Python wheel は macOS x86_64/arm64 および Linux x86_64 上の CPython 3.12、3.13、3.14 に対応しています。それ以外のインタープリターやプラットフォームへの対応は保証していません。
- 公開済みの
assay-mcp-serverアーカイブは Linux x86_64/arm64 に対応しています。MCPB とserver.jsonのパッケージ記述子も公開されていますが、それらが存在していても、ホストによる検出が証明されるわけではありません。 - CI:GitHub Action。コアフローにホスト型バックエンドや API キーは不要です。脅威モデルについて詳しく知りたい方は、OWASP MCP Top 10 の対応表で、各リスクについて Assay が対応する範囲と、意図的に対応しない範囲を説明しています。
提供内容
| 出力 | 内容 |
|---|---|
| ポリシーゲート | assay mcp wrap — ツールの実行前に、理由とともに決定論的に許可または拒否します。 |
| エビデンスバンドル | 監査と再生に使用できる、オフラインで検証可能かつ改ざんを検知できるアーカイブです。 |
| Trust Basis / Trust Card | 正規の trust-basis.json(範囲限定の主張分類)に加え、レビューしやすい trustcard.{json,md,html} を提供します。 |
| 外部レシート | 評価結果、実行時の判定、モデルインベントリーを、JSON Schema の契約を備えた範囲限定のレシートとして提供します。 |
| ツール判定ログ | 処理対象となる既知のツール呼び出しについて、assay-mcp-server の stdio サーバーは、ログフィルターで有効化されている場合、情報レベルの tool_decision イベントを出力します。decision には、投影されたターゲットフィールドを含む、観測された判定エントリーを JSON でエンコードしたものが格納されます。 |
| SARIF / CI | GitHub Action、Security タブとの統合、PR に対するポリシーゲートです。 |
| アテステーション | エビデンスバンドルを、エビデンスバンドル/v1 predicate を備えた DSSE ラップ形式の in-toto v1 Statement として署名します。 |
Agent ──► Assay ──► MCP Server
├─ ✅ ALLOW / ❌ DENY (policy, with reason)
├─► 📋 Evidence bundle (offline-verifiable)
└─► 📊 Trust Basis → Trust Card → SARIF / CI
現行リリース:v6.17.0。リリース済みの動作については、CHANGELOG.md とリリースノートが引き続き正式な情報源です。タグ付け後にマージされた変更は Unreleased であり、crates.io への公開はマージの状態とは別です。
ローンチの定義とサポートに関する取り決め:docs/LAUNCH.md。
これは自分に合っていますか?
はい。評価結果、実行時の判定、インベントリーアーティファクト、または MCP ツール呼び出しテストがすでにあり、ダッシュボードではなく、小さくレビューしやすい CI アーティファクトを求めている場合です。スカラーの信頼バッジではなく、範囲を限定した監査可能性を提供します。
まだ適していません。モデルの正しさを Assay に判定してほしい場合、ホスト型ダッシュボードを製品として求めている場合、または範囲を限定したエビデンス境界ではなくコンプライアンスの保証を求めている場合です。Assay は信頼スコアエンジンでも、汎用の評価ダッシュボードでも、ホスト型の可観測性製品でもありません。その役割と対象外をご覧ください。
動作を確認する
エージェントが、強制プロキシを通じて特権アクション github.add_deploy_key を試みます。プロキシは転送する前に呼び出しごとに判断し、実際の認証情報を使わず、ローカルのモックに対してオフラインで動作します。
cd examples/privileged-action-gate && ./run.sh

拒否はフェイルクローズのための注意喚起であり、意図に対する判定ではありません。許可は転送するという判断であり、アクションが実行された証明ではありません。宣言内容と観測内容の適合性は、判定の横に記録され、ゲートとして使われることはありません。詳細な手順については、privileged-action-gate をご覧ください。
目的に合った方法を選ぶ
| お持ちのもの | 得られるもの | こちらから開始 |
|---|---|---|
| CI 評価からの Promptfoo JSONL | 評価結果のレシート+検証済みバンドル+Trust Basis の差分 | Promptfoo JSONL |
OpenFeature EvaluationDetails | 判断レシート+検証済みバンドル | OpenFeature |
| CycloneDX ML-BOM のモデルコンポーネント | インベントリレシート+検証済みバンドル | CycloneDX ML-BOM |
| MCP ツール呼び出し | 許可/拒否の監査証跡+観測された動作の証拠 | MCP クイックスタート |
| GitHub PR ゲート | Trust Basis の差分、ゲートのステータス、SARIF/JUnit 対応の出力 | CI ガイド |
| Runner アーカイブ/カバレッジ注釈 | カバレッジ記述子+クレームクラスセル+主張内容と観測内容の照合 | カバレッジの誠実性に関する手順 |
ワークフローはシンプルです。範囲を限定した結果をインポートまたは記録し、バンドル化して検証し、trust-basis.json をコンパイルして、Trust Basis の差分をゲートします。Assay は上流のツールを真実の唯一の情報源にはしません。証拠の境界を検査可能にします。特権ツールアクションについては、MCP プロキシが各 tools/call を構造化されたツール判断の境界として記録し、主張と検証済みの情報の境界を正直に保ちます。
ポリシーはシンプルです
version: "2.0"
name: "my-policy"
tools:
allow: ["read_file", "list_dir"]
deny: ["exec", "shell", "write_file"]
schemas:
read_file:
type: object
properties:
path: { type: string, pattern: "^/app/.*" }
required: ["path"]
assay init --from-trace trace.jsonl は、トレース生成フローで使う実行時観測ポリシー(files、network、processes)を生成します。これは MCP 認可ポリシーではありません。従来の MCP constraints: ポリシーを移行するには、assay policy migrate を実行します。ポリシーファイルをご覧ください。
Assay を選ぶ理由
| 正規の証拠 | Assay の証拠モデルは安定した契約です。OpenTelemetry とプロトコルアダプター(ACP/A2A projection profile/UCP)は、このモデルにマッピングされます。 |
| 決定論的 | ポリシーゲートは明示的なルールを使用し、その判断はリクエスト、ポリシー、適用されるセッション状態に基づきます。ただし、これによってライブ評価器や外部への作用が決定論的になるわけではありません。 |
| 範囲を限定した主張 | 検証済み/確認可能/存在しないを明確に区別し、スコアを最初に提示する UX は採用しません。 |
| オフライン優先 | コアの強制処理とバンドルの検証にバックエンドは不要です。 |
| 検証可能な来歴 | ソースクラスとカバレッジモデルの各要素がいつ追加されたかを、鵜呑みにするしかない主張ではなく、git log で確認できるコミットとして示します。来歴を参照してください。先行する取り組みには、まず謝意を表しています。 |
詳細はこちら
- MCP クイックスタート · エディター向け MCP レシピ — Cursor / Claude Code / Codex でポリシーを適用する MCP
- MCP 2025/2026 プロトコル時代の互換性 — 固定された
resultTypeと中間結果の互換性コーパス - コーディングエージェントのガバナンス · OpenTelemetry と Langfuse — 観測された実行 → 証拠
- 証拠レシートの実例 — Promptfoo / OpenFeature / CycloneDX のレシートファミリー
- CI ガイド · 証拠ストア(S3 / B2 / MinIO)
- OWASP MCP Top 10 マッピング · セキュリティ実験
- ポジショニング:ADR-033 · RFC-005
証拠の認識論、レイテンシー、内部 Runner
信頼性の主張には、単一の安全性スコアではなく、明示的な認識論を用います。verified(直接的な証拠またはオフライン検証)、self_reported(独立した裏付けなしに出力されたもの)、inferred(範囲が限定され、文書化されたルール)、absent(信頼できる証拠なし)です。Assay は、集約された信頼性スコアや、主な出力としての safe/unsafe バッジを提供しません。詳しくはADR-033をご覧ください。
過去の断片化 IPI に関する実験結果は、2026-03-02 付で、コミット 289a43ecc144 を記載し、決定論的なセットで 0.771ms p50 / 1.913ms p95 と報告しています。このハーネスでは、JSON-RPC トランスポートとツールの応答を含む、ローカルのモック tools/call の完全なラウンドトリップを計測します。報告された計測値は、ポリシー判定のオーバーヘッドを個別に測定したものではなく、現行リリースの性能やモデルのエンドツーエンド性能を示すものでもありません。
Assay-Runner は、委任された Linux/eBPF の受け入れ経路の背後にある、内部向け/実験的な計測実行サブシステムです。依存パッケージが解決できるよう、そのクレートはワークスペースの公開プロセスに含まれています。公開されていても、Runner が単独の製品になるわけではなく、その API に個別の安定性保証が付与されるわけでもありません。
証拠の生成、検証、レビュー可能性に関連するプロジェクトです。それぞれ独自のインターフェースとスコープを持っています。
- assay-action — GitHub Action:バンドル、PR の概要、SARIF を検証します(Marketplace)。
- Assay-Harness — 正式な証拠アーティファクトを基盤とする、レシピ、ゲート、レポートのレイヤーです。
- observed-effect-v0 — 範囲を限定した観測効果の証拠レコードと、中立的なキャリア(in-toto、SCITT、MCP evidenceRef)の実例です。
- gateway-evidence-replay — ゲートウェイ経路の証拠バンドルを対象とした、決定論的なオフライン再生検証ツールです。
- RGE-Bench — 証拠のレビュー可能性を検証する適合性キットです。独自の機械検査による中立性ガードのもと、別途保守されています。再現性はダイジェストの範囲内に限定され、引き継がれません。v1 の 71 ベクターのダイジェスト
sha256:e769822bc6c9e31085da7b1a17b163b9747fe0d04314fbb8685d4e612087c7cbと、過去の v2 のダイジェストsha256:ba0e3795d75c788fa48313ab462493f22d78759851d1b3275d8117051bb22fd0(95 ベクター)は、それぞれ別のスタックを用いた第二著者による、報告済みの独立実装を 1 件持っています。JM-Lab は 2026-08-24 に、契約テキストと著者提供の入力を用い、expectedを読まずに v2 の 95/95 の再現を報告しました。いずれの再現結果も、現行の 104 ベクター v3 候補ダイジェストsha256:93f8ae9654eb5a16dee28d882087669cae5183e02e116ba1e8071a30594cfb6aには引き継がれません。このダイジェストは記録上、未再現とされています。REPRODUCTIONS.md を参照してください。
オープンなプロファイル:privileged-mcp-action/v0
privileged-mcp-action/v0
は、すでに存在する証拠レコードに対する構成と検証の契約です。つまり、特権付き MCP ツール呼び出しで何が決定され、その効果として何が観測され、何が未証明のままなのかを定めます。新しいエンベロープや総合的な判定は追加しません。
14 ベクターの適合性コーパス (受け入れ 5 件、拒否 9 件)が付属します。そのダイジェストは候補であり、著者以外の実装者が仕様テキストだけをもとに期待される結果を導き出すまでは、再現済みとは見なされません。
その再現への参加は受け付けており、呼びかけは実際のものです: #1840。 言語やスタックは問いません。この呼びかけには、現行のダイジェストが示す正確なコミットが記載されています。 クリーンルームプロトコルには、不透明でアテステーション済みの入力パック、1 コマンドで実行できる採点アクション、実装レポートのテンプレートが用意されています。検証ロジックや期待される結果は提供しません。 コーパスの READMEには、著者資格の境界と主張できる範囲の上限が記されています。
貢献
cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
CONTRIBUTING.md と GitHub Discussions を参照してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。