はじめに
「MCP を OpenAI Agents SDK で使う」といことを軽く試してみて、以下の記事を書いていました。
●MCP を OpenAI Agents SDK で軽く試してみた時のメモ: OpenAI の SDK で エージェント + MCP - Qiita
https://qiita.com/youtoy/items/13f5038ef45ce6763926
上記は公式のサンプルを試したものだったのですが、「MCP を OpenAI Agents SDK で使う」という話について、他に気になる内容がありました。それは上記の記事の最後の部分に掲載しているのですが、今回はその内容を試してみます。
今回のもとになるもの
今回の OpenAI Agents SDK を使ったお試しで、もとにする内容は以下となります。
具体的なコードは、以下のとおりです。
●tegnike/openai-agents-sdk-mcp
https://github.com/tegnike/openai-agents-sdk-mcp
import asyncio
import os
from agents import Agent
from agents import Runner
from agents.mcp import MCPServerStdio
from dotenv import load_dotenv
# .envファイルを読み込む
load_dotenv()
async def main():
async with MCPServerStdio(
params={
"command": "npx", # Linux環境用
# "command": "/Users/user/.volta/bin/npx", # MacOS環境用(volta利用時)
# "command": "C:\\Program Files\\nodejs\\npx.cmd", # Windows環境用
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {"BRAVE_API_KEY": os.getenv("BRAVE_API_KEY")},
}
) as server:
# サーバーからツールリストを取得
await server.list_tools()
# Agentの作成とMCPサーバーの設定
agent = Agent(
name="検索アシスタント",
instructions="あなたは検索アシスタントです。ユーザーの質問に対して、"
"Brave検索を使用して情報を調査し、日本語で分かりやすく回答してください。"
"情報源も明記してください。",
mcp_servers=[server],
)
# Agentの実行例
result = await Runner.run(
agent, "2025年にされたOpenAIの発表について教えて下さい"
)
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
上記について、MCPサーバーを別のものにしてみたり、その変更と合わせてコードも修正してみたりしようと思います。
実際に試していく
実際にお試しを進めていきます。
環境の下準備
まずは環境の準備の話です。
補足
今回の内容を進めるにあたり、npxコマンドが使えるようにしておいてください(自分の環境ではよく Node.js を使っているので、npxコマンドは既に利用可能な状態でした)。
それと、環境変数「OPENAI_API_KEY」に OpenAI の APIキーを設定しておきます。自分の場合は、一時的に APIキーが設定されれば良かったので、zsh で以下のコマンドを実行して APIキーを設定しました。
export OPENAI_API_KEY=【OpenAI の APIキー】
仮想環境を用意
Python で仮想環境を作ります。自分の環境(Mac)では、以下のコマンドで準備しました。
python -m venv myenv
source myenv/bin/activate
パッケージのインストール
仮想環境内で、パッケージをインストールします。
コマンドは、以下の公式情報に書かれたものを使います。
●OpenAI Agents SDK
https://openai.github.io/openai-agents-python/
以下にテキストでも掲載しておきます。
pip install openai-agents
処理を試す
下準備はできたので、コードを用意します。
Python のコード
今回用いる Python のコードは以下としました。
import asyncio
import os
from agents import Agent
from agents import Runner
from agents.mcp import MCPServerStdio
async def main():
samples_dir = os.path.dirname(os.path.abspath(__file__))
async with MCPServerStdio(
params={
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", samples_dir],
}
) as server:
await server.list_tools()
# Agentの作成とMCPサーバーの設定
agent = Agent(
name="ファイルシステムエージェント",
instructions="あなたはファイルシステムを扱うアシスタントです。"
"指定されたフォルダにあるテキストファイルをもとに、ユーザーの依頼に対応してください",
mcp_servers=[server],
)
# Agentの実行例
result = await Runner.run(
agent, "textフォルダを作成し、さらにそのフォルダ内にsample.txtという名前のファイルを作成した上で、'Hello, World!'と書き込んでください。"
)
print(result.final_output)
if __name__ == "__main__":
asyncio.run(main())
MCPサーバーは Filesystem MCP Server を使ったものに変更しました。また、Filesystem MCP Server でファイル・フォルダを扱う許可をしたパスは、Python のコードのファイルが置かれた場所(コード中の「samples_dir
」で指定したもの)にしています。
エージェントの動作は「フォルダ samples_dir
で指定したフォルダにあるテキストファイルをもとに、ユーザーの依頼に対応する」という内容を指定しました。
また、エージェントに依頼する内容は「textフォルダを作成して、そのフォルダ内に 'Hello, World!' と書き込んだ sample.txt という名前のファイルを作成する」というものにしています。
動作させた結果
上記を動作させた結果は、以下のとおりです。
エージェントから「textフォルダを作成して、そのフォルダ内に 'Hello, World!' と書き込んだ sample.txt という名前のファイルを作成する」という処理を実行した、という返答が得られています。
実際に Python のコードのファイルを置いた場所で、フォルダ・ファイルが作成されているかを確認してみたところ、以下のように意図通りの処理が行われていたことが確認できました。