DXを推進するAIポータルメディア「AIsmiley」| AI製品・サービスの比較・検索サイト
03-6452-4750 10:00〜18:00 年末年始除く

MCPとは?AIの機能拡張を簡単にするプロトコルをご紹介

最終更新日:2025/05/14

MCPとは?AIの機能拡張を簡単にするプロトコルをご紹介 MCPとは?

エンジニアとしてAIアシスタントの開発に携わっているけれど、複数のサービスをAIと連携する場合APIをたくさん管理しなければならず、手間だと感じている人はいませんか?

AIを用いたサービスは加速度的に進化し続けていますが、その速さを支えるためにはエンジニアやプログラマーの業務効率化が欠かせません。

この記事では、そんな悩みを解決するMCPについて詳しく解説します。

MCPとは?

MCP(Model Context Protocol)とは、Anthropic社が開発したオープンソースの通信プロトコル(通信を行うためのルールや約束事)です。

従来はAIの機能を拡張しようとするたびに各サービスに応じたAPIキーを取得・管理しなければならず、設定や保守に時間がかかっていました。

しかしMCPを使うとそのような煩雑な作業をすることなく、安全に双方向接続が構築できるのです。

MCPを利用することで、AIを用いたサービスの開発がさらにスムーズになるでしょう。

参考:Anthropic「Model Context Protocolの紹介」

MCPの仕組み

MCPの仕組み

画像出典:Model Context Protocol「紹介」

MCPは「MCPホスト」「MCPクライアント」「MCPサーバー」という3つのコンポーネント(構成要素)でできています。

それぞれが役割を持って独立しながら連携し、全体の仕組みを支えています。

3つのコンポーネントの役割は以下の通りです。

項目 概要
MCPホスト
  • AIモデルが実行されるアプリケーションで、MCPクライアントを通じてMCPサーバーと通信する役割を持つ
MCPクライアント
  • MCPホスト内に組み込まれていて、MCPサーバーとの1対1の接続を管理する
MCPサーバー
  • 外部のデータソースやツールを公開する軽量なプログラム
  • 標準化されたMCPプロトコルを通じてAIモデルがアクセスできるようにする

画像のようにMCPホスト内にあるMCPクライアントが、MCPサーバーとMCPプロトコルのルールでつながり、安全に双方向接続ができる仕組みです。

用語の意味を理解できればそれほど難解な仕組みではないので、画像と用語を照らし合わせながら確認してみましょう。

参考:Model Context Protocol「紹介」

MCPの仕様

MCPの仕様について「構成」「通信メッセージ」「リクエスト」「レスポンス」「通知」「バッチ処理」「認証」「スキーマ」のご紹介します。

構成

前の項目でご紹介したMCPプロトコルを構成する要素は以下の通りです。

項目 概要
基本プロトコル
  • MCPの基盤となる通信方式
  • JSON-RPCメッセージを使ってAIとサーバーがやりとりを行う
ライフサイクル管理
  • 接続開始時の初期設定や利用可能な機能の交渉、セッションの維持・終了などを行う
サーバー機能
  • 外部ツールやデータリソース(ファイル・APIなど)をAIに公開するための仕組み
クライアント機能
  • クライアントが提供するファイル一覧やサンプリング機能をAIに渡す
ユーティリティ
  • ログ記録やプロンプト入力の補完機能など、その他の便利機能

それぞれが特定の役割を持ち、AIと外部ツールとの安全でスムーズな連携を可能にしています。

通信メッセージ

MCPクライアントとMCPサーバーの間の通信メッセージは、JSON-RPC 2.0 仕様に従ってやり取りを行わなければなりません。

JSON-RPC 2.0とはAIやアプリ同士が、JSONというデータ形式を使ってやりとりするためのルールのことで、以下の要素で構成されています。

項目 概要
JSON 「JavaScript Object Notation」の略で、データを構造化して保存や交換をするための軽量なフォーマット
RPC 「Remote Procedure Call」の略で、ネットワーク上で接続された他のコンピュータのプログラムを呼び出して実行させるための技術やプロトコル
2.0 使用されているJSON-RPCのバージョン番号

この仕様はシンプルで軽量という特長があり、MCPにおけるメッセージ通信を効率良く安全に行うために採用されています。

リクエスト

リクエスト

リクエストとは操作を始めてほしいというメッセージのことを指し、MCPにおいてはMCPクライアントからMCPサーバー、MCPサーバーからMCPクライアントの双方向で行えるのが特徴的です。

上記画像はリクエストのフォーマットで、次の要素が含まれます。

項目 概要
jsonrpc 使用しているプロトコルのバージョン(固定で 2.0)
id リクエストを識別するための番号または文字列で、レスポンスと対応させるために使われる
method 実行してほしい操作やメソッドの名前
params(省略可) 操作に必要なパラメータ(引数)でオプション扱い

同じセッションの中で同じidを2回使ってはいけません。

また「.null」をidに使うこともできないため注意しましょう。

レスポンス

レスポンス
レスポンスとはリクエストに対する返答のことです。

MCPクライアントがMCPサーバー、MCPサーバーがMCPクライアントに操作が成功したかどうかを伝えるために使われます。

上記画像はレスポンスのフォーマットで、以下の要素が含まれます。

項目 概要
jsonrpc
  • 使用しているプロトコルのバージョン(固定で 2.0)
id
  • 対応するリクエストと同じID
result
  • 成功した場合に入る内容
error
  • 失敗した場合に入るエラー情報で、数値のコード(整数)とメッセージが必須
error.data
  • 任意で詳しいエラーの中身や追加情報を入れてもよい

resultとerrorはどちらか一方だけが含まれるため、操作が成功したかどうか明確にわかる仕組みとなっているのです。

通知

通知

通知とはMCPクライアントとMCPサーバーの間で送る返答不要の一方向のメッセージのことです。

上記画像は通知のフォーマットで、次の要素が含まれます。

項目 概要
jsonrpc 使用しているプロトコルのバージョン(固定で 2.0)
method 実行してほしい操作や通知の名前
params(省略可) 任意で操作に必要な引数や追加データを入れてもよい

通知は返答を必要としないため、IDを含めてはいけません。

バッチ処理

バッチ処理とは複数のリクエストや通知を配列という形でまとめて送信することです。

MCPで使われるJSONでは、1つのリクエストや通知を{}内に記述しますが、それを[]の中に並べて入れると配列となります。

MCPクライアントにおいてバッチ送信の処理は任意ですが、受信は必ず処理しなければならないので注意しましょう。

認証

MCPではトランスポート(通信手段)を使う際の認証に、以下のようなルールが存在します。

項目 概要
HTTPのトランスポートを使う場合 MCPが用意した「認証フレームワーク」に従う
STDIOのトランスポートを使う場合 MCPが用意した「認証フレームワーク」には従わない

また上記のルール以外に、MCPクライアントとMCPサーバーの間で交渉(ネゴシエート)をした上で、独自のカスタム認証(MAY)を使ってもよいことになっているのです。

MCPでは、認証方法についてはまだ開発途上のため、GitHub Discussionsで意見を出し合ってより良い仕組みに育てていくのが望ましいとしています。

スキーマ

スキーマとは、プロトコルで使われるメッセージやデータの構造を定義した設計図のことです。

MCPには次の2種類のスキーマがあります。

項目 概要
TypeScriptスキーマ プロトコルの完全な仕様を定義するための信頼できる情報源
JSONスキーマ TypeScriptスキーマから自動生成される形式

TypeScriptで定義されたスキーマが公式な出発点で、そこから自動的にJSONスキーマが作られる仕組みとなっているのです。

このためどちらを使っても一貫した構造となり、ツールとの連携がスムーズにできます。

画像出典と参考:Model Context Protocol「概要」

MCPでできること

MCPでできることは、MCPサーバーがMCPクライアントに提供できることとMCPクライアントがMCPサーバーに提供できることの2つに分かれます。

MCPサーバーがMCPクライアントに提供できることは以下の通りです。

項目 概要
リソース ユーザーやAIモデルが利用できるコンテキストやデータ
プロンプト ユーザー向けのテンプレート化された通信メッセージやワークフロー
ツール AIモデルが実行できる関数や操作

一方、MCPクライアントがMCPサーバーに提供できることは次の通りです。

項目 概要
サンプリング サーバー主導でのエージェント的な挙動や、LLM(大規模言語モデル)との再帰的(自分自身で出した答えを再度深堀りして考えること)な対話

MCPは双方向の接続を特徴とするため、できることも2種類に分かれるのを意識しましょう。

参考:Model Context Protocol「仕様」

MCPの使い方

MCPの使い方を4つのステップでご紹介します。

開発環境をセットアップする

MCPを使うには開発環境の準備が必要です。

以下の手順で進めてみましょう。

  • Node.jsとnpmをインストールする

Node.js(バージョン18以上)とnpm(Node Package Manager)をインストールします。

  • プロジェクトディレクトリを作成する

プロジェクトディレクトリを作成する

新しいディレクトリ(コードファイルを整理するための入れ物)を作成し、移動します。

  • Node.jsプロジェクトを初期化する

Node.jsプロジェクトを初期化する

npmを使用してプロジェクトを初期化します。

  • MCP TypeScript SDKをインストールする

MCP TypeScript SDKをインストールする

MCP TypeScript SDKとはMCPで開発をしやすくするための道具セットのようなもので、よく使う関数、型の定義、サンプルコードなどが含まれています。

  • TypeScriptとその他の依存関係をインストールする

TypeScriptとその他の依存関係をインストールする

TypeScriptとZodをインストールします。

ZodとはTypeScriptでデータの型をチェックしたり定義したりできるツールです。

  • TypeScriptの設定ファイルを作成する

TypeScriptの設定ファイルを作成する

tsconfig.jsonファイルを作成し、上記画像の内容を記述します。

  • ソースディレクトリとエントリーファイルを作成する

ソースディレクトリとエントリーファイルを作成する

srcディレクトリを作成し、その中にindex.tsファイルを作成します。

コアサーバーインターフェースを実装する

MCPサーバーの基本的な機能を実装します。

次の手順で進めてみましょう。

  • 必要なモジュール(特定の役割を持ったコードのかたまり)をインポートする

必要なモジュール(特定の役割を持ったコードのかたまり)をインポートする

上記画像に含まれる要素のうち理解しておきたいのが以下の3つです。

項目 概要
McpServer MCPサーバーのインスタンスを作成するためのクラス(同じオブジェクトを作るための設計図)
StdioServerTransport 標準入出力(STDIO)を使った通信を行うためのトランスポートクラス
zod 入力データのスキーマを定義し、バリデーションを行うためのライブラリ

要素1つ1つをしっかり理解してから実装を進めることが大切です。

  • MCPサーバーのインスタンスを作成する

MCPサーバーのインスタンスを作成する

クラスを元にして、実際に使えるオブジェクトを作ります。

nameでサーバーの名前、versionでサーバーのバージョンを指定します。

  • ツールを追加する

ツールを追加する

受け取ったメッセージをそのまま返す「echo」ツールを追加しましょう。

上記画像に含まれる要素のうち理解しておきたいのが以下の3つです。

項目 概要
‘echo’ ツールの名前
{ message: z.string() } 入力パラメータのスキーマを定義しmessageという文字列を受け取る
async ({ message }) => { … } ツールの実装で、受け取ったmessageをそのまま返している

ツールに応じて記述内容が変わるため注意しましょう。

  • トランスポートを作成しサーバーと接続する

トランスポートを作成しサーバーと接続する
StdioServerTransportとは標準入出力を使った通信を行うトランスポートで、server.connect(transport)でサーバーをトランスポートに接続します。

ここまででMCPサーバーの基本的な実装は完了です。

最初は記述内容を理解するのが難しいですが、確認しながら進めてみましょう。

接続と認証の処理をする

接続と認証の処理をする

参考:ChatGPT

MCPクライアントからMCPサーバーに誰でもアクセスできると困るので、認証してから接続できるようにします。

MCPサーバーではトークンベースの認証が行われるため、例えば上記のようなコードを設定すると、トークンと一致した場合のみアクセスが可能となります。

セキュリティを確保し、安全な接続を維持するためにも認証設定は重要です。

クライアント要求の処理をする

MCPサーバーでは、クライアントから受け取るツールの呼び出しリクエストを処理できるようにする必要があるため、次の手順でサーバー側でツールの定義を行います。

  • .server.tool() メソッドでツールを定義する

.server.tool() メソッドでツールを定義する

画像出典:ChatGPT

画像の中で理解しておきたい要素は以下の3つです。

項目 概要
“echo” クライアントが呼び出すツール名
z.object({ message: z.string() }) 入力のスキーマでZodライブラリで検証される
async ({ message }) => { return { message }; } 入力を受け取って、そのまま返す非同期関数(時間がかかる処理を待ちながら他の処理を進める関数)

ツール名を変更すれば別のツールも呼び出せます。

  • サーバーを起動するためTypeScriptをJavaScriptにコンパイルする

サーバーを起動するためTypeScriptをJavaScriptにコンパイルする

TypeScriptは人間にとって理解しやすいプログラムの形ですが、コンピュータはそのままだと読めないため、コンピュータにとってわかりやすいJavaScriptなどの形に変更する必要があります。

  • ビルドされたファイルを実行する

ビルドされたファイルを実行する

変換されたJavaScriptのプログラムを実際に動かすことです。

以上の手順を踏むことで、MCPサーバーはクライアントのツール呼び出しに応じて応答を返すことができるようになります。

参考と画像出典:GitHub「Model Context Protocol (MCP) サーバー開発ガイド: LLM 用の強力なツールの構築」

まとめ

MCPとは、Anthropic社が開発したオープンソースの通信プロトコルです。

MCPを利用した安全な双方向接続を活用し、ぜひAIを用いたサービスの開発をスムーズに進めてみてください。

AIsmiley編集部

株式会社アイスマイリーが運営するAIポータルメディア「AIsmiley」は、AIの専門家によるコンテンツ配信とプロダクト紹介を行うWebメディアです。AI資格を保有した編集部がDX推進の事例や人工知能ソリューションの活用方法、ニュース、トレンド情報を発信しています。

・Facebookでも発信しています
@AIsmiley.inc
・Xもフォローください
@AIsmiley_inc
・Youtubeのチャンネル登録もお願いいたします@aiaismiley1345

メルマガに登録する

DXトレンドマガジン メールマガジン登録

業務の課題解決に繋がる最新DX・情報をお届けいたします。
メールマガジンの配信をご希望の方は、下記フォームよりご登録ください。登録無料です。

お名前 - 姓・名

お名前を入力してください

メールアドレス

メールアドレスを入力してください

AI・人工知能記事カテゴリ一覧

今注目のカテゴリー

生成AI

ChatGPT連携サービス

チャットボット

AI-OCR

生成AI

ChatGPT連携サービス

チャットボット

AI-OCR

AI活用のご相談したい企業様はこちら

03-6452-4750

AI製品・ソリューションの掲載を
希望される企業様はこちら