mcpField
S
Server Attestation

Server Attestation

ローカル
github.comセキュリティ01 週間前に更新

Server Attestation について

Server Attestationは、MCPサーバーの公開ツールやプロセス起動を制限するための、開発者向けNode.jsライブラリとリファレンスMCPサーバーです。署名済みマニフェスト、起動検証、デフォルト拒否の引数検査を備えています。

主な機能

  1. 01Ed25519によるマニフェスト署名と検証
  2. 02実行時のプロセス起動アテステーション
  3. 03デフォルト拒否の引数サニタイザー
  4. 04初回使用時の鍵ピン留め
  5. 05鍵とマニフェスト操作用CLI

活用シーン

  1. 01起動時のサーバーツールマニフェスト検証
  2. 02子プロセスのコマンドと引数の制限
  3. 03後続の検証での鍵変更検出

MCP 対応

リファレンスMCPサーバーは、マニフェスト検証、起動検査、テンプレート生成、署名、鍵生成の5つのツールを公開します。ライブラリはMCPサーバーに組み込み、許可されたツールとプロセス起動を検証できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"attestation": {
"command": "npx",
"args": [
"-y",
"mcp-attest-demo"
]
}
}
}
起動コマンドnpx -y mcp-attest-demo

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

パッケージ
npmmcp-attest-demo0.2.0

ツール

5

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

パラメーター型必須説明
manifestPathstringはい署名済み manifest JSON ファイルのパス。
publicKeyPathstringはい16 進数でエンコードされた公開鍵のパス(情報提供用。manifest に publicKey フィールドが含まれる場合は無視されます)。

詳細

StudioMeyer MCP Stack の一部です — マヨルカ島で開発 🌴 · 利用したら ⭐ を付けてください

mcp-server-attestation

npm version npm downloads License Last commit GitHub stars Model Context Protocol サーバー向けのレイヤー2サプライチェーン強化機能です。Ed25519 署名付きツールマニフェスト、実行時のプロセス起動アテステーション、デフォルト拒否方式の引数サニタイザーを備えています。

以下の事案への直接的な対応です。

  • OX Security のマーケットプレイス汚染、2026年4月 — 11 の MCP レジストリのうち9つが悪意あるサーバーを受け入れました。Anthropic が公表した見解は「想定される動作」でした。
  • CVE-2025-69256 — child_process.exec() のコマンドインジェクションによる Serverless Framework MCP の RCE。
  • CVE-2025-61591 — OAuth でインストールされた悪意あるサーバーによる spawn ハイジャックを介した Cursor MCP の RCE。

このパッケージは、Anthropic が提供しないことを選んだ機能、つまり、サーバーが公開を許可されているツールと、実行を許可されている spawn 呼び出しを暗号学的に検証する機能を提供します。ランタイムを置き換えるのではなく、既存の依存関係にそのまま追加できます。

私たちからひとこと

私たちはこの2年間、自分たちのためにツールやシステムを作ってきました。このリポジトリが小さく、スターが少ないのは、新しいからではありません。これまで作ってきたものを共有しようと決めたのが、つい最近だからです。これは生まれたばかりの実験ではなく、最近のコミットに至るまで長く続いてきた取り組みです。

私たちはものを作り、共有するのが大好きです。ソーシャルメディアでの駆け引きや、成長のための裏技、スターやフォロワーを追い求めることは好きではありません。だからこのリポジトリは小さいのです。コードは本物で、実際に使われており、課題にも対応しています。ご自身で判断してください。

役に立ったら、共有やテスト、フィードバックで応援していただけるとうれしいです。改善できそうな点があれば、課題を報告していただくのが一番役立ちます。これを使って何かを作ったら、[email protected] までぜひお知らせください。本当にうれしいです。

パルマ・デ・マヨルカの小さなスタジオより。

パッケージ(npm ワークスペース)

パッケージ用途
mcp-server-attestation (packages/lib)ライブラリ:Ed25519 の署名/検証、マニフェストスキーマ、サニタイザー、spawn アテスター、TOFU 信頼ストア。
mcp-attest-cli (packages/cli)CLI mcp-attest:keygen、sign、verify、inspect、fingerprint、check-pin。
mcp-attest-demo (packages/demo-server)ライブラリの機能を示す5つのツールを公開するリファレンス MCP サーバー(stdio、仕様 2025-06-18)。

インストール

npm install mcp-server-attestation
# CLI:
npm install -g mcp-attest-cli
# Reference MCP server:
npx mcp-attest-demo

Node 20 以上が必要です。外部の暗号ライブラリへの依存はなく、node:crypto の Ed25519 プリミティブを使用します。

5行でできるサーバーのクイックスタート

import { verifyManifestStrict, attestSpawnStrict, type SignedManifest } from "mcp-server-attestation";
import signed from "./signed/manifest.json" assert { type: "json" };

// 1. At startup: prove the manifest you ship is the manifest you signed.
verifyManifestStrict(signed);

// 2. Before every child_process.spawn:
attestSpawnStrict(signed as SignedManifest, { command, args });

統合はこれだけです。関数呼び出しは2つで、SaaS もデーモンも必要ありません。

署名がゲートに到達するまでに未検証または差し替えられたマニフェストが入り込むのを防ぐため、spawn のたびに署名を再検証したい場合は、代わりにフェイルセーフの呼び出しを1つだけ使ってください。これは検証してからアテステーションを実行します。

import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });

ツール(リファレンスサーバー mcp-attest-demo)

#名前readOnlyHintdestructiveHint
1attest_verify_manifesttruefalse
2attest_inspect_spawntruefalse
3attest_generate_manifest_templatetruefalse
4attest_sign_manifestfalsefalse
5attest_keygenfalsefalse

アノテーションは実態に即しています。attest_sign_manifest と attest_keygen はディスク上のファイルを書き込むため、読み取り専用ではありません。ただし既存のデータを破壊しないため、destructiveHint は false のままです。ツールごとの機能一覧については docs/THREAT-MODEL.md をご覧ください。

CLI

mcp-attest keygen --out-dir ./keys --name prod
mcp-attest sign --manifest manifest.json --private-key keys/prod.key --out signed.json
mcp-attest verify --signed signed.json --pin                  # TOFU pin
mcp-attest verify --signed signed.json --sigstore             # opt-in Rekor cross-ref
mcp-attest inspect --signed signed.json --command /usr/bin/echo --arg "hello"
mcp-attest fingerprint --public-key keys/prod.pub
mcp-attest check-pin --server my-server --signed signed.json

verify は署名が無効な場合に終了コード 2、ピンが一致しない場合に終了コード 3 で終了します。

MCP 仕様との互換性

仕様バージョンステータス
2024-11-05マニフェストで解析可能ですが、リファレンスサーバーの対象ではありません
2025-03-26マニフェストで解析可能ですが、リファレンスサーバーの対象ではありません
2025-06-18完全な対象です

このライブラリはトランスポートに依存しません。リファレンスサーバーは stdio 専用です。

セキュリティモデル

  • Trust-on-First-Use がデフォルトです。サーバーを初めて検証すると、その公開鍵が ~/.mcp-attest/trust.json にピン留めされます(上書きする場合:MCP_ATTEST_TRUST_FILE)。以降の検証では、同じサーバー名に対する新しい鍵をすべて TRUST_PIN_MISMATCH で拒否します。これにより、Cursor 型の悪意ある更新攻撃を検出できます。
  • 信頼済み鍵リストは同梱していません。 このパッケージはゲートキーパーとして機能しません。より強い保証が必要な場合は、--sigstore を有効にして、公開鍵のフィンガープリントを Sigstore Rekor の透明性ログと照合してください。
  • デフォルト拒否の引数サニタイザー。 shellSafeString は、すべての ASCII シェルメタ文字、NUL、CR、LF、VT、FF、NEL、ゼロ幅文字、BOM、RTL/LTR オーバーライド、Trojan Source の分離文字、全角ラテン文字の紛らわしい文字をブロックします。許可リスト方式の動作には、明示的な regex / enum / prefix / literal ルール種別が必要です。
  • ReDoS に安全な regex ルール。 regex ルールのパターンには作成者による署名がありますが、引数の値は攻撃者が制御できます。サニタイザーはバックトラッキングを引き起こしやすいパターン((a+)+ のような入れ子の非限定量指定子)を静的に検出して実行を拒否するため、細工された引数ひとつで起動処理のホットパスが停止することはありません。また、regex ルールには maxLength 入力上限(デフォルトは 4096)もあります。
  • トラバーサルに安全な prefix ルール。 prefix ルールはデフォルトで .. のパス要素を拒否します(denyTraversal: true。%2e%2e のエンコード形式も含みます)。そのため、prefix: "/safe/" を満たしていても /safe/../../etc/passwd はブロックされます。
  • 検証してからアテストします。 attestSpawnVerified は、ひとつのフェイルセーフな呼び出しで、アテストする前にマニフェスト署名を確認します。実際にホットループ内での spawn ごとの Ed25519 検証時間を測定していない限り、attestSpawnStrict ではなくこちらを使用してください。
  • 正規化された JSON が署名対象です。再シリアライズしても署名対象のバイト列は変更されません。

このパッケージが行わないこと(対象範囲外):

  • サーバープロセスをサンドボックス化またはコンテナ化すること。
  • OAuth フローの強化(別途提供される mcp-oauth-shield ビルドが必要です)。
  • ネットワークの外向き通信を制御すること。
  • 既存のサーバーに自動でパッチを適用すること。

テスト

npm install
npm run typecheck
npm test

テストコーパスには CVE 再現用フィクスチャ(packages/lib/tests/fixtures/cve-2025-69256-payloads.json、cve-2025-61591-payloads.json)が含まれています。ビルドは回帰チェックとして機能し、すべてのペイロードがブロックされることを確認します。

配布

  • GitHub Actions OIDC と --provenance を使用して npm に公開します。
  • リファレンスサーバーを mcp.so と FastMCP Directory に登録申請します。
  • ライブラリは mcp-server-attestation として別途公開します。

StudioMeyer について

StudioMeyer は、パルマ・デ・マヨルカを拠点とし、世界中のクライアントと仕事をする AI・デザインスタジオです。中小企業向けにカスタムウェブサイトと AI インフラストラクチャを構築しています。Claude Agent SDK、MCP、n8n を本番環境のスタックとして使用し、オブザーバビリティには Sentry、Langfuse、LangGraph、社内開発のガードレイヤーを採用しています。

ライセンス

MIT、Copyright 2026 Matthias Meyer (StudioMeyer)。LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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