eMCP - 增强型 MCP 服务器
项目简介
eMCP 是一个基于 Model Context Protocol (MCP) 构建的服务器,它是 LiteMCP 的一个分支,旨在提供更强大的功能和灵活性。eMCP 扩展了 LiteMCP,增加了内置的身份验证处理和自定义中间件支持,使其成为构建安全、可扩展的 MCP 服务器的理想选择。如果您熟悉 LiteMCP,eMCP 可以作为近乎无缝的替代方案。
主要功能点
- 资源管理: 支持托管和管理各种资源,例如文件、数据库数据等,并提供标准化的数据访问能力。
- 工具注册与执行: 允许注册和执行外部工具,例如代码执行器、API 调用等,从而扩展 LLM 的能力边界。
- Prompt 模板: 支持定义和渲染 Prompt 模板,允许根据不同场景定制 LLM 交互模式。
- 内置身份验证: 提供可配置的身份验证处理程序,可以保护服务器端点安全,防止未授权访问。
- 自定义中间件: 支持使用中间件扩展服务器功能,例如请求日志记录、性能监控、请求预处理和响应后处理等,提供高度的定制化能力。
- 兼容 LiteMCP: 核心功能与 LiteMCP 保持兼容,可以作为 LiteMCP 的平滑升级方案。
- 支持多种传输协议: 默认支持 Stdio 传输协议,并可通过配置支持 SSE (Server-Sent Events) 等协议。
安装步骤
-
确保环境: 首先,请确保您的环境中已安装 Node.js 或 Bun。推荐使用 Bun,它拥有更快的包管理和运行速度。
-
安装 eMCP 包: 使用 npm 或 Bun 命令安装 eMCP 包:
npm install emcp # 或者使用 Bun (推荐) bun add emcp
服务器配置
MCP 客户端需要配置连接到 eMCP 服务器的信息。以下是针对不同传输类型的配置示例。
使用 Stdio 传输 (默认):
stdio 传输是最简单的配置方式,客户端和服务器通过标准输入/输出流进行通信。MCP 客户端通常需要配置服务器的启动命令 (command) 及其参数 (args)。
{ "serverName": "emcp-server", // 自定义服务器名称 "command": "node", // 启动服务器的命令,这里假设使用 Node.js 运行服务器脚本 "args": ["path/to/your/server.js"] // 命令参数,指向您的 eMCP 服务器启动脚本 (server.js) 的路径,请替换为实际路径 }
使用 SSE 传输:
SSE 传输允许服务器向客户端推送事件。如果 eMCP 服务器配置为使用 SSE 传输,则 MCP 客户端需要配置 SSE 相关的端点和端口信息。
{ "serverName": "emcp-sse-server", // 自定义服务器名称 "command": "node", "args": ["path/to/your/sse-server.js"], // 指向使用 SSE 传输的 eMCP 服务器启动脚本 "transport": { "type": "sse", // 指定传输类型为 SSE "endpoint": "/sse", // SSE 端点路径,与服务器配置一致 "port": 8120 // SSE 服务器端口,与服务器配置一致 } }
请根据您的实际服务器脚本路径和传输协议选择合适的配置,并确保 MCP 客户端能够正确读取并应用这些配置信息。
基本使用方法
-
创建服务器脚本: 创建一个 JavaScript 或 TypeScript 文件 (例如 'server.js') 作为您的 eMCP 服务器启动脚本。
-
引入 eMCP 库: 在脚本中引入 'emcp' 库:
const { eMCP } = require('emcp'); // JavaScript 语法 // import { eMCP } from 'emcp'; // TypeScript 语法 -
创建 eMCP 实例并添加功能: 创建 'eMCP' 服务器实例,并使用 'addTool', 'addResource', 'addPrompt' 等方法添加工具、资源和 Prompt:
const server = new eMCP("my-mcp-server", "1.0.0"); // 创建 eMCP 服务器实例,指定服务器名称和版本 server.addTool({ // 添加一个工具 name: "add", description: "Add two numbers", parameters: /* ... 定义工具参数 (使用 zod 库) ... */, execute: async (args) => { /* ... 工具执行逻辑 ... */ } }); server.addResource({ // 添加一个资源 uri: "file:///data/logs.txt", name: "Application Logs", mimeType: "text/plain", load: async () => { /* ... 加载资源数据的逻辑 ... */ } }); server.addPrompt({ // 添加一个 Prompt 模板 name: "git-commit", description: "Generate a Git commit message", arguments: /* ... 定义 Prompt 参数 ... */, load: async (args) => { /* ... 生成 Prompt 内容的逻辑 ... */ } }); // 可选: 添加自定义中间件 server.use(async (request, next) => { console.log("Request received:", request.method); const response = await next(); // 调用下一个中间件或核心处理器 console.log("Response sent:", response); return response; }); -
启动服务器: 调用 'server.start()' 方法启动 eMCP 服务器。您可以选择使用默认的 stdio 传输,或者配置为使用 SSE 等其他传输方式:
server.start(); // 默认使用 stdio 传输 // 使用 SSE 传输 (示例配置) // server.start({ transportType: 'sse', sse: { endpoint: '/sse', port: 8120 } }); -
运行服务器脚本: 使用 Node.js 或 Bun 运行您的服务器脚本:
node server.js # 或 (如果使用 Bun) bun server.js服务器启动后,MCP 客户端即可根据配置连接并使用 eMCP 服务器提供的资源、工具和 Prompt 功能。
请参考仓库中的 'examples' 目录下的示例代码,了解更详细的使用方法和配置选项。
信息
分类
开发者工具