In this article
AIにおけるMCPとは?知りたかったことをすべて解説
MCPとは?
MCPはModel Context Protocolの略で、LLM(大規模言語モデル)がモデルの学習データ以外の外部リソースとどのようにやり取りし、データを共有して活用するかを定めたAnthropicの仕様です。
MCPは2024年11月に発表され、業界に大きな影響を与えました。開発者たちは、モデルに公開できるさまざまな機能を構築し、テキストの入力と出力だけにとどまらず、モデルの能力を拡張するようになりました。モデルがアクションを実行し、学習していない情報源からデータを取得できるようになったことで、新たな可能性が開かれました。これにより、モデルは自律的にタスクを実行できるようになります。

MCP仕様では、「AI搭載アプリ」を正式にMCPホストと定義しています。ただし、「サーバー」という用語との混同を避けるため、この記事では基本的に「AI搭載アプリケーション」と呼びます。
MCPクライアントは誰が作成するのですか?
通常、AI搭載アプリケーションでは、ユーザーが操作できるMCPサーバーを追加できます。そのため、MCPクライアントは多くの場合、AI搭載アプリケーションに実装され、サードパーティの機能はMCPサーバーを構築する開発者によって提供されます。
MCPホストとも呼ばれるAI搭載アプリケーションの例:
Claude Desktop
Cursor
Qodo AI
これらのAIアプリケーションにはMCPクライアントが実装されており、さまざまな機能を持つMCPサーバーを追加できます。たとえば、Gitのワークフロー管理やウェブ検索などに利用できます。
MCPサーバーはどこで見つけられますか?
Anthropicは、コミュニティから提供されたMCPサーバーをまとめたリポジトリを管理しています。@modelcontextprotocol/serversリポジトリでは、MCPサーバーのリファレンス実装や、個人によるサードパーティの貢献を確認できます。
セキュリティに関する免責事項:
非公式かつ監査されていないMCPサーバーのコードには、マルウェアやサプライチェーンセキュリティ上の懸念、安全でないコーディング慣行が含まれている可能性があり、インフラストラクチャやAIアプリケーションに影響を及ぼすおそれがあるため、十分に注意して扱ってください。
独自のMCPサーバーを構築することもできます。Anthropicは、人気の高いJavaScript SDK @modelcontextprotocol/sdkなどのMCP SDKを提供しており、開発者はLLM向けのツールを公開する独自のMCPサーバーを構築できます。
以下は、JavaScriptで実装した簡易的なMCPサーバーコードの例です。
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// Create an MCP server
const server = new McpServer({
name: "Demo",
version: "1.0.0"
});
// Add an addition tool
server.tool("add",
{ a: z.number(), b: z.number() },
async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }]
})
);MCPの導入では、どのようなセキュリティ上の点に注意すべきですか?
以下は、AI搭載アプリケーションを強化するためにMCPサーバーを導入する際のセキュリティリスクを網羅したものではありません。ただし、MCPサーバーで発生し得るセキュリティ上の懸念やセキュリティ脆弱性の概要と、実例を紹介します。
アクセス制御 - MCPサーバーでMCPリソースを公開する場合、AI搭載アプリケーションを通じてLLMを操作し、MCPリソースから公開されたデータにアクセスして収集するユーザーと、その権限をどのように区別しますか?
セキュアコーディング - MCPサーバーもソフトウェアであり、他のアプリケーションの開発と同様に、安全でない方法で実装される可能性があります。開発者は、パストラバーサルやコードインジェクションを防ぐためのセキュアコーディングの規則に従う必要があります。たとえば、MCPサーバーがファイル読み取りツールを公開していて、読み取り対象を親ディレクトリ内に制限する必要がある場合、典型的な../パストラバーサル攻撃に対して、コードが誤って脆弱にならないようにするにはどうすればよいでしょうか?
MCPサーバーとクライアントはどのように通信しますか?
データ交換形式にはJSON-RPC 2.0が採用されています。詳細なMCP仕様により、LLMやAIベースのワークフローに適した通信プロトコルが標準化されています。
MCPサーバーとMCPクライアント間のJSON-RPC通信は、次の2種類の通信チャネルのいずれかを介して確立できます。
システムプロセスの標準入出力 - ローカルで実行できるMCPサーバーを実現するための通信チャネルです。セキュリティやプライバシーの懸念に対応できるほか、レイテンシを抑えられるなどのメリットがあります。このチャネルでは、システムプロセス(
npx <mcp-server>など)を起動します。プロセスの実行中は、stdout、stdio、stderrを介してデータやコマンドがやり取りされます。Server-Sent Events(SSE)を使ったHTTP通信 - 主に、AI搭載アプリケーションを拡張するリモート配置のMCPサーバーとの通信に使用します。
MCPサーバーはデータを提供できますか?
はい。MCPサーバーは、一般的な機能をまとめた抽象的なツールだけでなく、データソースを定義できます。さらに、LLMがアクションやデータ収集を進めるために活用できるプロンプトを提案することも可能です。これはプロンプトエンジニアリングの手法の一つです。
MCPサーバーは、LLMにできることを広げる次の機能を提供できます。
MCPリソース - リソースとは、LLMが利用できるさまざまなデータソースです。たとえば、MCPサーバーはファイルの内容やディレクトリ内のファイル一覧を、LLM向けのデータリソースとして公開できます。MCPリソースは、LLMのデータソースをさらに強化、拡張するRAGの一種と考えることができます。
MCPプロンプト - AI搭載アプリケーションのユーザーは、利用可能なすべての機能を把握しているとは限りません。そのため、MCPサーバーは、意味に基づいてMCPクライアントからエンドユーザーに提示できるテキストプロンプトの一覧を公開できます。ユーザーはそれらのプロンプトを直接使って、特定のアクションを実行したり、データを収集したりできます。
MCPツール - MCPサーバーの用途として最も一般的なのが、LLMによるアクションの実行です。MCP以前のLLMは、テキストを生成できてもウェブ検索はできず、アクションを実行する手段がありませんでした。MCP(より正確には、その先駆けとなったOpenAIの関数呼び出し)の登場で状況が変わりました。MCPサーバーは、ロボットの手を動かしたり、ブラウザーの検索ボックスに文字を入力したりする一連のアクションを実装し、その機能をLLMに公開できます。LLMはそのアクションを実行できます。
MCPサーバーとクライアントの通信をデバッグするにはどうすればよいですか?
HTTPトランスポートでMCPサーバーを構築する開発者は、JavaScript開発者が使い慣れているように、コンソールに出力ログを記録できます。しかし、MCPサーバーのSTDIO(標準入出力)プロセス内通信では、この方法は使えません。STDIOチャネルはプロトコル専用であり、MCPサーバーはMCPホストのサブプロセスとして実行されるためです。通常のシェル(技術的にはTTY)で操作するコマンドラインツールとは異なります。
Claudeは、MCPサーバーのデバッグに主に次の方法やツールを推奨し、提供しています。
MCP Inspector - MCP Inspectorは、MCPクライアントとMCPサーバー間の通信を傍受する専用のコマンドラインツールです。通信チャネルの情報を確認、デバッグ、追跡し、情報や分析結果を取得できます。npmレジストリで入手できるJavaScript版のMCP Inspectorの使用例:
npx @modelcontextprotocol/inspector <command> <arg1> <arg2>注:PythonでMCPサーバーを構築する開発者向けに、PyPIパッケージも公開されています。
ログ機能 - ローカルのログファイルシステムやネットワークベースのリモートログサービスなど、専用のログ機能を使って情報を収集することをおすすめします。HTTPベースとSTDIOベースのどちらのMCPサーバーにも利用できます。特に、ファイルへのログ記録は、STDIOで通信するMCPサーバーにとって使いやすく、実用的な方法です。
MCPはOpenAIのツールとどう違うのですか?
ツールは、他のAPIやフレームワークでは関数の利用とも呼ばれ、モデルが実行できる機能を公開してエージェント型ワークフローを実現します。ツールは実装の詳細にあたります。一方、Model Context Protocolは、こうしたツールや関数を定義するための契約と標準を定める、より上位の仕様です。
MCPはGraphQLに似ていますか?
MCPが発表されて普及し始めた頃、開発者の間では、RESTful APIに代わるJSON-RPCベースの通信・クエリ言語であるGraphQLを実質的に再発明したものではないか、という議論がありました。類似点はありますが、MCPはGraphQLを置き換えたり、再現したり、そこから着想を得たりすることを目的としていません。
MCPは、LLMの自律的な動作と利用可能なデータを活用し、強化するために設計されています。LLMが登場する前は、OpenAIやエージェント型AIの関数呼び出しやツール呼び出しのワークフローで、開発者はインターフェースの標準がないまま機能を構築する必要がありました。また、機能の見つけやすさは、選択したモデルやフレームワークに左右されていました。MCPはこうした課題を解決し、自動検出機能によって、強化されたアクションやデータを利用できる標準化された通信基盤を提供します。
AIを活用したアプリケーションの構築について、さらに詳しく知りたい方は、AIを活用した安全な開発のための10のベストプラクティスをご覧ください。
AIを活用した開発を安全に進めるためのベストプラクティス
AIを活用した開発のメリットを最大限に生かしながら、潜在的なリスクを効果的に軽減するための、開発者やセキュリティ担当者向けの10のヒントをご紹介します。