trustgraph/docs/tech-specs/mcp-tool-arguments.zh-cn.md
Alex Jenkins 8954fa3ad7 Feat: TrustGraph i18n & Documentation Translation Updates (#781)
Native CLI i18n: The TrustGraph CLI has built-in translation support
that dynamically loads language strings. You can test and use
different languages by simply passing the --lang flag (e.g., --lang
es for Spanish, --lang ru for Russian) or by configuring your
environment's LANG variable.

Automated Docs Translations: This PR introduces autonomously
translated Markdown documentation into several target languages,
including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew,
Arabic, Simplified Chinese, and Russian.
2026-04-14 12:08:32 +01:00

203 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
layout: default
title: "MCP 工具参数规范"
parent: "Chinese (Beta)"
---
# MCP 工具参数规范
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
## 概述
**功能名称**: MCP 工具参数支持
**作者**: Claude 代码助手
**日期**: 2025-08-21
**状态**: 最终
### 摘要
启用 ReACT 代理调用带有正确定义的参数的 MCP (模型上下文协议) 工具,通过在 MCP 工具配置中添加参数规范支持,类似于当前提示模板工具的工作方式。
### 问题陈述
目前ReACT 代理框架中的 MCP 工具无法指定其预期的参数。`McpToolImpl.get_arguments()` 方法返回一个空列表,迫使 LLM 仅根据工具名称和描述来猜测正确的参数结构。这会导致:
- 由于参数猜测导致的不可靠工具调用
- 当工具因错误的参数而失败时,用户体验不佳
- 在执行之前无法验证工具参数
- 代理提示中缺少参数文档
### 目标
- [ ] 允许 MCP 工具配置指定预期的参数(名称、类型、描述)
- [ ] 更新代理管理器,通过提示向 LLM 暴露 MCP 工具参数
- [ ] 保持与现有 MCP 工具配置的向后兼容性
- [ ] 支持与提示模板工具类似的参数验证
### 不属于目标
- 从 MCP 服务器动态发现参数(未来增强功能)
- 参数类型验证,超出基本结构
- 复杂的参数模式(嵌套对象、数组)
## 背景和上下文
### 现状
MCP 工具在 ReACT 代理系统中配置为具有最小的元数据:
```json
{
"type": "mcp-tool",
"name": "get_bank_balance",
"description": "获取银行账户余额",
"mcp-tool": "get_bank_balance"
}
```
`McpToolImpl.get_arguments()` 方法返回 `[]`,因此 LLM 在提示中不会收到任何参数指导。
### 局限性
1. **缺少参数指定**: MCP 工具无法定义预期的参数
2. **LLM 参数猜测**: 代理必须根据工具名称/描述推断参数
3. **提示信息缺失**: 代理提示中不包含 MCP 工具的参数详情
4. **无验证**: 无效参数仅在 MCP 工具执行时捕获
### 相关组件
- **trustgraph-flow/agent/react/service.py**: 工具配置加载和 AgentManager 创建
- **trustgraph-flow/agent/react/tools.py**: McpToolImpl 实现
- **trustgraph-flow/agent/react/agent_manager.py**: 使用工具参数生成提示
- **tg-invoke-mcp-tool**: 用于 MCP 工具管理的 CLI 工具
- **Workbench**: 代理工具配置的外部 UI
## 要求
### 功能要求
1. **MCP 工具配置参数**: MCP 工具配置 **必须** 支持一个可选的 `arguments` 数组,包含名称、类型和描述字段
2. **参数暴露**: `McpToolImpl.get_arguments()` **必须** 返回配置的参数,而不是空列表
3. **提示集成**: 代理提示 **必须** 在指定有参数时,包含 MCP 工具参数详情
4. **向后兼容性**: 没有参数的现有 MCP 工具配置 **必须** 保持正常工作
5. **CLI 支持**: 现有的 `tg-invoke-mcp-tool` CLI 支持参数(已实现)
### 非功能要求
1. **向后兼容性**: 现有 MCP 工具配置零中断
2. **性能**: 代理提示生成没有显著性能影响
3. **一致性**: 参数处理 **必须** 与提示模板工具模式匹配
### 用户故事
1. 作为 **代理开发者**,我希望在配置中指定 MCP 工具参数,以便 LLM 可以使用正确的参数调用工具
2. 作为 **Workbench 用户**,我希望在 UI 中配置 MCP 工具参数,以便代理正确使用工具
3. 作为 **ReACT 代理中的 LLM**,我希望在提示中看到工具参数规范,以便我可以提供正确的参数
## 设计
### 高级架构
通过以下方式,扩展 MCP 工具配置以匹配提示模板模式:
1. 在 MCP 工具配置中添加可选的 `arguments` 数组,包含名称、类型和描述字段
2. 修改 `McpToolImpl` 以接受和返回配置的参数
3. 修改工具配置加载以处理 MCP 工具参数
4. 确保代理提示包含 MCP 工具参数信息
### 配置方案
```json
{
"type": "mcp-tool",
"name": "get_bank_balance",
"description": "获取银行账户余额",
"mcp-tool": "get_bank_balance",
"arguments": [
{
"name": "account_id",
"type": "string",
"description": "银行账户标识符"
},
{
"name": "date",
"type": "string",
"description": "查询余额的日期可选格式YYYY-MM-DD"
}
]
}
```
### 数据流程
1. **配置加载**: 使用参数的 MCP 工具配置通过 `on_tools_config()` 加载
2. **工具创建**: 参数解析并传递给 `McpToolImpl` 通过构造函数
3. **提示生成**: `agent_manager.py` 调用 `tool.arguments` 以包含在 LLM 提示中
4. **工具调用**: LLM 提供参数,这些参数传递给 MCP 服务不变
### API 更改
- 无外部 API 更改 - 这是一个纯粹的内部配置和参数处理
### 组件详情
#### 组件 1: service.py (工具配置加载)
- **目的**: 解析 MCP 工具配置并创建工具实例
- **更改要求**: 解析 MCP 工具配置中的参数(类似于提示工具)
- **新功能**: 从 MCP 工具配置中提取 `arguments` 数组,并创建 `Argument` 对象
#### 组件 2: tools.py (McpToolImpl)
- **目的**: MCP 工具实现包装器
- **更改要求**: 接受构造函数中的参数并从 `get_arguments()` 中返回
- **新功能**: 存储并公开配置的参数,而不是返回空列表
#### 组件 3: Workbench (外部仓库)
- **目的**: 代理工具配置的 UI
- **更改要求**: 为 MCP 工具添加参数规范 UI
- **新功能**: 允许用户添加/编辑/删除 MCP 工具的参数
#### 组件 4: CLI 工具
- **目的**: 命令列工具管理
- **更改要求**: 支持在工具创建/更新命令中指定参数
- **新功能**: 在工具配置命令中接受 `arguments` 参数
## 实施计划
### 阶段 1: 核心代理框架更改
- [ ] 更新 `McpToolImpl` 构造函数以接受 `arguments` 参数
- [ ] 修改 `McpToolImpl.get_arguments()` 以返回存储的参数,而不是空列表
- [ ] 修改 `service.py` 中的 MCP 工具配置解析以处理参数
- [ ] 添加 MCP 工具参数的测试
- [ ] 更新 McpToolImpl 类文档
- [ ] 添加参数解析逻辑的注释
- [ ] 更新系统架构中的参数流程文档
### 阶段 4: 生产部署
- 核心更改具有向后兼容性 - 无需回滚,因为功能正常
- 如果出现问题,请通过回滚 MCP 工具配置加载逻辑来禁用参数解析
- Workbench 和 CLI 更改是独立的,可以单独回滚
## 安全注意事项
- **没有新的攻击面**: 参数是从现有配置源解析的,没有新的输入
- **参数验证**: 参数传递给 MCP 工具不变 - 验证在 MCP 工具级别
- **配置完整性**: 参数规范是工具配置的一部分 - 相同的安全模型适用
## 性能影响
- **极小的开销**: 参数解析仅在配置加载期间发生,而不是请求时
- **提示大小增加**: 代理提示将包含 MCP 工具参数详情,稍微增加令牌使用量
- **内存使用**: 存储参数规范在对象中的增加,可以忽略不计
## 文档
### 用户文档
- [ ] 更新 MCP 工具配置指南,提供参数示例
- [ ] 在 CLI 工具的帮助文本中添加参数规范
- [ ] 创建常见 MCP 工具参数模式的示例
### 开发者文档
- [ ] 更新 `McpToolImpl` 类文档
- [ ] 添加参数解析逻辑的注释
- [ ] 文档系统架构中的参数流程
## 未解决的问题
1. **参数验证**: 是否应该在基本结构检查之外验证参数类型/格式?
2. **动态发现**: 将来增强功能,以在运行时自动从 MCP 服务器查询工具模式?
## 考虑的替代方案
1. **动态的 MCP 模式发现**: 在运行时查询 MCP 服务器以获取工具参数模式 - 已拒绝,因为它复杂且不可靠
2. **单独的参数注册表**: 将 MCP 工具参数存储在单独的配置部分中 - 已拒绝,因为与提示模板方法保持一致
3. **类型验证**: JSON 模式验证参数 - 延迟,以便在初始实现中保持简单
## 引用
- [MCP 协议规范](https://github.com/modelcontextprotocol/spec)
- [提示模板工具实现](./trustgraph-flow/trustgraph/agent/react/service.py#L114-129)
- [当前的 MCP 工具实现](./trustgraph-flow/trustgraph/agent/react/tools.py#L58-86)