mcp-trust について
mcp-trustは公開MCPサーバーのリスクを評価するレジストリで、接続前にエージェントが危険度、透明性、スキャン結果を確認できます。読み取り専用のMCPインターフェースを備え、カタログの検証に失敗した場合はフェイルクローズします。
主な機能
- 01A–Fの危険度を照会
- 02リスク項目と検出結果を確認
- 03評価方法と透明性を確認
- 04スナップショットを検証しフェイルクローズ
活用シーン
- 01公開MCPサーバーへの接続前に確認
- 02スキャン結果と透明性を比較
- 03署名済みスナップショットをオフライン検証
MCP 対応
読み取り専用MCPサーバーとして動作し、`list_servers`、`check_server`、`get_methodology` ツールで同梱カタログを照会できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
MCP Trust Registry
接続する前に確認しましょう。AI エージェントが利用する MCP サーバーに、中立的で公開された危険度評価を提供します。
公開サイト: mcp-trust.vercel.app
PyPI にはまだ公開されていません。 以下のクイックスタートに従って、ソースからインストールしてください。
MCP サーバーとして使う
mcp-trust は読み取り専用の MCP サーバーとして動作するため、エージェントはサーバーに
接続する前に危険度評価を確認できます。実際のスキャン評価を記録ごとの明示的な出所情報とともに
焼き込んだスナップショットを提供するため、データベースもネットワークも必要ありません。
mcp-trust mcp-serve # from a source/dev install (works today)
uvx mcp-trust mcp-serve # once published to PyPI
| ツール | 説明 |
|---|---|
list_servers | 評価済みのすべての MCP サーバーと、その A-F 評価、透明性、危険度スコアを表示します。 |
check_server | スラッグで指定したサーバーの詳細な評価、リスクの側面、検出事項を表示します。 |
get_methodology | A-F 評価と透明性の軸の算出方法、および誠実性モデルを説明します。 |
MCP ランタイムは、重複キーの拒否、必須フィールドと型の検証、一意な スラッグとソース座標、サポート対象の列挙値、サンドボックスとスキャンモードの一致、 タイムゾーン対応のスキャンタイムスタンプの確認などを含む、決定論的なスキーマ v2 検証を通過した場合に限り、パッケージ化されたカタログを受け入れます。受け入れ時には、 評価と危険度スコアの整合性、透明性と注釈の網羅率の整合性、重大な検出事項と評価上限の 整合性も確認します。生の JSON は 1 MiB に制限され、サーバー、検出事項、ツール、 公開文字列には決定論的な上限が設けられています。スキーマ v2 は追加の未知フィールドを保持します。 必須フィールドの欠落や無効な値、未知のスキーマバージョンはフェイルクローズで処理されます。
カタログを受け入れられない場合、list_servers と check_server はレコードを一切提供せず、
ステータス UNKNOWN、エラーコード CATALOG_SNAPSHOT_INVALID、ソート済みの理由コード、
server_count_served: 0 を含む mcp-trust-mcp-error.v1 を返します。
get_methodology は引き続き利用できます。この境界で確認するのは内部整合性であり、
スナップショットの真正性、作成者、改変不能性、新しさを証明するものではありません。
オフラインの利用者は、mcp-trust verify-snapshot を使って不足している公開時の確認を
追加できます。切り離された Ed25519 ステートメントにより、スナップショットの正確なバイト列、
発行者 ID、制限付きの発行・有効期限ウィンドウ、単調増加する公開 ID、以前の利用者チェックポイントが
結び付けられます。利用者は信頼ルートの SHA-256 を独立してピン留めし、ロールバック耐性を
確保するために返されたチェックポイントを保持する必要があります。無効、期限切れ、署名者不明、
フォーク、またはロールバックされた入力に対しては、UNKNOWN の理由コードのみが返され、
評価は返されません。詳細は
docs/OFFLINE-SNAPSHOT-TRUST-V1.md を参照してください。
ステートメントの新しさが証明するのは最近の公開承認であり、最近のスキャンではありません。
レコードごとのスキャンタイムスタンプと 90 日の古さに関するポリシーは、引き続き別途確認します。
現時点では、本番用の信頼ルート、署名鍵、ステートメント、チェックポイントは同梱されていないため、 利用者がそれらを別途指定してピン留めしない限り、組み込みの MCP スナップショットは 構造上の検証のみを行います。テスト用のフィクスチャ鍵は公開用の鍵ではありません。
MCP サーバーに接続すると、エージェントの動作に影響を与える権限をそのサーバーに渡すことになります。 ツールポイズニング、プロンプトインジェクション、過度に広い権限、ツールを改変するラグプルは 攻撃手法として知られていますが、現在、サーバーを組み込む前にすばやく審査する方法はありません。 MCP Trust Registry は公開 MCP サーバーをスキャンし、それぞれに読みやすい単一の危険度評価(A-F)、 独立した透明性シグナル、およびそれらの根拠となる検出事項を提供します。
OSV.dev、Socket.dev、haveibeenpwned のようなサービスを、MCP サーバーに特化させたものです。
前提条件
- Python 3.12 以降。ローカル環境のセットアップでは
.python-versionにより 3.15.0 が指定されています uv(依存関係の管理とプロジェクトの実行に使用)
このプロジェクトには uv==0.13.0 が必要です。以下のコマンドはリポジトリの
ルートから実行してください。uv sync はコミット済みのロックファイルを使って、プロジェクトの仮想環境を作成します。
MCP 設定ポータビリティスタジオ
バージョン管理された、シークレットのプレースホルダーのみを含む MCP 接続の意図を、Codex、Claude Code、Claude Desktop、または VS Code 向けのステージング済み設定としてレンダリングし、明示的な意味上の損失/範囲拡大レポートを受け取ります。
uv run --frozen --extra dev mcp-trust portability validate \
tests/fixtures/portability/local-stdio.json
uv run --frozen --extra dev mcp-trust portability round-trip \
tests/fixtures/portability/local-stdio.json --host codex
このスタジオはローカルのみで動作します。実際のホスト設定を検出または編集したり、MCP サーバーを起動したり、URL に接続したり、モデル化されたシークレット値を出力したりすることはありません。生成された設定が証明するのは、文書化されたホスト形式との互換性のみであり、実行時の接続や採用ではありません。詳しくは
docs/MCP-CONFIG-PORTABILITY-STUDIO.mdを参照してください。
仕組み
register a server -> scan via engine -> derive grade -> persist -> serve at a stable URL
レジストリは脆弱性検出を再実装しません。プラグイン可能なスキャンエンジンを制御します。出荷時のバックエンドは、公開されている
mcp-audits (>=2.7.0,<3) パッケージをラップし、カタログ、公開される信頼性グレードの正規化、永続化、検索 API を管理します。
クイックスタート
git clone https://github.com/saagpatel/mcp-trust.git
cd mcp-trust
uv sync --frozen --extra dev
demo_dir="$(mktemp -d)"
uv run --no-sync mcp-trust seed --db "$demo_dir/registry.db"
env -u MCP_TRUST_RECEIPTS_DIR uv run --no-sync mcp-trust scan \
mcp-reference-time --engine stub --db "$demo_dir/registry.db"
uv run --no-sync mcp-trust check mcp-reference-time --db "$demo_dir/registry.db"
依存関係をインストールした後、このデモでは新しい一時的な SQLite データベースと明示的に指定したStubEngineのみを使用します。カタログサーバーは起動せず、グレードはデモ用データです。--dbを指定すると、デフォルトのデータベースと運用担当者によるMCP_TRUST_DBの上書きを回避できます。MCP_TRUST_RECEIPTS_DIRをクリアすると、運用担当者のレシートディレクトリへの書き込みを回避できます。
ローカル API を通じてこのデモを表示するには、任意でループバックのみを受け付ける読み取り専用サーバーを起動し、終了後に Ctrl-C で停止します。
MCP_TRUST_ENGINE=stub MCP_TRUST_PUBLIC_READONLY=1 \
MCP_TRUST_MASKED_GRADES="$PWD/masked-grades.json" \
uv run --no-sync mcp-trust serve --db "$demo_dir/registry.db" \
--host 127.0.0.1 --port 8000
実際のエンジンを使ったスキャンには、別途準備した[engine]環境、レビュー済みの対象、サンドボックスの判断、および運用担当者向け手順書に記載された最新の適格性確認/事前チェックの証拠が必要です。サーバープロセスを起動したり、リモートエンドポイントに接続したりする場合があり、このローカルデモや通常の検証の対象外です。フィクスチャのチェックについては、ローカル開発と検証を参照してください。
API
| メソッド | パス | 目的 |
|---|---|---|
GET | / | web -- 公開カタログページ(サーバーごとのグレードと透明性) |
GET | /ui/servers/{slug} | web -- サーバー詳細ページ+README バッジ埋め込みスニペット |
GET | /healthz | 稼働状態 |
GET | /servers | サーバーごとのカタログ+最新グレード、出所、鮮度(JSON) |
GET | /servers/{slug} | 最新スキャンレコードの全情報+出所/鮮度とメタデータ(JSON) |
POST | /servers/{slug}/scan | オペレーターによるスキャンのトリガー。公開デプロイではこのルートは無効です |
GET | /servers/{slug}/badge.json | shields.io 互換の README バッジ |
各サーバーには、互いに独立した 2 つの指標があります。危険度グレード(A~F)と透明性レベル(高/中/低。アノテーションのカバー率に基づきます)です。自動判定されたグレードは、推奨、認証、またはサーバーが悪意を持つという主張ではありません。透明性の低いサーバーのグレードが低い場合、それは「安全性を検証できない」という意味であり、「危険だと判明している」という意味ではありません。
HTTP によるスキャンのトリガーは、デフォルトでフェイルクローズです。公開デプロイでは MCP_TRUST_PUBLIC_READONLY=1 を設定してください。これにより、エンジンが実行される前に POST /servers/{slug}/scan は 403 を返します。オペレーターによるスキャンは通常、公開トラフィック経由ではなく、永続レジストリ DB を使って CLI から実行してください。
決定論的な StubEngine を使ったローカル API デモでは、MCP_TRUST_ALLOW_UNAUTHENTICATED_STUB_SCANS=1 を設定してください。公開環境では絶対に設定しないでください。トークンで保護された API スキャンのトリガーは、MCP_TRUST_SCAN_TOKEN を設定し、Authorization: Bearer <token> または X-MCP-Trust-Scan-Token として渡すことで、プライベートなオペレーター向け環境でも引き続き利用できます。
保存されている最新のスキャン行を読み取れない場合、API、Web、静的ページ、バッジ、スナップショットの各投影はフェイルクローズとなり、UNKNOWN を返します。古いグレードが再び表示されることはありません。保存されたソース/リスク/検出結果/証拠の JSON には、フィールドごとに 1 MiB の受け入れ上限があり、検出結果やツールのコレクションにも上限が設けられています。診断情報にコンテンツは含まれません。古い行が読み取れない場合でも、読み取り可能な最新グレードは維持されますが、スキャン履歴とグレード変更の判定は明示的に UNKNOWN になります。読み取り不能な履歴が修復または処理されるまで、スナップショットの構築は停止します。
すべての公開サーフェスは、フェイルクローズの鮮度投影を共通で使用します。スキャンからちょうど 90 日後までは FRESH です。それより後の時点では STALE になります。スキャン時刻がない、不正な形式である、または未来の時刻である場合は、判定フィールドを非表示にして UNKNOWN とします。未スキャンのエントリーは NOT_APPLICABLE です。オペレーターによるマスキングはスキャンが存在しない場合にも適用され、スキャン状態から推測されることはありません。静的ページとバッジはスキャン日または有効期限を持つ不変の履歴証拠であり、リクエスト時点での鮮度を保証するものではありません。危険度、透明性、証拠の品質は別々の指標であり、グレードが推奨を意味することはありません。
実際のスキャン実行時に MCP_TRUST_RECEIPTS_DIR=/data/mcp-trust/receipts を設定すると、各スキャンの JSON レシートがアーカイブされ、ポータブルな成果物ファイル名が report_ref に保存されます。
リモート認可メタデータの事前確認
Remote Registry の候補は、MCP エンドポイントへの接続や認証情報の取り扱いを行わずに、検出可能な MCP 認可メタデータを確認できます。まず、以前に保存した公式 Registry のレスポンスから候補マニフェストを作成し、次に特定の stable_id を選択します。
uv run python scripts/plan_registry_corpus.py \
--input path/to/saved-registry-response.json > /tmp/registry-candidates.json
uv run mcp-trust auth-posture com.example/[email protected] \
--manifest /tmp/registry-candidates.json \
--pretty
公開されている WWW-Authenticate: Bearer チャレンジを別のオペレーターワークフローで取得済みの場合は、その値を --www-authenticate で渡してください。そうでない場合、このコマンドは MCP で必須とされる保護リソースの well-known パスを試した後、仕様で定められた順序に従って RFC 8414 および OpenID Connect の認可サーバー検出を試みます。
このコマンドは McpAuthorizationPostureV1 JSON を出力します。終了コード 0 と state=metadata-ready は、少なくとも 1 つの認可サーバーが、ポリシーレビューに必要なエンドポイントと PKCE S256 メタデータを公開していることのみを意味します。認可、認証情報の利用可能性、ランタイムセキュリティ、スキャンの適格性、信頼度を証明するものではありません。不明または無効な証拠の場合は終了コード 1 となり、ブロックされた状態が維持されます。ローカルマニフェストのバインディングが無効な場合は、終了コード 2 となります。
ネットワーク境界は意図的に限定されています。HTTPS メタデータ GET のみを行い、環境由来のプロキシ、リダイレクト、認証情報、エンドポイントセッション、書き込みは使用しません。リクエストごとに DNS を 1 回だけ解決し、すべての応答がグローバルにルーティング可能であることを確認したうえで、接続先を許可されたアドレスに固定します。その際、TLS 検証と SNI は元のホスト名に紐づけられたままです。レスポンス本文のサイズには上限を設け、検証を行います。出力にはバイト数と SHA-256 のみを記録します。メタデータの成功レスポンスには、有効な HTTP Date も必要です。宣言されたキャッシュの有効期間は 24 時間のポリシー上限まで尊重されますが、ソース証拠が欠落している場合、未来の日付の場合、または古くなっている場合は、不明な状態のままです。実装の基盤は、MCP 認可仕様、RFC 9728、RFC 8414、およびOpenID Connect Discoveryです。
再利用可能な Web リリース読み戻し
このリポジトリは、言語に依存しない WebReleaseReadbackV1 コントラクトと、標準ライブラリを使ったリファレンス検証ツールを管理しています。利用者は、明示的な HTTPS オリジンと、バージョン管理されたルートセンチネルマニフェストを指定します。
python scripts/web_release_readback.py \
--manifest path/to/release-routes.json \
--target-url https://preview.example.com \
--pretty
このコマンドは、構造化されたレシートを 1 つ標準出力に出力します。ステータス、必須または禁止されたセンチネル、本文の完全一致、ダイジェスト、本文のサイズ上限、タイムアウト、リダイレクトのいずれかのアサーションに失敗した場合は、ゼロ以外の終了コードを返します。GET と HEAD のみを実装し、環境由来のプロキシは無視します。認証情報を受け付けず、デプロイ、エイリアス、DNS、昇格、ロールバックの機能もありません。スキーマ、決定的なアーティファクトマニフェスト、バージョン管理ポリシー、ロールバック境界は contracts/web-release-readback-v1/ にあります。
管理元リポジトリも、deploy/web-release-readback.json を通じてこのコントラクトを利用します。deploy/smoke-readonly.sh は、レジストリ固有のヘルス、API、バッジ、ポータブルなレシート参照、および拒否されるスキャン POST のアサーションを実行する前に、共有ルートレシートを出力します。この自己適用はリリース読み戻しチェックのみを行うもので、デプロイもエイリアスの変更も行いません。
この汎用レシートは追加機能です。レシートの同等性が確認され、重複した HTTP アサーションの処理だけを削除する根拠が得られるまでは、製品固有の API、バッジ、プライバシー、リリースの系譜、変更拒否チェックは、引き続き各利用者が管理します。
エビデンス系譜の判断
EvidenceLineageLedgerV1 は、MCP コーパスの受け入れ、更新、公開、撤回に関する判断を対象とする、メタデータのみのフェイルクローズ型契約です。正確な識別情報、ダイジェスト、移植可能なレシート参照、鮮度、権利のエビデンス、公開用プロジェクション、置き換え、保持をひも付けます。生ログや秘密情報は保存しません。読み取り専用の評価器は明示的な観測時刻を必要とし、安定した理由コードを出力します。受け入れまたは公開を許可できるのは、明示的なALLOWEDステータスのみです。
スキーマ、判断のセマンティクス、3件のレコードを含むカタログのパイロット、主張の上限、ロールバックの境界については、docs/EVIDENCE-LINEAGE-LEDGER-V1.mdを参照してください。このソース機能自体は、カタログを移行したり、レコードを公開または撤回したり、スキャンを実行したり、デプロイ状態を変更したりするものではありません。
手動更新の候補
まず、実行を伴わないインベントリ、ソース/ツール/イメージの正確な事前確認、および決定論的な反復フィクスチャレシートを出力します。
ランタイム更新コマンドには、別途準備した凍結済みの[engine]環境が必要です。この環境の正確なインタープリターを使用し、事前確認や候補の作成の一環として依存関係を取得することはありません。
PYTHON=./.venv/bin/python
test -x "$PYTHON"
"$PYTHON" scripts/grade_refresh.py engine-materialization \
--repo-root "$PWD" \
--out ./dist/grade-refresh/engine-materialization.json
"$PYTHON" scripts/grade_refresh.py inventory \
--out ./dist/grade-refresh/inventory.json
"$PYTHON" scripts/grade_refresh.py host-capacity \
--anchor "$PWD" \
--out ./dist/grade-refresh/host-capacity.json
# Stop unless the two-reading receipt is READY. Start the separately approved
# Colima instance only after this point, then create the bound preflight.
"$PYTHON" scripts/grade_refresh.py preflight \
--repo-root "$PWD" \
--engine-materialization ./dist/grade-refresh/engine-materialization.json \
--host-capacity ./dist/grade-refresh/host-capacity.json \
--out ./dist/grade-refresh/preflight.json
uv run --frozen --extra dev python scripts/grade_refresh.py fixture-repeat \
--out ./dist/grade-refresh/fixture-repeatability.json
容量レシートでは、利用可能な容量が5 GiB以上であり、30秒以上間隔を空けた2回の測定のいずれも容量が100パーセント未満である必要があります。Docker、MCP、またはレジストリデータベースの作業を行う前に再検証され、120秒後に期限切れとなります。また、ホストパスを記録することなく、ホストファイルシステムのデバイスをひも付けます。オペレーターがレシートの検証完了までColimaを停止状態に保ったことや、同じユーザーによる置き換えに対して観測結果を認証することを、ソース契約自体が証明するわけではありません。別途封印されたオペレーターのひも付けがない場合、来歴はUNKNOWNのままです。
オフラインのイメージ適格性確認では、呼び出しごとに新たに観測した、コホートの範囲に限定されたレシートが1件必要です。レシートのセットは追記専用です。5つすべてのコホートで、同じ新しいレビュー済みセット名を使用してください。ただし、容量レシートをコホート間で再利用しないでください。
: "${MCP_TRUST_QUALIFICATION_RECEIPT_SET:?set a new reviewed task-owned receipt-set name}"
for cohort in reference live-batch batch3 batch4 basic-memory; do
uv run --frozen python scripts/grade_refresh.py qualification-capacity \
--operation qualification \
--receipt-set "${MCP_TRUST_QUALIFICATION_RECEIPT_SET}" \
--cohort "$cohort" \
--out "./dist/grade-refresh/qualification-capacity-$cohort.json"
uv run --frozen python scripts/qualify_refresh_images.py \
--cohort "$cohort" \
--host-capacity "./dist/grade-refresh/qualification-capacity-$cohort.json" \
--receipt-set "${MCP_TRUST_QUALIFICATION_RECEIPT_SET}"
done
src/mcp_trust/catalog/refresh_policy.jsonにある5つのqualification_receiptパスが正式な基準です。ドキュメント内のバージョンラベルが基準になることはありません。
クオリファイアーは、不変のソース/入力バインド済みセットマニフェストを作成し、最初の Docker 変更の前に、悲観的な追記専用の試行インテントを書き込みます。すべての Docker または Buildx サブプロセスの直前に、バインド済みレシートを再検証し、更新は行いません。容量が期限切れになるか後退した場合、クオリフィケーションレシートは出力されず、インテントは未解決のまま残るため、Docker の状態とクオリフィケーションは UNKNOWN になります。そのコホートを再試行する前に、--operation cleanup を指定して新しいレシートを発行し、--cleanup-cohort "$cohort" を指定してクオリファイアーを実行してください。クリーンアップは、正確に記録されたタグと出力に対してのみ実行され、読み戻しが成功したレシートを追記する必要があります。不変のマニフェストがない既存のセット、不明なアーティファクト、上書きされたレシート、ソースまたは入力のドリフトは拒否されます。ビルドが成功するとクオリフィケーション完了バインディングが追記され、中断された試行に限りクリーンアップ完了が必要です。クオリフィケーションマニフェストは、来歴情報として元のリビジョンを保持しますが、クオリフィケーション固有のダイジェストマップを使って再検証されます。このマップには、クオリファイアーとそのランタイムモジュール、Dockerfile、依存関係の入力、ロックファイル、アーティファクト記述子、ネストされたソースビルドの証跡が含まれます。生成された docker/refresh/qualification/ の証跡と refresh_policy.json のレシートポインターは採用メタデータであるため、これらを追跡しても完了済みセットが自己無効化されることはありません。依存関係バンドルのバイト列は、各ビルドの前に記述子のダイジェストと照合して個別に再検証され、レシートとグラフの整合性も引き続き個別に必須です。
実行可能ファイルまたはビルド入力にドリフトがあれば、引き続きフェイルクローズします。セット単位のプロセスロックと試行ごとに一意な一時タグにより、複数のクオリフィケーションで変更状態が共有されるのを防ぎます。中断後のクリーンアップでは、インテントに記録された OCI、検証レシート、ダイジェストにバインドされたツールスナップショットの残留物だけを削除します。最終タグは書き換えません。読み戻し結果が、記録されたベースラインまたはタスク所有の正確なイメージ ID のいずれかであることを確認する必要があり、それ以外の値は曖昧なままとしてブロックされます。
プリフライトが READY を返すまでは、カタログサーバーを実行しないでください。レシートは、31 件の分類(正確に導出された、スキャン可能な 22 件とブロック対象の 9 件からなる実行境界を含む)、ソースとポリシーのダイジェスト、ツールのバージョン、ローカル Docker の権限、不変のイメージ ID、ネットワーク、ファイルシステム、リソース、シークレットに対する明示的な制御をバインドします。docs/GRADE-REFRESH-PROGRAM.md とオペレーター向けランブックを参照してください。
正規レジストリ、焼き込み済みスナップショット、静的サイト、スケジュール、デプロイを変更せずに、レビュー候補を作成します。
"$PYTHON" scripts/refresh_candidate.py create \
--db ./registry.db \
--out-dir ./dist/refresh-candidates \
--qualification-receipt ./dist/grade-refresh/preflight.json
このコマンドは、バインド済みプリフライトレシートが最新かつ READY であり、Docker とカタログでピン留めされたすべてのイメージが、記録された不変の ID でローカルに利用可能でない限り、ローカルプロセスのスキャンを拒否します。これらのソースは、既存のネットワーク無効、読み取り専用、ケイパビリティ削除済み、リソース制限付きのサンドボックスで実行されます。各ローカルコンテナーは事前に作成され、コネクターはその不変 ID だけを起動するようにバインドされます。バインド済みデーモンがコンテナーの不在を証明した後に限り、スキャン証跡が受け入れられます。この読み戻しを伴わないタイムアウトは UNKNOWN のままです。リモートエンドポイントは、ローカルプロセスのサンドボックスを使わずに、稼働中のネットワークトランスポート経由でプローブされ、その旨がラベル付けされます。新しい不変バンドルは RefreshCandidateV2 を使用し、自己ダイジェスト付きの実行境界レシート、カタログ ID、スキャン時刻と経過時間、ブロック/マスク/失敗/タイムアウト/不明の証跡状態、帰属情報付きのスキャンドリフト、実態に即した静的スナップショット、ソース/ツールのバインディング、鮮度の件数と最も早い有効期限、セマンティック投影ダイジェスト、内容にバインドされたマニフェストを含みます。レガシー V1 バンドルは構造上の検査は引き続き可能ですが、公開対象にはなりません。
候補の作成に、公開またはデプロイの権限はありません。構造検証では、スキーマと公開適格性が個別に報告されます。有効な V1 成果物が、自己申告によって V2 の権限を得ることはありません。最新で完全な、レビュー済み入力に結び付いた V2 候補は、後続のローカル承認への入力にすぎません。適格性によって、承認、公開、デプロイ、ロールバック、スケジュール設定、またはアウトリーチの権限が付与されることはありません。
別途提供された McpTrustPublicationApprovalV1 は検証でき、決定的なローカルのコピー専用パッケージの構築に使用できます。
uv run --frozen python scripts/build_publication_package.py \
--verify-approval ./dist/publication-approval.json \
--candidate ./dist/site-candidates/<name>
uv run --frozen python scripts/build_publication_package.py --build \
--candidate ./dist/site-candidates/<name> \
--approval ./dist/publication-approval.json \
--out ./dist/publication-packages/<name>
uv run --frozen python scripts/build_publication_package.py \
--verify-package ./dist/publication-packages/<name> \
--approval ./dist/publication-approval.json
この承認処理はプロバイダーを使用せず、ローカルのみで実行されます。V2 候補、再現性とトリアージの系譜、正確な V38 レビュー、最新のプロバイダー証拠、ロールバック対象、オペレーター声明のダイジェスト、最短の有効期限をひも付けます。すべての変更権限は引き続き false です。パッケージは、デプロイ権限、公開証明、ロールバック権限、スケジューラー権限、推奨、または本番環境の鮮度証拠ではありません。
手動の静的デプロイレーンでは、正確なパッケージ、コンテンツ承認、プロバイダーとオペレーターのレシート、保持されたロールバック用バイト列、ソースリビジョン、出力、ツールのダイジェストにひも付く、別個の短期有効な McpTrustProductionDeployAuthorizationV4 が必要です。ライブ TTY による確認の前後に再検証を行います。プロバイダー呼び出し後は、プロバイダーとソースにひも付く McpTrustProductionPublicationReceiptV1 によって、正確な全ルートの読み取り結果レシートが検証されるまで、鮮度は UNKNOWN のままです。プロバイダー成果物のダイジェストが欠落している場合、FRESH に昇格させることはできません。
スナップショットへの署名は、候補の承認・ステージング後に行う別個の権限です。更新プロセスに署名鍵や復旧鍵が渡されることはなく、その SHA-256 マニフェストは発行者の識別情報ではありません。オペレーターがオフライントラスト契約に記載されたルート、カストディ、しきい値、公開カウンター、チェックポイント所有者を選択するまで、本番環境での署名は無効のままです。
ステータス
スタック
このプロジェクトでは、Python、FastAPI、SQLite、Typer、Pydantic、オプションのスキャンエンジンとしての mcp-audits、Ruff、Pyright、pytest を使用します。依存関係のバージョンは uv.lock で固定されており、Python 3.12 以降が必要です。
既知のリスク
mcp-trust.vercel.app で、ローカルレジストリから再生成される静的生成カタログとして公開中です。同梱カタログのスナップショットには、実際の mcp-audits の評価が23件表示されています。シードエントリー8件は含まれておらず、そのうち4件は現在 masked-grades.json によって非表示にされています。同梱スナップショットでは、表示されているローカルプロセスの評価について、ネットワークとサンドボックスの来歴が不明とされています。ネットワーク接続なしでの実行を主張できるのは、レシートで検証された更新候補のみです。すべての評価には来歴が明記されるため、デモ/スタブデータが実際のスキャンとして表示されることはなく、未スキャンのサーバーにレターグレードが表示されることもありません。現在の本番デプロイは31サーバーの静的カタログです。評価は2026-07-11以降、静的なままです。この日に週次の再スキャンレーンが無効化され、デプロイ権限が削除されました(docs/CAPABILITY-RULING-2026-07-10.md を参照)。
静的なフロントドアは、運用負荷の低いローンチ経路です(DEPLOY-VERCEL.md を参照)。deploy/launchd/ の週次 launchd ジョブは恒久的に無効化されており、現在のホスト読み取り結果ではアンロードされています。インストール済みの休止中の plist は残っており、リポジトリのテンプレートとは異なります。設定ドリフトとして扱い、ロードまたは有効化しないでください。互換性エントリーポイントで作成できるのは、実行前の事前チェック後のローカルレビュー候補のみであり、公開やデプロイはできません。稼働中の FastAPI サービス+VM 経路は、代替手段として引き続き DEPLOY-VM.md に記載されています。契約の全文は SPEC.md、ローンチの履歴は LAUNCH-GATE.md を参照してください。デプロイ済みカタログでは、鮮度の判断基準としてスキャンのタイムスタンプを報告します。静的 HTML は、マシン上のスケジューラーの状態を証明するものではありません。
そのため、デプロイ済みカタログが古くなっている可能性があります。ライブ URL の応答はキャッシュから配信される場合があります。カタログの現在の内容がどれほど最近更新されたかは、このリポジトリの説明からは検証できません。静的 HTML の鮮度は現在のスケジューラーの状態を証明するものではなく、ローカルテストも、実際のプロバイダーやデプロイの挙動を立証するものではありません。現在の GitHub Actions のステータスも、このリポジトリの説明からは検証できません。
この macOS ホストでは、Python 3.15.0 でロック済みの pydantic-core 2.46.4 をソースからビルドする必要がありました。ビルドは完了しましたが、拡張モジュールの読み込みに失敗しました。Python 3.15 の CI 全体の結果は未検証です。ホスト環境でのチェックが完了するまで、サポート対象の CI マトリックスは引き続き3.12から3.15です。
次のステップ
コントリビュート
環境間で再現可能なインストールを実現するため、uv.lock は意図的にリポジトリへコミットされています。依存関係を追加または更新する場合は、更新した uv.lock を pyproject.toml の変更とともにコミットしてください。
make setup を実行して開発用の依存関係を固定バージョンでインストールし、ローカルの一括ゲートには make check を実行してください。
ローカル開発と検証
リポジトリのルートから make setup を実行してください。これは CI と同じコア/開発環境であり、オプションの実スキャンエンジンはインストールしません。一時データベースを用意し、オペレーターによるスキャン/レシートの上書き設定を行わずに、開発用シェルを起動します。
verification_dir="$(mktemp -d)"
export MCP_TRUST_DB="$verification_dir/registry.db"
export MCP_TRUST_ENGINE=stub
export MCP_TRUST_PUBLIC_READONLY=0
unset MCP_TRUST_MASKED_GRADES MCP_TRUST_RECEIPTS_DIR \
MCP_TRUST_RUN_INTEGRATION MCP_TRUST_RUN_DOCKER_RUNTIME_READBACK
# Focused CLI/API fixtures; choose the test file or node for your changed module.
uv run --no-sync pytest -q tests/test_cli.py tests/test_api.py
# Aggregate deterministic local gate, as used by CI.
make check
フィクスチャでは、一時データとモックされたランタイム/プロバイダー境界を使用します。2 つの統合テスト用オプトインはどちらも未設定のままにしてください。MCP_TRUST_RUN_INTEGRATION=1 は実際の MCP サーバーを起動し、MCP_TRUST_RUN_DOCKER_RUNTIME_READBACK=1 は Docker を使用します。これらのチェックには、別途オペレーターの承認と前提条件が必要です。通常の検証ゲートには含まれません。全テストスイートには POSIX 擬似端末のテストが含まれます。ローカル環境で擬似端末を使用できない場合は、Ubuntu CI ランナーを使用してください。MCP_TRUST_TEST_TTY_TIMEOUT を設定すると、アサーションを緩めることなく、負荷の高いマシンでのサブプロセスの実行時間を調整できます。
make check は Ruff の lint とフォーマットチェック、Pyright、pytest、パッケージのビルドを実行します。ウェブ/静的コンテンツ/バッジに変更を加えた場合は、まず tests/test_web.py、tests/test_site_generator.py、tests/test_build_site_script.py、tests/test_api.py に焦点を当てて確認し、納品前により広範な検証ゲートを実行してください。
HTML、レイアウト、ナビゲーション、または表示される信頼性に関する主張を変更した場合は、ローカルのブラウザープレビューもデスクトップ幅と狭い幅で確認してください。明示的な一時パスと、スクリプトのスタブのみのデモモードを使ってビルドします。
uv run --no-sync python scripts/build_site.py \
--db "$verification_dir/preview.db" --out "$verification_dir/site" \
--demo-fill --base-url http://127.0.0.1:8765
uv run --no-sync python -m http.server 8765 --bind 127.0.0.1 \
--directory "$verification_dir/site"
http://127.0.0.1:8765 を開き、カタログ、詳細ページ 1 件、ナビゲーション、デモ/出所表示、マスクされた評価、バッジの内容を確認してください。Ctrl-C でプレビューを停止します。この開発ビルドが書き込むのは、一時的なデモデータとページのみです。公開候補ではありません。ブラウザーチェックは、純粋なドキュメントの変更では必須ではなく、ユーザーに見える動作を変更した場合にのみ必要です。API と ウェブ/静的コンテンツ のガイドラインでは、各画面で一貫性を保つ必要がある信頼性に関する主張を定めています。ローカルのフィクスチャ/ビルド/ブラウザーの結果は、実エンジン、プロバイダー、デプロイ、本番環境に関する証明にはなりません。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。