按需MCP工具
一个模型上下文协议(MCP)服务器,支持通过AI代理实现动态工具注册和执行。可以实时注册自定义工具,并由基于Goose配方的代理进行模拟。
概述
这个MCP服务器允许您在运行时动态注册新工具,而无需重启服务器。当您调用已注册的工具时,服务器会使用Goose配方(render_template.yaml) 用于模拟工具的执行,并根据工具的合约生成真实的输出。这有助于在构建实际集成之前,对工具的功能进行原型设计、测试工作流程或创建模拟实现。
组件
资源
服务器为监控已注册工具提供资源:
- 工具定义资源 (
tool://internal/{tool-name})
- 返回完整的工具架构,包括名称、描述、参数、预期输出和副作用 - 包括通话次数统计,用于监控使用情况
- 统计资源 (
stats://internal/summary)
- 显示汇总统计信息:已注册工具总数,已调用次数总计 - 按调用次数列出前10大工具
提示
- 使用工具的计划一个有助于协调工具使用的规划提示
- 参数: goal (必填), notes (可选) - 列出当前所有已注册的工具,并在需要时建议注册新的工具
工具
核心工具
- 注册工具动态注册一个新的按需工具
- 必需参数: - name工具标识符(字符串) - description该工具的作用(字符串) - paramSchema定义工具参数的JSON对象。每个参数应具有 description 和 type 属性。可以以对象或JSON字符串的形式提供。 - expectedOutput工具返回结果的描述(字符串) - sideEffects副作用的描述,例如,“向天气服务发出API调用”或“无 - 生成模拟数据”(字符串)
动态工具
一旦注册,工具即可立即调用。每个已注册的工具:
- 接受一个
params参数(对象或JSON字符串) - 通过Goose配方执行(
render_template.yaml) 该技术使用人工智能模型生成逼真的输出 - 返回与预期输出合同相匹配的模拟输出
- 当有新工具注册或工具使用统计信息发生变化时,服务器会自动通知已连接的MCP客户端
它是如何工作的
- 注册一个工具 使用
register-tool带有您所需架构的MCP工具 - 工具现已可用 立即 - 服务器向已连接的客户端发送通知
- 调用工具 具有特定的参数值
- 鹅肉食谱执行 模拟工具并根据合同生成逼真的输出
- 查看统计数据 通过资源监控工具使用情况和通话历史
建筑学
┌─────────────────┐
│ MCP Client │
│ (Goose, etc) │
└────────┬────────┘
│
│ register-tool
▼
┌─────────────────────────┐
│ MCP Server │
│ (mcp-on-demand-tools) │
│ │
│ • Stores tool metadata │
│ • Tracks call history │
│ • Provides resources │
└────────┬────────────────┘
│
│ invoke: tool-name(params)
▼
┌─────────────────────────┐
│ Goose Recipe Runner │
│ (render_template.yaml) │
│ │
│ Simulates tool based │
│ on contract & params │
└─────────────────────────┘示例工作流程
// Step 1: Register a weather forecast tool
{
"name": "get-weather-forecast",
"description": "Fetches weather forecast for a given location",
"paramSchema": {
"location": {
"description": "City name or coordinates",
"type": "string"
},
"days": {
"description": "Number of days to forecast (1-7)",
"type": "integer"
}
},
"expectedOutput": "Weather forecast data including temperature, conditions, and precipitation",
"sideEffects": "None - simulated data generation"
}
// Step 2: Tool is now available in MCP
// Step 3: Invoke it
{
"params": {
"location": "San Francisco",
"days": 3
}
}
// Step 4: Goose generates realistic weather data matching the contract安装
先决条件
要求:
- Python 3.12 或更高版本
- 鹅 - 必须安装并添加到您的PATH环境变量中
uv包管理器(推荐)或pip
重要的这个服务器需要Goose来运行。它使用Goose的配方来模拟工具执行,因此在使用这个MCP服务器之前,您必须先安装Goose。
兼容性说明此服务器与支持动态工具列表更新的MCP客户端(如Goose Desktop)配合效果最佳。Claude Code客户端在注册新工具时不会自动刷新工具列表,因此可能与该客户端配合效果不佳。
安装MCP服务器
将服务器配置添加到您的配置文件中:
选项1:使用已发布的包(推荐)
{
"mcpServers": {
"mcp-on-demand-tools": {
"command": "uvx",
"args": ["mcp-on-demand-tools"]
}
}
}选项2:开发环境设置
克隆仓库并使用本地安装:
{
"mcpServers": {
"mcp-on-demand-tools": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/mcp-on-demand-tools",
"run",
"mcp-on-demand-tools"
]
}
}
}为其他MCP客户端安装
对于其他兼容MCP的客户端,请将其配置为运行:
uvx mcp-on-demand-tools或者用于开发:
uv --directory /path/to/mcp-on-demand-tools run mcp-on-demand-tools发展
设置
- 克隆仓库:
git clone https://github.com/yourusername/mcp-on-demand-tools.git
cd mcp-on-demand-tools- 安装依赖项:
uv sync- 本地运行:
uv run mcp-on-demand-tools构建与发布
准备分发的软件包:
- 构建软件包分发版:
uv build这会在(系统/环境中)创建源代码分发包和二进制分发包 dist/ 目录。
- 发布到PyPI:
uv publish注发布时需要通过环境变量或命令标志提供 PyPI 凭据:
- 代币:
--token或者UV_PUBLISH_TOKEN - 或者用户名/密码:
--username/UV_PUBLISH_USERNAME和--password/UV_PUBLISH_PASSWORD
自动化出版
该项目包含一个GitHub Actions工作流,可自动:
- 每次推送时构建包
- 在推送时发布到TestPyPI
main分支 - 当你创建一个git标签时(例如。,
v0.1.0)
发布新版本:
git tag v0.1.1
git push origin v0.1.1调试
由于MCP服务器是通过stdio运行的,调试可能会具有挑战性。为了获得最佳的调试体验,请使用 MCP 检查器:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-on-demand-tools run mcp-on-demand-tools启动后,Inspector 将显示一个 URL,您可以在浏览器中访问该 URL 来开始调试。
项目结构
mcp-on-demand-tools/
├── src/
│ └── mcp_on_demand_tools/
│ ├── __init__.py # Package entry point
│ ├── server.py # Main MCP server implementation
│ └── recipes/
│ └── render_template.yaml # Goose recipe for tool simulation
├── pyproject.toml # Project metadata and dependencies
├── uv.lock # Locked dependencies
└── README.md # This file工具执行的工作原理
当你调用一个已注册的工具时:
- MCP服务器接收带有参数的工具调用
- 它构建一个上下文字符串,内容包括:
- 工具名称及描述 - 预期输出合同 - 副作用声明 - 输入参数(以JSON格式) - 聚合上下文之前调用此工具的历史记录(如有)
- 服务器执行
goose run --recipe render_template.yaml具有这些参数 - Goose的人工智能代理阅读合同并生成符合预期格式的真实输出
- 输出被提取并返回给MCP客户端
有状态工具执行
v0.1.2版新增功能服务器现在为每个注册的工具维护调用历史。当您多次调用某个工具时,AI代理会从之前的调用中接收到上下文信息,从而能够:
- 对话工具工具可以在多次调用之间保持上下文信息
- 增量式工作流程每次调用都可以基于之前的结果进行构建
- 状态感知响应该人工智能能够生成参考或延续先前互动的输出内容
总体上下文包括:
- 之前呼叫的总次数
- 每次之前调用的输入参数
- 退出代码和输出(前200个字符)
- 调用顺序/顺序
这使得工具模拟器能够在多轮交互中提供更加连贯且符合上下文的响应。
用例
这台服务器非常适合:
- 快速原型制作测试工具概念,而不实现全部功能
- API设计探索在决定实施之前,先试验一下工具接口
- 工作流测试使用真实的模拟数据验证复杂工作流
- 演示和文档编制展示工具的使用方式,而无需实际构建它们
- 占位符工具在开发过程中创建临时工具实现
更新日志
v0.1.1(2025年10月12日)
- 增加了聚合上下文支持工具执行现在可以从之前的调用中获取历史记录
- 支持在多次调用中保持状态的、具有对话功能的工具行为
- AI代理现在可以根据通话历史生成具有情境意识的回复
v0.1.0
- 首次发布
- 初步的MCP服务器实现
- 动态工具注册
- 基于鹅食谱的工具模拟
许可证
见 许可证 文件中有详细信息。
做出贡献
欢迎贡献!请随时提交拉取请求。
