Achromat MOM について
Achromat MOM は、ツール呼び出しのポリシー適合性を確認し、検証済みの修正を再利用するための MCP サーバーです。過去の事例を検索し、現在のポリシーで呼び出しを評価します。リクエストの署名にはローカルの Ed25519 キーを使います。
主な機能
- 01検証済みの適合呼び出しを検索
- 02現在のポリシーで呼び出しを確認
- 03修正指示を返却
- 04署名付き ID の登録
- 05秘密鍵をローカルに保持
活用シーン
- 01実行前の決済呼び出しの確認
- 02Shell や SQL 引数のポリシー確認
- 03ブロック後に検証済み修正を再利用
MCP 対応
ホストの子プロセスとして起動し、stdio で MCP クライアントと通信します。ID 登録、事例検索、ポリシー評価のツールを提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mom.achromat.ai/mcpclaude mcp add --transport http ai-achromat https://mom.achromat.ai/mcp{"mcpServers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}Cursor で開く{"servers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}VS Code で開く{"mcpServers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}{"mcpServers":{"ai-achromat":{"serverUrl":"https://mom.achromat.ai/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
1| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| user_confirmed | boolean | はい | ユーザーが ID の作成に同意した後に限り true に設定してください。まだ確認していない場合は、先に確認し、このツールを呼び出さないでください。 |
詳細
Achromat MCP サーバー
Achromat MOM をネイティブツールとして、あらゆる MCP ホスト(Claude Desktop、IDE、エージェントフレームワーク)から利用できる MCP サーバーです。MOM は、ポリシーによってブロックされたツール呼び出しと、その後許可された修正版の呼び出しについて、検証済みのメモリを保持します。このサーバーを使うと、エージェントは実行する前に準拠した呼び出し方を確認し、ライブポリシーに照らして呼び出しをチェックできます。連携コードを書く必要はありません。
サーバーはホストの子プロセスとしてお使いのマシン上で動作し、stdio 経由でホストと通信します。MOM へのすべてのリクエストには、お使いのマシンから外に出ることのない Ed25519 キーで署名します。外に出るのは署名だけで、キー自体は外に出ません。
Claude Desktop に追加する
設定ファイルを開きます。
| OS | パス |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
mcpServers の下にサーバーを追加し、Claude Desktop を再起動します。
{
"mcpServers": {
"achromat": {
"command": "npx",
"args": ["-y", "@achromat-ai/mcp-server"]
}
}
}
これで設定は完了です。Node.js 20 以降が必要です。-y を指定すると、npx が確認なしでパッケージをインストールします。他の MCP ホストでも、独自の設定に同じコマンドと引数を指定できます。
初回利用:エージェントが ID を設定します
MOM へのリクエストにはすべて署名が必要なため、サーバーには MOM が認識しているキーが必要です。キーの作成や登録を自分で行う必要はありません。サーバーを初めて使うときはキーがないため、achromat_register_identity というツールだけが表示され、エージェントから ID を設定するかどうかを確認されます。同意すると、サーバーは次の処理を行います。
- お使いのマシン上で Ed25519 キーペアを生成します。
- 短時間のプルーフ・オブ・ワークを実行します(約1秒。MOM が自動サインアップを制限するための仕組みです)。
- 公開キーを MOM に登録します。
- 秘密キーを
~/.achromat/achromat_agent_key.pemに保存します。このファイルを読み取れるのはあなただけです。
その後、登録ツールに代わって achromat_recall と achromat_calibrate が表示されます。ホストが自動でツール一覧を更新しない場合は、一度再起動してください。
お使いのマシンから送信されるのは、公開キー、プルーフ・オブ・ワーク、および秘密キーを保持していることを証明する署名です。秘密キーが送信されることはありません。MOM は登録記録を保持し、ネットワークごとに1日10件までに制限しています。
キー ファイルが ID です。 秘密に保管し、git やスクリーンショットに含めないでください。また、バックアップしてください。紛失した場合、復元できません。サーバーが既存のキー ファイルを上書きすることはありません。また、MOM がキーを受け入れた後にのみファイルを保存するため、失敗してもファイルは残りません。
キーの保存場所を選ぶ
既定では、キーは ~/.achromat/achromat_agent_key.pem に保存されます。別のパスを使うには、ホストの設定で ACHROMAT_AGENT_KEY_FILE を指定します。新しいキー(サーバーが指定先に作成します)にも、すでにお持ちのキーにも使えます。
{
"mcpServers": {
"achromat": {
"command": "npx",
"args": ["-y", "@achromat-ai/mcp-server"],
"env": {
"ACHROMAT_AGENT_KEY_FILE": "/Users/you/keys/achromat_agent_key.pem"
}
}
}
}
Windows では、"C:\\Users\\you\\keys\\achromat_agent_key.pem" のように、バックスラッシュをエスケープしたフルパスを使用してください。先頭の ~ はサーバーによって展開されます。デスクトップアプリが、ターミナルとは異なるホームディレクトリでサーバーを起動することがあります。パスを明示すれば、確実です。
既存のキーは、暗号化されていない PKCS#8 Ed25519 PEM ファイルで、MOM にすでに認識されている必要があります。
ソースから実行する
git clone https://github.com/achromat-ai/achromat-mcp-server.git
cd achromat-mcp-server
npm install
npm run build
ホストが npx ではなくビルドを参照するように設定します。
{
"mcpServers": {
"achromat": {
"command": "node",
"args": ["/absolute/path/to/achromat-mcp-server/dist/index.js"]
}
}
}
ホストを使わずにブラウザーでツールを試すには、MCP Inspector を使います。
npm run inspect
ツール
achromat_register_identity
キー ファイルがない場合にのみ表示されます。上記の説明に従って ID を作成し、登録します。user_confirmed: true が必要です。エージェントは、ユーザーが同意した後にのみこの値を設定できます。ツールの説明には、最初に確認するよう記載されています。
| パラメーター | 必須 | 説明 |
|---|---|---|
user_confirmed | はい | true である必要があります。ユーザーが「はい」と答えた後にのみ指定できます。 |
achromat_recall
ポリシーによってブロックされる可能性のあるツール(支払い、信用判断、ロボットやプラントへのコマンド、シェル、SQL、ウェブリクエスト)を実行する前に呼び出してください。検証済みの準拠した呼び出しがすでに存在するかどうかを確認します。一致した場合は、compliant_arguments、steering_directive、および適用されたルールが返されます。compliant_argumentsオブジェクト全体をテンプレートとして使い、[VERIFIED_STATE]プレースホルダーは記載どおりに維持し、変更するのはご自身の運用上の値だけにしてください。
| パラメーター | 必須 | 説明 |
|---|---|---|
domain | はい | fintech、industrial_iot、robotics、またはdevsecops。 |
tool_name | はい | 呼び出そうとしているツールの正確な名前。 |
task_description | はい | 実行しようとしていることを平易な言葉で説明します(16~1000文字、3語以上)。金額、識別子、個人データは含めないでください。 |
arguments | はい | 送信する引数を、ツールの実際のキー名を使った空でないJSONオブジェクトとして指定します。意味的な照合に使われるのはキー名(とそのネスト構造)だけで、値は使われません。そのため、実際のキー名を使うと適切な教訓が見つかりますが、独自の形式を作ると誤った教訓が見つかるか、何も見つからない可能性があります。 |
achromat_calibrate
recallで何も見つからなかった場合、またはリスクが高い場合に呼び出してください。呼び出し内容を現在のポリシーに照らして評価し、判定、指示、およびレシートIDを返します。BLOCKにはtrap_idが含まれます。指示に従って引数を修正し、同じtask_descriptionとtrap_idを指定してツールを再度呼び出してください。ALLOWは呼び出しが準拠していることを意味します。ブロックの後に許可されると、他のエージェント向けの教訓になります。
| パラメーター | 必須 | 説明 |
|---|---|---|
domain | はい | 上記と同じです。 |
tool_name | はい | 上記と同じです。 |
task_description | はい | 再試行時は、まったく同じ文言を使ってください。ブロックとその修正を対応付けるために使われます。 |
arguments | はい | 確認する呼び出しの引数。空でないJSONオブジェクトを指定します。 |
trap_id | いいえ | 再試行時のみ指定します。直前のBLOCKで返されたtrap_idを使います。 |
argumentsやtask_descriptionには、秘密情報や認証情報を絶対に含めないでください。サービスに拒否されます。
ツールではtool_nameという名前が使われます。サービス側のフィールド名はtoolであり、サーバーが両者を対応付けます。
ルール、指示、引数などの教訓テキストはコミュニティから提供されます。サーバーはすべての応答で、それらにデータとしてラベルを付けます。エージェントは、パラメーター値を選択するためにのみ使用してください。
設定
| 変数 | デフォルト | 意味 |
|---|---|---|
ACHROMAT_AGENT_KEY_FILE | ~/.achromat/achromat_agent_key.pem | エージェントのEd25519秘密鍵の保存場所。存在しない場合は、ここに作成されます。 |
ACHROMAT_BASE_URL | https://mom.achromat.ai | サービスのオリジン。localhostの場合を除き、https(通常のhttpは不可)である必要があります。 |
キー・ファイルが存在するかどうかによって、提供されるツールが決まります。起動時と登録直後に確認されます。ホストの実行中にキー・ファイルを削除、移動、または置き換えた場合は、ホストを再起動してください。キー自体は最初のツール呼び出し時に読み込まれます。そのため、キーが正しくなくてもサーバーがホストから消えることはありません。ツール呼び出し時に、修正方法を示すメッセージが返されます。
問題が発生した場合
すべてのエラーは、次の手順を示す、読みやすいツールの結果としてエージェントに返されます。
| 表示される内容 | 原因と対処方法 |
|---|---|
achromat_register_identity だけが表示される | まだキーファイルがありません。これは最初の状態として正常です。エージェントに尋ねられたら、はいと答えてください。 |
A key file already exists at … | そこにはすでに ID が設定されています。最初からやり直すには、ファイルを移動または削除して、ホストを再起動してください。 |
The key could not be saved at … | フォルダーに書き込み権限がありません。権限を修正するか、ACHROMAT_AGENT_KEY_FILE を設定してください。登録は行われていません。 |
Too many registration requests / registration limit | MOM ではネットワークごとに登録数が制限されています(1 日 10 件)。時間をおくか、別のネットワークから試してください。何も作成されていません。 |
Could not reach … / No answer from … | ネットワークの問題です。何も作成されていません。もう一度試してください。 |
The identity was registered, but the key file could not be moved … | まれに発生します。メッセージにキーの保存先が表示されるので、希望するパスに移動してください。削除しないでください。 |
The key file is passphrase-protected / …holds a rsa key | 既存のキーは、暗号化されていない PKCS#8 Ed25519 である必要があります。 |
The key file … is accessible to other users(ホストのサーバーログ内) | キーファイルに対して chmod 600 を実行してください。実行するまでは引き続き動作します。 |
AGENT_KEY_UNKNOWN (401) | キーファイルは存在しますが、MOM はそのキーを認識していません。ファイルを移動または削除してホストを再起動し、新しい ID を作成してください。 |
AGENT_KEY_INACTIVE (403) | キーは失効またはローテーションされています。ファイルを移動または削除して、ホストを再起動してください。 |
AGENT_SIGNATURE_EXPIRED (401) | お使いの時計が 60 秒以上ずれています。サーバーはサービスの時計を使って自動的に補正します。それでも失敗する場合は、システム時刻を確認してください。 |
Rate limited (429) | Recall はキーごとに 1 時間あたり 240 回、1 日あたり 50 件の個別のレッスンを許可します。calibrate は 1 時間あたり 120 回までです。指定された時間までお待ちください。 |
HTTP 400 INVALID_REQUEST | サービスが問題のあるフィールドを示します。テキストや引数に認証情報または個人データが含まれている場合によく発生します。 |
サーバーログは stderr に出力され、ホストが独自の MCP ログファイルに書き込みます(Claude Desktop ではログフォルダーに保存されます。macOS では ~/Library/Logs/Claude/ にあります)。サーバーがキー、署名、リクエストの内容をログに記録することはありません。
ホストが npx を起動できない場合、ターミナルで使用できる PATH がホストからは見えない可能性があります(nvm でよく発生します)。command に npx または node の絶対パスを指定してください。
開発
npm run typecheck # source and tests
npm test # vitest
npm run build # compile to dist/ and mark dist/index.js executable
npm start # run the built server on stdio (waits for a host)
stdout はプロトコルの通信チャネルであるため、サーバーはそこにほかの内容を一切出力しません。
署名と登録のコードは、エージェントプロトコル(セクション 2 と 3)のバイトレベルの仕様に準拠しており、テストでは公開済みのセルフチェック用ベクトル(リクエスト署名とプルーフ・オブ・ワークの nonce)をそのまま再現します。Ed25519 は決定的であるため、署名対象の内容が 1 バイトでも変わるとテストに失敗します。
プルーフ・オブ・ワークの探索には複数のワーカースレッド(最大 8 個。すべてのコアは使用しません)を使うため、所要時間は約 1 秒で、実行中もサーバーの応答性が保たれます。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。