二馬力生成AIをMCPサーバーで簡単実装（Claude x ChatGPT)

#### 二馬力生成AIをMCPサーバーで簡単実装（Claude x ChatGPT)
![ChatGPT Image 2025年6月17日 13_42_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430586/186140b9-eb65-47fc-ab1d-9ef0cbfff7c1.png)


Claude Desktop上のMCPサーバーで、ChatGPTのMCPサーバー作り、ClaudeとChatGPTが二馬力で働けるようにした。
このような実装はDifyやN8Nなどのエージェント構築用のクラウドサービスを使ってもできるが、Claude＋MCPで、クラウドエージェントサーバー使わなくても簡単にできたので紹介する。

（本記事はqiitaの

https://qiita.com/quittardis/items/a6e23d9989269eebb339

などを前提にしています。）


#### uvを使って直接MCPライブラリをインストールしてプロジェクトを作成
```
uv init MCP-server-chatGPT
cd MCP-server-chatGPT
uv add "mcp[cli]"

uc add openai
```

とします。そしていつものようにserver.pyにコードを設定します。

### server.pyの設定
server.pyにMCPサーバ用のコードをコピー＆ペーストします。
コードは、ChatGPTと相談で作成したものです。
↓詳細をクリックすると、コードが展開します。
<details>

```python
from mcp.server.fastmcp import FastMCP
import json
import os
from datetime import datetime
from openai import OpenAI

# MCPサーバーを初期化
mcp = FastMCP("ChatGPTServer")

# OpenAI クライアントを初期化（APIキーを直接指定）
client = OpenAI(
    api_key="#ここにOpenAIのキーを入れます"
)

@mcp.tool()
def chat_with_gpt(message: str, model: str = "gpt-3.5-turbo") -> str:
    """ChatGPTと会話する"""
    try:
        response = client.chat.completions.create(
            model=model,
            messages=[
                {"role": "user", "content": message}
            ],
            max_tokens=1000,
            temperature=0.7
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"エラーが発生しました: {str(e)}"

@mcp.tool()
def chat_with_context(messages: list, model: str = "gpt-3.5-turbo") -> str:
    """会話履歴を含めてChatGPTと会話する"""
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            max_tokens=1000,
            temperature=0.7
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"エラーが発生しました: {str(e)}"

@mcp.tool()
def get_available_models() -> list:
    """利用可能なOpenAIモデルの一覧を取得"""
    try:
        models = client.models.list()
        gpt_models = [model.id for model in models.data if 'gpt' in model.id.lower()]
        return sorted(gpt_models)
    except Exception as e:
        return [f"エラー: {str(e)}"]

@mcp.tool()
def translate_text(text: str, target_language: str = "日本語") -> str:
    """テキストを指定した言語に翻訳する"""
    try:
        prompt = f"以下のテキストを{target_language}に翻訳してください：\n\n{text}"
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "user", "content": prompt}
            ],
            max_tokens=1000,
            temperature=0.3
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"翻訳エラー: {str(e)}"

@mcp.tool()
def summarize_text(text: str, max_length: int = 200) -> str:
    """テキストを要約する"""
    try:
        prompt = f"以下のテキストを{max_length}文字以内で要約してください：\n\n{text}"
        response = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "user", "content": prompt}
            ],
            max_tokens=500,
            temperature=0.5
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"要約エラー: {str(e)}"

@mcp.resource("info://server")
def get_server_info() -> str:
    """このMCPサーバーの情報を取得"""
    return json.dumps({
        "name": "ChatGPTServer",
        "version": "1.0.0",
        "description": "OpenAI APIを使用してChatGPTと会話するためのMCPサーバー",
        "tools": [
            "chat_with_gpt",
            "chat_with_context",
            "get_available_models",
            "translate_text",
            "summarize_text"
        ],
        "requirements": [
            "OPENAI_API_KEY環境変数の設定が必要"
        ]
    }, indent=2, ensure_ascii=False)

@mcp.resource("usage://examples")
def get_usage_examples() -> str:
    """使用例を取得"""
    examples = {
        "基本的な会話": {
            "tool": "chat_with_gpt",
            "example": "こんにちは、今日の天気について教えて"
        },
        "会話履歴付き": {
            "tool": "chat_with_context",
            "example": [
                {"role": "user", "content": "私の名前はタロウです"},
                {"role": "assistant", "content": "こんにちは、タロウさん！"},
                {"role": "user", "content": "私の名前を覚えていますか？"}
            ]
        },
        "翻訳": {
            "tool": "translate_text",
            "example": "Hello, how are you today?"
        },
        "要約": {
            "tool": "summarize_text",
            "example": "長いテキストをここに入力..."
        }
    }
    return json.dumps(examples, indent=2, ensure_ascii=False)

if __name__ == "__main__":
    mcp.run(transport="stdio")

```
</details>

そして、claude_desktop_config.jsonに以下のコードを
設定します

```
 "MCP-server-chatGPT": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/#ユーザー名/MCP-server-chatGPT",
        "run",
        "server.py"
      ]
    }
```

これで、Claude Desktopをちゃんと終了し、再起動するとChatGPTと繋がります。

以下二人の会話

### (僕）ChatGPTに挨拶して、その返事を表示して
```
ChatGPTに挨拶してみますね。

chat_with_gpt

ChatGPTからの返事です：

「はい、元気です！ありがとうございます。お返事いただき、ありがとうございます。お話しましょう！何かお手伝いできることはありますか？」

ChatGPTはとても親しみやすい調子で返事をしてくれました。何か特定の話題でChatGPTと会話したいことがあれば、お聞かせください。
```
(chat_with_gpt)のところは、「ChatGPTの返事もちゃんと表示して」と指示すれば、表示されます。

#### (僕）両者で最近のAIの動向を話しあって何が最も注目すべきか意見の一致するところを教えて

```

両者で最近のAIの動向を話しあって何が最も注目すべきか意見の一致するところを教えて

ChatGPTと最近のAIの動向について話し合ってみますね。

chat_with_gpt

続けて、より具体的な議論を進めてみます。

chat_with_gpt

さらに詳しく意見を交換してみます。

chat_with_gpt

ChatGPTとの議論結果：最も注目すべきAI動向
ChatGPTとの議論を通じて、私たちが最も注目すべき点として意見が一致したのは：
🎯 「責任あるAI開発」の重要性
具体的には以下の要素が重要であることで合意しました：
技術面での重要動向：

AIエージェントの実用化 - 最も社会的インパクトが大きい
マルチモーダルAIの進歩
推論能力の大幅向上

社会面での重要課題：

AI安全性と倫理への配慮
意思決定プロセスの透明性確保
雇用や社会格差への影響対策

💡 共通結論
2025年以降のAI業界において最も重要なのは、技術的進歩と社会的責任のバランスです。AIエージェントの自律化やマルチモーダル処理の高度化といった革新的技術を追求しながら、同時に透明性、公平性、安全性を確保する「責任あるAI開発」のアプローチが、AI業界の持続可能な成長の鍵となることで完全に意見が一致しました。
ChatGPTも私も、技術の進歩だけでなく、その社会への適切な統合が最重要課題だと認識している点が印象的でした。

```

# 俳句しりとり - ClaudeとChatGPTの共作

## ルール
- 一人が俳句を詠む
- 次の人はその俳句の最後の五文字を、自分の俳句の最初の五文字として使う
- これを交互に繰り返す

---

## 俳句の流れ

### 第1句（Claude）
```
春の風
桜散りゆく
夕暮れに
```

### 第2句（ChatGPT）
```
夕暮れに
月が昇るや
夜の香り
```

### 第3句（Claude）
```
夜の香り
蛍舞い踊る
水辺かな
```

### 第4句（ChatGPT）
```
水辺かな
波音が聞こえ
夏の夜
```

### 第5句（Claude）
```
夏の夜に
星座を眺め
夢見つつ
```

### 第6句（ChatGPT）
```
夢見つつも
未来への道を
歩み続け
```

---

## 作品の特徴

この俳句しりとりは、春から夏への季節の移ろいと、夕暮れから夜、そして未来への希望という時間の流れを美しく表現した共作となりました。

- **季節感**: 春（桜）→ 夏（蛍、夏の夜）
- **時間の流れ**: 夕暮れ → 夜 → 未来
- **自然の美**: 桜、月、蛍、星座、水辺
- **情感**: 散りゆく美しさから未来への希望へ

---

*作成日: 2025年6月17日*  
*作者: Claude (Anthropic) & ChatGPT (OpenAI)*