🛠️

【MCP実践】PythonでつくるMCPサーバー構築入門

に公開

前回の記事では、Model Context Protocol (MCP) の概要について解説しました。
今回は、実際に手を動かして Python でMCPサーバーを作ってみましょう。

「サーバー構築」と聞くと難しそうに感じるかもしれませんが、MCPのSDKを使えば驚くほど簡単に実装できます。

ユースケース

今回は、「都市名を指定すると、その天気を返す」 シンプルなMCPサーバーを作成します。
そして、作成したサーバーを OpenAI のモデルから利用する方法も解説します。

環境構築

まずは開発環境を整えましょう。
Python 3.10以上が必要です。

パッケージ管理には、最近話題の高速なツール uv を使うのがおすすめです(もちろん pip でもOKです)。

# プロジェクトディレクトリの作成
mkdir weather-mcp-server
cd weather-mcp-server

# 仮想環境の作成と有効化 (uvの場合)
uv venv
source .venv/bin/activate

# 必要なライブラリのインストール
uv pip install "mcp[cli]" openai

MCPサーバーの実装

MCPサーバーを簡単に構築できる FastMCP というクラスが用意されています。
server.py というファイルを作成し、以下のコードを記述してください。

from mcp.server.fastmcp import FastMCP

# サーバーの初期化
mcp = FastMCP("Weather Server")

# ツールの定義
@mcp.tool()
def get_weather(city: str) -> str:
    """
    指定された都市の現在の天気を返します。
    実運用では外部APIを呼び出しますが、ここではモックデータを返します。
    """
    weather_data = {
        "Tokyo": "晴れ, 25℃",
        "Osaka": "曇り, 22℃",
        "Kyoto": "雨, 20℃",
        "Seattle": "雨, 15℃",
    }
    
    # データがあれば返す、なければ不明とする
    return weather_data.get(city, "不明な都市です")

if __name__ == "__main__":
    # サーバーの実行
    mcp.run()

たったこれだけです!
@mcp.tool() デコレータを付けるだけで、普通のPython関数がAIから呼び出せる「ツール」になります。

動作確認 (MCP Inspector)

作成したサーバーが正しく動くか、MCP公式のデバッグツール MCP Inspector を使って確認してみましょう。

npx @modelcontextprotocol/inspector python server.py

ブラウザで管理画面が開きます。「Tools」タブに get_weather が表示されているはずです。
引数に "Tokyo" などを入力して「Run Tool」をクリックし、結果が返ってくれば成功です。

OpenAIとの連携

作成したMCPサーバーを、OpenAIのモデル(GPT-4oなど)から使ってみましょう。
MCPクライアントとして振る舞う簡単なスクリプト client.py を作成します。

import asyncio
import os
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from openai import OpenAI

# OpenAI APIキーの設定 (環境変数または直接指定)
# os.environ["OPENAI_API_KEY"] = "sk-..."

async def main():
    # 1. MCPサーバーの設定
    server_params = StdioServerParameters(
        command="python",
        args=["server.py"],
    )

    # 2. サーバーに接続
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            # サーバーからツール一覧を取得
            await session.initialize()
            tools = await session.list_tools()
            
            # OpenAI用のツール定義に変換
            openai_tools = [{
                "type": "function",
                "function": {
                    "name": tool.name,
                    "description": tool.description,
                    "parameters": tool.inputSchema
                }
            } for tool in tools.tools]

            # 3. OpenAI APIを呼び出し
            client = OpenAI()
            messages = [{"role": "user", "content": "東京の天気は?"}]
            
            print("User: 東京の天気は?")

            response = client.chat.completions.create(
                model="gpt-4o",
                messages=messages,
                tools=openai_tools,
            )

            # 4. モデルがツール呼び出しを要求した場合
            tool_call = response.choices[0].message.tool_calls[0]
            if tool_call:
                function_name = tool_call.function.name
                arguments = eval(tool_call.function.arguments) # 注意: 実運用ではjson.loadsを使用
                
                print(f"AI: ツール '{function_name}' を引数 {arguments} で呼び出します...")

                # MCPサーバー経由でツールを実行
                result = await session.call_tool(function_name, arguments)
                
                print(f"Tool Output: {result.content[0].text}")

                # ツールの結果をAIに返す(省略可能ですが、会話を続けるなら必要)

if __name__ == "__main__":
    asyncio.run(main())

このスクリプトを実行すると、以下のような流れで処理が行われます。

  1. PythonスクリプトがMCPサーバーをバックグラウンドで起動
  2. サーバーから利用可能なツール(get_weather)の情報を取得
  3. その情報をOpenAI APIに渡し、「東京の天気は?」と質問
  4. GPT-4oが「get_weather を "Tokyo" で呼ぶべき」と判断
  5. スクリプトがMCPサーバーに対してツール実行を要求
  6. MCPサーバーが結果("晴れ, 25℃")を返す

応用と拡張

今回はシンプルな例でしたが、MCPサーバーはさらに高度なことができます。

  • リソースの実装: @mcp.resource() を使って、ファイルやデータをAIに提供する
  • プロンプトの実装: @mcp.prompt() を使って、定型的な指示テンプレートを作る
  • 外部API連携: requests ライブラリなどで本当の天気予報APIや、Notion、SlackなどのAPIを叩く

まとめ

MCPを使えば、既存のコード資産を簡単にAIのエージェント能力として公開できます。
「AIにこのデータを見せたい」「この操作をさせたい」と思ったら、ぜひMCPサーバーを作ってみてください。

世界中の開発者が作ったMCPサーバーは、GitHubなどで公開されています。それらを参考にしながら、自分だけの最強のAIアシスタントを作り上げましょう!

参考サイト

Discussion