➡️ attestable-mcp-server について
attestable-mcp-server は、信頼された実行環境を通じてクライアントからリモートで検証できる MCP サーバーです。TLS ハンドシェイク時に、実行中のコードが再現可能なビルドと一致することを示す証明書を提示します。接続前にサーバーコードの改ざんがないことを確認したいユーザー向けです。
主な機能
- 01TLS ハンドシェイク中の RA-TLS によるリモート証明
- 02SGX quote と証拠クレームを埋め込んだ証明書
- 03pubkey-hash クレームによる一時公開鍵の紐付け
- 04GitHub Actions が生成する署名付きビルド成果物
- 05サーバーによるクライアントの任意の証明
活用シーン
- 01第三者提供の MCP サーバーが公開コードを実行しているか確認
- 02エミュレータや SGX ハードウェア上でローカルに測定値を再現
MCP 対応
MCP サーバーであり、クライアントは接続前に RA-TLS 証明書を検証します。サーバー側も任意でクライアントを証明できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
➡️ attestable-mcp-server
リモートで認証可能な MCP サーバー
概要
このプロジェクトには、MCP クライアントがリモートで認証可能な MCP Server が含まれています。これを実現するために、現在実行中の attestable-mcp-server のコードを表す証明書を生成する、信頼できる実行環境が使用されます。attestable-mcp-server は、接続前の TLS ハンドシェイクでこの証明書を MCP クライアントに送信します。この証明書により、実行中のコードがGitHub Actions でビルドされたコードと同じであることが証明されます。また、エミュレートされたハードウェアまたはセキュアハードウェア上でコードをローカルにビルドして実行することで、独立して検証できます。この場合、値は同じになります。クライアントとサーバー間のリモート認証に使用されるプロトコルは RA-TLS です。これは、MCP クライアントが検証できる、マシンとコード固有の測定値を追加する TLS の拡張です。
この RA-TLS 証明書の最も重要な概念は、標準化された X.509 拡張フィールドに TCG DICE の「tagged evidence」OID を使用して SGX quote を埋め込むことです。そこには SGX レポートと Intel SGX 証明書チェーン全体が埋め込まれています。SGX quote に加えて、証明書には証拠のクレームも含まれます。最も重要なクレームは「pubkey-hash」クレームで、実行中の MCP サーバーのメモリーイメージを扱う TEE が生成した一時公開鍵(DER 形式)のハッシュが含まれています。
機能
- MCP クライアントは、任意の MCP サーバーで実行中のコードをリモート認証できます
- MCP サーバーは、必要に応じて MCP クライアントをリモート認証できます
署名済みアーティファクトの生成
このリポジトリの GitHub Actions スクリプトは、信頼できる実行環境(TEE)内のセルフホスト型 GitHub ランナーで実行されます。アクションスクリプトは、attestable-mcp-server を含む Docker コンテナーをビルドし、TEE 内で実行中のコードの署名付き認証を生成します。この Docker イメージには、その後 GitHub によって署名が付与されます。セキュアハードウェアの有無にかかわらず、同じ値を独立して生成でき、稼働中のサーバーに問い合わせて同じ値を取得できます。
依存関係
- Intel SGX ハードウェア
- Gramine
- python 3.13
- Ubuntu 22.04
- Intel SGX SDK & PSW
クイックスタート
uv sync
docker build -t attestable-mcp-server .
gramine-sgx-gen-private-key
git clone https://github.com/gramineproject/gsc docker/gsc
cd docker/gsc
uv run ./gsc build-gramine --rm --no-cache -c ../gramine_base.config.yaml gramine_base
uv run ./gsc build -c ../attestable-mcp-server.config.yaml --rm attestable-mcp-server ../attestable-mcp-server.manifest
uv run ./gsc sign-image -c ../attestable-mcp-server.config.yaml attestable-mcp-server "$HOME"/.config/gramine/enclave-key.pem
uv run ./gsc info-image gsc-attestable-mcp-server
セキュアハードウェアでのサーバー起動
docker run -itp --device=/dev/sgx_provision:/dev/sgx/provision --device=/dev/sgx_enclave:/dev/sgx/enclave -v /var/run/aesmd/aesm.socket:/var/run/aesmd/aesm.socket -p 8000:8000 --rm gsc-attestable-mcp-server
ローカル開発マシンでのサーバー起動
docker run -p 8000:8000 --rm gsc-attestable-mcp-server
TODO
- RA-TLS を実演する MCP クライアントを追加する
- 独立した検証を簡単に行えるよう、GitHub Actions から取得した Intel 署名付き測定値をこの README に追加する
今後の計画
- JSON Web Key(JWK)認証クレームの検証
cobrowser.xyz
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。