--- name: zentao-project description: "禅道项目集/产品/项目/执行管理:建项目集、建产品、建项目、建执行(迭代)、查层级关系。当用户说「建个产品」「开个新迭代」「这个项目集下有哪些产品」「项目状态」时使用。" --- # 禅道项目集 / 产品 / 项目 / 执行 **前置:先读 `zentao-shared`(尤其"路径参数不出现在 inputSchema 里"和"ID 层级关系"两节)。** --- ## 层级与挂靠关系 ``` program 项目集(可选层) └─ product 产品(program 可选,可以不挂任何项目集独立存在) └─ project 项目(products 关联字段可选,parent 挂项目集也可选) └─ execution 执行/迭代(project 必填,execution 必须先有 project) ``` **只有 execution 是强制要有上级的**(`project` 字段必填);product 和 project 的上级 关联都是可选字段,不要假设"没传 program 就建不了产品"。 --- ## 查 ``` get_programs() 项目集列表 get_programs_programID_products(programID) 某项目集下的产品 get_programs_programID_projects(programID) 某项目集下的项目 get_products() 产品列表(全量) get_products_productID(productID) 产品详情 get_projects() 项目列表(全量,无单条详情接口) get_projects_projectID_executions(projectID) 某项目下的执行/迭代 get_executions() 执行列表(全量) get_executions_executionID(executionID) 执行详情 ``` **没有 `get_projects_projectID`**(项目详情接口不存在,见 `zentao-shared`),要看单个 项目信息从 `get_projects()` 列表里按 ID 过滤。 --- ## 建项目集 ``` post_programs({ payload: { name, begin, end, PM?, desc? } }) ``` `name`/`begin`/`end` 必填,日期格式以字段说明为准(一般是 `YYYY-MM-DD`)。 --- ## 建产品 ``` post_products({ payload: { name, program?, line?, type?, PO?, QD?, RD?, reviewer?, acl?, desc? } }) ``` 只有 `name` 必填。`type` 取值受限:`normal` 正常 | `branch` 多分支 | `platform` 多平台; `acl` 是 `open` 公开 | `private` 私有——这两个字段写错值会被后端拒绝,不要凭直觉编。 --- ## 建项目 ``` post_projects({ payload: { name, model, begin, end, workflowGroup, products?, parent?, PM? } }) ``` 必填字段比产品多:`name`/`model`/`begin`/`end`/`workflowGroup`。 `model`(项目管理方式)取值受限,创建前跟用户确认清楚要哪种: `scrum` 敏捷 | `waterfall` 瀑布 | `kanban` 看板 | `agileplus` 融合敏捷 | `waterfallplus` 融合瀑布 `workflowGroup`(项目流程)是付费版功能,开源版可以不传/传空。 `parent` 是挂靠到哪个项目集(可选);`products` 是关联的产品(可选,接受多个)。 --- ## 建执行(迭代) ``` post_executions({ payload: { project, name, begin, end, lifetime?, days?, products?, plans?, PO?, QD?, PM?, RD?, acl? } }) ``` `project`/`name`/`begin`/`end` 必填——**`project` 必填意味着建执行前必须先有一个项目 ID**,用 `get_projects()` 查出来给用户确认要挂在哪个项目下。 `lifetime`(执行类型)取值:`short` 短期 | `long` 长期 | `ops` 运维。 `plans`(关联计划)如果要传,格式是"产品 ID + 计划 ID"的二维数组,不是单纯的 ID 列表, 具体结构以工具 inputSchema 为准。 --- ## 改 / 删 ``` put_programs_programID({ programID, payload: {...} }) put_products_productID({ productID, payload: {...} }) put_projects_projectID({ projectID, payload: {...} }) put_executions_executionID({ executionID, payload: {...} }) delete_programs_programID({ programID }) # 删除前必须确认,不可逆 delete_products_productID({ productID }) delete_projects_projectID({ projectID }) delete_executions_executionID({ executionID }) ``` 删除任意一层,其下挂靠的产品/项目/执行/需求/任务等大概率会受影响(具体级联行为以 禅道后端实际处理为准,MCP 这层不做二次拦截)——删除前跟用户明确说清楚删的是哪一层、 可能影响下面挂了什么,参考 `zentao-shared` 的"删除是不可逆操作"约定。