mcpField
D
Dynamic MCP Server Framework

Dynamic MCP Server Framework

本地服务
github.com/scitara-cto开发工具1167 周前更新

关于 Dynamic MCP Server Framework

Dynamic MCP Server Framework 是用于构建可扩展 MCP 服务的框架,面向需要用户管理和工具访问控制的开发者。它支持运行时动态管理工具,并按用户会话加载工具。

主要功能

  1. 01运行时创建、删除和授权工具
  2. 02用户管理与基于角色的授权
  3. 03工具共享及细粒度访问控制
  4. 04API 密钥认证
  5. 05按用户会话加载工具
  6. 06可扩展 HTTP 与数据库层

适用场景

  1. 01构建用户专属工具集合的 MCP 服务
  2. 02按用户共享并控制工具访问
  3. 03为 MCP 服务加入 API 密钥认证
  4. 04扩展 HTTP 路由和 MongoDB 集合

MCP 相关

该框架用于构建 MCP 服务,通过 Streamable HTTP 的 /mcp 端点提供工具,并支持 API 密钥认证及按用户会话加载工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

动态 MCP 服务框架

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


🚀 概览

Dynamic MCP Server 支持构建安全、感知用户且可扩展的 AI 工具服务。它支持:

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

🌟 主要功能

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

🔑 身份验证(API 密钥)

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

🚀 传输协议

Dynamic MCP Server 同时支持旧版和现代 MCP 传输协议:

Streamable HTTP 传输
  • 协议版本:2025-03-26
  • 端点:/mcp
  • 功能:现代、高效的单端点设计
  • 身份验证:查询参数 ?apiKey=your-key 或请求头 x-apikey: your-key
  • 用途:建议用于新的集成

� 文档

工具可见性模型: 默认情况下,所有工具对用户可见。用户可以使用 hide-tool 和 unhide-tool 操作隐藏工具。详情请参阅用户管理和工具管理与共享。


🛠️ 快速开始

有关安装和基本用法,请参阅快速入门。


📝 贡献

欢迎贡献!更多详情请参阅文档。

📄 许可证

MIT


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

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

示例:

const myHandlerPackage = {
  name: "my-domain",
  tools: [
    {
      name: "my-tool",
      description: "A custom tool",
      inputSchema: {
        /* ... */
      },
      handler: { type: "my-domain", config: {} },
      rolesPermitted: ["user", "admin"],
    },
    // ...more tools...
  ],
  handler: async (args, context, config, toolName) => {
    // Dispatch logic based on toolName, if needed
  },
};

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 中所有 {{...}} 模板。处理程序会收到合并并解析后的参数,无需手动映射。

完整详情和示例请参阅工具编写。


评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。