「Model Context Protocol (MCP)」は、大規模言語モデル（LLM）と外部ツールの連携

### MCPサーバーの概念
MCPは、AIアシスタント（例えばClaudeなど）が外部システム（ファイル、API、データベースなど）と安全かつ標準化された方法で通信するための仕組みを提供します。以下が主な特徴です：
- **クライアント-サーバー構造**: MCPクライアント（AIモデル）がサーバーにリクエストを送り、サーバーが外部リソースにアクセスして応答を返す。
- **柔軟性**: 標準化されたプロトコルにより、異なるツールやモデル間での互換性が向上。
- **用途**: コードリポジトリの操作、ウェブ検索、データ処理など多岐にわたるタスクをAIに実行させることが可能。

MCPサーバーは、Pythonなどの言語で構築でき、ツールやリソースを定義してAIが利用できるようにします。

---

### MCPサーバーの構築方法
以下は、MCPサーバーをゼロから構築し、動作させる手順です。Pythonを使用し、シンプルな例を通じて説明します。

#### 1. 環境準備
- **必要条件**: Python 3.10以上がインストールされていることを確認。
- **仮想環境の作成**:
  1. ターミナルを開く。
  2. `python -m venv myenv` を実行して仮想環境を作成。
  3. `source myenv/bin/activate`（Mac/Linux）または `myenv\Scripts\activate`（Windows）で有効化。
- **依存関係のインストール**:
  - `pip install mcp` を実行してMCPライブラリをインストール。
  - 必要に応じて、`pip install langchain` や `pip install openai` などの追加パッケージをインストール。

#### 2. 基本的なMCPサーバーの構築
シンプルな「挨拶ツール」を提供するMCPサーバーを作成してみましょう。
- **コード例**:
  ```python
  from mcp.server import FastMCP

  # MCPサーバーを初期化
  app = FastMCP('greeting_server')

  # ツールを定義
  @app.tool('say_hello')
  async def say_hello(name: str) -> str:
      return f"こんにちは、{name}さん！"

  # サーバーを起動
  if __name__ == '__main__':
      app.run(transport='stdio')
  ```
- **説明**:
  - `FastMCP` でサーバーを初期化。
  - `@app.tool` デコレーターで「say_hello」というツールを定義。名前を受け取り、挨拶を返す。
  - `stdio` トランスポートを使用して標準入出力で通信。

#### 3. サーバーのデバッグとテスト
- **実行**:
  1. コードを `greeting_server.py` として保存。
  2. ターミナルで `python greeting_server.py` を実行。
- **動作確認**:
  - MCPクライアント（例: Claude Desktop）から「say_hello」を呼び出してテスト。
  - 入力例: `{"tool": "say_hello", "args": {"name": "太郎"}}`
  - 出力例: `"こんにちは、太郎さん！"`

#### 4. 高度な機能の追加
例えば、外部API（DeepSeekなど）と連携して天気情報を返すツールを追加できます。
- **コード例**:
  ```python
  from mcp.server import FastMCP
  import os
  from langchain_openai import ChatOpenAI

  app = FastMCP('weather_server')

  # 環境変数からAPIキーを取得
  model = ChatOpenAI(model="deepseek-chat", api_key=os.getenv("OPENAI_API_KEY"))

  @app.tool('get_weather')
  async def get_weather(city: str) -> str:
      response = model.invoke(f"{city}の今日の天気はどうですか？")
      return response.content

  if __name__ == '__main__':
      app.run(transport='stdio')
  ```
- **準備**:
  - `.env` ファイルに `OPENAI_API_KEY=your_key` を設定。
  - `pip install python-dotenv` で環境変数管理を追加。

---

### MCPサーバーの使い方
MCPサーバーを実際に活用する方法を以下にまとめます。

#### 1. Claude Desktopとの連携
- **設定ファイルの作成**:
  1. `claude_desktop_config.json` を作成。
  2. 以下のようにサーバーを登録:
     ```json
     {
       "mcpServers": {
         "greeting_server": {
           "command": "python",
           "args": ["path/to/greeting_server.py"]
         }
       }
     }
  ```
- **Claude起動**:
  - Claude Desktopを起動し、設定ファイルを読み込ませる。
  - チャットで「say_hello 太郎」と入力すると、サーバーが応答。

#### 2. 実践例: 图文生成アプリケーション
DeepSeekと連携して画像とテキストを生成する例です。
- **手順**:
  1. MCPサーバーに画像生成ツールを追加（例: `@app.tool('generate_image')`）。
  2. DeepSeekで生成したテキストを基に画像生成APIを呼び出し。
  3. Claude Desktop経由で「画像付きの挨拶を作って」とリクエスト。
- **ポイント**:
  - 外部API（例: Stable Diffusion）の統合が必要。
  - レスポンスをJSON形式で整形して返す。

#### 3. 注意点
- **セキュリティ**: ローカルで実行する場合はファイアウォール設定を確認。
- **デバッグ**: ログ出力を有効化（`app.run(debug=True)`）して問題を追跡。

---

### まとめ
MCPサーバーは、AIと外部リソースをつなぐ強力なツールです。基本的な構築から、外部APIとの連携、Claude Desktopでの実運用まで、ステップを追えば誰でも始められます。挨拶のようなシンプルなツールから、天気情報や画像生成のような高度な機能まで、用途に応じてカスタマイズ可能です。開発者にとって、MCPはAIアプリケーションの可能性を広げる鍵となるでしょう。