一个灵活且可扩展的框架,用于构建具有现代API密钥认证、用户管理和动态工具共享功能的模型上下文协议(MCP)服务器。
动态MCP服务器支持安全、用户感知和可扩展的AI工具服务器。它支持:
apiKey(在用户创建时自动生成)。apiKey来完成身份验证:
?apiKey=your-key 或 ?apikey=your-keyx-apikey: your-key 或 apikey: your-key/mcp?apiKey=... 或 /mcp 带有头部apiKey来验证用户。动态MCP服务器支持传统的和现代的MCP传输协议:
/mcp?apiKey=your-key 或头部 x-apikey: your-key工具可见性模型: 所有工具默认对用户可见。用户可以使用
hide-tool和unhide-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字段将用户提供的工具选项(来自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中的所有{{...}}模板。处理器接收到合并并解析过的参数——无需手动映射。
参阅工具编写获取完整细节和示例。