Skip to main content
Glama
northfieldzz

Python MCP Server Blueprint

by northfieldzz
README.md
# Python MCP Server Blueprint

`uv` と `ruff` を使用した、Python製 Model Context Protocol (MCP) サーバーのテンプレートプロジェクト。
フレームワークとして、Anthropic公式の直感的な高レベルAPIである **FastMCP** を採用している。

## 機能・特徴

- **FastMCP**: 最小限のコードで MCP Tool, Resource, Prompt を定義可能。
- **uv**: 高速なパッケージマネージャーによる依存関係管理と仮想環境構築。
- **ruff**: 超高速なリンター&フォーマッターによるコード品質管理。

## 開発の準備

### 1. 依存関係のインストール

プロジェクトルートディレクトリで以下のコマンドを実行し、仮想環境の構築と依存関係の同期を行う。

```bash
uv sync
```

## コード品質の維持 (Ruff)

### コードの静的解析 (Lint)

```bash
uv run ruff check .
```

自動修正を実行する場合:

```bash
uv run ruff check --fix .
```

### コードのフォーマット

```bash
uv run ruff format .
```

## サーバーの起動

標準入出力 (stdio) モードでサーバーを起動する。

```bash
uv run python-mcp-server
```

## ビルドとクリーンアップ

### パッケージのビルド

配布用パッケージ(WheelおよびSdist)をビルドする。

```bash
uv build
```

### プロジェクトのクリーンアップ

ビルド生成物(`dist/`, `build/`)、パッケージ情報(`*.egg-info`)、キャッシュファイル(`__pycache__`, `.ruff_cache`)を削除する。

```bash
uv run clean-project
```

---

## MCP クライアントへの登録例 (Claude Desktop)

Claude Desktop でこのサーバーを動作させるには、設定ファイル(通常は `%APPDATA%\Claude\claude_desktop_config.json`)に以下のように登録する。

```json
{
  "mcpServers": {
    "python-mcp-server-blueprint": {
      "command": "uv",
      "args": [
        "--directory",
        "D:\\Sources\\python_mcp_server_blueprint",
        "run",
        "python-mcp-server"
      ]
    }
  }
}
```

> [!IMPORTANT]
> `D:\\Sources\\python_mcp_server_blueprint` の部分は、実際のプロジェクトの絶対パスに合わせて修正すること。また、Windowsのパス区切り文字は `\\` にエスケープする必要がある。

---

## Docker / nerdctl での実行

プロジェクトをコンテナイメージとしてビルドし、実行することができる。

### 1. イメージのビルド

```bash
nerdctl build -t python-mcp-server-blueprint .
```

### 2. コンテナの起動

#### 標準入出力 (stdio) モードで起動する場合
標準入出力の対話が必要なため、インタラクティブモード(`-i`)を有効にして起動する。

```bash
nerdctl run -i --rm python-mcp-server-blueprint
```

#### SSE (HTTP) モードで起動する場合
ポート `8000` をフォワードし、ホストを `0.0.0.0` に指定して起動する。

```bash
nerdctl run -d -p 8000:8000 --name mcp-server python-mcp-server-blueprint --transport sse --host 0.0.0.0
```

### 3. 開発用コンテナ(ホットリロード対応)での起動

`Dockerfile` のマルチステージビルド機能を使用すると、ホスト側のソースコードの変更が自動的にコンテナ内へ反映され、サーバープロセスが自動再起動(ホットリロード)する開発用環境を構築できる。

#### 開発用イメージのビルド

`Dockerfile` の `development` ターゲットを指定してビルドする。

```bash
nerdctl build --target development -t python-mcp-server-blueprint-dev .
```

#### ボリュームマウントによるホットリロード起動

ホストの `src` ディレクトリをコンテナ内の `/app/src` にボリュームマウントして起動する。

```bash
nerdctl run -d -p 8000:8000 --name mcp-server-dev -v D:\Sources\python_mcp_server_blueprint\src:/app/src python-mcp-server-blueprint-dev
```

起動後、ホスト側の `src/` 配下のコードを書き換えるだけで、コンテナ内のサーバーが自動で再起動して即座に変更が反映される。

---

## Docker Compose での実行

`compose.yaml` を使用することで、ホットリロード有効の開発用コンテナをより簡単に起動・停止できる。

### 開発環境の起動 (ホットリロード有効)

```bash
# 起動 (初回は自動でビルドされる)
nerdctl compose up -d

# ログの確認 (ホットリロードのログ等)
nerdctl compose logs -f

# 停止
nerdctl compose down
```

- **Swagger UI**: `http://localhost:8000/docs`

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: one performs a numeric calculation, the other provides a greeting. There is no overlap or ambiguity between them.

Naming Consistency5/5

Both tool names follow the same verb_noun pattern (calculate_square, greet_user), making the naming consistent and predictable.

Tool Count3/5

With only two tools, the server feels thin for most purposes, though as a 'blueprint' it may be intentionally minimal. The count is borderline acceptable.

Completeness2/5

The two tools are unrelated and do not form a cohesive domain, leaving significant gaps for any real-world use case. There is no apparent lifecycle or broader coverage.

Maintenance

ActivitySlowing
ResponsivenessNo issues