Skip to main content
Glama
nithyajangam

Aegis

by nithyajangam

Aegis MCP ガバナンスレジストリ

Aegis は、テナント対応 MCP ツールを統制するための本番指向のリファレンス実装です。意図的に範囲を限定した 2 つの Streamable HTTP リファレンスエンドポイントと、セキュアなレジストリダッシュボード、ポリシー判定結果、短時間有効な人間による承認フロー、および改ざん検知可能な監査台帳を組み合わせています。顧客システムへの接続や操作は行いません。

デモンストレーション可能な機能

機能

このリポジトリでの実装

リファレンス MCP エンドポイント

POST /mcp/read は安全な決定論的ツールをホストし、POST /mcp/write はシミュレートされた破壊的ツールをホストします。どちらも最新の MCP リクエストメタデータヘッダーを期待します。

機能の検出

各エンドポイントは /.well-known/mcp-capabilities?server=read または ?server=write に内部機能メタデータを持ちます。

テナントとスコープの強制

ベアラートークンアダプタが、すべての MCP ツール呼び出しの前にテナント、プリンシパル、スコープを解決します。

ポリシーゲート

ローカルポリシー評価器がスコープとペイロード上限を強制します。OPA_URL を設定すると、安全なローカルフォールバックを保持しつつ、OPA 互換の決定リクエストが有効になります。

人間による承認

change.create はキュー項目を生成し、15 分後に失効し、承認された昇格を一度だけ消費します。

監査可能性

ポリシー、承認、実行アクティビティは、編集され、アプリケーションサーフェスを通じて追加専用となり、テナント分離され、ハッシュチェーンで連結されます。

オペレーターコンソール

認証済みユーザーは、レジストリサービス、テナント、ポリシー、承認、監査台帳を検査できます。管理者はリファレンスサービスの検証と有効化/無効化、および承認判断を行うことができます。

この実装は、そのトランスポートとリソース検出の形状を MCP Streamable HTTP および認可仕様に合わせています。[1] [2] そのプライベートレジストリメタデータは内部拡張であり、公開 MCP レジストリの server.json 形式として提示されるものではありません。[3]

Related MCP server: agent-mcp-workflow-platform

ローカル開発

Node.js 22+ と MySQL 互換データベースが必要です。ホストに必要な環境値をコピーし、依存関係をインストールして、アプリを起動します。

pnpm install
pnpm drizzle-kit generate
pnpm db:push
pnpm dev

サービスが起動したら、ダッシュボード URL にアクセスしてサインインします。シードレコードは、ガバナンスエンドポイントまたはダッシュボードクエリがレジストリに初めてアクセスしたときに遅延作成されます。リファレンスインターフェースは決定論的シードデータのみを使用し、実際の顧客システムは使用しません。

MCP クイックスタート

ローカル開発中、デモトークンは以下の正確な形式を取ります。これらは開発用アダプタであり、OAuth の代替ではありません。

demo|northstar|demo:alice|project:read,incident:read,metrics:read,change:write

エンドポイント契約を確認するには、サービス起動後に同梱のスモークテストを実行します。

pnpm exec node scripts/mcp-smoke.mjs

直接 JSON-RPC ツール呼び出しを発行するには:

curl -sS -X POST http://localhost:3000/mcp/read \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer demo|northstar|demo:alice|project:read' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: project.search' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"project.search","arguments":{"query":"telemetry"},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28"}}}'

書き込みエンドポイントも /mcp/write で同じ契約に従いますが、change.create は最初に承認レコードを作成します。Aegis コンソールから承認し、昇格が失効する前に同一の呼び出しを再送信します。

初心者向けデプロイ: TiDB Cloud + Render

これは、学習環境やポートフォリオ環境向けの推奨される低コストデプロイパスです。TiDB Cloud Starter は MySQL 互換であり、パブリック接続には TLS が必要です。一方、Render はこの Node アプリケーションを Web サービスとしてホストできます。[4] [5] Render の無料サービスはアイドル時にスリープできるため、非アクティブ後の最初の訪問は時間がかかることがあります。[6]

A. TiDB Cloud の作成と接続

Starter インスタンスを作成し、支出制限を 0 に設定します。インスタンスページで右上の Connect をクリックし、Public を選択したまま、General を選択し、パスワードを生成します。パスワードは秘密に保ちます。

B. Render Web サービスの作成

このリポジトリを GitHub にプッシュした後、Render ダッシュボードを開きます。右上の + New をクリックし、Web Service を選択し、このリポジトリの横にある Connect をクリックして、以下の正確な値を使用します。

Render フォームフィールド

値

Name

mcp-governance-registry

Branch

main

Language

Node

Build Command

corepack enable && pnpm install --frozen-lockfile && pnpm db:render-migrate && pnpm build

Start Command

pnpm start

Instance Type

Free

Root Directory

空のまま

C. Render 環境変数の追加

同じ Render フォームで、Advanced を開きます。Environment Variables の下に、以下の各行を追加します。シークレット値を GitHub やスクリーンショットに置かないでください。

Key

値

DATABASE_URL

この形式の TiDB URL: mysql://USERNAME:PASSWORD@HOST:4000/test。ユーザー名またはパスワードの特殊文字は URL エンコードします。

TIDB_ENABLE_SSL

true

NODE_VERSION

22

VITE_PORTABLE_AUTH

true

JWT_SECRET

新しく生成された長いランダムシークレット。

DASHBOARD_ACCESS_KEY

デプロイ後にダッシュボードに入力する、別の長いパスワード。

ALLOW_DEMO_MCP_TOKENS

false

データベース URL はプライベートです。TiDB Cloud Starter はパブリック接続に TLS を必要とし、アプリの TIDB_ENABLE_SSL=true 設定がそれを有効にします。[5]

フォームの下部にある Create Web Service をクリックします。Render はサービスの Events ページを開きます。ステータスが Live になるまで待ち、表示された onrender.com リンクをクリックします。最初の訪問時に、DASHBOARD_ACCESS_KEY に設定した値を入力し、Open dashboard をクリックします。

D. 検証

ダッシュボードが開いたら、Registry、Approvals、Audit ledger にアクセスします。MCP クライアント用に実際の OAuth アクセストークンバリデータを意図的に設定した後にのみ、Render URL でスモークテストを使用してください。デモトークンはデフォルトで無効になっています。

検証と負荷テスト用スキャフォールド

すべてのリリース前にアプリケーションテストを実行します。

pnpm check
pnpm test
pnpm exec node scripts/mcp-smoke.mjs

負荷テスト用スキャフォールドは独立した JSON-RPC リクエストを送信します。これは、ロードバランサー背後にあるステートレスな Streamable HTTP デプロイの検証に適しています。100 リクエストと 20 の同時クライアントから開始し、デプロイを 2 番目のレプリカにスケーリングした後に繰り返し、p50/p95 レイテンシとエラーレートを比較します。

CONCURRENCY=20 REQUESTS=100 pnpm exec node scripts/load-test.mjs

公式プロトコル適合性テストを実行するには、現在の公式 MCP 適合性スイートを別途インストールし、/mcp/read と /mcp/write の両方に対して実行します。そのバージョン付き出力をリリース証拠として保持してください。このリポジトリのスモークスクリプトは意図的に範囲が狭く、そのスイートを置き換えるものではありません。

プラットフォームの拡張

server/governance.ts の defaultToolRows にレジストリレコードとスキーマを挿入し、simulatedToolOutput を拡張し、テストを追加してスモークスクリプトを再実行することで、新しい安全なリファレンスツールを追加できます。実際の統合は最小権限のサービスアイデンティティの背後に置き、編集された結果のみを返すべきです。

server/mcp.ts のデモベアラーアダプタを、設定された発行者に対する JWT 検証に置き換えるか、API ゲートウェイで検証を実行します。MCP 認可仕様は、認可をサポートする HTTP ベースの実装が OAuth リソースサーバーとして動作し、保護されたリソースメタデータを公開することを期待しています。[2] 本番の監査保持のため、ハッシュチェーンイベントをイミュータブルなオブジェクトストレージまたは SIEM にエクスポートし、データベース認証情報を制限して、サービスプリンシパルが auditEvents に対する更新/削除権限を持たないようにします。

参考文献

[1] Model Context Protocol — Streamable HTTP

[2] Model Context Protocol — Authorization

[3] Model Context Protocol — Registry overview

[4] TiDB Cloud — Select Your Plan

[5] TiDB Cloud — Connect to TiDB with node-mysql2

[6] Render — Deploy for Free

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enforces fine-grained, context-aware access control on MCP tool calls, with a tamper-evident, replayable audit log that records denials and verifies every decision.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables policy-governed MCP interactions with deterministic authorization, tenant isolation, minimized PII exposure, and human approval gates for sensitive mutations, while producing structured audit events.
    3
    MIT