はじめに
MCP (Model Context Protocol) は、AIエージェントが外部ツールやリソースにアクセスするための標準プロトコルです。
この記事では、Python 用の SDK を使って MCP サーバーを作成し、http でアクセスできる状態にしてみます。
プロジェクト構成
python-mcp-handson
├── Dockerfile
├── README.md
├── pyproject.toml
├── src
│ └── main.py
└── uv.lockセットアップ
uv で Python プロジェクトを作成し、MCP ライブラリを追加します。
mkdir python-mcp-handson
cd python-mcp-handson
uv init
uv add "mcp[cli]"サーバーの実装
src/main.py に MCP サーバーのコードを記述します。
ホストの設定以外は公式ドキュメントのサンプルコードとほぼ同じです。
from mcp.server.fastmcp import FastMCP
# Stateless server with JSON responses (recommended)
mcp = FastMCP(
"StatelessServer", stateless_http=True, json_response=True, host="0.0.0.0" # hostに0.0.0.0を指定して外部からアクセス可能にする
)
# Add a simple tool to demonstrate the server
@mcp.tool()
def greet(name: str = "World") -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
# Run server with streamable_http transport
if __name__ == "__main__":
mcp.run(transport="streamable-http")host="0.0.0.0" を指定することで、Docker コンテナ外部からアクセス可能になります。
Dockerfile
uv の公式イメージをベースに、依存関係をインストールしてサーバーを起動します。
FROM ghcr.io/astral-sh/uv:python3.14-alpine
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen
COPY src ./src
CMD ["uv", "run", "src/main.py"]ビルドと実行
イメージをビルドしてコンテナを起動します。
docker build -t python-mcp-handson .docker run --name python-mcp-handson --rm -p 8000:8000 python-mcp-handsonポート 8000 でサーバーが起動します。
GitHub Copilot Chat から利用する
任意のエージェントから MCP サーバーとして利用できますが、今回は Visual Studio Code の GitHub Copilot Chat からアクセスします。
プロジェクトルートに .vscode/mcp.json を作成して以下の内容を記述します。
{
"servers": {
"python-mcp-handson": {
"url": "http://localhost:8000/mcp",
"type": "http"
}
},
"inputs": []
}これで GitHub Copilot Chat から python-mcp-handson サーバーにアクセスできるようになります。
Copilot Chat のエージェントモードで greet ツールを呼び出すことで、サーバーの動作を確認できます。
まとめ
今回は Python で MCP サーバーを実装し、Docker コンテナとして起動して GitHub Copilot Chat から利用するまでの手順を紹介しました。
このサーバーをベースに、さらに複雑なツールや機能を追加していくことができます。
次回はこのサーバーを使って、実際のユースケースに基づいたツールの実装例を紹介していきます。


コメント