MCPとは?
MCP(Model Context Protocol)という言葉を目にすることが多くなってきました。MCPは昨年Anthoropicが発表してそのオープンソース化された、生成AIが外部の様々なデータソース、ツールとやりとりするための標準プロトコルです。MCPサーバーのサンプルはこちらにも公開されており、例えば、FileSystemMCPServerと連携することで、ファイルのリストを取得することが出来たり、TimeMCPServerと連携することで現在時刻を取得出来たりします。
この記事では、実際にこれらのサーバーとwatsonx Orchestrateの連携方法について説明します。
watsonx OrchestrateのMCP対応状況
watsonx Orchestrateではversion1.2.0よりtoolkitsという形でMCPのサポートが追加されました。コマンドでMCPサーバーを追加することで、nodeベースのMCPサーバーをwatsonx Orchestrate Developer Edition上で動作させ、Toolと連携することが可能です。MCPサーバーの実装は大きく分けてDockerベースのものとnodeベースのものがありますが、現時点ではnodeベースのローカル・サーバーのみサポートします。今後Dockerベースのものや、リモートのMCPサーバーも対応予定の様です。
MCPサーバーとの連携方法
では初めに、最もシンプルなTime MCP Serverを用いてコマンドの使い方と実際の動作を確認してみましょう。以下のコマンドでtimeという名前のToolkitを作成してMCPサーバーと連携することが可能です。なお、MCPサーバーはtoolkitが動作するコンテナ上で稼働するようです。
コマンド詳細についてはこちらを参照してください。
orchestrate toolkits import --kind mcp --name time --description "Time functions" --command "npx -y time-mcp" --tools "*" --package-root time-mcp
コマンドが正常に実行されると、AgentBuilder上で以下の様にtimeというprefixが付いた形で利用可能なツールがリストされるので、選択することで利用可能になります。
チャット画面から動作を試してみます。
MCPサーバー経由でToolが呼び出されて返答が来ました。動作自体はしているものの時間が微妙に違います。toolの呼び出しを確認してみると、タイムゾーンは正しく"Asisa/Dubai"になっているもののフォーマットの指定方法が良くなさそうな気がします。Time MCPのコードやドキュメントを確認したのですが、どうやらメンテされていないようなので、深追いはしないことにします。
なお、インポートしたToolkitの削除は以下のコマンドで実行可能です。
orchestrate toolkits remove -n toolkit_name
起動時のenvの割り当て方法
MCPサーバーによっては、起動時に環境変数を割り当ててあげる必要があります。
watsonx OrchestrateではConnectionsという仕組みを使って変数の割り当て、管理が可能です。
例えば、Github MCP Serverでは、実行時にGithubのトークンを以下の様に設定する必要があります。
GITHUB_PERSONAL_ACCESS_TOKEN=your_token
これをwatsonx Orchestrateで設定するには以下のようなコマンドを用います。
key_value型のConnectionを作成して、-eで変数を指定します。
orchestrate connections add --app-id "github"
orchestrate connections configure --app-id github --env draft --kind key_value --type team
orchestrate connections set-credentials --app-id "github" --env draft -e GITHUB_PERSONAL_ACCESS_TOKEN=your_token
orchestrate toolkits import --kind mcp --name githubmcp --description "github tools" --command "npx -y @modelcontextprotocol/server-github" --tools "*" --package-root mcp-github --app-id github
実際にチャットからissueを作成することができました。今回は英語で会話しています。Toolに引数が多い場合には会話が長くなりがちなので、プロンプトでデフォルト値を設定する、あるいは、良く使うパラメータのみのToolを公開するといった方法が考えられます。この辺りは汎用的な仕組みを作るのか、特定の作業に特化したものにするのか、Agentの設計に依存する領域と思われます。
その他のMCPServer
filesystem MCP ServerというファイルシステムにアクセスできるMCPサーバーがあったので試してみました。残念ながらwatsonx Orchestrateから使用するとサーバーのコンテナ内のファイルを見る感じになるので実用性はないがデモとしては使えるかもしれません。
以下コマンドで導入可能です。コマンドの第3引数以降は、アクセスを許可するフォルダになります。
orchestrate toolkits import --kind mcp --name filesystem --description "Deals with filesystem" --command "npx -y @modelcontextprotocol/server-filesystem /usr/tmp" --tools "*" --package-root filesystem-mcp
まとめ
この記事ではwatsonx OrchestrateからMCPサーバーに接続する方法について説明しました。これまでは個別にOpenAPI定義を作成したり、読み込んでいたりしましたが、MCPを用いることで、格段に簡単に接続することができるようになりました。今後は様々なパッケージやアプリケーションがMCPに対応し、生成AIとの連携が進むでしょう。
一方で、接続自体は簡単にできても、AIAgentが正しくそのToolを活用できるかは、LLMに対する指示や、Toolやパラメータの説明が利用するユースケースに適したものになっている必要があることを再認識できました。
watsonx Orchestrateでは、ノーコードでビジネス・ユーザーがAgentに対する指示を指定したり、ADKを用いてToolを簡単にカスタマイズできるので、そのあたりはありがたい機能かもしれません。