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

AIアシスタント

はじめに

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

前提条件

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

環境のセットアップ

Pythonのバージョン確認

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

uvツールのインストール

macOSの場合:

brew install uv
uv --version  # 0.4.18以上であることを確認

Windowsの場合:

pip install uv

プロジェクトの作成

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

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

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

uv add httpx python-dotenv

環境変数の設定

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

OPENWEATHER_API_KEY=your-api-key-here

サーバーの実装

コードの取得

最小構成のコードはGitHub リポジトリから入手できます。

src/weather_service/server.pysrc/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に以下の設定を追加:

{
  "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ツールを使用して天気予報を取得:

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

トラブルシューティング

デバッグ用のMCP Inspector

MCPサーバーのデバッグにはMCP Inspectorが便利です:

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

参考リンク

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

コメント

タイトルとURLをコピーしました