CC逆引きリファレンス

MCP サーバーからユーザーに入力を求めさせたい

7. MCP(Model Context Protocol)

コマンド / 機能

MCP Elicitation

MCP インタラクティブ入力

概要

MCP Elicitation は MCP サーバーがユーザーにインタラクティブな入力を求めることができる機能です。確認ダイアログや入力フォームを通じて、MCP サーバーが必要なデータをユーザーから収集できます。

設定例

// MCP サーバー側の実装(TypeScript)
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

const server = new McpServer({ name: "my-server", version: "1.0" });

server.tool("deploy", async ({ context }) => {
  // ユーザーに確認を求める
  const result = await context.elicit({
    message: "本番環境にデプロイしますか?",
    schema: {
      type: "object",
      properties: {
        confirmed: { type: "boolean" },
        environment: { type: "string", enum: ["staging", "production"] }
      }
    }
  });

  if (!result.confirmed) {
    return { content: [{ type: "text", text: "デプロイをキャンセルしました" }] };
  }
  // デプロイ処理...
});

// フックで Elicitation を監視する(.claude/settings.json)
{
  "hooks": {
    "Elicitation": [
      {
        "type": "command",
        "command": "echo "MCP requested input: $CLAUDE_HOOK_DATA" >> .claude/mcp.log"
      }
    ]
  }
}
公式ドキュメントを見る

こんな時に使う

  • MCP サーバーからユーザーに確認を求めたい時
  • MCP ツール実行前に必要なパラメータを対話的に収集したい時
  • 危険な操作の前にユーザー確認を挟みたい時

使い方

  1. 1MCP サーバー側で context.elicit() を呼び出す実装が必要
  2. 2Claude Code は Elicitation ダイアログを表示してユーザー入力を求める
  3. 3Elicitation / ElicitationResult フックで入力内容を監視可能

Tips

  • MCP SDK の最新バージョンが必要
  • schema パラメータで入力フォームの形式を定義
  • Elicitation フックで自動処理・ブロックが可能