AIエージェント で MCP： OpenAI Agents SDK を使ったお試し【その2】

## はじめに

「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](https://openai.github.io/openai-agents-python/) を使ったお試しで、もとにする内容は以下となります。


https://x.com/tegnike/status/1905028022203240931

具体的なコードは、以下のとおりです。

●tegnike/openai-agents-sdk-mcp
 https://github.com/tegnike/openai-agents-sdk-mcp

```python
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キーを設定しました。

```zsh
export OPENAI_API_KEY=【OpenAI の APIキー】
```

#### 仮想環境を用意

Python で仮想環境を作ります。自分の環境（Mac）では、以下のコマンドで準備しました。

```zsh
python -m venv myenv
source myenv/bin/activate
```

#### パッケージのインストール

仮想環境内で、パッケージをインストールします。
コマンドは、以下の公式情報に書かれたものを使います。

●OpenAI Agents SDK
　https://openai.github.io/openai-agents-python/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/1e0d2b55-39bf-47d8-b0a7-542691b04269.png)

以下にテキストでも掲載しておきます。

```zsh
pip install openai-agents
```


### 処理を試す

下準備はできたので、コードを用意します。

#### Python のコード

今回用いる 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](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) を使ったものに変更しました。また、Filesystem MCP Server でファイル・フォルダを扱う許可をしたパスは、Python のコードのファイルが置かれた場所（コード中の「`samples_dir`」で指定したもの）にしています。

エージェントの動作は「フォルダ `samples_dir` で指定したフォルダにあるテキストファイルをもとに、ユーザーの依頼に対応する」という内容を指定しました。

また、エージェントに依頼する内容は「textフォルダを作成して、そのフォルダ内に 'Hello, World!' と書き込んだ sample.txt という名前のファイルを作成する」というものにしています。

#### 動作させた結果

上記を動作させた結果は、以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/81bf46fb-6bb6-4bbd-95ae-26b171c4abb6.png)

エージェントから「textフォルダを作成して、そのフォルダ内に 'Hello, World!' と書き込んだ sample.txt という名前のファイルを作成する」という処理を実行した、という返答が得られています。

実際に Python のコードのファイルを置いた場所で、フォルダ・ファイルが作成されているかを確認してみたところ、以下のように意図通りの処理が行われていたことが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/621d81fc-9b63-4ca2-815e-f79f12ab4109.png)