自作Claude Desktop MCP Service サーバーの最小構成を作ってみよう

## はじめに

このチュートリアルでは、OpenWeatherMap APIを使用して天気情報を提供するClaude Desktop MCPサーバーを作成します。MCPは、AIアシスタントに外部リソースやツールへのアクセスを提供するための新しいプロトコルです。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">Claude Desktop MCP で公式が出してるローカルの自作天気APIできた！！！<br>超しょぼい機能だけど作り方の大枠は体感できたのはデカい！！！ <a href="https://t.co/qelKrLJvPn">https://t.co/qelKrLJvPn</a> <a href="https://t.co/PRQpExb6vn">pic.twitter.com/PRQpExb6vn</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1862512257886036318?ref_src=twsrc%5Etfw">November 29, 2024</a></blockquote>


## 前提条件

- Python 3.12以上
- OpenWeatherMap APIのアカウントとAPIキー
- macOSまたはWindows
- uvツール


## 環境のセットアップ

### Pythonのバージョン確認

```bash
python --version  # 3.12以上であることを確認
```

### uvツールのインストール

macOSの場合：
```bash
brew install uv
uv --version  # 0.4.18以上であることを確認
```

Windowsの場合：
```bash
pip install uv
```

## プロジェクトの作成

### MCP Project Creatorを使用してプロジェクトを作成

```bash
uvx create-mcp-server --path weather_service
cd weather_service
```

### 追加の依存関係をインストール

```bash
uv add httpx python-dotenv
```

### 環境変数の設定

プロジェクトルートに`.env`ファイルを作成：

```
OPENWEATHER_API_KEY=your-api-key-here
```

## サーバーの実装

### コードの取得

最小構成のコードは[GitHub リポジトリ](https://github.com/Sunwood-ai-labs/mcp-weather-service-server/tree/mini)から入手できます。

`src/weather_service/server.py`と`src/weather_service/__init__.py`を上記リポジトリからコピーしてください。

### プロジェクト構造

最終的に以下のような構造になります：

```
weather_service/
├── src/
│   └── weather_service/
│       ├── __init__.py  # メインエントリーポイント
│       └── server.py    # サーバーの実装
├── pyproject.toml
├── .env                 # APIキーの設定
└── README.md
```

## Claude Desktopとの連携

### 設定ファイルの場所

- Windows: `%APPDATA%/Claude/claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`

### 設定の追加

`claude_desktop_config.json`に以下の設定を追加：

```json
{
  "mcpServers": {
    "weather": {
      "command": "uv",
      "args": [
        "--directory",
        "path/to/your/weather_service",  // プロジェクトのパスを指定
        "run",
        "weather-service"
      ],
      "env": {
        "OPENWEATHER_API_KEY": "your-api-key"  // OpenWeatherMap APIキー
      }
    }
  }
}
```

### Claudeの再起動

1. Claudeを完全に終了
2. Claudeを再起動
3. 🔌メニューでweatherサーバーが表示されることを確認

## 動作確認

### リソースの確認

Claudeで以下のURIを使用して天気情報にアクセス：

```
weather://London/current
```

### 天気予報の取得

get_forecastツールを使用して天気予報を取得：

```json
{
  "city": "Tokyo",
  "days": 3
}
```

## トラブルシューティング

### デバッグ用のMCP Inspector

MCPサーバーのデバッグには[MCP Inspector](https://github.com/modelcontextprotocol/inspector)が便利です：

```bash
npx @modelcontextprotocol/inspector uv --directory path/to/weather_service run weather-service
```


<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">Claude Desktop MCP でローカルの自作APIを登録②<br>なぜか動作がおかしいのでMCP Inspectorでデバッグ<br>デバッグのレベルが高すぎる感あるが、これは面白い！<br>API自体の挙動は安定してそう。。。<br>＊Inspectorは初ちゃんと動かした。。。 <a href="https://t.co/tx1VSnaTb9">https://t.co/tx1VSnaTb9</a> <a href="https://t.co/vp7XVK9XgS">pic.twitter.com/vp7XVK9XgS</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1862511120273350713?ref_src=twsrc%5Etfw">November 29, 2024</a></blockquote> 


## 参考リンク

- [完全なソースコード](https://github.com/Sunwood-ai-labs/mcp-weather-service-server/tree/mini)
- [OpenWeatherMap API](https://openweathermap.org/api)
- [MCP Documentation](https://github.com/modelcontextprotocol)

このチュートリアルで作成したMCPサーバーは、基本的な天気情報の取得と予報機能を提供します。この基本構成を元に、さらに機能を追加したり、異なるAPIを利用したりしてカスタマイズすることができます。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>