eMCP 是 LiteMCP 的一个分支,增加了内置的身份验证处理和自定义中间件支持等功能。
此工具旨在作为类似 LiteMCP 工具的近乎直接替换。因此,所有新增的功能目前都是可选的。
通过 Bun 或 NPM 安装:
npm i emcp
# 或者使用 Bun(推荐)
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) => {
// 在这里实现你的自定义认证逻辑
return true;
},
});
// 对这个工具或任何其他资源或提示的请求
// 都需要由处理器管理的身份验证
server.addTool({
name: "add",
description: "加两个数",
parameters: z.object({
a: z.number(),
b: z.number(),
}),
execute: async (args) => {
server.logger.debug("正在加两个数", args);
return args.a + args.b;
},
});
const server = new eMCP("mcp-server-with-middleware", "1.0.0", {
authenticationHandler: async (request) => {
// 在这里实现你的自定义认证逻辑
return true;
},
});
// 这会计算整个请求到响应周期的时间,包括中间件
server.use(async (request, next) => {
const startTime = Date.now();
server.logger.debug("请求开始", { method: request.method });
// 等待所有内部中间件和处理器完成
const response = await next();
const endTime = Date.now();
server.logger.debug("请求完成", {
method: request.method,
duration: `${endTime - startTime}ms`,
});
return response;
});
eMCP 中的中间件按照注册顺序运行。一旦每个中间件处理器都执行了其 next() 块,则标准的 MCP 处理程序将发生。当服务器完成处理后,中间件处理器的顺序将反向运行,对于 next() 块之后的代码也是如此。
简单来说,它看起来像这样:
<---- 接收到请求 ----
1. 中间件 1
2. 中间件 2
<---- 预处理完成 ---->
4. 服务器处理器
<---- 后处理开始 ---->
5. 中间件 2
6. 中间件 1
---- 发送响应 ---->
如果你熟悉像 Hono 这样的框架,那么这对你来说应该很熟悉。
因为我想要这样做