OpenAI Integration with MCP について
OpenAIが回答時にMCPサーバーのツールを利用するための統合例です。ナレッジベースのツールに接続し、OpenAIとサーバー間でツール呼び出しと結果を受け渡します。
主な機能
- 01ナレッジベース検索ツールの公開
- 02MCPツールをOpenAI関数に変換
- 03ツール呼び出しをMCPサーバーへ転送
- 04ツール結果をOpenAIに返却
活用シーン
- 01社内ポリシーのQ&Aを使った回答
- 02OpenAIの回答とバックエンドデータの連携
- 03モデル統合とバックエンド実装の分離
MCP 対応
サンプルサーバーは `get_knowledge_base` ツールを公開し、クライアントはSSEで接続してMCPツールをOpenAIの関数呼び出しに変換します。クライアントがツールを実行し、結果をOpenAIに返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP と OpenAI の連携
このセクションでは、Model Context Protocol(MCP)を OpenAI の API と連携させ、OpenAI が MCP サーバーから提供されるツールにアクセスして利用できるシステムを作成する方法を紹介します。
概要
この例では、次の方法を紹介します。
- ナレッジベースツールを公開する MCP サーバーを作成する
- OpenAI をこの MCP サーバーに接続する
- ユーザーのクエリに応答する際、OpenAI がツールを動的に利用できるようにする
接続方法
この例では、クライアントとサーバー間の通信に sse transport を使用します。つまり、
- クライアントとサーバーは別々のプロセスで実行されます
データフローの説明
- ユーザークエリ:ユーザーがシステムにクエリを送信します(例:「当社の休暇ポリシーを教えてください」)
- OpenAI API:OpenAI がクエリと MCP サーバーから利用できるツールを受け取ります
- ツールの選択:OpenAI がクエリに基づいて使用するツールを決定します
- MCP クライアント:クライアントが OpenAI のツール呼び出しリクエストを受け取り、MCP サーバーに転送します
- MCP サーバー:サーバーが要求されたツールを実行します(例:ナレッジベースデータの取得)
- 応答フロー:ツールの結果が MCP クライアントを経由して OpenAI に返されます
- 最終応答:OpenAI がツールのデータを取り込んだ最終応答を生成します
OpenAI によるツールの実行方法
OpenAI の関数呼び出しの仕組みは、次の手順で MCP ツールと連携します。
- ツールの登録:MCP クライアントが MCP ツールを OpenAI の関数形式に変換します
- ツールの選択:OpenAI がユーザークエリに基づいて使用するツールを決定します
- ツールの実行:MCP クライアントが選択されたツールを実行し、結果を返します
- コンテキストの統合:OpenAI がツールの結果を応答に取り込みます
MCP の役割
MCP は、AI モデルとバックエンドシステムをつなぐ標準化されたブリッジとして機能します。
- 標準化:MCP は、AI モデルがツールと連携するための一貫したインターフェースを提供します
- 抽象化:MCP はバックエンドシステムの複雑さを抽象化します
- セキュリティ:MCP によって、AI モデルに公開するツールやデータを正確に制御できます
- 柔軟性:AI との連携を変更せずに、バックエンドの実装を変更できます
実装の詳細
サーバー(server.py)
MCP サーバーは、JSON ファイルから Q&A のペアを取得する get_knowledge_base ツールを公開します。
クライアント(client.py)
クライアントは次の処理を行います。
- MCP サーバーに接続する
- MCP ツールを OpenAI の関数形式に変換する
- OpenAI と MCP サーバー間の通信を処理する
- ツールの結果を処理し、最終応答を生成する
ナレッジベース(data/kb.json)
MCP サーバー経由でクエリできる、会社のポリシーに関する Q&A のペアが含まれています。
例の実行
サーバー
docker build -t ashujss11/mcp-server .
docker run -p 8050:8050 -d --name mcp-server ashujss11/mcp-server
- 必要な依存関係がインストールされていることを確認します
.envファイルに OpenAI API キーを設定します- クライアントを実行します:
python client.py
注:この例で使用している stdio transport では、クライアントがサーバーを自動的に起動するため、サーバーを別途実行する必要はありません。
応答
Initialized SSE client...
Listing tools...
Connected to server with tools: ['get_knowledge_base']
Query: What is our company's vacation policy?
-------START AI Message-------
[
{
'role': 'user',
'content': "What is our company's vacation policy?"
},
ChatCompletionMessage(content=None,
refusal=None,
role='assistant',
annotations=[
],
audio=None,
function_call=None,
tool_calls=[
ChatCompletionMessageToolCall(id='call_OrCTQBx5Xhsubq2eXge662aU',
function=Function(arguments='{}',
name='get_knowledge_base'),
type='function')
]),
{
'role': 'tool',
'tool_call_id': 'call_OrCTQBx5Xhsubq2eXge662aU',
'content': "Here is the retrieved knowledge base:\n\nQ1: What is our company's vacation policy?\nA1: Full-time employees are entitled to 20 paid vacation days per year. Vacation days can be taken after completing 6 months of employment. Unused vacation days can be carried over to the next year up to a maximum of 5 days. Vacation requests should be submitted at least 2 weeks in advance through the HR portal.\n\nQ2: How do I request a new software license?\nA2: To request a new software license, please submit a ticket through the IT Service Desk portal. Include the software name, version, and business justification. Standard software licenses are typically approved within 2 business days. For specialized software, approval may take up to 5 business days and may require department head approval.\n\nQ3: What is our remote work policy?\nA3: Our company follows a hybrid work model. Employees can work remotely up to 3 days per week. Remote work days must be coordinated with your team and approved by your direct manager. All remote work requires a stable internet connection and a dedicated workspace. Core collaboration hours are 10:00 AM to 3:00 PM EST.\n\nQ4: How do I submit an expense report?\nA4: Expense reports should be submitted through the company's expense management system. Include all receipts, categorize expenses appropriately, and add a brief description for each entry. Reports must be submitted within 30 days of the expense. For expenses over $100, additional documentation may be required. All reports require manager approval.\n\nQ5: What is our process for reporting a security incident?\nA5: If you discover a security incident, immediately contact the Security Team at [email protected] or call the 24/7 security hotline. Do not attempt to investigate or resolve the incident yourself. Document what you observed, including timestamps and affected systems. The Security Team will guide you through the incident response process and may need your assistance for investigation.\n\n"
}
]
-------END AI Message-------
Response: Our company's vacation policy is as follows:
- Full-time employees are entitled to 20 paid vacation days per year.
- Vacation days can be taken after completing 6 months of employment.
- Unused vacation days can be carried over to the next year, with a maximum carryover of 5 days.
- Vacation requests should be submitted at least 2 weeks in advance through the HR portal.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。