mcpField
S
shield

shield

ローカル
github.com/bolyraセキュリティ04 日前に更新

shield について

@bolyra/shield は、サーバーのコードを変更せずに MCP サーバーをラップし、ツールごとの権限ポリシーを適用する stdio 認証プロキシです。エージェント認証情報を検証し、リプレイを防止して監査レシートを出力します。

主な機能

  1. 01子プロセスとして MCP サーバーをラップ
  2. 02ツール呼び出し時の認証情報検証
  3. 03ツールごとの権限ポリシー適用
  4. 04nonce によるリプレイ防止
  5. 05検出したツールからポリシーを生成
  6. 06監査レシートを stderr に出力

活用シーン

  1. 01ローカル MCP サーバーへの認証適用
  2. 02権限レベルによるツール呼び出しの制限
  3. 03サーバーのツール一覧からデフォルト拒否ポリシーを作成

MCP 対応

Shield は stdio で MCP クライアントとサーバーの間に配置されます。初期化とツール一覧の要求を転送し、ツール呼び出しは転送前に認証情報とポリシーを検証します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"bolyra-shield": {
"command": "npx",
"args": [
"-y",
"@bolyra/shield"
]
}
}
}
起動コマンドnpx -y @bolyra/shield

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

パッケージ
npm@bolyra/shield0.1.0

ツール

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

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

詳細

@bolyra/shield

Stdio MCP 認証プロキシです。MCP サーバーをラップし、ツールごとの権限適用、リプレイ攻撃防止、監査レシートを実現します。サーバーのコード変更は不要です。

クイックスタート

npx @bolyra/shield --server "npx @modelcontextprotocol/server-filesystem /tmp" --dev

Shield は対象のサーバーを子プロセスとして起動し、tools/call リクエストをインターセプトしてエージェントの認証情報を検証し、転送前にツールポリシーを適用します。

設定

shield.yaml を作成します。

devMode: true
defaultDeny: true

nonce:
  store: memory
  maxProofAge: 300

receipts:
  enabled: true
  output: stderr

tools:
  read_file:
    requireBitmask: 1    # READ_DATA
  write_file:
    requireBitmask: 2    # WRITE_DATA
  delete_file:
    requireBitmask: 2    # WRITE_DATA

次に、以下を実行します。

npx @bolyra/shield --server "node my-server.js" --config shield.yaml

デフォルト拒否

デフォルトでは、ポリシーエントリーのないツールは(認証のみがチェックされて)許可されます。defaultDeny: true を設定すると、tools: マップに記載されていないツール名への tools/call はすべて拒否されます。

学習モード

設定を手作業で書かずに、サーバー自身のツールリストから安全な初期設定を生成できます。

npx @bolyra/shield --learn --server "node my-server.js"

学習モードではサーバーを起動し、MCP ハンドシェイク(initialize → notifications/initialized → tools/list、ページネーションに従います)を実行した後、次の内容を含む shield.yaml(または --config で指定したパス)を書き込みます。

  • defaultDeny: true — サーバーが後から追加するものは、許可するまで拒否されます
  • 検出されたすべてのツールに requireBitmask: 1(READ_DATA)を設定 — 最小権限の基準です
  • _generated 出所情報ブロック(元のコマンド+タイムスタンプ)

既存の設定ファイルを上書きすることはありません。また、ページネーションは50ページまでに制限され、30秒後にタイムアウトします。出力は初期設定です。本番環境で使用する前に各ツールを確認し、requireBitmask を引き上げてください(例:write_file → 2)。

仕組み

Agent ←stdin/stdout→ Shield ←stdin/stdout→ MCP Server
                       │
                 verifyBundle()
                 checkToolPolicy()
                 nonceStore.markIfFresh()
                 emitReceipt()
  • initialize、tools/list、ping — 認証なしで転送されます
  • tools/call — params._meta.bolyra から証明情報を抽出して検証し、ポリシーを確認した後、転送または拒否されます
  • レシートは stderr に出力されます(stdout は MCP トランスポートです)

権限ビットマスク

ビット権限
0READ_DATA
1WRITE_DATA
2FINANCIAL_SMALL
3FINANCIAL_MEDIUM
4FINANCIAL_UNLIMITED
5SIGN_ON_BEHALF
6SUB_DELEGATE
7ACCESS_PII

Shield と Gateway の比較

ShieldGateway
トランスポートstdioHTTP
ユースケースローカル MCP サーバー(Claude Desktop、Cursor)リモート/ネットワーク接続された MCP サーバー
ラップ方法子プロセスを起動リバースプロキシ
証明情報の取得元params._meta.bolyraAuthorization: Bolyra <base64> ヘッダー
レシートstderrstdout/ファイル/Webhook

どちらも @bolyra/mcp の同じ verifyBundle() と checkToolPolicy() を使用します。

ライブラリの使用方法

import { createShield, loadShieldConfig } from '@bolyra/shield';

const config = loadShieldConfig('./shield.yaml');
const { child, stop } = createShield(config);

リンク

コメント

MCP は初めてですか?

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

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