MCP と Claude Code のフック

AI エージェントから人に通知し、確認を取ります。MCP の回答はモデルが無視できます。実行を確実に止めたいときはフックを使います。

どちらも CLI の nodd を使います。先に nodd login を済ませるか、NODD_KEY を設定してください。

MCP

nodd mcp は stdio の MCP サーバーです。Claude Code では次のコマンドで追加します。

claude mcp add nodd -- nodd mcp

ほかのクライアントでは次の設定を使います。

{"mcpServers":{"nodd":{"command":"nodd","args":["mcp"]}}}

ツール

notify通知を送ります。応答は待ちません。title(必須、120 文字)、body(1,000 文字。format: markdown で 4,000 文字)、format、image(40 KB までの Base64)、level
ask承認か選択を求めます。title(必須)、body、format、image、options(2 から 4 個。省略すると承認)、input(入力欄。回答は note で返ります)、expires_in(既定 3600)、wait_seconds(0 から 300、既定 50)
check_answerask が返した id の回答を調べます

ask と check_answer は id、status と、あれば option_id、note を返します。

pendingwait_seconds のうちに回答がありません。check_answer で調べます
approved, rejected承認または却下。却下の理由は note に入ります
answered選択肢が選ばれました。option_id に入ります
expired, cancelled, failed応答なしで終わりました

Claude Code のフック

nodd hook は PreToolUse フックです。ツールの実行前に iPhone へ承認を求め、記録された承認だけを許可します。Claude Code の設定ファイルに次を追加します。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{"type": "command", "command": "nodd hook", "timeout": 1260}]
      }
    ]
  }
}
timeout は応答期限より十分長くしてください。 nodd hook は応答期限の 15 分後まで結果を待ちます。既定の 300 秒なら合計 1,200 秒です。それより先に Claude Code がフックを打ち切ると、nodd hook は拒否を出力できません。上の例の 1,260 秒は既定の期限に合わせた値です。期限を延ばすときは同じだけ増やしてください。

応答期限は nodd hook --expires-in 秒 で変えられます。既定は 300 秒です。

通知は approval、level: high で送ります。見出しは Claude Code: ツール名、本文は実行するコマンド(Bash 以外はツールの入力)で、1,000 文字で切ります。

承認allow
却下deny。却下の理由があれば、Rejected in Nodd: 理由 としてエージェントへ渡します
期限切れ、取り下げ、失敗deny
通信の失敗、確認できない状態deny。失敗はすべて拒否の出力にします