はじめに
皆様、メリクリです。エモーションテックでバックエンドエンジニアをやっているしん(@sinyo-matu)です。 Anthropic社が11月に公開したModel Context Protocol(MCP)について調べてみたので、こちらの記事では、MCPの紹介とその応用について書きたいと思います。 また、この記事は エモーションテック Advent Calendar 2024 25 日目の記事です。
MCPって?
まず一次情報源として、公式の紹介ブログ及び公式ドキュメントを載せておきます。 最近では生成AIと既存のワークフローの連携をテーマにした製品開発が非常に盛り上がっています。IDEの標準機能になりつつあるCopilotは生成AI+コードベース、生成AIベースのクローラーは生成AI+スクレーパー+ブラウザ、または生成AI+プライベート文書による要約などがよくある例です。 MCPは上記のような生成AIと生成AIコンテキスト外の外部ツール(リソース)連携過程を助けるものになります。
MCPのアーキテクチャー
公式ドキュメントがとてもわかりやすく書かれていますので、具体的な説明は割愛しますが、MCPのアーキテクチャを図1にまとめてみました。実装する際の助けになれると嬉しいです。
MCPが解決しようとしている課題
一般的な連携フロー
メジャーな生成AIサービスを利用した際、外部リソースの利用を生成AIに判断させ、トリガーしてもらう場合、一般的には図2のようなフローになります。 特に注目したいのはPhase1とPhase3です。既存のソリューションがあるか調査したことはありませんが、Phase1においてはユーザ外部ツールの発見及びそのツールと接続する手続き(e.g. DBに接続するなど)を実装する必要があって、Phase3においては、ツールの利用する手続き(e.g. DBからデータを取得する)を実装する必要がありました。ユーザーはツールと具体的なやりとりをすることを意識する必要があります。
MCPを用いた連携フロー
一方で、MCPの世界では、ツールと具体的なやりとりをすることをMCP Serverが担当します。MCPを利用した場合、図3のようなフローに変わります。MCPが力を発揮するのはPhase1とPhase3です。 Phase1においては、MCP Serverは自分が持っているツール一覧及び各ツールの利用インタフェース(名称、必要なパラメーターなど)を提示しなければならない。ユーザーはMCP Client(いろんな言語のSDKがあります)を利用すれば、MCP Serverに接続するだけで、サーバーが持っているツールを発見できて、利用インタフェースをそのまま生成AIに渡すだけで済みます。自らツールと具体的なやりとりをすることを意識する必要がなくなります。 Phase3においては、やはり同じく、ユーザーは生成AIが生成したツール名称とパラメーターをMCP Clientを通して、MCP Serverに渡し、その結果をまた生成AIに渡せば、生成内容を得ることができます。
外部ツール利用を容易にするMCP
上記を少しまとめると、MCPは生成AIの利用者が外部ツールを利用する際に必要なツールの発見及びその後のやりとりの仕方を標準化したものだと思います。その標準に基づいたSDKも提供されていますので、外部ツールの利用が非常に楽になり、プラグインのような体験になりそうです。
MCPの応用を考える
以下では、個人的に面白そう!と思った応用例について紹介させてください。
プロンプトの動的変更
生成AIを利用したアプリケーションにおいて、プロンプトの管理は課題となる場合があります。 弊社製品のTopicScanを例に説明します。TopicScanはフリーテキストから適切なトピックを抽出し、トピックをベースにしてフリーコメントから深いインサイトが得られるサービスになります。しかし、フリーコメントはAmazonの商品レビューや、Xのポストなどそのコンテキストは多種多様であり、適切なトピックを抽出するには、当然一つのプロンプトで全てのコンテキストのコメントをカバーしきれません。コンテキストに基づいて、プロンプトを使い分ける必要があります。それでも用意できるプロンプトの数は有限であることに対して、フリーコメントのコンテキストの種類は無限ですので、各種プロンプトを動的に変更したくなります。 上記の課題に対して、MCPを利用することで、割と楽に対応できそうです。MCP Serverが提供するリソースの中には、Promptsがあります。図4のようにMCP Severが実際のプロンプトを管理し、アプリケーション(User)は自分が使いたいプロンプト名とその時のコンテキスト(パラメーター)をMCP Serverに渡せば、適切なプロンプトを取得することができ、それをそのまま生成AIに渡せば、欲しい生成内容を得ることができます。
上記のようなフローを利用すれば、アプリケーションはプロンプトの内容を意識しなくて済むようになります。また、MCP Serverはアプリケーションと別のライフサイクルで管理することができますので、プロンプトの動的変更も容易に実現できそうです。
生成能力のシェア
生成AIの能力を引き出すのはプロンプトですので、プロンプトのシェアは生成AIの能力のシェアに相当すると思います。先ほど申し上げたように、TopicScanでは様々な目的に対応したプロンプトを用意していますので、中には単独で使っても価値があるものもあります。しかし、現状では、他のアプリケーションから再利用するのが難しいです。 この課題に対しても、MCPを利用できそうです。先ほどと同様に、Promptsのコンセプトを利用すれば、図5のように複数アプリケーションにおいて、同様な生成能力をシェアすることができます。
終わりに
公開されたばかりなので、どうなるかまだなんとも言えませんが、MCPの滑り出しは順調そうです。公式SDKのおかげでMCP Serverの作成が非常に楽にできます。最近公式Githubを覗いてみたらサーバーの数が結構増えました!すでにマーケットプレイスみたいなものも出始めてますね(OpenAIのGPTsを思い出させます)。オープンソースでAnthropic社のサポートもありますので、追従しやすい状況にはあると思います。各生成AIベンダーが頑張ってくれれば、今後の生成AIアプリケーション開発がより効率的になりそうです。
ではでは、皆様、良いお年を!
エモーションテックでは顧客体験・従業員体験の改善をサポートし世の中の体験を変えるプロダクトの開発を開発しております。生成AIを始め、最新の技術を積極的に導入していきますので、もし興味を持っていただけましたら、ぜひ採用ページからご応募をお願いいたします。