Building MCP Servers: Part 1 — Getting Started with Resources について
MCP 開発者向けに、Node.js、TypeScript、`@modelcontextprotocol/sdk` を使った基本的な MCP サーバーの作成方法を解説します。ファイル、データベース、API の内容を読み取り専用リソースとして公開する例と、ツールの概要を扱います。
主な機能
- 01MCP リソースの概念紹介
- 02Node.js と TypeScript のプロジェクト設定
- 03URI とメタデータを持つ読み取り専用リソース
- 04ドキュメント、ログ、顧客データの例
活用シーン
- 01LLM にドキュメントやガイドを提供
- 02ログやエラーメッセージをリソースとして公開
- 03顧客データの要約をモデルに提供
MCP 対応
`@modelcontextprotocol/sdk` で MCP サーバーを構築し、読み取り専用コンテンツを MCP クライアントに公開する方法を示します。MCP ツールについても簡潔に紹介します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバーの構築:パート 1 — リソースの概要
このチュートリアルでは、Claude などの大規模言語モデル(LLM)に読み取り専用リソースを公開する、基本的な MCP(Model Context Protocol)サーバーのセットアップ方法を説明します。MCP とは何か、リソースが役立つ理由、そして @modelcontextprotocol/sdk を使って Node.js/TypeScript プロジェクトを初期化する方法を学びます。
目次
- Model Context Protocol とは?
- MCP リソースとは?
- リソースを使う理由
- サーバーの例
- はじめに
- 次のステップ
- MCP ツール(動的アクション)
- ツールとプロンプトの比較
- 挨拶サーバーを完成させる
- 出典と参考資料
- ライセンス
Model Context Protocol とは?
Model Context Protocol(MCP)は、LLM が外部のデータやサービスと安全にやり取りできるようにする標準化されたインターフェースです。MCP を使うと、ファイル、データベース、API などを、制御された方法で AI モデルに公開できます。
MCP リソースとは?
リソースは、一意の URI を介してコンテンツ(テキストまたはバイナリ)を公開する読み取り専用のエンドポイントです。次のような例があります。
file:///path/to/file.txtdatabase://users/123api://weather/latest
各リソースには、表示名や MIME タイプなどのメタデータがあります。
リソースを使う理由
リソースを使うと、LLM は次の操作を実行できます。
- ファイルやデータベースを読み取る
- コマンドを実行する
- API にアクセスする
- ローカルツールとやり取りする
すべてのやり取りにはユーザーの明示的な許可が必要なため、安全性と監査可能性が確保されます。
サーバーの例
ドキュメントサーバー
ドキュメントを公開します。
docs://api/reference → API documentation
docs://guides/getting-started → User guides
ログ分析サーバー
システムログを提供します。
logs://system/today → Today's logs
logs://errors/recent → Recent error messages
顧客データサーバー
顧客に関する分析情報を提供します。
customers://profiles/summary → Customer overview
customers://feedback/recent → Latest feedback
はじめに
前提条件
- Node.js(>= 16)
- npm(>= 8)
- TypeScript
インストール
mkdir hello-mcp
cd hello-mcp
npm init -y
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node
プロジェクトのセットアップ
-
package.jsonを更新します。{ "name": "hello-mcp", "version": "1.0.0", "type": "module", "scripts": { "build": "tsc", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.1.0" }, "devDependencies": { "typescript": "^5.7.2", "@types/node": "^22.10.5" } } -
tsconfig.jsonを作成します。{ "compilerOptions": { "target": "ES2022", "module": "Node16", "moduleResolution": "Node16", "outDir": "./build", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"] } -
src/ディレクトリを作成し、MCP サーバーのコーディングを開始します。
次のステップ
トランスポートの設定や高度な機能については、パート 2 をご覧ください。
MCP ツール(動的アクション)
MCP ツール(動的アクションとも呼ばれます)を使うと、セッション中に LLM が呼び出せるカスタム関数を定義でき、静的なリソースを超えて MCP の機能を拡張できます。
ツールとプロンプトの比較
| 項目 | MCP ツール | プロンプト |
|---|---|---|
| 機能 | コードとアクションを実行 | 静的な自然言語 |
| セキュリティ | 制御可能で監査可能 | 外部への影響なし |
| 柔軟性 | 高い(カスタムロジック) | 推論に限定 |
挨拶サーバーを完成させる
以下は、挨拶リソースを公開するシンプルな挨拶サーバーの例です。
import { ResourceServer } from "@modelcontextprotocol/sdk";
const server = new ResourceServer({ port: 3000 });
server.addResource({
uri: "greeting://hello",
displayName: "Greeting Resource",
fn: async (req) => {
const name = req.query.name || "World";
return `Hello, ${name}!`;
},
});
server.listen(() => console.log("Greeting server running on port 3000"));
出典と参考資料
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。