mcpField
V
Vizier Guard

Vizier Guard

ローカル
vizier.vassiliy-lakhonin.workers.devセキュリティ01 日前に更新

Vizier Guard について

Vizier Guardは、所有者が署名した範囲付き権限に基づき、エージェントの操作を検査する認可サービスと連携レイヤーです。要求に結び付いた証明とALLOW、BLOCK、REVIEWを返し、保護対象ツールの呼び出し前に信頼できるガードが結果を検証します。

主な機能

  1. 01範囲付き署名権限の評価
  2. 02ALLOW、BLOCK、REVIEWの返却
  3. 03要求に結び付く証明
  4. 04決定論的なポリシー適用
  5. 05ツール向けMCPプロキシ
  6. 06制御付きデプロイワークフロー

活用シーン

  1. 01リポジトリ書き込みやDB変更の制御
  2. 02デプロイ前の承認必須化
  3. 03エージェント操作を特定対象に限定
  4. 04MCPプロキシで上流ツールを保護

MCP 対応

ホスト型MCPエンドポイントは、認可確認用のvizier_verify_actionツールを公開します。別途提供されるMCPプロキシは既存ツールの境界を強制できますが、Vizierを任意のツールとして公開するだけでは強制になりません。

設定

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

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

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

パッケージ
pypivizier-guard0.3.2

ツール

3

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

パラメーター型必須説明
targetstringはい対象リソースの正確な URI または識別子(例:'mcp://github/create_issue'、'stripe://charges'、'bash://rm'、'https://api.example.com')。
agent_idstringいいえ操作を要求しているエージェントの識別子。
parametersobjectいいえ提案された操作の引数またはペイロード。
action_typestringはい操作のカテゴリ:'tool_call'、'shell_command'、'payment'、'database_write'、'external_api'、'file_modification'、または 'mcp_proxy'。
principal_idstringいいえ人間のオペレーターまたはプリンシパルの識別子。

詳細

Vizier

AI エージェントがアクションを実行する前に、範囲を限定して認可します。

CI Deploy Release License: MIT

Vizier は、エージェントが提案したアクションを、所有者が署名した権限と照合します。 ポリシーの判定結果とリクエストに紐付けられた証明とともに、ALLOW、BLOCK、REVIEW のいずれかを返します。連携側では、認可を検証してから保護対象のツールを呼び出します。

エージェントや定期実行ワークフローのアクション境界で使用できます。たとえば、デプロイ、リポジトリへの書き込み、データベースの変更、メッセージの送信、決済 API の呼び出しの前です。 継続的に稼働するエージェントには、特定のアクションと対象に限った短期間の権限を付与しつつ、署名鍵の管理は所有者が維持できます。

プレイグラウンド · ライブ API リファレンス · OpenAPI · 委任の設定 · 脅威モデル

連携方法を選ぶ

タスクこちらから開始前提条件
デプロイアダプターをローカルで試す合成データを使った準備の例Node 24 以降。準備手順では鍵は不要
署名済みの委任でアクションを検証するSDK のセットアップオペレーター API キー、登録済みの公開鍵、所有者が発行した許可
既存の MCP ツールを保護するプライベート MCP プロキシオペレーターが所有する上流の認証情報と、制限されたツールルート
ホスト型 API を確認するAPI リファレンス公開ドキュメント。実行権限は別途必要

エージェントのインフラデプロイを管理する

DevOps エージェントを運用するプラットフォームチームおよびセキュリティチーム向けです。既存の Cloudflare Worker を 1 つ指定し、トラフィックを変更する前に、所有者が署名したスコープとアップロード済みの正確なバージョンに対する人間の承認を必須にします。バージョンの変更、スコープ外の対象、期限切れの権限、承認要求の重複は、実行前に停止されます。クラウド認証情報と実行環境は、エージェントが制御できない状態に保ってください。

npm から v0.5.14 の SDK とデプロイアダプターをインストールします(Node 24 以降)。

npm install @agenda-intelligence/[email protected] @agenda-intelligence/[email protected]
npx --no-install vizier-worker-deploy prepare \
  --scope node_modules/@agenda-intelligence/vizier-gated-deploy/examples/scope.json \
  --plan node_modules/@agenda-intelligence/vizier-gated-deploy/examples/plan.json

準備はローカルで行い、合成 ID を使用するため、鍵は不要です。実際の審査を申請したり、何かを実行したりする前に、連携と復旧のガイドに従ってください。 live sandbox trace では、本番環境の Vizier と使い捨ての Cloudflare Worker を使用した 8 つのシナリオを紹介しています。v0.5.10 で修正された実際の API レスポンスの不一致も含まれます。このアダプターはオペレーターの実行環境にインストールします。ホスト型 MCP エンドポイントが公開するのは検証機能であり、クラウドデプロイ機能ではありません。自動オフラインテストスイートは Cloudflare をシミュレートします。リンク先のメンテナー用サンドボックストレースでは実際の API を使用していますが、外部での導入実績を示すものではありません。

スコープを限定した連携を依頼する · 支援付きパイロットの内容

有料オファーは、合意した 1 つのワークフローを対象とした支援付き連携です。ホスト型サブスクリプションと継続的なサポートは、購入者と内容を調整する追加オプションです。自動決済やセルフサービスの有料プランはありません。コードは MIT ライセンスのままです。外部顧客による導入実績や、IoT マルウェアへの保護を主張するものではありません。

仕組み

flowchart LR
    Owner[Owner-controlled signer] -->|Scoped, expiring grant| Guard[Tool guard or MCP proxy]
    Agent[Agent proposes action] --> Guard
    Guard -->|Action + grant| Vizier[Vizier policy service]
    Vizier -->|Decision + receipt| Guard
    Guard -->|Validated ALLOW| Tool[Protected tool]
    Guard -->|Submit REVIEW explicitly| Human[Human review workflow]
  1. オーナーが、プリンシパル、エージェント、許可されたアクション、制約、有効期限を含む ES256 委任に署名します。オペレーターは公開鍵のみを Vizier に登録します。
  2. インテグレーションが、実行予定のアクションと許可を /v1/verify に送信します。
  3. Vizier が署名、ID、有効期限、権限の正確なひも付けを検証し、決定論的なポリシーを評価します。この判定経路では LLM は動作しません。
  4. ガードが、ツールを呼び出す前にレスポンスとリクエストのひも付けを検証します。BLOCK、REVIEW、無効なレスポンス、認可を利用できない場合は、その経路を停止します。

API キーは呼び出し元を認証します。委任許可はオーナーの許可を証明します。 それぞれの役割は異なります。リクエストによって、有効な許可に含まれる権限を拡大することはできません。無効な許可はブロックされます。

ホスト型デプロイでは、2026 年 9 月 30 日時点で VIZIER_SIGNED_GRANT_MODE=required が使用されています。署名なしの検証リクエストは BLOCK / GRANT_REQUIRED を返します。ホスト型で ALLOW を得るには、オペレーターが登録したプリンシパルキー、有効で一致する許可、ポリシーへの合格が必要です。現在のデプロイ設定は /docs を確認してください。セルフホスト型のオプションモードでは、呼び出し元が申告した権限を使用できます。このモードのレシートは、オーナーによる委任を証明するものではありません。

稼働中のインテグレーション

Agenda フリートでは、オーナーが運用するデプロイワークフローで Vizier を使用しています。これは同じメンテナーによる具体的な運用上の使用例であり、外部顧客による導入例ではありません。

ワークフロー保護されるアクション証拠を確認
Agenda Worker フリートデプロイ前の、ターゲットを限定した deploy_worker 認可公開ワークフロー と署名付きデプロイの成功例

このワークフローでは署名と実行のステップを分離し、有効期間の短いオーナー署名付き許可を提供します。許可がない場合や期限切れの場合、および必須レシートが無効な場合は、デプロイ経路が停止します。オペレーターが Cloudflare への直接アクセス権を保持している場合、その権限はプラットフォーム上で別途有効です。Vizier はその権限を取り除きません。

署名付き委任から始める

実験的機能です。 実行可能な例では、公開済みの npm クライアントを v0.5.14 に固定しています。サービスとクライアントのバージョンは別々に管理されています。TypeScript パッケージは、所有する @agenda-intelligence npm 組織を使用します:SDK、MCP プロキシ、デプロイアダプター。以前の GitHub アーカイブでは元の @vizier/* 名が保持されています。それらのアーカイブから npm に切り替える場合は、インポートを更新してください。

npm install @agenda-intelligence/[email protected]

まず、オーナーが管理する署名者からプリンシパルの公開鍵を登録し、許可を発行します。この例では、platform-owner → release-agent に対する許可が必要で、権限は次の内容に厳密に限定されます。

{
  "allowed_actions": ["deploy_worker"],
  "constraints": {
    "allowed_targets": ["worker:example-worker"],
    "allowed_sensitive_actions": ["deploy_worker"]
  }
}

秘密署名鍵は、アクションを実行するエージェントから隔離して保管してください。信頼されたガードには、インテグレーション API キーと最新の許可ファイルを渡します。

import { readFile } from "node:fs/promises";
import { Vizier } from "@agenda-intelligence/vizier-sdk";

const client = new Vizier({
  baseUrl: "https://vizier.agendamcp.dpdns.org",
  apiKey: process.env.VIZIER_API_KEY,
});

const grantPath = process.env.VIZIER_GRANT_FILE;
if (!grantPath) throw new Error("An owner-issued grant file is required.");
const grant = (await readFile(grantPath, "utf8")).trim();

const result = await client.verify({
  agent: { id: "release-agent", owner: "platform-owner" },
  principal: { id: "platform-owner" },
  action: {
    type: "deploy_worker",
    target: "worker:example-worker",
    parameters: { commit: "reviewed-commit" },
  },
  authority: {
    allowed_actions: ["deploy_worker"],
    constraints: {
      allowed_targets: ["worker:example-worker"],
      allowed_sensitive_actions: ["deploy_worker"],
    },
  },
  context: { request_id: null, timestamp: null, source: "rest" },
  grant,
});

// The SDK validates the response contract and recomputes the request hash.
const proof = result.receipt.grant;
if (
  result.decision !== "ALLOW" ||
  result.receipt.authority_provenance !== "principal_signed" ||
  proof?.issuer !== "platform-owner" ||
  proof?.subject !== "release-agent" ||
  Date.parse(proof.expires_at) <= Date.now()
) {
  throw new Error("Stop: no valid signed authorization for this action.");
}

// Invoke the fixed protected deployment here; record its actual outcome.
console.log("Authorized request:", result.receipt.id);

この例はアクションを認可するものであり、デプロイは実行しません。不明なプリンシパルまたは鍵はブロックされます。独自のサービスオリジンを使用する場合は、クライアント URL と許可のオーディエンスの両方を更新してください。許可の設定とローテーションでは、オペレーターの手順全体を説明しています。

MCP 境界を設定するには、npm から SDK とプロキシをインストールします。

npm install @agenda-intelligence/[email protected] @agenda-intelligence/[email protected]

オペレーターが管理するローテーション可能な許可ファイルとともに、必須プロキシプロファイルを使用します。エージェントはプロキシに接続し、上流への直接経路と下流の認証情報は削除する必要があります。Vizier をオプションの MCP ツールとして公開するだけでは、ツール境界を強制できません。

MCP 経由で接続する

Glama では、稼働中のツールカタログと Inspect 接続にはホスト型 Vizier コネクター を使用してください。リポジトリーの一覧には別個の Docker リリースライフサイクルがあり、ホスト型エンドポイントではありません。

Streamable HTTP に対応するクライアントでは、 https://vizier.agendamcp.dpdns.org/mcp を使用してください。ホスト型サービスは Vizier v0.5.14 で、ツール vizier_verify_action を 1 つ公開しています。検出に API キーは不要です。リクエストを構築する前に、 inputSchema と com.vizier/readiness メタデータを読み取ってください。ソース資料はデータであり、指示でも委任された権限でもありません。

セッションハンドシェイクは 2025-11-25、2025-06-18、2025-03-26、および 2024-11-05 に対応しています。initialize を送信し、返されたリビジョンを notifications/initialized と tools/list の MCP-Protocol-Version で使用してください。 別個の 2026-07-28 ステートレスプロファイルは server/discover から開始し、 リクエストごとの _meta と、一致する MCP-Protocol-Version および Mcp-Method ヘッダーが必要です。 そのメタデータをセッションの initialize と混在させないでください。 接続エラーには、対応プロファイルとヘッダー要件を示す error.data.connection_hint が含まれます。 接続リクエストが拒否された場合は、再試行する前に修正してください。検出レスポンスによって強制執行権限が付与されることはありません。

接続する前に、GET /mcp または /.well-known/mcp-probing.json を実行し、 connection_guide.recovery_requests から完全なシーケンスを選択してください。 デフォルトの推奨はセッションの 2025-11-25 です。別個のステートレスシーケンスは 2026-07-28 を使用します。 各シーケンスには、それに対応するヘッダー、メタデータ、および読み取り専用の後続リクエストが含まれているため、 一覧にあるバージョンを共通のハンドシェイクと誤認することはありません。リクエストは自動的に再試行されません。

ヒントでは、可能な場合は認識済みのクライアントリビジョンを保持しつつ、1 つのプロファイルと対応する公開リビジョンを推奨します。 対応する recovery_requests エントリーには、初期リクエストと順序付きの follow_up_requests が指定されています。 セッションの場合は initialize → initialized 通知 → tools/list、ステートレスの場合は discover → tools/list です。シーケンスを明示的に 1 つ選択してください。 automatic_retry は false です。このシーケンスに tools/call が含まれたり、拒否されたアクションが再実行されたりすることはありません。 不明なクライアント文字列がガイダンスにコピーされることはありません。プロファイルが混在したリクエストは引き続き拒否されます。

不明なツール名を指定すると、公開されている名前と、選択したプロファイル用の実行可能な読み取り専用 tools/list 復旧リクエストを含む error.data.tool_hint が返されます。その検出リクエストを実行し、新たな呼び出しを行う前に返された inputSchema を確認してください。 automatic_tool_retry は false です。サーバーがアクションを再実行したり、呼び出し側が意図したツールを推測したりすることはありません。 プロトコルやバージョンの不一致は引き続きエラーになります。

接続の観測情報に含まれるのは、サーバーが選択したプロファイルとリビジョンのカテゴリのみです。 対応する公開日付、missing、other、invalid、または unmeasured が含まれます。 未加工のクライアントリビジョン、ヘッダー、リクエストテキストは除外されます。 古いイベントから、拒否の原因となったリビジョンやプロファイルを特定することはできません。

stdio のみに対応するクライアントの場合、この固定されたトランスポートアダプターで同じホスト型ツールに接続できます。

{
  "mcpServers": {
    "vizier": {
      "command": "npx",
      "args": [
        "-y", "[email protected]",
        "https://vizier.agendamcp.dpdns.org/mcp",
        "--transport", "http-only"
      ]
    }
  }
}

この設定はホスト型サービスに呼び出しを送信し、匿名で利用されます。 検証結果は BLOCK または REVIEW となり、ALLOW にはなりません。 保護対象のアクションは実行されません。強制執行には、信頼されたインテグレーションが既存の認証情報と、実際のリクエストに一致する有効な所有者発行の許可情報を使用します。 委任の設定を参照してください。秘密鍵はエージェントの外部で管理し、認証情報をツール引数に貼り付けないでください。 個別にバージョン管理されている Python vizier-guard v0.3.3 の stdio ヘルパーは、 vizier_screen_action、vizier_verify_receipt、vizier_check_policy を公開します。この ローカルカタログはホスト型の認可サービスではありません。ローカルの ALLOW は プリンシパル署名付きの委任ではなく、レシートヘルパーも JWS 署名を検証しません。上記の署名付き許可ワークフローには、ホスト型ツールと、 保守されている強制適用 SDK/プロキシを使用してください。ルートの npm ワークスペースは プライベートです。npm install vizier は、このプロジェクトのインストールコマンドではありません。TypeScript パッケージは、 上記のリンク先にあるとおり @agenda-intelligence/vizier-* として公開されています。

Python SDK 0.3.3 では、stdio セッションのバージョンネゴシエーションが修正されています。 テスト済みの wheel を GitHub Release v0.5.13 からインストールしてください。

python -m pip install https://github.com/vassiliylakhonin/vizier/releases/download/v0.5.13/vizier_guard-0.3.3-py3-none-any.whl

この wheel は GitHub Release で配布されています。これは PyPI で公開されていることを意味しません。

インターフェースと機能

範囲を限定したインフラストラクチャのパイロットについては、Worker version deployment をご覧ください。 インストール可能なアダプターは既存の Worker を 1 つ固定し、Cloudflare を呼び出す前に、所有者が署名したスコープと、正確なバージョンに対する人間の承認を必要とします。オフラインデモでは、実際の認可/レビューのハンドラーとシミュレートされた Cloudflare の応答を使用します。インフラストラクチャは作成されず、外部での採用を示す証拠にもなりません。

サーフェス役割
REST /v1/verify決定論的ポリシー、委任の来歴、リクエストに紐付いたレシートによるアクションチェック
TypeScript SDK応答コントラクトとバインディングを検証します。人間によるレビュー用の明示的なヘルパーも含まれます
Python SDK標準ライブラリのクライアント、関数ガード、フレームワークアダプター
MCP サービス検証ツールを検出して呼び出します。マニフェスト
MCP 強制適用プロキシ設定されたツール呼び出しをインターセプトして認可を検証し、許可された呼び出しを転送します
A2A検証アダプターとエージェントカード
人間によるレビュキュー分離されたレビュアー認証情報、署名付き承認トークン、アトミックなサーバー側クレーム

ポリシーでは、許可されるアクション、対象、金額の制約、機密性の高い操作、設定済みのレビュー要件を扱います。SDK/プロキシのサーキットブレーカーで、ツール呼び出しの繰り返しやセッション予算を制限できます。追加のレビューワークフローと金融予約には、それぞれ独自のコントラクトとデプロイ要件があります。 ライブリファレンスと 金融予約の制限事項をご覧ください。

レシートと信頼境界

/v1/verify のレシートには、リクエストハッシュ、判定、ルールの結果、権限の来歴が記録されます。 レガシーの検証レシート自体には署名がありません。 principal_signed 判定の根拠となる許可には、所有者の署名があります。SDK は 応答の整合性を確認し、正規化された JSON に基づいてリクエストハッシュを再計算します。 レシートが記録するのは認可であり、ツールが正常に実行されたことの証明ではありません。

レガシーの Action Covenant と人間によるレビューのトークンでは、別個の署名付きレシート形式が使われます。 必須許可モードでは、委任許可を含まないため、レガシーの covenant による認可はブロックされます。互換性用のサーフェスを使用する前に、 covenant のコントラクトと 脅威モデルをご覧ください。

Vizier はアプリケーションレベルの認可サービスです。統合側がその判定を強制適用します。ツールの認証情報を直接持つエージェントまたは管理者は、その統合を迂回できます。有効期限の短い許可は、単回使用の実行予約ではありません。提供された証拠は独立して検証されず、認可によって事実の真偽、法的な問題がないこと、支払いの決済、顧客需要が確立されるわけではありません。

開発

Worker パッケージと TypeScript パッケージには Node.js 24+ が必要です。

npm ci
npm run check

check はパッケージのビルド、型チェック、マイグレーションチェック、Lint、テスト、Worker のデプロイのドライランを実行します。公開やデプロイは行いません。ネットワークを使用するチェックは別に用意されています。npm run check:deployed は本番バンドルのダイジェストをチェックし、npm run check:live はデプロイ済みサービスとディスカバリーのコントラクトをチェックします。

アーキテクチャ · 主張 · セキュリティレビュー · パイロットの範囲 · イシューと統合に関するフィードバック

MIT ライセンス。

コメント

MCP は初めてですか?

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

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