使用说明
动态MCP服务器框架
一个灵活、可扩展的框架,用于构建具有现代API密钥认证、用户管理和动态工具共享的模型上下文协议(MCP)服务器。
🚀 概述
动态MCP服务器支持安全、用户感知和可扩展的AI工具服务器。它支持:
- 基于API密钥的身份验证 (简单,与所有MCP客户端兼容)
- 用户管理和授权 (MongoDB支持)
- 基于会话、按用户加载工具
- 工具共享和细粒度访问控制
- 为下游项目提供可扩展的HTTP和数据库层
🌟 主要特点
- 动态工具管理:在运行时创建、删除和授权工具——工具不仅限于启动时或代码中的静态定义。这实现了真正的运行时可扩展性,是与大多数其他MCP服务器的主要区别。
- 用户管理:添加、更新、删除和列出用户;管理员引导;基于角色的访问。
- 工具共享:与其他用户共享工具,管理访问级别,并接收实时更新。
- 现代身份:简单的API密钥认证,MongoDB授权。
- 可扩展性:在下游项目中添加自定义HTTP路由和MongoDB集合。
- 基于会话的工具加载:工具是按用户会话加载的,而不是全局加载的。
🔑 身份验证(API密钥)
- 为每个用户分配一个唯一的
apiKey(在用户创建时自动生成)。 - 要进行身份验证,客户端必须提供
apiKey通过查询参数OR头:- 查询参数:
?apiKey=your-key或?apikey=your-key - 头球:
x-apikey: your-key或apikey: your-key
- 查询参数:
- 流式HTTP传输(现代):
/mcp?apiKey=...或/mcp带标题 - 服务器通过查找以下内容对用户进行身份验证
apiKey在数据库中。
🚀 传输协议
动态MCP服务器支持传统和现代MCP传输协议:
可流式HTTP传输
- 协议版本: 2025-03-26
- 端点:
/mcp - 特性:现代、高效、单端点设计
- 认证:查询参数
?apiKey=your-keyOR标题x-apikey: your-key - 用法:建议用于新集成
� 文档
工具可见性模型: 默认情况下,所有工具对用户都是可见的。用户可以使用
hide-tool和unhide-tool行动。看 用户管理 和 工具管理与共享 了解详情。
🛠️ 快速开始
看 入门指南 用于安装和基本使用。
📝 贡献
欢迎投稿!看 文件 了解更多详情。
📄 许可证
麻省理工学院
🧩 处理程序和工具注册(新模式)
工具现在通过注册 处理程序包每个处理程序包都对相关工具进行分组,并为工具执行提供一个处理程序函数。这是可扩展性和可维护性的推荐模式。
例子:
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中创建模板。处理程序接收合并和解析的参数,不需要手动映射。
看 工具编写 查看完整的细节和示例。