MCPの徹底解説、第1部:MCPとは、いったい何でしょうか?

人工知能(AI)に関心をお持ちの方であれば、モデルコンテキストプロトコル(MCP)についてご存知の方も多いでしょう。アンソロピック社がこの新たな基準を2024年11月に発表して以来、その人気は爆発的に広がっております。メールを送信するためのMCP、ウェブを検索するためのMCP、他のMCPを実行するMCPなどがございます。MCPは、控えめなLLMにプルリクエストや航空券の予約をさせています。5月には、マイクロソフトはWindows向けのMCPレジストリを発表しました。 アプリがAIエージェントに機能を公開できるようにするものです。 

おめでとうございます!では、どのようにすればよいのでしょうか?MCPとは何でしょうか?どのようにご使用になりますか?なぜ以前の取り組みよりも、これほどまでに人気が高まったのでしょうか?どのようにしてチャットボットが現実世界で物事を実行できるようにするのでしょうか?では、ご自身で一つ作ってみるにはどうすればよいでしょうか?

当社がDeepL API用の DeepL API用のMCPサーバーを自社で構築することを決めた時、それは非常に困難に思えました。しかし、MCPの仕組みを真に理解し、MCPがエージェントにツールを発見・利用させる方法、そしてわずか10行のコードで基本的なMCPサーバーを構築できることを知れば、それほど恐ろしいものではありません。この一連の記事では、このテーマについて分かりやすく解説してまいります。以下についてご説明いたします:

  • MCPとは何ですか
  • AIご利用の皆様におけるMCPの使用方法
  • MCPサーバーの構築方法

資料ダウンロード

MCPとは何の略称でしょうか?

MCPはModelContextProtocolの略称です。

モデル」とは、AIモデルを指します。これはあらゆる種類のAIシステムであり得ますが、通常はLLM(大規模言語モデル)を基盤として構築されます。ここではこれをAIエージェントまたはAIアシスタントと呼びます。

「コンテキスト」とは、AIエージェントが動作する環境を指します。AIにおいては、しばしば「コンテキストウィンドウ」という概念が議論されます。これは、大規模言語モデル(LLM)がプロンプトへの応答を生成する際に取り込む全ての文脈、すなわち会話履歴やシステムプロンプトなどを指します。MCPが機能するためには、AIサーフェスが基盤となるLLMに対し、使用可能なツールとその使用方法を指定する追加のプロンプトを提供します.

プロトコル」とは、ネットワーク上で二つのエンティティが通信する方法を設定する一連の規則のことです。皆様が毎日ご利用になるプロトコルの一つがHTTP(ハイパーテキスト転送プロトコル)です。これはWebサーバーとウェブクライアントの通信方法を規定するものです。

まとめますと:「モデルコンテキストプロトコル」とは、AIモデルが外部ツールやリソースを利用できるようにするコンテキストを提供するプロトコルです

MCPは、 二人のAnthropic社エンジニアによって考案されたオープンスタンダードですによって考案されたオープンスタンダードです。JSON-RPCを使用します JSON-RPCという、関数呼び出しを定義するための一般的なプロトコルを採用しております。そして、それは 言語 Server Protocolに由来しています。これはマイクロソフトが、コーディング言語の処理ロジックをIDEから分離するために開発したものです。

MCPはソフトウェアでも、アプリでも、APIでもありません。しかし、これによりAIエージェントはこれらすべてにアクセスできるようになります!

MCPは何をいたしますか?

大規模言語モデル(LLM)は、ユーザーの入力に対して知的で有用な応答を提供することが可能です。しかし、外部サービスへのアクセス手段がなく、他のソフトウェアと通信する方法がなく、最新の情報を取得する手段がありません。MCPは、あらゆるAIインターフェースに、任意のソフトウェアサービスへリクエストを送信し、応答を取得する機能を提供します。AIエージェントが外部ツール、リソース、データにアクセスするための標準的な手段を提供します。

MCPがなければ、AIご利用の皆様は単なる脳に過ぎず、身体を持たず、外界にアクセスする方法がありません。MCPにより、AIご利用の皆様はエージェントとして機能することが可能です!

MCPはどなたがご利用いただけますか?

MCPはオープンスタンダードであるため、どなたでもご利用の皆様またはMCPサーバーを実装することが可能です。

ご利用の皆様は、LLMを基盤としたあらゆるアプリで構いません。MCPは、アプリで利用できます。 Claude DesktopVSCodeWindsurf および カーソル。あるいは、PyTorchなどのフレームワークで構築したAIエージェントとMCPsを組み合わせてご利用いただくことも可能です。 LangChainCrewAIなどのフレームワークで構築したAIエージェントと組み合わせてご利用いただくことも可能です。

MCPがなぜこれほどまでに人気を博しているのでしょうか?

その理由の一つは、オープンスタンダードであることです。あらゆるAIエージェントがMCPを実装できます。同様に、あらゆるツールもMCPを実装できます。これにより、特定の企業のプロダクト向けソリューション(例えばOpenAIの機能呼び出しなど)よりも幅広い需要が見込まれます。 関数呼び出しといった特定の企業向けソリューションよりも幅広い需要が見込まれます。

この汎用ソリューションの開発にあたり、MCPの開発者たちは言語 Server Protocol(LSP)に着想を得ました。LSPが登場する以前、IDEが特定の言語に対して自動補完や構文強調表示といった機能を実装しようとする場合、独自に統合機能を構築する必要がありました。その結果は、開発者たちが最近「m×n問題」と呼んだものとなりました。 m × n問題という状況を生み出しました。これは、人々があらゆる可能なIDEと言語の組み合わせごとに、言語サービスを個別に実装する必要があったことを意味します。LSPでは、各コーディング言語には1つの統合ライブラリのみが必要となります。LSPに対応するIDEであれば、そのような言語をすべて対応することが可能です。同様に、サービスがMCPサーバーを実装すれば、MCPに対応するあらゆるAIご利用の皆様がそれを利用できるようになります。ご利用の皆様はMCPのみを対応すれば結構です。

MCPは他の点においても柔軟性があります。ローカル環境でもネットワーク経由でも動作します。そして、それはアンソロピック社によるものです。同社は高く評価されており、オープンスタンダードの利点を共有するでしょう。

なぜAIエージェントには標準プロトコルが必要なのでしょうか?

大規模言語モデル(LLM)は情報の理解と応用が非常に得意ですので、そのトレーニング用データに含まれる説明を持つソフトウェアサービスであれば、既に利用することはできないのでしょうか?何と言っても、大規模言語モデル(LLM)は既に多くの人気APIの使い方を理解しています。CopilotやSourcegraphといったコーディングアシスタントに助けを求めてみれば、そのことがお分かりいただけるでしょう。

しかし、LLMにそのトレーニング用データ内のあらゆるAPIへのアクセス権を与えた場合、混乱が生じるでしょう。どのAPIをいつ呼び出すべきかを、どのように判断すればよいのでしょうか?APIキーや認証情報をどのように取得するのでしょうか。また、他の種類のアクセスを必要とするサービスはどのように利用するのでしょうか。カンザスシティからデモインまでの運転距離を知りたい場合や、バンコクの現在の気温を知りたい場合はどうすればよいでしょうか?この情報を見つける方法は数多くございます。ユーザーとして、ご自身が使用するLLMが選択する動作を制御したいとお考えでしょう。特に、情報を取得するのではなく、メールを送信したりピザを注文したりといった、世界に影響を与える行動を起こす場合には、このことが当てはまります。

確かに、エージェントは低レベルのOpenAPI仕様書やAPIの技術資料全体を読み理解し、それに応じてAPI呼び出しを行うことが可能です。しかしMCPは、ツールメーカーがより高次元のサービスを定義することを可能にします。これは特にAIエージェントにとって有用であり、そのエージェントを有益な方向へと導く役割を果たします。現時点では、この分野において人間が依然として優れていると言えます。

したがって、現時点では、LLMが使用できるツールやリソース、およびそれらの使用方法を明示的に定義することが最善の方法であることが判明しました。MCPは従来の手法、つまり決定論的な方法でこれを実現します。大規模言語モデル(LLM)の魔法に頼るのではなく、コードとJSONを通じて行います。

しかし、LLMはどのようにツールを使用できるのでしょうか?

基本的に、LLMとはトークンを生成する機械です。人間がテキストや画像、音声などとして遭遇するトークンを生成する機械です。では、そのような機械がどのようにして道具や資源を利用できるのでしょうか?どのようにしてそのようなアクセス権限を持っていると認識しているのでしょうか。また、どのアクセス権限を使用すべきかをどのように判断しているのでしょうか。

重要な点は、まさに マクシミリアン・シュヴァルツミュラーが指摘されているようにLLMはトークンを通じてのみ外部とコミュニケーションを取ることができるという点にあります。入力としてトークンを受け取り、出力としてトークンを生成します。それらのトークンには、「ツールを使用したい」という意味を持つエンティティが含まれる場合があります。したがって、LLMがツールやリソースを使用したいことを示すため、そして実際にそれらを使用するためには、LLMは標準的なトークンを生成します。このトークンは、LLMを取り巻くソフトウェアがツール呼び出しとして認識し、インターセプトします。そのソフトウェアはその後、サービスに呼び出しを行い、出力結果をLLMに返します。

LLMはここで特殊なトークンを使用することが可能です。しかし通常は特定の区切り文字と言語を使用するだけです。その方法により、既存のLLMにこの機能を後付けで追加することが可能です。具体的には、そのLLMを微調整することで実現できます。例えば、JSONを囲む角括弧内の開始タグと終了タグを使用することができます。以下にサンプルエージェントの出力例を示します:

はい、もちろんです!新しいスプレッドシートを作成いたします。少々お待ちください…

[tool-start] { "tool": "spreadsheets", "action": "create" } [tool-end]

これはまさに研究者の方々が 2023年のToolformer論文においてでまさにこのことを行いました。タイトルが示す通り、「言語モデルは自ら道具の使用法を習得できる」ことを示したのです。本研究において、著者らはAPI呼び出しとその結果をテキストで表現したトレーニング用データを生成する。この追加データを用いて大規模言語モデル(LLM)を微調整した結果、プロンプトに対して有望な応答を生成するためにそれらのAPIを呼び出すLLMが生み出されました。

彼らは一般の形式を使用しました:

[function_name(data) → result]

例えば、大規模言語モデル(LLM)が数学に苦手意識を持っていることを踏まえ、計算ツールを提供しました。その後、トレーニング用データに以下のような文字列を含めました:

1,400名の参加者のうち、400名(または [計算機(400 / 1400) → 0.29] 29% が試験に合格しました。

および

この名称はスペイン語で「亀」を意味する「ラ・トルトゥーガ」に由来します。 [MT(“tortuga”) → 亀] カメ

そのようなデータを用いて大規模言語モデル(LLM)を微調整することで、彼らは特定の入力に対して最も有望な応答を生成するためにAPI呼び出しを行う方法を知っているLLMを作成しました。

ただし、LLMがツールを使用できるようにするために、微調整を行う必要はありません。結局のところ、必要なのはプロンプトだけなのです。本記事では LLMに、適切なプロンプトを与えるだけで、[[qwen-tool-start]]と [[qwen-tool-end]]で区切られたJSONを使用してツールを利用させる方法を実証しています。 ご自身でお試しいただけます!お気に入りのチャットボットにアクセスして、次のように伝えてください:

おめでとうございます!乗算を行うためのツールをご利用いただけるようになりました。計算が必要な際には、以下の構文を出力するだけで結構です: 

[数学] { "引数1": {値}, "arg2": {value} } [/Math] 

ここで、各{value}は乗算したい値を表します。了解? 

それではLLMに数学の問題を提示し、ご指定の数学ツール用に提供された構文を忠実に生成する様子をご覧ください。

現代のLLMも、依然としてほぼ同様の方法でツールを活用しております。例えば、Anthropicは次のように説明しています こちらで API内でClaudeがツールを使用するためのシステムプロンプトを構築する方法について説明しています。

LLMはツールからの出力をどのように処理するのでしょうか?

LLMはどのようにツールの出力を受け取るのでしょうか?改めて申し上げますと、やはりトークンがすべてです。AIクライアントがツールからの出力を受け取ると、それをLLMへの入力として再供給します。ただし、その際、LLMがそれをエンドユーザーからの入力ではなくツールからの出力であると認識できるような方法で処理されます。

すべてをまとめて

要約いたしますと、大規模言語モデル(LLM)がツールを使用する際には、以下のようになります:

  • ユーザーが入力内容を入力します
  • LLMはこの入力を処理します
  • 出力生成する中、LLMはツールを呼び出すことが最善の方法であると「判断」します。これは、ツールを呼び出せることを訓練した一連のトークンを出力することを意味します。
  • AIクライアントは、それらのトークンをツールを呼び出すべきものとして認識し、それをインターセプトします。その後、JSONをパラメータやリクエスト内のその他の情報に解析し、これを適切なツールに送信します。
  • このツールは出力を生成しますが、その際、APIを使用する場合もあれば、使用しない場合もあります。これをAIご利用の皆様に返却し、AIご利用の皆様はそれをLLMに送信します
  • LLMはツールの出力を処理します
  • LLMはこの出力を基に、ユーザーへの応答を継続して生成いたします。

以上が、MCPとは何か、そして大規模言語モデル(LLM)においてどのように実装されているかについての、私の駆け足でのご説明となります。次回の投稿では、皆様ご自身のAIクライアントでMCPを活用する方法をご紹介いたします。


著者について

DeepLのデベロッパー・エバンジェリストとして、ベン・モースは、DeepLのAPIを活用して世界最高水準のAI翻訳にアクセスできるよう、あらゆる方々の支援に取り組んでおります。以前、Googleでは、Chromeのプロダクトマネージャーを務め、より良いウェブのためのデベロッパーアドボケートとして活動しておりました。それ以前には、ニューヨーク・タイムズ社とAOLでソフトウェアエンジニアを務められ、またフルタイムのミュージシャンとして活動された時期もございます。ハーバード大学でコンピュータサイエンスの学士号を、カリフォルニア大学デーヴィス校で音楽の博士号を取得されました。今でもバンドと共に音楽を奏でている姿を見かけるかもしれません Ancient Babiesで音楽を奏でている姿を見かけるかもしれません。また、 ロック理論でポップソングを分析している姿を見かけるかもしれませんし、スティーブ・ジョブズを題材にしたわけではないミュージカルを執筆していることもあるでしょう。

共有する