Model Context Protocol (MCP) Implementation について
Model Context Protocol (MCP) Implementationは、MCPサーバーとクライアントの学習・構築に使えるモジュール型フレームワークです。プロトコル処理、stdioとHTTP+SSEのトランスポート、テスト用の計算機サンプルを備えています。
主な機能
- 01JSON-RPC 2.0とプロトコル初期化
- 02ケイパビリティ交渉とツール登録
- 03JSON Schema検証とエラー処理
- 04STDIOとHTTP+SSEのトランスポート
- 05サーバー、クライアント、計算機のサンプル
- 06テストクライアントとMCP Inspectorによるデバッグ
活用シーン
- 01動作する実装を通じたMCPの学習
- 02独自ツールを備えたMCPサーバーの構築
- 03両トランスポートでのクライアント・サーバー通信のテスト
MCP 対応
ツールの検出と呼び出し、標準化された結果、エラー処理を含むMCPサーバーとクライアントのコンポーネントを実装しています。STDIOとHTTP+SSEのトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Model Context Protocol(MCP)の実装
このプロジェクトは、AI ツールを構築するための Model Context Protocol(MCP) を実装しています。MCP 互換のサーバーやクライアントを作成するために使用できる、モジュール式のフレームワークを提供します。
🔍 Model Context Protocol(MCP)とは?
Model Context Protocol(MCP)は、AI アシスタントが外部のツールやデータソースとやり取りできるようにするオープンプロトコルです。
主な機能
- 利用可能なツールとその機能を一覧表示する
- パラメーターを指定してツールを呼び出す
- 一貫した方法でエラーを処理する
- 標準化された形式でツールの結果を処理する
📚 詳細については、MCP Notes をご覧ください。
✨ 機能
| カテゴリー | 機能 |
|---|---|
| コア | ✅ JSON-RPC 2.0 メッセージ処理 ✅ プロトコルの初期化 ✅ ケイパビリティのネゴシエーション |
| ツール | ✅ JSON Schema によるツールの登録 ✅ ツールの呼び出しと検証 ✅ 標準化されたエラー処理 |
| トランスポート | ✅ STDIO のサポート ✅ HTTP+SSE のサポート |
| テスト | ✅ テスト用クライアント |
📁 プロジェクト構成
src/
├── core/ # Core MCP server implementation
├── transports/ # Transport layer implementations (stdio, HTTP+SSE)
├── tools/ # Tool definitions and handlers
├── examples/ # Example servers and clients
│ └── public/ # Static files for HTTP server
└── index.js # Main entry point for the library
🚀 はじめに
前提条件
- Node.js 20.x 以降
- npm または pnpm
インストール
# Clone the repository
git clone https://github.com/AshikNesin/learn-mcp-by-building
cd learn-mcp-by-building
# Install dependencies
npm install
# or
pnpm install
🏃♂️ サンプルの実行
STDIO サーバーとクライアント
STDIO サーバーを実行します:
npm run server:stdio
# or
node src/examples/stdio-server.js
STDIO クライアントでテストします:
npm run client:stdio
# or
node src/examples/stdio-client.js
両方を一緒に実行して、一連のテストを確認します:
npm run test:stdio
# or
node src/examples/stdio-client.js | node src/examples/stdio-server.js
HTTP+SSE サーバーとクライアント
HTTP+SSE サーバーを実行します:
npm run server:sse
# or
node src/examples/http-sse-server.js --port 5000
利用可能なオプション:
--port:リッスンするポート(デフォルト:5000)--host:バインドするホスト(デフォルト:localhost)--path:エンドポイントのパス(デフォルト:/sse)--cors:CORS を有効にする(デフォルト:true)--serve-static:src/examples/public から静的ファイルを配信する(デフォルト:true)
HTTP+SSE クライアントでテストします:
npm run client:sse
# or
node src/examples/http-sse-client.js --server http://localhost:5000/sse
起動すると、ブラウザーで http://localhost:5000 にアクセスして、ウェブベースのクライアントインターフェースを利用することもできます:

このインターフェースでは、使いやすい方法で MCP サーバーとやり取りできます。電卓のコントロールとリアルタイムログが横並びに表示されます。
🔍 MCP Inspector の使用
公式の MCP Inspector を使って、サーバーをデバッグできます:
npm run debug
MCP Inspector は、MCP サーバーの監視とデバッグを行うためのビジュアルインターフェースを提供します:

🧮 電卓ツール
|
操作
|
パラメーター
|
エラー処理
|
🧑💻 MCP フレームワークでの開発
新しいサーバーの作成
import { McpServer } from '../core/index.js';
import { StdioTransport } from '../transports/index.js';
import { calculatorToolDefinition, handleCalculatorTool } from '../tools/index.js';
// Create server instance
const server = new McpServer(
{ name: 'my-server', version: '1.0.0' },
{ capabilities: { tools: { listChanged: true } } }
);
// Register tool handlers
server.setRequestHandler('tools/list', () => ({ tools: [calculatorToolDefinition] }));
server.setRequestHandler('tools/call', async (params) => {
if (params.name === 'calculator') {
return handleCalculatorTool(params.arguments);
}
throw new Error(`Tool ${params.name} not found`);
});
// Start the server
const transport = new StdioTransport();
server.connect(transport)
.then(() => console.error('Server ready!'));
新しいツールの作成
src/tools/に新しいファイルを作成します:
// src/tools/my-tool.js
export const myToolDefinition = {
name: 'my-tool',
description: 'Description of my tool',
inputSchema: {
type: 'object',
properties: {
// Define parameters
},
required: []
}
};
export async function handleMyTool(args) {
// Implement tool logic
return {
content: [
{
type: 'text',
text: 'Result from my tool'
}
]
};
}
src/tools/index.jsでツールをエクスポートします:
export * from './my-tool.js';
🛠️ プロトコルの機能
- ✅ ケイパビリティのネゴシエーション
- ✅ ツールリストの変更通知
- ✅ 標準化されたエラー処理
- ✅ JSON Schema による検証
- ✅ 構造化されたツールの結果
- ✅ トランスポート層の抽象化
📚 外部リソース
📝 ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。