返回市场
动态-mcp-服务器

动态-mcp-服务器

作者:scitara-cto8 星标更新:2025-07-16

项目介绍

动态MCP服务器框架

一个灵活且可扩展的框架,用于构建具有现代API密钥认证、用户管理和动态工具共享功能的模型上下文协议(MCP)服务器。


🚀 概述

动态MCP服务器支持安全、用户感知和可扩展的AI工具服务器。它支持:

  • 基于API密钥的身份验证(简单,与所有MCP客户端兼容)
  • 用户管理和授权(基于MongoDB)
  • 基于会话的按用户工具加载
  • 工具共享和细粒度访问控制
  • 下游项目可扩展的HTTP和数据库层

🌟 主要特性

  • 动态工具管理:在运行时创建、删除和授权工具——工具不限于启动或代码中的静态定义。这实现了真正的运行时可扩展性,并且是与其他大多数MCP服务器的主要区别。
  • 用户管理:添加、更新、删除和列出用户;管理员初始化;基于角色的访问。
  • 工具共享:与其他用户共享工具,管理访问级别,并接收实时更新。
  • 现代身份验证:简单的API密钥认证,使用MongoDB进行授权。
  • 可扩展性:在下游项目中添加自定义HTTP路由和MongoDB集合。
  • 基于会话的工具加载:工具按用户会话加载,而不是全局加载。

🔑 身份验证(API密钥)

  • 每个用户都会分配一个唯一的apiKey(在用户创建时自动生成)。
  • 客户端必须通过查询参数或头部提供apiKey来完成身份验证:
    • 查询参数?apiKey=your-key?apikey=your-key
    • 头部x-apikey: your-keyapikey: your-key
  • 流式HTTP传输(现代)/mcp?apiKey=.../mcp 带有头部
  • 服务器通过查找数据库中的apiKey来验证用户。

🚀 传输协议

动态MCP服务器支持传统的和现代的MCP传输协议:

流式HTTP传输

  • 协议版本:2025-03-26
  • 端点/mcp
  • 特点:现代、高效、单端点设计
  • 身份验证:查询参数 ?apiKey=your-key 或头部 x-apikey: your-key
  • 用法:推荐用于新集成

� 文档

工具可见性模型: 所有工具默认对用户可见。用户可以使用hide-toolunhide-tool操作隐藏工具。详情见用户管理工具管理和共享


🛠️ 快速开始

参阅入门指南了解安装和基本使用方法。


📝 贡献

欢迎贡献!参阅文档获取更多细节。

📄 许可证

MIT


🧩 处理器和工具注册(新模式)

现在,工具通过处理器包注册。每个处理器包将相关的工具分组,并提供一个执行工具的处理器函数。这是推荐的可扩展性和维护性的模式。

示例:

const myHandlerPackage = {
  name: "my-domain",
  tools: [
    {
      name: "my-tool",
      description: "一个自定义工具",
      inputSchema: {
        /* ... */
      },
      handler: { type: "my-domain", config: {} },
      rolesPermitted: ["user", "admin"],
    },
    // ...更多工具...
  ],
  handler: async (args, context, config, toolName) => {
    // 根据toolName需要的分派逻辑
  },
};

const server = new DynamicMcpServer({ name:  "my-mcp", version: "1.0.0" });
await server.start();
await server.registerHandler(myHandlerPackage);

参阅入门指南示例获取更多细节。


🧩 工具参数映射(config.args)

在定义工具时,您可以使用config.args字段将用户提供的工具选项(来自inputSchema)映射到您的动作处理器期望的参数。此映射支持:

  • 字面值(例如,"country": "US"
  • 模板变量(例如,"city": "{{location}}"
  • 嵌套对象和数组(所有模板递归解析)

示例:

handler: {
  type: "weather-tools",
  config: {
    url: "https://api.openweathermap.org/data/2.5/weather",
    args: {
      queryParams: {
        appid: "{{OPENWEATHER_API_KEY}}",
        q: "{{location}}",
        units: "{{units}}"
      }
    }
  }
}

当调用工具时,系统会自动使用工具输入和环境变量解析config.args中的所有{{...}}模板。处理器接收到合并并解析过的参数——无需手动映射。

参阅工具编写获取完整细节和示例。