A
AIエージェントの仕組み
ch7-s3 · Minimal MCP Server

最小 MCP サーバー

約 14 分

この回のゴール

1. 使うライブラリ

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|sudo rm'; then echo 'Blocked: dangerous command' >&2; exit 2; fi"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "ruff format $CLAUDE_FILE_PATHS 2>&1 || true"
          }
        ]
      }
    ]
  }
}

公式 SDK のクラス: - Claude が「使うべき」と判断したら呼ばれる = lazy。 だが業務には — サーバーの簡易定義(推奨) - 絶対に毎回守らせたい ルールがある: — stdio 経由でサーバーに繋ぐクライアント - Hooks = Claude のセッション中、特定のイベントで — クライアントの会話管理

2. 最小 MCP サーバーの全コード

server.py にこれだけ書けばサーバー 1 つが完成します:

claude
> ホームディレクトリ全部消して

ポイント

これで Claude API で書いていた TOOL_DEFINITION = {...}不要 になります。

3. リソースとプロンプトも登録できる

> README.md を整形して(行末スペース削除など)

4. サーバーの起動方法

方法 A: 直接コマンドライン

# stdio で手動操作(テスト用)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}' | python server.py

方法 B: mcp CLI

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo \"[$(date)] session $CLAUDE_SESSION_ID ended\" >> ~/.claude/sessions.log"
          }
        ]
      }
    ]
  }
}

方法 C: Claude Desktop から自動起動

次回 (s4) で扱う。claude_desktop_config.json にパスを書くと Claude が subprocess として自動起動する。

5. 動作確認の 2 通り

(a) mcp-inspector (CLI/GUI)

wzxhzdk:5

ブラウザで ツール一覧を確認・実行 できる公式 GUI。開発時の定番。

(b) 自作クライアント

Python のクライアント SDK でサーバーに繋ぎ、JSON-RPC 往復を可視化 できます:

wzxhzdk:6

6. 第 6 章のツールを MCP 化する

第 6 章の calculatorsearch_handbook を MCP サーバーに移植すれば、同じロジック が:

一度書けば、あらゆる所で使える。これが MCP の威力。

7. デバッグのコツ

ログ確認

wzxhzdk:7

手動テスト

# stdio で手動操作(テスト用)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}' | python server.py

よくあるハマリポイント

症状 原因 対策
サーバー起動しない 依存関係不足 pip install mcp
ツールが見えない @mcp.tool() 忘れ デコレータ必須
引数エラー 型ヒント不足 明示的な型を付ける
Claude Desktop で読まれない 設定ミス config.json のパス確認

まとめ

この回の限界(次への動機)

サーバーは動いた。次は Claude Desktop に登録して、Claude の純正 UI からこのツールを呼ばせる。 👉 次回「Claude Desktop と繋ぐ」で、本シリーズの集大成として「第 5 章 RAG を MCP 化して Claude が自動検索する」を実現します。

参考文献

A
本家 Claude Academy で手を動かす
この回に対応する Anthropic 公式のレッスンです。ここは「なぜそう動くか」、向こうは「どう書くか」。サインインなしで読めます。
📝 理解度クイズ (3 問) 💡 ログインすると進捗が保存されます

💬 このサブステップの Q&A

まだ質問はありません。最初の質問を投稿してみましょう。

質問の投稿にはログインが必要です。