
MCPサーバー向けのレイヤー2サプライチェーンハードニング — Ed25519署名されたツールマニフェスト、ランタイムスパーンアテステーション、デフォルト拒否引数サニタイザー。マーケットプレイスポイズニング + CVE-2025-69256 + CVE-2025-61591 を防御します。
StudioMeyer MCP Stackの一部 — マヨルカ島で開発 🌴 · 使用したら ⭐ をお願いします
Model Context Protocolサーバーのためのレイヤー2サプライチェーンハードニング。Ed25519署名されたツールマニフェスト、ランタイムspawnアテステーション、デフォルト拒否引数サニタイザー。
以下の問題への直接的な対応:
child_process.exec()コマンドインジェクション経由)このパッケージは、Anthropicが提供しなかったものを実現します: サーバーが公開を許可されるツールと、実行を許可されるspawn呼び出しの暗号検証です。これはドロップイン依存関係であり、ランタイムの置き換えではありません。
私たちはこの2年間、自分たちのためにツールやシステムを構築してきました。このリポジトリが小さく、スターが少ないのは新しいからではありません。私たちが構築したものを共有しようと決めたばかりだからです。新しい実験ではなく、長いストーリーに最近のコミットが加わったものです。
私たちはものづくりと共有を愛しています。ソーシャルメディア戦術、グロースハック、スターやフォロワーを追いかけることは好きではありません。だからこのリポジトリは小さいのです。コードは本物で、使われており、イシューには回答します。ご自身で判断してください。
もし役立つなら、共有、テスト、フィードバックが私たちを助けます。改善できる点があれば、イシューがより有用です。これを使って何か構築したら、[email protected]までお知らせください。それが本当に私たちの一日を素晴らしいものにします。
パルマ・デ・マヨルカの小さなスタジオより。
npm install mcp-server-attestation
# CLI:
npm install -g mcp-attest-cli
# Reference MCP server:
npx mcp-attest-demo
Node 20+。外部暗号依存関係なし — node:cryptoのEd25519プリミティブを使用。
import { verifyManifestStrict, attestSpawnStrict, type SignedManifest } from "mcp-server-attestation";
import signed from "./signed/manifest.json" assert { type: "json" };
// 1. 起動時: 出荷するマニフェストが署名したマニフェストであることを証明する。
verifyManifestStrict(signed);
// 2. すべての child_process.spawn の前に:
attestSpawnStrict(signed as SignedManifest, { command, args });
これが統合のすべてです。2つの関数呼び出し、SaaSもデーモンも不要。
すべてのspawnで署名を再検証したい場合(未検証やすり替えられたマニフェストがゲートに到達するのを防ぐ多層防御)、代わりに単一のフェイルセーフ呼び出しを使用してください。これは最初に検証し、その後アテステーションを行います:
import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });
mcp-attest-demo)注釈は正直です: attest_sign_manifestとattest_keygenはディスクにファイルを書き込むため、読み取り専用ではありませんが、既存のデータを破壊しないためdestructiveHintはfalseのままです。ツールごとの機能テーブルについてはdocs/THREAT-MODEL.mdを参照。
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で終了。
| 仕様バージョン | ステータス |
|---|---|
| 2024-11-05 | マニフェストで解析可能、リファレンスサーバーの対象外 |
| 2025-03-26 | マニフェストで解析可能、リファレンスサーバーの対象外 |
| 2025-06-18 | 完全対象 |
ライブラリはトランスポートに依存しません。リファレンスサーバーはstdioのみ。
~/.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ルール種類が必要です。regexルール。 regexルールのパターンは作者によって署名されますが、引数の値は攻撃者によって制御されます。サニタイザーはバックトラッキングを起こしやすいパターン((a+)+のようなネストされた無制限量指定子)を静的に検出し、実行を拒否するため、単一の細工された引数でspawnのホットパスをフリーズさせることはできません。ルールには入力上限(デフォルト4096)もあります。このパッケージが行わないこと(範囲外):
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)が含まれています。ビルドはリグレッションチェックです: すべてのペイロードがブロックされなければなりません。
--provenanceを使用したnpm公開。mcp-server-attestationとして公開。StudioMeyerは、パルマ・デ・マヨルカに拠点を置くAIおよびデザインスタジオで、世界中のクライアントと協業しています。中小企業向けにカスタムウェブサイトとAIインフラを構築しています。プロダクションスタックはClaude Agent SDK、MCP、n8n、Sentry、Langfuse、LangGraphを使用した可観測性と社内ガードレイヤーです。
MITライセンス、Copyright 2026 Matthias Meyer (StudioMeyer)。LICENSEを参照。
| パッケージ | 目的 |
|---|
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) | リファレンスMCPサーバー(stdio、spec 2025-06-18)。ライブラリを示す5つのツールを公開。 |
| # | Name | readOnlyHint | destructiveHint |
|---|
| 1 | attest_verify_manifest | true | false |
| 2 | attest_inspect_spawn | true | false |
| 3 | attest_generate_manifest_template | true | false |
| 4 | attest_sign_manifest | false | false |
| 5 | attest_keygen | false | false |
regexmaxLengthprefixルール。 prefixルールはデフォルトで..パスコンポーネントを拒否します(denyTraversal: true、%2e%2eエンコード形式を含む)。そのため、prefix: "/safe/"を満たしていても/safe/../../etc/passwdはブロックされます。attestSpawnVerifiedは、1つのフェイルセーフ呼び出しでspawnをアテステーションする前にマニフェスト署名をチェックします — 実際のホットループからspawnごとのEd25519検証を測定していない限り、attestSpawnStrictの代わりにこれを使用してください。