AIツールを実務に導入する際、多くの開発現場が直面するのが「社内データとの安全な連携」という課題です。セキュリティポリシーの観点からクラウド上に機密データをアップロードできない、あるいは自社独自の認証基盤を持つレガシーシステムがあり、既存のSaaS連携ツールでは対応しきれないといったケースは少なくありません。
この「AIとローカル環境の分断」を解決する技術として、Anthropic社が提唱するModel Context Protocol(MCP)が注目されています。本記事では、情報システム部門のエンジニアやAI活用を推進するテックリードに向けて、Node.jsを用いたMCPサーバの構築手順を解説します。
公式SDKを用いた最小構成の実装から、実用的なローカルデータベース連携、そして運用時のデバッグ手法までを網羅し、AIエージェントの可能性を自社仕様に拡張するための実践的なアプローチを提供します。
なぜ今「MCPサーバの自作」が必要なのか?
AIモデルが外部のデータソースやツールと安全かつ標準化された方法で通信するための規格として、MCPの重要性が高まっています。既存の連携ツールを導入するだけでなく、自社専用のMCPサーバを構築することには、技術的およびセキュリティ的な明確な理由があります。
Model Context Protocolが解消するAIの限界
一般的なAIチャットアシスタントは、インターネット上の公開情報や、ユーザーが手動でアップロードしたファイルにしかアクセスできません。しかし、実際の業務要件では「ローカルネットワーク内に閉じた顧客データベースの値を参照したい」「社内専用のタスク管理APIを直接叩いてチケットを起票したい」といった動的な連携が求められます。
Anthropic社の公式ドキュメントによると、MCPはAIクライアント(Claude Desktopなど)と、ローカルまたはリモートで動作するMCPサーバとの間で、標準化された通信ルール(JSON-RPCベース)を提供します。これにより、AIはサーバ側で定義された「ツール(機能)」や「リソース(データ)」を呼び出すことができ、セキュアな境界線の内側にある社内システムと安全に対話することが可能になります。
外部API連携とローカル操作の自由度
オープンソースとして公開されている汎用的なMCPサーバを利用するだけでなく、自作することの最大のメリットは「ガバナンスとコントロールの完全な掌握」にあります。
既製品のサーバでは、自社固有の複雑なデータベーススキーマや、特殊なトークン処理を伴う社内APIに柔軟に対応できないことが多々あります。自作のMCPサーバを構築すれば、AIに「何を許可し、何を許可しないか」をコードレベルで厳密に定義できます。
例えば、データベースへのアクセスを特定のテーブルのSELECT文のみに制限したり、AIが実行できるコマンドの引数をホワイトリスト形式でバリデーションしたりと、組織のセキュリティ要件に合わせた堅牢な設計が実現します。AIの利便性を高めつつ、情報漏洩や意図しないシステム変更(破壊的変更)を防ぐためには、この「自作によるコントロール」が有効な選択肢となります。
環境構築:開発を始めるためのプリセット

MCPサーバの開発を始めるにあたり、まずはベースとなる環境を整えます。本記事では、フロントエンドからバックエンドまで広く普及しており、公式SDKのサポートも手厚いNode.jsを使用した構築手順を解説します。
必要なツール(Node.js, npm, npx)のインストール
開発環境には、最新のLTS(Long Term Support)バージョンのNode.jsの利用を推奨します。MCP SDKやその依存パッケージが最新の言語機能(ES Modulesの特定の挙動など)を要求する場合があるため、アクティブにサポートされているLTSバージョンを使用することで、不要なトラブルシューティングの時間を削減できます。
ターミナルを開き、以下のコマンドで正しくインストールされているか確認してください。
node -v
npm -v
バージョン番号が表示されれば準備は完了です。Node.jsをインストールすると、パッケージマネージャーのnpmと実行ツールのnpxも同時に利用可能になります。
Claude Desktopの準備と設定ファイルの確認
開発したMCPサーバをAIクライアントに認識させるためには、設定ファイルの編集が必要です。Claude Desktopを使用する場合、公式ドキュメントで案内されている特定の設定ファイル(claude_desktop_config.json)に、自作サーバの起動コマンドを記述します。
公式ドキュメントに基づく一般的な設定ファイルの配置場所は以下の通りです:
- macOSの場合:
~/Library/Application Support/Claude/claude_desktop_config.json - Windowsの場合:
%APPDATA%\\Claude\\claude_desktop_config.json
このJSONファイルに、自作するMCPサーバのパスを登録することで、Claude Desktopからの呼び出しが可能になります。なお、ファイルパスや設定のスキーマは将来のアップデートで変更される可能性があるため、実装の際は必ずAnthropicの公式ドキュメントで最新の仕様をご確認ください。
設定ファイルを編集した後は、設定を再読み込みさせるためにClaude Desktopアプリケーションの再起動が必要になります。
【実践1】最小構成で作る:Hello World MCPサーバ

環境が整ったところで、最もシンプルなMCPサーバを構築してみましょう。クライアントからの呼び出しに対して、固定の文字列を返す「Echoサーバー」を作成します。この実装を通じて、MCPの通信の仕組みをコードレベルで把握します。
プロジェクトの初期化と依存関係の導入
まずはプロジェクト用のディレクトリを作成し、初期化を行います。
mkdir mcp-hello-world
cd mcp-hello-world
npm init -y
次に、MCPサーバを構築するための公式SDKをインストールします。
npm install @modelcontextprotocol/sdk
また、Node.jsでES Modulesを使用するため、package.json に "type": "module" を必ず追記してください。
ResourceとToolの基本実装
MCPの仕様において、サーバが提供する機能は主に「Resource(リソース:AIに提供する静的なコンテキスト)」と「Tool(ツール:AIが実行できる動的な機能)」に大別されます。ここでは、AIがユーザーに挨拶を返すためのシンプルなToolを実装します。
index.js というファイルを作成し、以下のコードを記述します。
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// 1. サーバの初期化
const server = new Server({
name: "hello-world-server\
コメント