eMCP について
eMCPはMCPサーバー構築用のTypeScriptフレームワークです。LiteMCP風のAPIに、任意で使える認証機能と階層型ミドルウェアを加えています。
主な機能
- 01LiteMCPの機能
- 02組み込み認証ハンドラー
- 03階層型カスタムミドルウェア
活用シーン
- 01MCPサーバーへのリクエスト認証の追加
- 02サーバーハンドラーの前後でのミドルウェア実行
MCP 対応
eMCPはMCPサーバーを構築するフレームワークです。MCPリクエストの処理に認証ハンドラーやカスタムミドルウェアを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
eMCP
組み込みの認証処理やカスタムミドルウェアなどの拡張機能を備えた、LiteMCP TS ライブラリのフォークです。
特長
LiteMCP などのツールとほぼそのまま置き換えられるように設計されています。そのため、追加された機能はすべて現在オプションです。
- LiteMCP の現在の全機能
- 組み込みの認証ハンドラー
- カスタムのレイヤードミドルウェアをサポート
クイックスタート
Bun または NPM でインストールします。
npm i emcp
# or use Bun (preferred)
bun add emcp
基本的な使い方
(任意)サンプルを実行します。
bun run example:basic
bun run example:auth
bun run example:middleware
bun run example:advanced
const server = new eMCP("mcp-server-with-auth", "1.0.0", {
authenticationHandler: async (request) => {
// implement your custom auth logic here
return true;
},
});
// Request to this tool, or any other resource or prompt will
// require authentication governed by the handler
server.addTool({
name: "add",
description: "Add two numbers",
parameters: z.object({
a: z.number(),
b: z.number(),
}),
execute: async (args) => {
server.logger.debug("Adding two numbers", args);
return args.a + args.b;
},
});
カスタムミドルウェア
const server = new eMCP("mcp-server-with-middleware", "1.0.0", {
authenticationHandler: async (request) => {
// implement your custom auth logic here
return true;
},
});
// This will time entire req -> res cycle, including middlewares
server.use(async (request, next) => {
const startTime = Date.now();
server.logger.debug("Request started", { method: request.method });
// Wait for all inner middleware and the handler to complete
const response = await next();
const endTime = Date.now();
server.logger.debug("Request completed", {
method: request.method,
duration: `${endTime - startTime}ms`,
});
return response;
});
ミドルウェアの仕組み
eMCP のミドルウェアは、登録された順に実行されます。すべてのミドルウェアハンドラーが next() ブロックに到達すると、通常の MCP 処理が実行されます。サーバーの処理が完了すると、next() ブロックの後にコードがあるミドルウェアハンドラーは、逆順に実行されます。
簡単に言うと、次のような流れです。
<---- Request received ----
1. Middleware 1
2. Middleware 2
<---- Pre-processing done ---->
4. Server handler
<---- Post-processing start ---->
5. Middleware 2
6. Middleware 1
---- Response sent ---->
Hono のようなフレームワークに慣れている方には、おなじみの仕組みです。
ロードマップ
- MCP<->MCP 間の快適な通信
- フレームワークへの統合
なぜ?
そうしたかったからです
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。