AIエージェント活用実践編Tool Use と MCP — 外部システム連携

自作 MCP サーバの最小構成

無料公開レッスン / 読了目安 6


学習のねらい

前レッスンで MCP の概念と、クライアント・サーバモデルについて学びました。 このレッスンでは、実際に Python を使って独自の MCP サーバ を実装する方法を学びます。 特に、MCP サーバがどのようにツールを公開し、クライアントからのツール呼び出しを処理するのかを、最小限の電卓ツールを例にハンズオン形式で理解します。 これにより、AI エージェントが利用できるカスタムツールを自作するための基礎を習得しましょう。

Python での MCP サーバ実装 (1 tool だけ)

MCP サーバは、modelcontext ライブラリを使って簡単に実装できます。 基本的なサーバは、ツールを登録し、クライアントからのリクエストを処理するループを実行します。

必要なライブラリのインストール

まず、modelcontext ライブラリをインストールします。

pip install modelcontextprotocol

最小構成の MCP サーバ

以下は、add という1つのツールだけを持つ最小構成の MCP サーバの例です。

from modelcontext import Server, Tool, tool
from typing import Dict, Any

# Tool クラスを継承して、電卓ツールを定義
class CalculatorTool(Tool):
    @tool()
    def add(self, a: int, b: int) -> int:
        """2つの数値を足し算します。"""
        return a + b

# MCP サーバを初期化し、ツールを登録
server = Server(tools=[CalculatorTool()])

# サーバを実行 (ここでは標準入出力を使って通信)
if __name__ == "__main__":
    server.run()

このコードでは、CalculatorTool クラスに @tool() デコレータを使って add メソッドをツールとして登録しています。 Server クラスにこのツールを渡し、server.run() を呼び出すことで、MCP サーバが起動します。

tools/listtools/call の基本フロー

MCP クライアント (AI エージェント) と MCP サーバは、主に以下の2種類のメッセージをやり取りします。

  1. tools/list: クライアントがサーバに対し、利用可能なツールの一覧を問い合わせるメッセージです。

    • クライアント: 「どんなツールが使えるの?」
    • サーバ: 「add(a: int, b: int) -> int というツールが使えます」 この応答には、ツールの名前、説明、引数、戻り値の型情報が含まれます。AI はこれを見て、どのツールが自分の目的に合うかを判断します。
  2. tools/call: クライアントが特定のツールを呼び出すことをサーバに要求するメッセージです。

    • クライアント: 「add ツールを、引数 a=5, b=3 で実行してください」
    • サーバ: ツールを実行し、その結果 (8) をクライアントに返します。

この tools/list でツールの情報を取得し、tools/call でツールを実行するというのが、MCP の基本的な通信フローです。

stdio トランスポートの使い方

modelcontext ライブラリの Server.run() メソッドは、デフォルトで stdio トランスポート を使って通信します。 stdio トランスポートとは、標準入力 (stdin) と標準出力 (stdout) を介して MCP メッセージをやり取りする方法です。

  • 標準入力: クライアントからのツール呼び出し要求 (JSON 形式のメッセージ) を受け取ります。
  • 標準出力: 利用可能なツール一覧や、ツール実行結果 (JSON 形式のメッセージ) をクライアントに返します。

この方法は、開発やデバッグがしやすく、他のプロセスから簡単に MCP サーバを呼び出せる利点があります。 例えば、Claude Agent SDK は、この stdio トランスポートを通じて外部の MCP サーバと通信できます。 つまり、あなたが作成した Python スクリプトの MCP サーバを、Claude Agent SDK が別のプロセスとして起動し、標準入出力を通じて通信する、という形になります。

まとめ

このレッスンでは、Python の modelcontext ライブラリを使って、1つのツールを持つ最小限の MCP サーバを実装する方法を学びました。 tools/listtools/call という基本的な通信フロー、そして標準入出力を使った stdio トランスポートの仕組みを理解しました。 次の演習では、この知識を活かして、実際に電卓機能を提供する MCP サーバを実装し、Claude から呼び出せるようにしてみましょう。

参考リンク


自作 MCP サーバの最小構成 | AIエージェント活用実践編 第1章 - AI研修