AI エージェントと MCP

MCP とは? Model Context Protocol の解説

Model Context Protocol(MCP)は、AI アプリケーションをツールやデータにつなぐためのオープンスタンダードです。MCP の仕組み、構成要素、セキュリティを解説します。

英語の原文からの翻訳です。コード、プロンプト、モデルの出力は英語のまま掲載しています。

Model Context Protocol(MCP)は、AI アプリケーションが外部のツールやデータソースにどう接続するかを定義するオープンスタンダードです。2024 年 11 月に Anthropic が発表し、以来、AI アシスタント、コーディングツール、エージェントフレームワークに広く採用されています。

MCP が解決する問題

言語モデル単体では、テキストを生成することしかできません。実際の仕事で役立つには、ファイルの読み取り、データベースへの問い合わせ、検索、API の呼び出しが必要です。MCP 以前は、AI アプリケーションごとにそれらをつなぐ独自の方法を定義していたため、あるアシスタント向けに作ったツールを、次のアシスタント向けに作り直さなければなりませんでした。

MCP は、これを 1 つのプロトコルに置き換えます。ツールの提供者は MCP サーバーを一度書けば、MCP に対応するどのアプリケーションからでも使えます。よく使われる例えは万能コネクターです。機器ごとに別のケーブルを使う代わりに、標準のプラグ 1 つで済むということです。

MCP の仕組み

MCP には 3 つの役割があります。

  • ホスト: チャットアプリ、IDE、エージェントなど、人が使う AI アプリケーション。
  • クライアント: ホスト内にあり、1 つのサーバーとの接続を維持するコンポーネント。
  • サーバー: ホストに機能を公開するプログラム。
Host application (assistant, IDE, agent)
   |  one MCP client per server
   v
MCP server  --->  files, databases, APIs, or pure computation

メッセージは JSON-RPC 2.0 です。接続が開かれると、クライアントとサーバーは互いの機能を交換し、クライアントはサーバーが何を提供するかを尋ねます。ホストはそれらのツール定義をモデルに渡します。モデルがツールを使うと決めると、クライアントがサーバーに呼び出しを送り、結果を返します。

構成要素

サーバーは 3 種類の機能を提供できます。

プリミティブ 内容 使うかどうかを決めるのは
ツール(Tools) モデルが呼び出せる関数。名前、説明、入力スキーマを持つ モデル
リソース(Resources) ファイルやレコードなど、URI で識別される読み取り専用のデータ アプリケーションまたはユーザー
プロンプト(Prompts) サーバーが提供する再利用可能なプロンプトテンプレート ユーザー

最も広く使われているのはツールです。ツールの定義は次のようになります。

{
  "name": "estimate_tokens",
  "description": "Count the tokens in a prompt for a given model.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "prompt": { "type": "string" },
      "model": { "type": "string" }
    },
    "required": ["prompt"]
  }
}

説明とスキーマはモデルが読むので、それ自体がプロンプトです。エージェントがツールを正しく使えるかどうかを最も左右するのは、明確なツールの説明です。AI エージェント向けのプロンプトを参照してください。

トランスポート

MCP は、メッセージがどう運ばれるかも定義しています。

  • stdio: ホストがサーバーをローカルプロセスとして起動し、標準入出力で通信します。シンプルで、ネットワークには何も公開されません。
  • Streamable HTTP: サーバーが Web サービスとして動作し、クライアントが HTTP で接続します。リモートや共有のサーバーに向いており、認証が必要になります。

MCP、関数呼び出し、API

これらは競合ではなく、階層です。

  • API は、ソフトウェアがサービスと話す手段です。
  • 関数呼び出しは、モデルが関数の実行を依頼する手段です。
  • MCP は、関数をどの AI アプリケーションにも記述し、発見し、届ける方法を標準化します。

MCP サーバーは、既存の API をラップすることがよくあります。自分が管理する 1 つのアプリケーションにしか提供しないなら、単純な関数呼び出しで十分です。1 つのツールを多くのクライアントで動かしたいときに、MCP の価値が出ます。

サーバーの設定

ホストには、起動するサーバーのリストを設定します。ローカルの stdio サーバーには、コマンドとその引数が必要です。

{
  "mcpServers": {
    "promptflow": {
      "command": "node",
      "args": ["/absolute/path/to/packages/mcp-server/dist/bin.js"]
    }
  }
}

キー名はホストによって多少異なりますが、形は同じです。

セキュリティ上の考慮事項

モデルをツールにつなぐのは強力ですが、攻撃対象領域も広がります。

ツールの結果は信頼できない入力です。 Web ページを取得したりチケットを読んだりするサーバーは、攻撃者が書いたかもしれないテキストを返します。モデルはその中の指示に従ってしまうかもしれません。プロンプトインジェクションを参照してください。

モデルはツールの説明を信頼します。 悪意のあるサーバーは、モデルを誘導するために、ツールを紛らわしく説明できます。信頼できる提供元のサーバーだけをインストールし、宣言内容を確認してください。

機能の組み合わせはリスクを倍増させます。 非公開データの読み取り、信頼できないコンテンツの読み取り、外部へのデータ送信のすべてができるセッションは、持ち出し経路になりえます。1 つのセッションに 3 つすべてを与えないようにしましょう。

最小権限が当てはまります。 1 つのことだけを行うサーバーを選び、可能な限り読み取り専用のアクセスを使い、副作用のある操作には確認を求めます。

ローカルサーバーはあなたの権限で動きます。 stdio サーバーは、あなたのマシン上のプログラムです。インストールは、他のソフトウェアと同じように扱ってください。

優れた MCP サーバーの設計

  • 目的の異なる、適切な名前のツールを少数だけ提供する。
  • ツールをいつ使うか、何を返すかを書いた説明にする。
  • すべての引数を検証し、モデルが対処できるエラーを返す。
  • 結果はモデルのコンテキストを消費するので、コンパクトに保つ。
  • 読み取りだけを行うツールは読み取り専用と示し、ホストがそのように扱えるようにする。
  • 結果やログにシークレットを決して返さない。

例:MCP 経由のプロンプトツール

PromptFlowEngine の MCP サーバーは、これらの原則の小さな実例です。プロンプトエンジンを、プロンプトの分析、再構成、最適化、比較、無害化のためのツールとして公開し、さらにルールとモデルのカタログをリソースとして公開します。stdio トランスポートを使い、ネットワーク呼び出しは行わず、ファイルやシェルへのアクセスもないため、すべてのツールが読み取り専用です。与えられたテキストを処理することしかできません。

これを接続すると、エージェントは自分の作業を確認できます。

Use promptflow to restructure this before you start:
"fix login issue and make google login work and don't break anything"

エージェントは再構成ツールを呼び出し、要件、エッジケース、受け入れ基準を含むセクション分けされた仕様を受け取り、それを実装します。セットアップは MCP クライアントのドキュメントで説明しています。

MCP の位置づけ

MCP は、エージェントシステムの接続層です。ツールをいつ呼ぶかを決める推論ループは ReAct プロンプティングで、それを統制する指示は AI エージェント向けのプロンプトで扱っています。

実践してみる

MCPで試す

PromptFlowEngine を AI エージェントや MCP 対応ワークフローと接続します。 無料・決定論的で、アカウントは不要です。

関連する PromptFlowEngine ツール

AI エージェントと MCPのその他のガイド

プロンプトエンジニアリングガイドをすべて見る