0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AutoGen で Filesystem MCP Server を使ってローカルのファイルを触ってみた

Posted at

はじめに

この記事に含まれる内容

  • AutoGen から MCP Server にアクセスするためのコード例
    • Filesystem MCP を利用

サンプルコード

以下のリポジトリに、今回作ったサンプルコードを共有しました。

AutoGen とは?

AutoGen は、Microsoft が OSS で公開している、自律的に動作したり、人間と一緒に作業したりできるマルチエージェント AI アプリケーションを作成するためのフレームワークです。

詳細は以下のドキュメントをご覧ください。

MCP とは?

MCP (Model Context Protocol) は Anthropic が提唱した、アプリケーションがLLMにコンテキストを提供する方法を標準化するオープンプロトコルです。

以下のドキュメントからたどれる先が公式かと思いますので、まずはここらへんを読んでみると良いでしょう。

手順

事前準備

Windows 環境で AutoGen から Filesystem MCP Server を使うには、以下のセットアップが必要です。

  • Python 3.x
  • Docker Desktop

また、Python のコーディングも行うので、Visual Studio Code もセットアップしましょう。

Filesystem MCP Server をセットアップ

基本的には以下のドキュメントの通りです。

今回は、Docker 経由で MCP を使うので、まずは Docker Container のビルドから。

docker build -t mcp/filesystem -f src/filesystem/Dockerfile .

Python の仮想環境を作成

venv で仮想環境を作ってアクティベートしましょう。

python -m venv .venv
.venv\Scripts\activate

必要なパッケージのインストール

以下のパッケージを pip でインストールします。

pip install -U "autogen-agentchat" "autogen-ext[openai,azure]"
pip install -U "autogen-ext[mcp]"
pip install python-dotenv
pip install pathlib

.venv の準備

以下のテンプレートに従って、.venv ファイルを作ります。
それぞれのプレースホルダーにはいい感じに Azure OpenAI の設定を行ってください。

.env
AZURE_OPENAI_DEPLOYMENT=your_deployment_name  
AZURE_OPENAI_API_KEY=your_api_key  
AZURE_OPENAI_ENDPOINT=your_endpoint_url  
AZURE_OPENAI_API_VERSION=your_api_version  
AZURE_OPENAI_MODEL=your_model_name 

AutoGen から Filesystem MCP を使うサンプルコード

VS Code で任意の Python ファイルを作って、以下のコードをコピーします。

main.py
import asyncio
import os
from dotenv import load_dotenv
from pathlib import Path
from autogen_ext.models.openai import AzureOpenAIChatCompletionClient
from autogen_ext.tools.mcp import StdioServerParams, mcp_server_tools
from autogen_agentchat.agents import AssistantAgent
from autogen_core import CancellationToken

# read environment variables from .env file
load_dotenv()

model_client = AzureOpenAIChatCompletionClient(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT"),
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
    model=os.getenv("AZURE_OPENAI_MODEL"),
)


# main function to run the agent
async def main() -> None:
    # Set up the MCP server parameters
    # mcp/filesystem is a docker image that runs a filesystem server
    # It mounts the D:/mcpdir directory to /projects/mcpdir in the container
    server_params = StdioServerParams(
        command="docker",
        args=[
            "run",
            "-i",
            "--rm",
            "--mount",
            "type=bind,src=D:/mcpdir,dst=/projects/mcpdir",
            "mcp/filesystem",
            "/projects",
        ],
    )

    # Get all available tools from the server
    tools = await mcp_server_tools(server_params)

    # Create an agent that can use all the tools
    agent = AssistantAgent(
        name="file_manager",
        model_client=model_client,
        tools=tools,
    )

    # Output of the agents is printed to the console
    print(
        # The agent can now use any of the filesystem tools
        await agent.run(
            task="Create a file called /projects/mcpdir/test.txt with some content",
            cancellation_token=CancellationToken(),
        )
    )


# must use asyncio.run to run the main function
# because main() is an async function
if __name__ == "__main__":
    asyncio.run(main())

実行

以下のコマンドを実行すると、Docker で Filesystem MCP が立ち上がり、マウント先のディレクトリ(今回は D:\mcpdir の中)に test.txt というファイルが出来上がるはずです。

python main.py

コードの解説

MCP への接続設定

今回は、MCP への接続を Stdio (Standard IO) transport で行います。この場合、MCP Server はサブプロセス的な形でローカル環境で起動されることになるのですが、まさにこのサブプロセスの起動設定を AutoGen の StdioServerParams に設定することで、Python のコードから自動的に連携先の MCP Server が立ち上がってくるという寸法です。

コードとしてはこんな感じ。

server_params = StdioServerParams(
    command="docker",
    args=[
        "run",
        "-i",
        "--rm",
        "--mount",
        "type=bind,src=D:/mcpdir,dst=/projects/mcpdir",
        "mcp/filesystem",
        "/projects",
    ],
)

察しの良い方はお気づきのことと思いますが、これ docker のコンテナ起動コマンドそのまんまですね。
なんかうまく動かんな、というときには、ここに設定してあるコマンドと引数を全部くっつけて、手元の docker 環境で起動してみれば、コマンドが間違ってるかどうかくらいは確認できると思います。

その他コードの Tips

await agent.run の文をまるっと print で囲ってあげれば、エージェントの実行途中のメッセージが標準出力から出てきます。
これもデバッグに役に立つかも?

まとめ

AutoGen から、結構シンプルに MCP Server を触れることがこれでわかりました。
今回は Filesystem MCP でローカルにファイルを書き込むところをやりましたが、既に沢山の MCP が公開されていますので、今後いろいろと組み合わせて、面白いことをやりたいなーと思ったりしてます。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?