MCPサーバーを自作して理解する(Windows+VSCode+Python)
はじめに
MCPについてハッキリと理解できていないので、簡単なMCPサーバーを自作してMCPの動きを理解してみることにしました。
MCPとは
については、先人の方々が説明されているので割愛します。
今回は下記構成で実験をしてみました。
MCPクライアント : Visual Studio Code (Cursor、Claudeデスクトップでも動きました)
MCPサーバー : Pythonで自作
MCPサーバーの仕様は、受け取ったパラメーターを少し加工して返してくるだけです。
例えば山田太郎
と送ったらコンニチハ, 山田太郎!!!!
とだけ返してくる非常に簡単なMCPサーバーです。
イメージ
実行環境
- Windows11 Pro 23H2
- Visual Studio Code Ver 1.99.2
- GitHub Copilot Ver 1.301.0
- GitHub Copilot Chat Ver 0.26.3
- Python Ver 3.13.2
- uv Ver 0.6.12
準備
- Visual Studio Codeをインストールする
- 拡張機能
GitHub Copilot
とGitHub Copilot Chat
を追加する
- 拡張機能
- Pythonをインストールする
- uvコマンドをインストールする
uvコマンドのインストール
PowerShellから下記コマンドを実行する
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
プロジェクト作成
プロジェクト名をecho_hello
とします。
# プロジェクトの新規作成
uv init echo_hello
cd echo_hello
# Python仮想環境を使用
uv venv
.venv\Scripts\activate
# 依存関係をインストールする
uv add mcp[cli] httpx
# MCPサーバーのソースコード作成
new-item echo_hello.py
MCPサーバーをPythonで作成
ファイル : echo_hello.py
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# FastMCPサーバーの初期化
mcp = FastMCP("echo_hello")
# FastMCPサーバーが呼び出された時の処理
@mcp.tool()
async def echo_hello(name: str) -> str:
# 「コンニチハ、{プロンプトから渡された値}!!!!」と返すだけ
return f"コンニチハ, {name}!!!!"
if __name__ == "__main__":
# 初期化とサーバー実行
mcp.run(transport='stdio')
MCPサーバーの登録
ファイル:C:\Users\%USERPROFILE%\AppData\Roaming\Code\User\settings.json
※ディレクトリとファイル名は適宜修正してください。
~省略~
"mcp": {
"inputs": [],
"servers": {
"echo_hello": {
"command": "uv",
"args": [
"--directory",
"C:\\Workspace\\mcp\\mcp_server_demo\\echo_hello",
"run",
"echo_hello.py"
]
}
}
},
~省略~
MCPサーバーの登録 (図解)
※ GitHub Copilotのチャット入力エリアで質問する
からエージェント
に変更してください。
MCPサーバーの起動
MCPクライアントからMCPサーバーを呼び出してみる
GitHub Copilotのチャット欄にecho_hello 山田太郎
と入力して実行する
続行
と表示されたら、そのまま続行
をクリックする
実行結果
無事コンニチハ, 山田太郎!!!!
が返ってきました。
さいごに
実際に動かしてみて、MCPクライアントやMCPサーバーの流れが理解できました。
あとは色々なサービスが提供しているMCPサーバーの設定を追加していけば幅が広がりそうです。
また、CursorやClaudeデスクトップでも同じことができました。
MCPサーバーの設定を最後に書いておきます。
Cursor
ファイル : C:\Users\%USERPROFILE%\.cursor\mcp.json
{
"mcpServers": {
"echo_hello": {
"command": "uv",
"args": [
"--directory",
"C:\\Workspace\\mcp\\mcp_server_demo\\echo_hello",
"run",
"echo_hello.py"
]
}
}
}
Claudeデスクトップ
ファイル : C:\Users\%USERPROFILE%\AppData\Roaming\Claude\claude_desktop_config.json
{
"mcpServers": {
"echo_hello": {
"command": "uv",
"args": [
"--directory",
"C:\\Workspace\\mcp\\mcp_server_demo\\echo_hello",
"run",
"echo_hello.py"
]
}
}
}
Visual Studio Code
ファイル : C:\Users\%USERPROFILE%\AppData\Roaming\Code\User\settings.json
~省略~
"mcp": {
"inputs": [],
"servers": {
"echo_hello": {
"command": "uv",
"args": [
"--directory",
"C:\\Workspace\\mcp\\mcp_server_demo\\echo_hello",
"run",
"echo_hello.py"
]
}
}
},
~省略~
Discussion