bernstein-mcp について
bernstein-mcpは、bernsteinの実行レシート、ハッシュチェーン、Trust Record、署名済みエージェントマニフェストを検証するステートレスな読み取り専用MCPエンドポイントです。データを保存・取得せず、検証結果と署名付き判定を返します。
主な機能
- 01レシートとハッシュチェーンの検証
- 02TRACE Trust Recordの確認
- 03署名済みエージェントマニフェストの検証
- 04レシートとTRACEの対応関係の説明
- 05プリセットと同梱アダプターの一覧
- 06署名付き検証判定の返却
活用シーン
- 01実行レシートを信頼する前の確認
- 02チェーン内の最初のリンク切れの特定
- 03委任チェーンの評価
- 04署名付き判定のレシートとの保管
MCP 対応
https://mcp.bernstein.run/mcp を通じて、検証、説明、一覧表示の読み取り専用ツールをMCPクライアントに提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.bernstein.run/mcpclaude mcp add --transport http sipyourdrink-ltd-bernstein https://mcp.bernstein.run/mcp{"mcpServers":{"sipyourdrink-ltd-bernstein":{"type":"http","url":"https://mcp.bernstein.run/mcp"}}}Cursor で開く{"servers":{"sipyourdrink-ltd-bernstein":{"type":"http","url":"https://mcp.bernstein.run/mcp"}}}VS Code で開く{"mcpServers":{"sipyourdrink-ltd-bernstein":{"type":"http","url":"https://mcp.bernstein.run/mcp"}}}{"mcpServers":{"sipyourdrink-ltd-bernstein":{"serverUrl":"https://mcp.bernstein.run/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
11このツールにパラメーターはありません。
詳細

bernstein-mcp
https://mcp.bernstein.run にある、状態を保持せず読み取り専用の MCP エンドポイントです。bernstein の実行レシートとハッシュチェーンを検証します。アカウントもキーも不要で、何も保存せず、何も取得しません。
claude mcp add --transport http bernstein https://mcp.bernstein.run/mcp
できること
| ツール | 結果 |
|---|---|
verify_receipt | 実行レシートに含まれるすべてのチェーンを再計算し、署名対象を再構築して、Ed25519 署名を検証します。判定と各チェックの結果を1行ずつ返し、判定を署名付きステートメントとして返します(下記参照)。 |
explain_receipt | 同じ検証を説明付きで行います。実行で記録された内容、相違がある箇所、結果が証明することと証明しないことを説明します。 |
verify_chain | ジャーナル行、系譜エントリー、監査イベントを個別にたどります(バイト単位で完全に一致する行を検証するには、ファイルのテキストを渡します)。最初にリンクが壊れた箇所を示します。 |
verify_trace_record | 1件の Trust Record に対する TRACE v0.2 適合性チェックを、状態を保持せず、アカウント不要で実行します。ベンダー提供のスキーマ、プロファイルルール、cnf.jwk 内のキーを使った埋め込み署名(EdDSA、ES256、ES384)を検証します。record_sha256 は、子ホップがリンクする RFC 8785 ダイジェストです。 |
verify_delegation_chain | Trust Record の集合をリーフからルートまでたどり、委任リンクコーパスと同じコードでチェーンを分類します(verified、provenance-invalid、authorization-invalid、unverifiable)。 |
verify_agent_manifest | 署名付きエージェントマニフェスト(v0.2 COSE エンベロープ)を状態を保持せずに検証します。ベンダー提供のスキーマ、プロファイル、正規化、埋め込み署名(Ed25519、P-256、P-384)をチェックし、references[] による Trust Record との照合も任意で行えます。判定は valid/invalid/unverifiable です。 |
explain_trace_mapping | bernstein の実行が TRACE v0.2 Trust Record にどのように対応するかを、クレームごとに説明します。レシートを渡すと、ジャーナルが回答する項目を補完します。 |
list_presets / get_preset | このリリースに含まれるコンプライアンスプリセットを返します。 |
list_adapters | このリリースに含まれるエージェントアダプターを返します。 |
server_info | バージョンと制限を返します。 |
bernstein verify-receipt と同じ検証を、あらゆる MCP クライアントまたは
/verify の貼り付けフォームから利用できます。判定ページの
アドレスには、レシート自体のダイジェストが使われます。
信頼モデル
| 証明すること | 証明しないこと |
|---|---|
| 埋め込まれた行が、署名された行と完全に一致すること | 埋め込まれたキーが、あなたの想定する人物に属していること(初回利用時に信頼する方式です。オペレーターが公開しているキーを自分でピン留めしてください) |
| 署名後に編集、並べ替え、削除、追加が行われていないこと | 監査範囲の HMAC 値(生成元のインストール環境のキーで署名されています。リンクとコンテンツハッシュは引き続き検証されます) |
レシートファイルの内容は文字列として渡してください。すでに解析済みのオブジェクトでは
1 と 1.0 を区別できませんが、参照実装は元の表記をハッシュ化します。
署名付き判定
すべての判定は、このデプロイの Ed25519 キーで署名された
DSSE
エンベロープ(signed_verdict)として返されます。ペイロードは JCS で正規化されたステートメントで、レシートをダイジェストで識別し、判定、すべてのチェック、EAR ステータス語彙(affirming/contraindicated/none)による appraisal ブロックを含みます。レシートと一緒に保管してください。誰でも公開キー
/.well-known/bernstein-mcp/keys.json
(kid = RFC 7638 サムプリント)を使ってオフラインで再検証できます。署名対象は
application/vnd.bernstein.verdict+json の DSSE PAE であり、レシート自体が使うものと同じ構成です。これは「この検証器が、この時点で、これらのバイト列に対してこの判定に至った」ことを証明するものであり、レシートの生成元については何も証明しません。
セッションレシート
bernstein-attest は、Claude Code または Codex CLI のセッションを署名済みの実行レシートに変換し、このサーバーがそれを検証します。
npx bernstein-attest init # registers hooks for both agents (user scope); --claude-code / --codex / --project to narrow
bernstein-attest link # verify link + one Markdown line for a PR description
bernstein-attest verify .bernstein/receipts/<session>.json
Codex は、対話セッションで /hooks を使ってプロジェクトフックを一度信頼した後にのみ実行します。codex exec は、信頼されていないフックを何も表示せずにスキップします。--project を指定すると、Claude Code のフックは .claude/settings.local.json に、Codex のフックは .codex/hooks.json に保存されます。どちらもホームディレクトリ内のバンドルを指定するため、.codex/hooks.json はバージョン管理の対象から除外してください。
ツール呼び出しごとに記録される内容:ツール名、入力と出力のハッシュ、成功フラグ、呼び出しによって書き込まれたファイルのリポジトリ相対パス(プロジェクト外のパスはハッシュのみ)、シェルコマンドのプログラム名(先頭のトークンからパスを除き、最大32文字)。記録されない内容:プロンプト、モデル出力、コマンドテキスト、ファイル内容、絶対パス。新しい内容が記録された各ターンの終了時、および2 000行ごとにレシートが封印されます。ファイルは .bernstein/receipts/ に保存され、説明対象の変更と一緒にコミットできます。後続のターンで同じファイルが再封印されるため、コミットする直前に npx bernstein-attest link を実行し、貼り付けるリンクが最新のバイト列を示すようにしてください。
制限
| リクエスト本文 | 1 MiB |
| チェーンあたりの行数 | 2 000(それを超えるレシートはローカルで検証してください) |
| レート | POST /mcp および POST /verify で、アドレスあたり毎分60リクエスト |
| ロギング | リクエストごとにJSON行を1つ記録:ルート、メソッド、ステータス、JSON-RPCメソッド、ツール、判定、プロデューサーファミリー、MCPクライアント名/バージョン、国、コロケーション。アドレス、ヘッダー、本文、レシートは記録しません |
正確性
vectors/ には、Python リファレンス(固定された bernstein ソースに対して scripts/gen_vectors.py を実行)で生成された8つのゴールデンベクトルが含まれています。TypeScript 検証ツールは、各ベクトルの判定、すべてのチェック、バインディングバイト列、レシートダイジェストをバイト単位で一致させる必要があります(test/vectors.test.ts)。
vectors/session/ には、bernstein-attest が書き込んだ3つの固定セッションレシートが含まれています(scripts/gen-session-vectors.mjs)。
開発
npm install
npm test # no-fetch guard + vitest
npm run typecheck
npm run dev # wrangler dev
src/ では fetch、eval、new Function を呼び出せません。違反すると CI に失敗します。
デプロイについては、DEPLOY.md を参照してください。ライセンス:Apache-2.0。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。