升级mcp,增加按语义分类的工具。旧工具不变 #493
Reference in New Issue
Block a user
Delete Branch "feat/mcp-upgrade"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
代码审查(feat/mcp-upgrade → master)
总体结论:认可,建议合并。 新增 15 个语义工具与 29 个旧工具并存,语义层只做 action 选择与参数位置转换,业务校验与副作用仍由 External router 承担,分层干净。本地
cargo test -p api-server external_mcp24/24 通过。主要优点
semantic.rs的 schema 全部从内嵌 OpenAPI +MCP_OPERATIONS派生,不复制字段定义,且保留了 body 的if/then/allOf条件约束(semantic.rs:184)。semantic_catalog_appends_tools_without_changing_legacy_definitions逐字节断言旧工具定义不变;旧分派路径传optional_idempotency_key=None,legacy-ignored测试锁定旧行为。idempotencyKey;仅 3 个创建类 action 接受可选幂等键并转为 HTTP 头(semantic.rs:333-338),有专门测试锁定。confirm_upload移除ownerUserId(owner 由 API Key 决定);结构校验在构建 HTTP 上下文前失败,scope 检查复用 REST 层且不泄露 owner 信息(均有测试覆盖)。非阻塞建议
validate_fields只校验顶层结构,嵌套/跨字段约束(如 remove_background 的screenColor×flat条件)仍依赖 REST 返回 400,错误时机晚于结构错误。代码注释已说明这一取舍,可接受。destructive注解用字段名启发式判断(canvasCompletion/targetLayerId,semantic.rs:138-145),后续新增含类似字段的写操作时需注意是否会被正确标记。MCP_INSTRUCTIONS重写后删除了 sliceMode 等具体指引,已确认改由semantic_tools.json中各工具 description 承载(如generate_icon_spritesheet说明完整),无信息丢失。