以下の内容はhttps://thinkami.hatenablog.com/entry/2025/04/01/000255より取得しました。


MCP Python SDK を使って、echoするだけのMCPサーバを作ってみた

前回、 Figma-Context-MCP を使ってFigmaのデータからReactアプリを作りました。
Cline + Figma-Context-MCP にて、Figmaのデザインを元にReactアプリを作ってみた - メモ的な思考的な

次は自分でもMCPサーバを作ってみたいと考えました。そこで、Model Context Protocol (MCP)のドキュメントを読んだところ、For Server DevelopersページにMCPサーバの開発方法が記載されていました。また、https://api.weather.gov にアクセスしてデータを取得するサンプルも紹介されていました。
For Server Developers - Model Context Protocol

そこで、もう少し簡単なものとしてechoするだけのMCPサーバを作ってみたことから、メモを残します。

 
目次

 

環境

  • Windows 11
  • Python 3.13.2
  • uv 0.6.11
  • mcp 1.6.0
  • Cline 3.8.4
    • MCPクライアントとして利用
    • モデルは Gemini 2.5 Pro exp 0325
  • ターミナルはGit Bash
    • Windows版のGitに付属していたもの

 

環境構築

今回はWindows11上でMCPサーバを作るため、Python環境を構築します。

MCPのドキュメントによると uv で環境構築をしていたことから、今回は uv を使って環境構築します。

uv をインストールするためドキュメントを読むと、いくつかの方法でインストールできそうでした。今回は WinGet を使ってインストールします。

$ winget install --id=astral-sh.uv  -e

 
あとはMCPのドキュメント通りに環境を構築します。なお、今回はechoするだけなので、 uv add するのは mcp だけにします。

# echo_pyプロジェクトを作成
$ uv init echo_py


# プロジェクトディレクトリへ移動
$ cd echo_py/


# venvを使って仮想環境を作成
$ uv venv
Using CPython 3.13.2
Creating virtual environment at: .venv
Activate with: source .venv/Scripts/activate


# Git Bashなので、 source を使ってactivate
$ source .venv/Scripts/activate
(ringo_mcp_py)


# mcpをインストール
$ uv add mcp[cli]

 

MCPサーバを作る

事前検討

実装する機能について

MCP Python SDKのREADMEによると、

  • Resources
  • Tools
  • Prompts

の各機能を実装すれば良さそうでした。
https://github.com/modelcontextprotocol/python-sdk?tab=readme-ov-file#what-is-mcp

Python SDKのREADMEを読み進めたところ、 Echo Server のサンプルが掲載されていました。
https://github.com/modelcontextprotocol/python-sdk?tab=readme-ov-file#echo-server

このサンプルは

  • Resources
  • Tools
  • Prompts

のいずれも実装していました。

ただ今回は簡単な実装とするため、MCPのドキュメントのように Tools だけを用意することにしました。MCPPython SDK によると、 Tools@mcp_tool デコレータを使えば良さそうでした。
https://github.com/modelcontextprotocol/python-sdk?tab=readme-ov-file#tools

 

実装するTransportについて

MCPドキュメントでは Transport Type について

  • Standard Input/Output (stdio)
  • Server-Sent Events (SSE)

の2つが紹介されていました。
https://modelcontextprotocol.io/docs/concepts/transports#built-in-transport-types

また、2025-03-26のspecificationを見たところ、SSEの代わりに Streamable HTTP が採用されるとのことでした。

 
次に、Python SDKでの FastMCP の実装を見たところ、

と分かりました。
https://github.com/modelcontextprotocol/python-sdk/blob/v1.6.0/src/mcp/server/fastmcp/server.py#L148

 

実装

今回は簡単なMCPサーバとするため、以下の方針としました。

  • 機能は Tools のみ
  • Transportは Standard Input/Output (stdio)

実装はこちらです。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("echo server")

@mcp.tool()
def echo_message(message: str) -> str:
    return f"Response: {message}"

if __name__ == "__main__":
    mcp.run(transport='stdio')

 

動作確認

Clineから作成したechoするだけのMCPサーバを扱えることを確認します。

まずは、作成したMCPサーバを起動します。起動した後ターミナルには何も表示されませんが、問題ありません。

$ uv run main.py

 
続いて、Clineの cline_mcp_settings.json に今回のMCPサーバを追加します。今回はWindows環境なので、以下の点に注意します。

{
  "mcpServers": {
    "echo server": {
      "command": "C:\\Users\\<UserName>\\AppData\\Local\\Microsoft\\WinGet\\Packages\\astral-sh.uv_Microsoft.Winget.Source_***\\uv",
      "args": [
        "--directory",
        "C:\\path\\to\\echo_py",
        "run",
        "main.py"
      ],
      "disabled": false,
      "autoApprove": []
    }
  }
}

 
設定が終わり接続ができると、Clineの MCP Servers にある Installed には以下のように表示されます。

 
準備ができたので、動作確認します。

Clineにプロンプトを渡します。

MCPサーバである echo server は認識できていますか?

 
すると返事がありました。

はい、echo server は接続済みとして認識しとるで。echo_message いうツールが利用可能や。

 
使い方について聞いてみます。

echo_message ツールを使うにはどうしたら良いですか?

 

echo_message ツールを使うには、use_mcp_tool いうツールを使うんや。 具体的には、こんな感じで使うで。

と返事があり、以下のような感じで承認を求めてきました。

 
承認すると、以下のようにレスポンスが返ってきたようでした。

 
さらに追加で問いかけがありました。

 
Hello, world! と返事をしたところ、 echo_message ツールを使ってエコーしたことを確認できました。

 
echoするだけのMCPサーバが完成しました。

 

ソースコード

GitHubに上げました。
https://github.com/thinkAmi-sandbox/echo_mcp_python_server-example

プルリクはこちら。
https://github.com/thinkAmi-sandbox/echo_mcp_python_server-example/pull/1




以上の内容はhttps://thinkami.hatenablog.com/entry/2025/04/01/000255より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14