本文档用于补全 Redant 在 Model Context Protocol(MCP)方向的使用说明,覆盖:
- 如何在项目中挂载
mcp子命令 mcp list/mcp serve的用法- 命令树映射为 MCP tools 的规则
tools/call的输入与输出结构- 常见问题排查
在你的根命令初始化处挂载:
mcpcmd.AddMCPCommand(rootCmd)挂载后会新增命令树:
app mcp list
app mcp serve --transport stdio
用于查看当前命令树映射出的 MCP tools 元信息。
- 默认格式:JSON
- 可选格式:
--format text
示例:
app mcp list
app mcp list --format text
输出包含:
name:tool 名称(例如echo、group.run)description:命令短/长描述拼接path:命令路径切片inputSchema:调用输入 SchemaoutputSchema:调用输出 Schema
启动 MCP Server 并对外暴露 tools。
当前支持:
--transport stdio(默认)
示例:
app mcp serve
app mcp serve --transport stdio
当前实现仅支持
stdio,其他 transport 会返回unsupported mcp transport。
Redant 会遍历命令树,将可执行命令(有 Handler)映射为 MCP tool。
映射规则如下:
- 命令可见性:隐藏命令(
Hidden=true)不会暴露。 - 工具命名:按命令路径用
.拼接(例如group.run)。 - 标志继承:会合并父命令标志;子命令可使用继承标志。
- 标志过滤:隐藏标志与系统标志不会出现在 schema(如
help、list-commands、list-flags、args)。 - 参数 schema:
- 命令定义了
ArgSet:arguments.args为对象(按参数名传值)。 - 未定义
ArgSet:arguments.args为数组(按位置传值)。
- 命令定义了
flowchart TD
A[Command Tree] --> B{命令是否隐藏}
B -- 是 --> C[跳过]
B -- 否 --> D{是否有 Handler}
D -- 否 --> E[仅继续遍历子节点]
D -- 是 --> F[生成 MCP Tool]
F --> G[Name=路径点分,如 group.run]
F --> H[InputSchema=flags+args]
F --> I[OutputSchema=ok/stdout/stderr/error/combined]
arguments 顶层结构:
{
"flags": {"...": "..."},
"args": {"...": "..."}
}或(命令无 ArgSet 时):
{
"flags": {"...": "..."},
"args": ["pos1", "pos2"]
}{
"name": "deploy",
"arguments": {
"flags": {
"stage": "dev",
"dry-run": true
},
"args": {
"service": "api"
}
}
}{
"name": "scan",
"arguments": {
"flags": {
"tags": ["x", "y"]
},
"args": ["path-a", "path-b"]
}
}Redant 返回 MCP 标准 content,同时通过 structuredContent 暴露结构化结果:
{
"content": [{"type": "text", "text": "..."}],
"isError": false,
"structuredContent": {
"ok": true,
"stdout": "...",
"stderr": "...",
"error": "",
"combined": "..."
}
}字段语义:
ok:命令是否执行成功。stdout/stderr:标准输出与错误输出。error:运行错误文本(成功时为空)。combined:便于展示的合并输出。
| Redant 值类型 | InputSchema 类型 |
|---|---|
string |
string |
bool |
boolean |
int / int64 |
integer |
float / float64 |
number |
string-array |
array<string> |
enum[...] |
string + enum |
enum-array[...] |
array<string> + items.enum |
struct[...]/object |
object(additionalProperties) |
补充:
- 对于
Required=true的 flag,若已配置Default或Envs,不会进入 schema 的required。 - 对于
Required=true的 arg,若已配置Default,不会进入 schema 的required。
优先检查:
- 命令是否
Hidden=true - 命令是否有
Handler - 是否正确挂载了
mcpcmd.AddMCPCommand(rootCmd)
arguments.flags 中存在工具 schema 未声明的字段。请以 mcp list 返回的 inputSchema.properties.flags 为准。
- 命令有
ArgSet:arguments.args必须是对象。 - 命令无
ArgSet:arguments.args必须是数组。
可直接传对象,Redant 会在执行前序列化为 JSON 字符串传给命令值类型解析。
- 总览:
../README.md - 设计:
DESIGN.md - 使用速览:
USAGE_AT_A_GLANCE.md