MCPサーバーとは?MCPの基本から実装手順まで解説

近年、生成AIの進化が目覚ましく、その中で注目を集めているのが 「MCPサーバー」 です。MCPサーバーはAIが外部の情報やツールと連携し、より高度で正確な回答を生み出すための重要な仕組みです。2024年にAnthropic社が開発を発表し2025年にはOpenAIも対応を表明したことで、MCPはAI業界で急速にスタンダードになりつつあります。
従来のAIは過去に学習したデータだけをもとに応答していましたが、MCPサーバーを活用することで、リアルタイムの天気予報や最新ニュースなど外部の最新情報を取り入れられるようになりました。例えば、チャットAIが「ロサンゼルスの天気」をリアルタイムで答えられるのはMCPサーバーが外部サービスと橋渡しをしているからです。
本記事ではMCPサーバーの仕組みや役割、開発手順、具体的な活用例まで、初めての方でもわかるように解説しています。MCPサーバーの導入や活用を検討している方は、ぜひ最後までご覧ください。

そもそもMCPとは
MCPは2024年11月に生成AIサービスを提供するスタートアップ企業のAnthropic社によって開発されました。MCPとは、AIエージェントがLLM(Large Language Model)からテキストを生成する際に、必要なヒントや文脈(Context)を取得するための仕組み(Protocol)のことを指します。
そして、2025年3月にはOpenAI社がMCPへの対応を表明し、これをきっかけに他の大手AI企業も追随しつつあります。現在、MCPはAI業界で新たなスタンダードになりつつある注目の技術です。
MCPの役割
MCPはAIエージェントと外部リソースをスムーズにつなぐ役割を担っています。これまでAIが外部データやサービスを利用する際は、個別に連携処理を実装する必要がありました。そのため、アプリケーションごとに仕様がバラバラで、他のシステムと連携するのが複雑になりがちでした。
MCPはこうした問題を解消する標準的な仕組みを提供することで、AIと外部リソースの連携を統合し、スムーズなデータ取得やソリューション提供を可能にしています。
MCPの特徴
MCPの大きな特徴は「あらゆるLLMに対応できる標準化された仕様」であることです。例えば、OpenAI社のFunction CallingやCohere社のTool Useなどは、LLMごとに仕様が異なり、互換性に課題がありました。しかしMCPは共通仕様で設計されているため、異なるAIモデル間でも問題なく動作します。
その結果、MCPはビジネス領域におけるAIエージェントの利便性を大きく高め、新規事業の市場調査や分析、試作、検証といったプロセスの短縮にも貢献しています。また、以下のような点もMCPの魅力です。
- Node.js、Docker、Pythonといった仮想環境で簡単にパッケージングが可能
- 高い移植性と再利用性を持ち、他社や外部への展開も容易
- 共通仕様により開発工数や運用コストを削減できる
こうした特徴によりMCPは柔軟で拡張性の高いシステム構築を実現し、AIの活用領域をさらに広げる存在となっています。
MCPが動作する仕組み
MCPがどのように動作するかを簡単に説明すると、AIエージェント(クライアント)がMCPサーバーを介して自律的に外部リソースへアクセスし情報を取得したり処理を行ったりする仕組みです。ユーザーからの指示に対しAIが回答を生成するまでの流れは、次の5つのステップに分けられます。
1.初期化
AI本体が起動する際に、MCPクライアントとMCPサーバーの接続を初期化します。このとき、MCPサーバーは利用可能な機能(ツール・リソース・プロンプト)やプロトコルのバージョン情報をMCPクライアントに返します。
2.サーバー機能の問い合わせ
MCPクライアントが、どのツールやリソースが使えるのかをMCPサーバーに問い合わせます。MCPサーバーは、それらの情報をリスト形式で返答します。
3.サーバーの機能呼び出し
ユーザーからの指示を受けたAIは、ツールを使用するかどうかを判断します。使用する場合は、ツール名と必要なパラメーターをMCPクライアントに伝え、MCPサーバーへツールの実行を依頼します。
4.機能の実行
MCPサーバーが指示された機能を実行し、その結果を生成します。
5.結果の返答
MCPサーバーが生成した結果をMCPクライアントに返し、AIがそれを受け取ります。AIは取得した情報をもとに、最終的な回答を生成するか、さらに追加のアクションが必要かを判断し、ユーザーへ返答します。
MCPの例
MCP(Model Context Protocol)の動作イメージをより具体的に理解するため、実際の活用例を紹介します。ここでは、Anthropic社のチャットツール「Claude Desktop」にインターネット検索機能を追加するケースを取り上げます。
Claude DesktopはLLM(大規模言語モデル)を使ってユーザーの質問に答えるチャットアプリですが、通常は過去に学習した情報に基づいて返答を行うため最新情報の取得には限界があります。そこで、MCPを活用して外部の検索ツールと連携することで、この課題を解決します。例えば、この例では「Tavily」というインターネット検索ツールを利用し、Claude Desktopからリアルタイムでウェブ検索が可能になります。Claude DesktopにTavilyを連携させるには、以下の手順が必要です。
- PCにTavilyをインストールする
- Claude DesktopがTavilyを認識できるよう設定を行う
- Tavilyを利用するための専用APIキー(サービス利用の認証情報)を取得する
- 設定後、Claude Desktopを再起動し、検索機能が追加されていることを確認する
これにより、ユーザーが質問した際にLLMだけでなくインターネット上の最新情報を参照できるようになり、より正確で有益な回答を得ることが可能になります。
MCPクライアントとMCPサーバー
MCPをしっかり理解するには「MCPクライアント」と「MCPサーバー」の仕組みを知ることが大切です。これらは、AI本体と外部リソースをつなぐ要となる要素であり、それぞれさらに細かい役割に分かれています。
MCPクライアントとは
MCPクライアントはユーザーからの指示を受けて最適なMCPサーバーを選択し、実行指示を送る役割を担います。また、MCPサーバーから取得した情報をLLMと再連携させ、最終的な返答テキストを出力することも可能です。主に以下の2つの基本機能を備えています。
- ルート(Roots)
ルートは、ローカルファイルやデータベースへのアクセス範囲を限定する仕組みです。LLMが必要とする情報のみにアクセスを絞り込み、余計なデータへアクセスするのを防ぐことで、情報の安全管理を実現します。 - サンプリング(Sampling)
サンプリングは、同じ問いに対して複数回応答を生成できる機能です。MCPクライアントは応答を繰り返し生成するたびに、さまざまなコンテキストを付加し、最終的により精度が高く関連性のある回答を導き出します。
MCPサーバーとは
MCPサーバーはMCPクライアントから受け取った実行指示をもとに、外部リソースへアクセスする「実行役」です。MCPサーバーは以下の3つの基本要素をMCPクライアントに提供します。
ツール(Tools)
ツールは、LLMが外部とやり取りをするためのアクションを提供します。生成したテキストだけでは不十分な場合に、外部システムと通信したり、関数を計算したり、外部APIを呼び出したり、ファイル操作を行うことができます。
リソース(Resources)
リソースは、ファイル、記録、APIからの応答など、LLMの回答生成に必要なコンテンツを提供する役割を担います。例えば、データベースに保存された情報やクラウド上のドキュメントファイルなどがリソースに該当します。
プロンプト(Prompts)
プロンプトは、LLMの応答をテンプレート化し、外部へのアクションを起こさずに対話を構造化するための仕組みです。異なる形式のデータを組み合わせたり、質問をコンテキスト化する役割を果たします。
MCPがクライアント・サーバー型である理由
MCPがクライアント・サーバー構造を採用しているのは、それぞれを独立して開発できるようにするためです。こうすることで、MCPサーバーを開発した企業が配布しユーザー側は自分たちのAIに簡単に組み込むことができる「エコシステム」が形成されます。
例えば、USB規格のように標準仕様を持つことで、異なる環境でも動作が保証され、開発や運用の自由度が飛躍的に高まります。クライアント・サーバー型のメリットは以下の通り。
- 開発企業と利用者で役割を分担できる
- MCPサーバーを共有インフラとして活用できる
- 新しいツールやリソースを追加しやすい
- 異なるAIやアプリ間で互換性を確保できる
このように、MCPがクライアント・サーバー型で構築されているおかげで、より多くの人が柔軟かつ効率的にAIの開発・運用を行える基盤が整えられているのです。
MCPサーバーの実装手順
開発者目線でMCPサーバーの実装方法について解説します。ここではMCPサーバーの開発方法と、MCPクライアントにCursorを利用する場合の設定について説明します。
開発環境のセットアップ
まずはMCPサーバーを開発するために必要なライブラリをインストールしましょう。以下はTypeScriptで実装する場合の例です。
# プロジェクトディレクトリ作成
mkdir mcp-server-example
cd mcp-server-example
# npm 初期化
npm init -y
# MCP SDK と TypeScript 関連のインストール
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node
次に、package.json
を修正して type
を "module"
に指定し、ビルドスクリプトを設定します。
{
"type": "module",
"bin": {
"my-mcp-server": "./build/index.js"
},
"scripts": {
"build": "tsc && chmod 755 build/index.js"
},
"files": [
"build"
]
}
そして、tsconfig.json
を作成します。
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./build",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
サーバーの実装
ここでは、アメリカの気象情報を取得するMCPサーバーを作成する例を紹介します。今回の例は、Githubの例と異なり、National Weather Service(NWS)のAPIを呼び出す部分を自作の関数に置き換えています。MCPサーバーは、ツール・リソース・プロンプトという3つの機能を提供できますが、ここではツール機能に絞った実装例です。
1.Serverインスタンスを作成
まず、サーバーのインスタンスを作成します。
src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
const server = new Server(
{
name: "weather-service",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
ツールを提供する際は、capabilities: { tools: {} }
を必ず指定しましょう。
2.利用できるツールを定義
サーバーが提供するツール一覧を定義します。
import { ListToolsRequestSchema } from "@modelcontextprotocol/sdk/server/index.js";
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_forecast",
description: "Retrieve the weather forecast for a specific location.",
inputSchema: {
type: "object",
properties: {
latitude: { type: "number", description: "Latitude of the location" },
longitude: { type: "number", description: "Longitude of the location" },
},
required: ["latitude", "longitude"]
}
}
]
};
});
例えば、ツール情報は以下のような要素で構成されます:
- name:ツール名
- description:ツールの説明
- inputSchema:ツール呼び出し時に渡すパラメータの定義
3.ツール実行時の処理を定義
実際にツールを呼び出したときの処理を定義します。
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/server/index.js";
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name !== "get_forecast") {
throw new Error("Unknown tool");
}
const { latitude, longitude } = request.params.arguments as {
latitude: number;
longitude: number;
};
const forecastText = await fetchWeatherForecast(latitude, longitude);
return {
content: [
{
type: "text",
text: forecastText
}
]
};
});
async function fetchWeatherForecast(lat: number, lon: number): Promise<string> {
// NWS API へのリクエスト例(簡略化)
const response = await fetch(`https://api.weather.gov/points/${lat},${lon}`);
const data = await response.json();
return `Forecast data for coordinates: ${lat}, ${lon}`;
}
ここで、MCPクライアントからツールが呼び出されると、request.params.name
でツール名を判別し、対応する処理を行います。引数は request.params.arguments
に含まれています。
4.MCPサーバーを起動する
最後に、サーバーを起動する処理を記述します。
import { stdioservertransport } from "@modelcontextprotocol/sdk/server/index.js";
const transport = new stdioservertransport();
await server.connect(transport);
これで、MCPサーバーの実装が完了です。
Cursorの設定
Cursor上でMCPサーバーを利用する場合、プロジェクト単位またはグローバル設定でサーバーを登録できます。設定ファイルは以下のパスに作成します:
- プロジェクト設定:
<project_root>/.cursor/mcp.json
- グローバル設定:
~/.cursor/mcp.json
設定例は次のとおりです。
{
"mcpServers": {
"weather-forecast": {
"command": "node",
"args": [
"/Users/ユーザー名/repos/github.com/your-org/mcp-server-example/build/index.js"
]
}
}
}
設定例の内容について説明します。"ユーザー名"
の箇所には、自分のPCで使用しているユーザー名を入力します。weather-forecast
は、MCPサーバーを識別するための任意の名前で、好きな文字列を設定して構いません。そして、command
と args
には、MCPサーバーを起動するためのコマンドと、その実行に必要な引数を指定します。
動作テスト
ここまでの設定が完了したら、いよいよ動作確認を行いましょう。
まず、Cursorの「Setting」→「MCP」を開くと、自分が実装したMCPサーバーが一覧に表示されます。表示されたサーバーの「Disabled」ボタンをクリックし、「Enabled」に切り替えることでサーバーを有効化します。起動が正常に完了すると、サーバー名の左側にあるランプが緑色に点灯します。
動作確認の際は、実際に天気について質問してみるのがおすすめです。例えば、次のような手順で試してみましょう。
- 「ロサンゼルスの天気を教えて」と入力してリクエストする
- MCPサーバーがNWS APIから天気情報を取得する
- 取得した情報を基に、気温・風向き・天候などの回答が返ってくる
このようにして、MCPサーバーが外部のデータを取得しリアルタイムでAIの回答に反映できることを確認できます。これで動作テストは無事完了です。
まとめ
MCPサーバーはAIが外部リソースを自在に活用するための重要な仕組みであり、AIの可能性を大きく広げる存在です。従来は個別に実装されていた外部連携が、MCPという共通プロトコルによって統一され、開発者はよりスピーディかつ柔軟にAIを進化させられるようになりました。
本記事ではMCPサーバーの基本的な概念から実装手順、そして具体的な活用例まで解説しました。実際にMCPサーバーを構築しAIエージェントの能力を引き出すことで、ビジネスの新たな可能性が開けることを実感できるでしょう。
