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) 等协议。

安装步骤

  1. 确保环境: 首先,请确保您的环境中已安装 Node.js 或 Bun。推荐使用 Bun,它拥有更快的包管理和运行速度。

  2. 安装 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 客户端能够正确读取并应用这些配置信息。

基本使用方法

  1. 创建服务器脚本: 创建一个 JavaScript 或 TypeScript 文件 (例如 'server.js') 作为您的 eMCP 服务器启动脚本。

  2. 引入 eMCP 库: 在脚本中引入 'emcp' 库:

    const { eMCP } = require('emcp'); // JavaScript 语法
    // import { eMCP } from 'emcp';     // TypeScript 语法
  3. 创建 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;
    });
  4. 启动服务器: 调用 'server.start()' 方法启动 eMCP 服务器。您可以选择使用默认的 stdio 传输,或者配置为使用 SSE 等其他传输方式:

    server.start(); // 默认使用 stdio 传输
    
    // 使用 SSE 传输 (示例配置)
    // server.start({ transportType: 'sse', sse: { endpoint: '/sse', port: 8120 } });
  5. 运行服务器脚本: 使用 Node.js 或 Bun 运行您的服务器脚本:

    node server.js
    # 或 (如果使用 Bun)
    bun server.js

    服务器启动后,MCP 客户端即可根据配置连接并使用 eMCP 服务器提供的资源、工具和 Prompt 功能。

请参考仓库中的 'examples' 目录下的示例代码,了解更详细的使用方法和配置选项。

信息

分类

开发者工具