3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでMCPサーバー構築とツール連携の基本ステップ

3
Last updated at Posted at 2025-07-19

はじめに

Pythonを用いてMCP(Model Context Protocol)サーバーを構築する方法についてまとめます。

生成AIやチャットシステムの業務活用が進む中、MCPサーバーを自社で設計・運用し、独自ツールや機能と連携させることは、開発・運用現場での重要なテーマとなっています。
本記事では、仮想環境(venv)の活用からMCP Inspectorによる検証まで、導入時に押さえるべきポイントを網羅的に整理します。

使用環境

構築・動作確認に利用した主な環境は以下の通りです。

  • OS
    Windows

  • Python
    3.13.2(venvによる仮想環境)

  • MCP SDK
    MCP version 1.12.0

  • MCP Inspector
    @modelcontextprotocol/inspector(npx経由で利用)

  • ターミナル
    git-bash

MCPサーバーの構築と基本動作確認

仮想環境の作成、必要パッケージのインストール、MCPサーバー用コードの実装、サーバーの起動、およびInspectorを使った初期動作確認までの流れを解説します。

仮想環境作成と必要パッケージのインストール

仮想環境を作成

Pythonの仮想環境を利用することで、プロジェクトごとの依存関係を分離しやすくなり、運用保守が容易になります。
なお、仮想環境の名称は任意ですが、ここでは例としてmcp_envとします。

python -m venv mcp_env

仮想環境の有効化

source mcp_env/Scripts/activate

MCPサーバーのインストール

仮想環境を有効化した状態で、MCPサーバー構築に必要なパッケージをインストールします。
基本的には mcp[cli] のみで足ります。

pip install "mcp[cli]"

サーバー実装例

ここでは、PythonのFastMCPクラスを使い、加算と減算の簡単なツールを備えたMCPサーバーの最小構成例を示します。

server.py
from mcp.server.fastmcp import FastMCP

# MCPサーバーのインスタンス作成
mcp = FastMCP("Example MCP Server")

# 加算ツールの登録
@mcp.tool()
def add(a: int, b: int) -> int:
    """2つの整数を加算して返す"""
    return a + b

# 減算ツールの登録
@mcp.tool()
def subtract(a: int, b: int) -> int:
    """2つの整数を減算して返す"""
    return a - b

# サーバーの起動
if __name__ == "__main__":
    mcp.run(transport="stdio")

ポイント

  • @mcp.tool() デコレータを付けることで関数がMCPのツールとして登録されます
  • 今回は標準入出力(stdio)を使った通信を指定しています

サーバーの起動と基本テスト

MCPサーバー用のPythonスクリプト(例:server.py)が用意できたら、以下のコマンドでサーバーを起動します。

python server.py

エラーが表示されずに起動すれば、サーバーの初期立ち上げは完了です。
サーバーを終了しても構いません。

server.py は、仮想環境(例:mcp_env)と同じ階層のプロジェクト直下に配置してください

MCP InspectorによるGUI検証

MCP Inspectorは、MCPサーバーの動作確認やAPI動作・ツールレスポンスの確認を行うための公式GUIツールです。プログラミング不要で、ブラウザから視覚的に各ツールの挙動検証が行えます。

MCP Inspectorを起動

ターミナルで次のコマンドを入力します。

npx @modelcontextprotocol/inspector

起動後、次のようなメッセージが表示され、ブラウザが起動します。

(mcp_env) % npx @modelcontextprotocol/inspector                                                                                                                                                    
Starting MCP inspector...
⚙️ Proxy server listening on localhost:6277
🔑 Session token: 8645d9771799901ade3ef45cd8db775e88843df61c414d0f949dd2cfe651942f
   Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

🚀 MCP Inspector is up and running at:
   http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=8645d9771799901ade3ef45cd8db775e88843df61c414d0f949dd2cfe651942f

🌐 Opening browser...

5a1f476bae56bc5a018f-1.png

接続情報を指定

  • Transport Type(接続方式):STDIO
  • Command:python
  • Args:server.py
  • Command欄には、Pythonインタープリタ(通常は python )を指定
  • Args欄には、作成したMCPサーバースクリプト(例:server.py)を指定

すべての必要な項目を入力・選択してから「Connect」ボタンを押下します。

5a1f476bae56bc5a018f-2.png

接続がうまくいくと、
GUI上からMCPサーバーに登録された各ツールを確認・実行することができます。

Inspectorでのツール動作確認手順

「Tools」タブを選択
 Inspector画面中央上部のメニューから「Tools」タブをクリックします。

「List Tools」をクリック
 「List Tools」ボタンを押すと、サーバーに登録されているツール(例:add、subtractなど)が一覧表示されます。

ツールを選択
 一覧から実行したいツール(例:add)をクリックします。
 すると、画面右側にそのツールの詳細情報と入力フォームが表示されます。

入力値の設定
 ツールの説明や必要な入力項目(例:a, b)が自動で表示されるので、フォームに任意の値(例:a=5, b=7)を入力します。

ツールの実行
 「Run Tool」ボタンを押してツールを実行します。

レスポンスの確認
 ツールがサーバーで実行された結果(例:{"result": 12} など)が、画面下部や右側に表示されます。
 もしエラーが発生した場合も、そのメッセージや詳細が同じ画面上で確認できます。

まとめ

本記事では、Python製MCPサーバーをSTDIO方式で構築し、MCP Inspectorを使ってツールの動作確認を行う基本的な手順を解説しました。

仮想環境の準備から、サンプルサーバーの実装、Inspectorによるツール疎通チェックまで、一連の流れを実践的に整理しています。
この手順を踏むことで、独自ツールのAPI化やローカル検証がスムーズに行えるようになります。

STDIO方式やInspectorによるテストは、MCPの基礎理解やプロトタイプ開発の段階で非常に有効です。
今後は、より実践的な運用や他クライアント(例:Claude Desktop)との連携など、応用シナリオにも展開できます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?