MCP 工具清单及参数说明
本页集中记录 CCProject 当前已经实现的 MCP 工具、输入参数和返回字段,供 Codex、其他 AI 客户端、测试人员及接口维护人员查阅。
> **最后核对日期:** 2026年8月28日。
>
> **日期口径:** 工具总表的“加入日期”指该工具首次加入 CCProject 公开 MCP 接口及本清单的日期,以代码和帮助文档的 Git 提交记录为据。以后修改参数、返回值或安全规则时,还必须在“功能更新记录”中追加当次日期。
> **最终依据:** AI 连接 CCProject 后,应以 MCP tools/list 实际返回的工具名称、说明、inputSchema 和 outputSchema 为准。如果本页与实际返回不一致,说明帮助文档尚未同步,不得按照文档调用不存在的工具。
通用规则
- 当前工具只操作 MCP 地址所属的 CCProject 实例。项目查询、预览、执行、撤销、导出以及所有单项业务工具都必须传入
projectId,主程序会在同一 UI 请求中先绑定指定项目再执行,不再依赖“调用时恰好处于哪个活动窗口”。 - 当前共四十八项顶层工具。其中
ccproject_list_commands、ccproject_describe_command和ccproject_get_command_schema直接读取编译进 DLL 的命令目录 V3;第三方只获得 MCP 端点时,可以自行发现全部 128 项 DLL 子命令。 - MCP 地址包含本次服务启动时生成的临时
token。同时支持Authorization: Bearer TOKEN请求头,带 token 地址保留用于兼容旧客户端。未携带 token 的/mcp请求返回401 AUTH_TOKEN_REQUIRED;token 错误时返回401 AUTH_TOKEN_INVALID。停止服务或退出 CCProject 后当前进程的 token 和实例文件自动删除。 - 服务可在启动前选择“只读”或“读写”。只读模式允许能力、诊断、状态、导入预检、列表、查询、批次预览和临时 PNG 预览,但拒绝正式导入、新建、保存、关闭、正式指定路径输出、执行、撤销及单项修改工具。
- AI 进行修改时,应按“列出项目并取得
projectId→ 查询该项目并取得revision→ 预览 → 使用相同projectId和revision批量执行 → 再查询或导出预览”的顺序调用。 - 所有会改变状态的请求还必须携带 1 至 128 字符的
requestId。只要请求已经由主程序完成处理,无论原结果成功还是失败,同一requestId与完全相同参数都会返回缓存的原结果且不重复执行;同一 ID 搭配不同参数会返回REQUEST_ID_REUSED。认证失败、连接中断或服务忙等尚未完成主程序业务处理的请求不占用该 ID。修正参数、刷新 revision 或形成新的用户意图时必须生成新的 ID。 - 修改标题、日期、名称和工期的五项工具可以重复设置同一个值,
idempotentHint为true。 - 移动工作、移动节点、任务排序和自动布局都可能在当前位置继续改变项目,不能为一次新的操作复用旧
requestId,idempotentHint为false。 - 删除工作的两项工具和删除全部空行工具均为破坏性操作,
destructiveHint为true。只有用户明确指定删除目标和处理方式后才能调用。 - 所有工具都只访问本机 CCProject,不访问外部系统,
openWorldHint为false。 - 返回
isError: true表示调用失败;批量执行失败时主程序会整体回滚,AI 应报告错误并停止,不得猜测其他节点或参数继续试错。 - 服务同时只执行一项普通业务工具。已有工具运行时,重复业务请求会返回
operation_busy;此时只能查询状态、请求取消或继续等待。
Codex 连接配置
启动服务后,可从“MCP服务 → 复制 Codex 配置”取得当前会话的完整配置。把它加入用户级 ~/.codex/config.toml,或受信任项目的 .codex/config.toml,然后在 Codex 中重新加载 MCP:
# token 仅在本次 CCProject MCP 服务运行期间有效
[mcp_servers.ccproject]
url = "http://127.0.0.1:18360/mcp?token=从CCProject复制的当前token"
enabled = true
required = false
startup_timeout_sec = 10
tool_timeout_sec = 1800
default_tools_approval_mode = "writes"
每次停止后重新启动 MCP 都会生成新 token,旧配置立即失效。请重新复制配置并让 Codex 重新加载;不要把带 token 的地址或配置发送到其他机器、网站或日志。Codex 桌面版也可以在“设置 → MCP servers → Add server”中选择 Streamable HTTP,填入 CCProject 复制的完整地址。配置字段及支持范围以 Codex MCP 官方说明 为准。
命令行客户端 ccprojectctl.exe 与主程序、DLL 放在同一便携目录,会自动读取同目录兼容 token。多实例或显式连接时可使用 --endpoint、--instance、--token、--token-file 和 --port;优先级为 endpoint、instance、显式 port、默认 18360。CLI 通过 Bearer 请求头发送令牌,标准输出仍是 JSON。
工具总表
| 工具名称 | 主要用途 | 主要参数 | 重要前提 | 加入日期 |
|---|---|---|---|---|
ccproject_get_capabilities | 查询接口版本、范围和限制 | 无 | 只读 | 2026-08-06 |
ccproject_list_commands | 筛选并列出 DLL 命令目录 V3 | category、access、keyword 可选 | 只读;不需要打开项目 | 2026-08-09 |
ccproject_describe_command | 查询一项 DLL 命令的标志、Schema、错误码、示例和顺序 | commandName | 只读;支持兼容别名 | 2026-08-09 |
ccproject_get_command_schema | 只返回指定 DLL 命令的输入/输出 Schema 和最小示例 | commandName | 只读;不改变 revision | 2026-08-09 |
ccproject_get_diagnostics | 查询访问模式、计数和最近错误 | 无 | 只读;不返回 token 内容 | 2026-08-06 |
ccproject_get_operation_status | 查询当前长操作状态 | 无 | 长操作期间仍可调用 | 2026-08-06 |
ccproject_cancel_operation | 取消当前可安全停止的操作 | 可选 operationId | 自动布局取消后整批回滚 | 2026-08-06 |
ccproject_list_windows | 列出可由 MCP 打开或聚焦的语义窗口 | 无 | 只读;不返回窗口句柄和坐标 | 2026-08-10 |
ccproject_manage_workspace_view | 管理主窗口分屏和只读辅助视图 | projectId、expectedRevision、requestId、action,按动作增加 hostId、视图、表格模式、缩放或平移参数 | 使用稳定 host/view/project 身份;不得改变项目 revision | 2026-08-28 |
ccproject_open_window | 异步打开或聚焦白名单窗口 | projectId、expectedRevision、requestId、windowId,工作属性另需 taskGuid | 立即返回,不等待用户关闭;同窗口不重复打开 | 2026-08-10 |
ccproject_get_window_status | 查询窗口请求的排队、打开、关闭或失败状态 | 可选 windowRequestId | 模态窗口等待用户时仍可调用 | 2026-08-10 |
ccproject_analyze_import | 只读分析外部项目文件 | sourcePath、可选 format | 绝对源路径;不修改源文件和当前项目 | 2026-08-09 |
ccproject_import_project | 导入外部文件为新 CCNDB 并打开 | sourcePath、targetDirectory、projectName、requestId,可选格式/排程/冲突策略 | 目标目录已存在;目标文件不得存在;源文件只读 | 2026-08-09 |
ccproject_open_project | 打开并激活已有 CCProject 项目 | path | 绝对路径;仅 .ccndb;不保存、不覆盖 | 2026-08-06 |
ccproject_new_project | 新建、保存并打开空项目文件 | directoryPath、projectName、paperSize、requestId;可选精确开工时间、默认工期单位和默认日历班次 | 目录必须存在;不覆盖同名文件 | 2026-08-06 |
ccproject_list_projects | 列出当前工作区全部项目 | 无 | 只读;返回 projectId、活动状态和各自 revision | 2026-08-06 |
ccproject_switch_project | 切换活动项目 | projectId | 只在已打开项目间切换;不保存 | 2026-08-06 |
ccproject_save_project | 保存指定项目 | projectId、expectedRevision、requestId | 写入原路径;保留保存锁、外部变化检查和自动备份 | 2026-08-06 |
ccproject_save_project_as | 指定项目另存为 | directoryPath、projectName、projectId、expectedRevision、requestId | 绝对目录;不覆盖同名文件 | 2026-08-06 |
ccproject_close_project | 关闭指定项目 | projectId、expectedRevision、requestId、unsavedAction | reject、save 或 discard 必须明确指定 | 2026-08-06 |
ccproject_query | 查询字段字典、项目设置、工作明细、图形设置、节点、关系、双代号、排程、资源、WBS 及 B/E/F/R/A 数据 | projectId、scope、分页、对象筛选及 includeSensitive | 只读;返回项目版本及查询结果签名;敏感路径默认省略 | 2026-08-09 |
ccproject_analyze_resource_optimization | 按 CCProject 权威排程分析资源冲突 | projectId、expectedRevision、可选 resourceGuids | 只读;返回超配区间、参与工作和支持的方法 | 2026-08-10 |
ccproject_preview_resource_optimization | 预演内置资源优化或外部 AI 候选方案 | projectId、expectedRevision、strategy、预算/容量选项、可选资源和候选工作 | 不修改项目;返回精确 previewToken | 2026-08-10 |
ccproject_apply_resource_optimization | 应用与预演完全一致的资源优化方案 | projectId、expectedRevision、requestId、previewToken 及原预演参数 | 重新权威计算;令牌或结果不一致则整体回滚 | 2026-08-10 |
ccproject_archive_resource_optimization | 把与预演一致的全部优化方案保存为一次运行档案 | projectId、expectedRevision、requestId、previewToken、原预演参数,可选运行名称/说明 | 不改排程;仅接受全项目资源范围;保存运行、方案、工作结果和资源报告 | 2026-08-11 |
ccproject_update_resource_optimization_solution | 修改已保存方案的名称、说明、收藏和运行内选中状态 | projectId、expectedRevision、requestId、solutionId 及待改字段 | 不改工作与排程;可撤销;不自动保存文件 | 2026-08-11 |
ccproject_preview_saved_resource_optimization_solution | 预演一项已保存方案 | projectId、expectedRevision、solutionId,可选 runId、strictCapacity | 完整输入指纹和工作基线必须仍匹配;返回新的 previewToken | 2026-08-11 |
ccproject_apply_saved_resource_optimization_solution | 应用已预演的保存方案 | projectId、expectedRevision、requestId、solutionId、previewToken | 由 CCProject 再次权威重算;任一失效或冲突均整体回滚 | 2026-08-11 |
ccproject_preview_plan | 预览通用结构化计划 | projectId、expectedRevision、计划 Schema V1.0 | 只读恢复;返回模拟临时 ID 映射 | 2026-08-08 |
ccproject_apply_plan | 原子应用通用结构化计划 | projectId、expectedRevision、requestId、计划 Schema V1.0 | 支持 append、GUID update、显式清单 replace;不自动保存 | 2026-08-08 |
ccproject_preview | 预演一组命令并返回差异 | projectId、expectedRevision、commands | 不保留修改;最多 200 条 | 2026-08-06 |
ccproject_execute | 原子执行一组命令 | projectId、expectedRevision、requestId、commands | 任一步失败则整体回滚 | 2026-08-06 |
ccproject_undo | 撤销指定项目最近一次 MCP 批次 | projectId、expectedRevision、requestId | 项目在批次后不得有其他修改 | 2026-08-06 |
ccproject_export_preview | 导出指定项目绘图 PNG 预览 | projectId、expectedRevision、dpi、cropToContent | 文件写入本机临时目录 | 2026-08-06 |
ccproject_export_drawing | 把当前图形正式输出到指定路径 | projectId、expectedRevision、requestId、format、filePath、输出选项 | BMP/JPEG/PNG/TIFF/PDF/Windows PDF/EMF/SVG/DXF/AutoCAD DXF/CCCAD;默认不覆盖;不修改项目 | 2026-08-08 |
ccproject_export_exchange | 输出交换文件、Excel 或 Word 文档 | projectId、expectedRevision、requestId、format、filePath、输出选项 | MS Project XML/P6 XML/四种 Excel/Word 图片/Word 模拟图;默认不覆盖;不修改项目 | 2026-08-10 |
ccproject_set_drawing_paper | 按视图切换绘图纸预设 | projectId、expectedRevision、requestId、paperSize、可选 view | A2/A3/A4 横向纸张;形成一条撤销记录;不自动保存 | 2026-08-08 |
ccproject_set_network_title | 修改当前网络图标题 | title | 当前视图为单代号或双代号网络图 | 2026-08-05 |
ccproject_set_gantt_title | 修改当前横道图标题 | title | 当前视图为横道图 | 2026-08-05 |
ccproject_set_project_start | 修改开始日期或精确到分钟的开工时间并整体平移项目 | newStartDate | 格式为 YYYY-MM-DD 或 YYYY-MM-DD HH:mm | 2026-08-05 |
ccproject_set_work_name_by_nodes | 按节点修改工作名称 | startNode、endNode、newWorkName | 节点对唯一对应一项直接工作 | 2026-08-05 |
ccproject_set_work_duration_by_nodes | 按节点修改工作工期 | startNode、endNode、newDurationDays | 节点对唯一;工期为整数工作日 | 2026-08-05 |
ccproject_move_work_by_nodes | 上下移动双代号工作 | startNode、endNode、direction、rows | 当前视图为双代号网络图;工作唯一 | 2026-08-05 |
ccproject_move_node | 上下移动双代号节点 | node、direction、rows | 当前视图为双代号网络图;节点唯一 | 2026-08-05 |
ccproject_delete_work_merge_nodes | 删除工作并合并两端节点 | startNode、endNode | 破坏性操作;不支持组件工作 | 2026-08-05 |
ccproject_delete_work_disconnect_nodes | 删除工作但保留两端节点 | startNode、endNode | 破坏性操作;不支持组件工作 | 2026-08-05 |
ccproject_delete_all_blank_rows | 删除双代号图中所有可删除空行 | 无 | 破坏性操作;当前视图必须是双代号网络图 | 2026-08-05 |
功能更新记录
| 日期 | 新增或调整内容 |
|---|---|
| 2026-08-30 | drawingDiagnostics 1.4 增加只读 view 和 page 参数。横道图、报表可以逐页取得互相独立的 captureId、renderFingerprint、comparisonIndex 和 cccadSource;其他图形仅接受第 1 页。抓取不切换用户界面,不改变当前选择、项目修订、修改标志或文件。 |
| 2026-08-28 | 顶层工具增至 48 项、DLL 语义命令增至 128 项。新增 ccproject_manage_workspace_view,支持单/双/四分屏、只读辅助视图创建、视图和表格模式切换、翻页、缩放、平移、互换、提升和关闭,并返回稳定身份及绘制耗时。drawingDiagnostics 1.2 扩展到双代号、逻辑网络、横道图、单代号、S 曲线、斜率图、垂直图、资源图和报表。ccproject_export_drawing 增加 windows_pdf,仅使用 Microsoft Print to PDF 并原子写入指定路径。文件生命周期成功结果增加统一 operation,导入支持安全取消;进度录入统一同步最近前锋线和双代号级联;排程设置增加语义化月工期与正逆推选项。 |
| 2026-08-18 | MCP 顶层工具保持 46 项,DLL 命令目录 V3 增至 124 项。同步双代号总工作、关系表示切换、布局显示模式、时间坐标变形、折线几何,以及 drawingDiagnostics 1.2 的生产显示列表诊断;新建项目支持精确开工时间、默认工期单位和默认日历班次,项目开工时间可精确到分钟。新增 project.bidSettings.update,用于修改当前项目本次会话的投标显示设置;该命令返回 persistent=false,不写入 CCNDB,也不会单独把项目标记为已修改。项目与工作模型读取覆盖更新为持久化直接字段 612/612、复合字段 121/121、工作标量字段 251/251。 |
| 2026-08-11 | MCP 顶层工具增至 46 项,DLL 命令目录增至 115 项。资源优化同步软件当前的多次运行档案和方案管理:可以归档一次预演产生的全部权威方案,修改方案名称/说明/收藏/选中状态,按完整输入指纹预演或应用历史方案;projectComplexFields 可继续分页查询运行、方案、工作结果和资源报告。CLI 同步增加 optimize-archive、optimize-solution-update、optimize-saved-preview、optimize-saved-apply,语义窗口白名单增加 resource.optimization。AI 不能绕过过期检查,也不能直接写入计算日期;工期、锚点、资源量、关键线路和资源曲线仍由 CCProject 权威重算。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.50;MCP 顶层工具增至 42 项,DLL 命令目录增至 112 项。新增资源冲突分析、资源优化预演和精确令牌应用三项工具,以及 resourceOptimization.run 命令;支持快速削峰、局部搜索、有限组合和外部 AI 候选验证。全部方案复用 CCProject 权威排程与资源评价,并统一时间、候选评估、停滞、重复方案、进度和取消保护。真实服务验收确认预览/应用一致、超配消除、预算到限和错误令牌零修改、撤销恢复以及外部候选权威复核;同时修复资源分配 GUID 在只读查询中丢失造成的 revision 漂移。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.49;MCP 顶层工具增至 39 项。ccproject_export_drawing 扩展为 BMP、JPEG、PNG、TIFF、PDF、EMF、SVG、DXF、AutoCAD DXF 和 CCCAD 十种图形格式;新增 ccproject_export_exchange 及 CLI export-exchange,支持 MS Project XML、P6 XML、工作明细/三种模拟横道图 Excel、Word 图片和 Word 模拟图。全部正式输出执行绝对路径、默认不覆盖、同目录临时文件、原子提交、失败清理和 revision 冻结;语义窗口白名单增加打印预览和打印,物理打印必须由用户在 CCProject 原生窗口中确认。真实服务验收生成并核验 18 个文件,输出前后项目 revision 不变。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.48;MCP 顶层工具增至 38 项。新增十项语义窗口白名单以及窗口列表、异步打开/聚焦和状态查询三项工具;窗口请求按 projectId、revision 和稳定 taskGuid 定位,在 UI 线程延后打开,MCP 调用不会等待用户关闭。相同窗口只聚焦不重复弹出,不同模态窗口返回 WINDOW_MODAL_BUSY;用户关闭后返回新的项目 revision。CLI 同步增加 list-windows、open-window 和 window-status。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.47;DLL 命令目录增至 111 项。新增初始基准发布、执行批次创建/更新/确认、预测生成、调整方案创建/更新/审批/发布以及分析报告十项 PDCA 写命令,形成 B0 → E → F → R → B1 → A 完整闭环。项目 revision 已覆盖分支、执行批次和分析报告;MCP 批次支持最多 64 轮顺序撤销,并完成跨基准执行继承、实际日期工作时间归一化、保存重开和真实运行服务验收。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.46;DLL 命令目录增至 101 项。新增单代号、S 曲线、斜率图、垂直图、报表持久化设置,斜率图/垂直图任务样式及顺序,以及文字、图片、矩形、直线、箭头等标注的新增、修改、移动和删除。drawingSettings 升级为 1.2,图片本机路径默认脱敏;命令支持批次预览、原子执行、撤销和保存重开。 |
| 2026-08-10 | 服务与 CLI 更新为 1.0.2.45;DLL 命令目录增至 94 项。新增横道图全局样式、双代号全局样式、时间刻度、工作列表列、纸张分页、标题、单项横道样式和单项双代号样式八项命令。drawingSettings 升级为 1.1,结构化返回上述可写设置;真实 MCP 验收完成预览恢复、执行后查询、PNG 视觉预览和一次撤销。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.44;DLL 命令目录增至 86 项。新增组件工作分段、节点成组、相邻段合并、解除组件以及清理无用内部节点五项语义命令;工程量、已完成工程量、资源分配量和依赖端点随分段/合并确定性迁移。全部命令支持预览、revision、原子回滚和一次撤销,保存重开及 CCProject 重算已通过验收。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.43;DLL 命令目录增至 81 项。新增 project.scheduleSettings.update 与 project.constructionConditions.replace,并扩展 task.updateByGuid、dependency.set、calendar.add/update/setException:可写项目工期规则、雨季/赶工时段、工作工程量/责任人/日历例外/起止延时、精确到小时或分钟的关系延时,以及基准日历和休息日外观。全部命令继续使用预览、revision、requestId、原子回滚和一次撤销;持久化验收确认 CCProject 重新计算及保存重开结果一致。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.42;ccproject_query 新增 pdcaRecords,查询范围共 42 种。它覆盖项目快照之外九种 B/E/F/R/A 记录的 136/136 个模型字段,可分页读取分支、执行批次、执行任务与变更、预测、前锋线和分析报告;分支快照复用 744 字段项目序列化器。查询改用临时快照并在成功和异常路径恢复,避免只读查询改写项目快照。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.41;ccproject_query 新增 projectComplexFields,查询范围共 41 种。它可先列出项目快照复合字段目录,再按精确字段名分页读取;源生成器递归覆盖 47 种记录类型和剩余 110/110 个嵌套记录、数组、向量与映射字段,图片路径默认脱敏。与 projectSettings 合并后,TProjectSnapshot 顶层 744/744 个字段均可读取。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.40;ccproject_query 新增 dataDictionary、projectSettings、workDetails 和 drawingSettings 四个只读范围;所有查询返回 dataSchemaVersion、signatureAlgorithm 和确定性的 resultSignature,项目设置中的外部数据源 URI 与本机路径默认省略。源模型反向覆盖测试确认项目快照 554 个持久化标量及 53 个基础数组(持久化直接字段 607/607),27 个会话标量单独分类;工作 238/238、关系 5/5、日历 19/19、资源 14/14、资源分配 10/10 字段可读。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.39;补齐35项顶层工具的详细 outputSchema,导入、项目生命周期、查询、通用计划、预演、执行、撤销和输出均声明稳定结果字段;新增真实加载自动化 DLL 并读取 tools/list 的契约测试,禁止只声明外层 ok 的浅层输出 Schema。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.38;新增 ccproject_analyze_import 和 ccproject_import_project,顶层工具增至35项。统一支持 CCP/MDB、MPP/MPT/MS Project XML、P6 XML、Excel/CSV/制表符文本预检和导入,源文件只读、目标只新建,返回源/结果计数、排程策略、关系过滤、日历映射、警告、耗时、projectId、路径和 revision。修复组合横道图/列表视图无界面 PNG 预览无法解析纸张尺寸,以及 Excel 无界面预检错误聚焦隐藏窗口的问题。 |
| 2026-08-09 | 服务与 CLI 更新为 1.0.2.37;新增三项自描述工具,顶层工具增至33项,79项 DLL 子命令统一由编译进核心 DLL 的命令目录 V2 生成。同时支持自动可用端口、每进程实例/令牌文件、Bearer 认证、Host/Origin 校验及 CLI 显式端点和实例选择。 |
| 2026-08-09 | 完成通用多轮编辑闭环:外部 AI 可从只有工作、尚未分区和未完成拓扑的草稿开始,逐轮查询并补齐区块、归属、行数、关系、节点和局部布局;MCP 与 ccprojectctl 使用同一 JSON 语义,覆盖预览拒绝、原子回滚、撤销、严格校验、保存重开、多项目隔离、横道图同步及 PNG/PDF/EMF 输出。50工作与300工作性能基线、MCP启停和异常DLL隔离均已验收;版本和接口数量保持1.0.2.36、30项顶层工具、79项DLL子命令。 |
| 2026-08-09 | 通用 DLL 批处理增加 doubleCode.syncToGantt 和 doubleCodeWbs.buildFromGantt:前者把已验收的双代号区块、工作顺序和可表达的关系显示一次性同步到横道图,后者只在初建或明确重新参考时从横道图多层摘要生成双代号区块初稿。两项均支持预览、显式替换确认、映射/差异报告、撤销和确定性重放,不建立实时双向同步。服务与 CLI 更新为1.0.2.36,顶层工具仍为30项,DLL子命令共79项。 |
| 2026-08-09 | 通用 DLL 批处理增加布局分析、图元锁定、工作/节点移动、几何设置/恢复和区块/选区/整图布局共9项命令;支持 locked/ai/auto 三种图元模式和未锁定叶区块自动扩行。项目 Schema 更新为105,局部布局300工作基线比整图重排快6.747倍,PNG/PDF/EMF一致性通过。服务与 CLI 更新为1.0.2.35,顶层工具仍为30项,DLL子命令共77项。 |
| 2026-08-09 | 通用 DLL 批处理增加关系同步、节点增删拆并改号、工作连接/重接、合并节点删除、断开节点删除和局部拓扑修复共12项命令;节点正式身份使用 nodeGuid,显示编号可改但GUID不变;统一拒绝自环、重复节点对和环路。全量重建默认保留人工节点布局并保持旧诊断字段兼容。服务与 CLI 更新为1.0.2.34,顶层工具仍为30项。 |
| 2026-08-09 | 通用 DLL 批处理增加 doubleCode.rows.set、adjust、insert、delete、autoFit 五项双代号区块行数命令;统一返回 required/allocated/used/free/overflow 指标,父区块由叶区块汇总,支持手工/自动模式、布局锁定和占用行拒绝或邻近迁移。服务与 CLI 更新为1.0.2.33,顶层工具仍为30项。 |
| 2026-08-09 | 通用 DLL 批处理增加 doubleCode.work.add、update、copy、assign、unassign、moveToBlock、reorder 七项双代号工作命令;区块内顺序独立持久化,不改变横道图任务行顺序;支持50项原子重分配、三种行容量策略、批内工作/区块临时身份、预览和整批撤销。项目 Schema 更新为104,服务与 CLI 更新为1.0.2.32,顶层工具仍为30项。 |
| 2026-08-09 | 通用 DLL 批处理增加 doubleCode.block.add、update、move、reorder、delete 五项区块树命令;支持 clientBlockId -> blockGuid 批内映射、稳定父区块 GUID、整棵子树移动和四种显式删除策略。父区块出现直属工作时自动建立稳定的空名称内部叶区;预览、原子回滚、整批撤销和保存重开已验收。服务与 CLI 更新为1.0.2.31,顶层工具仍为30项。 |
| 2026-08-09 | ccproject_query 增加 doubleCodeBlocks、doubleCodeMembership、doubleCodeRows、doubleCodeTopology、doubleCodeGeometry、doubleCodeValidation 六个只读范围;支持区块/工作/节点 GUID 过滤、分页、摘要模式及 draft/strict 校验。区块、归属、节点和布局字段纳入 revision;服务与 CLI 更新为1.0.2.30,顶层工具仍为30项。 |
| 2026-08-08 | 增加 ccproject_set_drawing_paper、批处理命令 drawing.paper.setPreset 及 CLI set-drawing-paper,支持为当前视图或明确指定的双代号图/横道图切换 A2/A3/A4;项目查询返回各视图纸张配置;修复自动排版扩纸后纸张名称和右侧按钮不同步;服务与 CLI 更新为1.0.2.29,工具总数为30项。 |
| 2026-08-08 | 完成首批房建、公路、桥梁三类同 Schema 跨行业端到端验收;修正里程碑双代号事件身份和复杂逻辑箭线布局回退,保存重开及 PNG/PDF/EMF 输出通过;服务与 CLI 更新为1.0.2.28,工具总数仍为29项。 |
| 2026-08-08 | 完善 Codex/第三方客户端接入:MCP 初始化返回安全操作规程,管理窗口可复制 Streamable HTTP config.toml 配置,CLI 正式输出增加裁剪参数;服务与 CLI 更新为1.0.2.27,工具总数仍为29项。 |
| 2026-08-08 | 增加 ccproject_export_drawing 及 CLI export-drawing,正式支持指定路径 PNG/PDF/EMF、DPI/裁剪、覆盖保护和原子文件提交;完成保存重开、备份、保存锁及外部变化验收,版本更新为1.0.2.26,工具总数为29项。 |
| 2026-08-08 | 自动布局返回机器可读冲突、坐标、统计和稳定签名,按内容扩展纸张;完成50项零冲突、300项压力、取消回滚和迭代上限区分,版本更新为1.0.2.25,工具总数仍为28项。 |
| 2026-08-08 | 第六阶段完成通用逻辑关系到双代号权威拓扑的自动转换;覆盖 FS/SS/FF/SF 和正负时差、唯一总开始/结束节点、自动辅助工作用途与稳定 GUID 诊断,增加 topologyDiagnostics 查询范围,版本更新为1.0.2.23;工具总数仍为28项。 |
| 2026-08-08 | 第五阶段开放 calendars、constraints、qualityValidation、targetDuration 查询;通用计划支持默认日历、项目/工作约束、里程碑及日历例外日期,版本更新为1.0.2.22;工具总数仍为28项。 |
| 2026-08-08 | 通用计划 project 对象增加项目名称、参建单位、负责人、制图信息、图号和项目概况;项目查询返回同一组字段,版本更新为1.0.2.20;第四阶段 Schema V1.0冻结,工具总数仍为28项。 |
| 2026-08-08 | 通用计划 Schema V1.0 开放 GUID 精确 update 和显式清单 replace;替换必须提供 listedTasks 范围、删除确认、期望数量及 GUID 清单,版本更新为1.0.2.19;工具总数仍为28项。 |
| 2026-08-08 | 增加 ccproject_preview_plan、ccproject_apply_plan 及 CLI preview-plan/apply-plan:一次请求接收项目开始日期、日历、WBS、工作和关系,返回临时 ID 到正式 GUID 映射;当前安全开放 append 模式,工具总数为28项,版本为1.0.2.18。 |
| 2026-08-08 | 完成自动化 DLL 故障隔离矩阵:缺失 DLL、缺失导出、API 不匹配,以及版本、初始化、启动、状态、停止、关闭返回失败或抛异常共14种场景均不导致宿主崩溃;故障 DLL 仅用于内部测试,不进入发布目录。 |
| 2026-08-08 | 项目切换、保存、另存为、关闭、批次校验、撤销恢复和长操作取消统一返回稳定错误码;新增源码与帮助文档错误码一致性自动检查。 |
| 2026-08-07 | 幂等缓存扩展为保存已经完成的成功与失败写请求;失败请求相同参数重放返回原始失败,不同参数复用同一 ID 返回 REQUEST_ID_REUSED。打开和新建项目的常见校验补充稳定错误码。 |
| 2026-08-07 | 补充 DLL 通用业务命令的 projectCommandBatch 调用结构、37 项已登记 DLL 子命令及预览 GUID 安全规则;区分缺失和无效 token,为未提供专用错误码的主程序失败补充 HOST_COMMAND_FAILED,加强 DLL 调用与退出清理边界;MCP 顶层工具仍为 26 项。 |
| 2026-08-06 | 新增能力查询、诊断、长操作状态与取消、项目打开/新建/列表/切换/保存/另存/关闭、统一查询、预演、批量执行、撤销和导出预览;清单扩展为 26 项工具。 |
| 2026-08-05 | 加入网络图/横道图标题、项目开始日期、工作名称与工期、工作/节点移动、两种删除工作以及删除全部空行工具。 |
查询、预览、批量执行、撤销与导出预览
ccproject_get_capabilities
传入空对象 {},返回 API 版本、支持的查询范围、批次上限、安全规则以及 commandCatalog.catalogVersion=3.0、commandCount=124 和三项发现工具。
DLL 命令自描述
ccproject_list_commands 默认返回全部 124 项命令,也可按 category、access=all|read|write 和 keyword 筛选。ccproject_describe_command 返回命令别名、版本、读写/破坏性/幂等标志、projectId/revision/requestId 要求、支持视图、preview/undo/cancellation 能力、输入/输出 Schema、错误码、示例和推荐调用顺序。ccproject_get_command_schema 用于只取 Schema 和最小示例。三项工具均不需要打开项目,也不会改变 revision。
ccprojectctl commands --access write --category doubleCode.layout
ccprojectctl describe-command doubleCode.layout.layoutBlock
ccprojectctl schema task.updateByGuid
ccproject_get_diagnostics
传入空对象 {},返回服务版本、accessMode、是否需要 token、请求计数、未授权请求数、只读模式拒绝写入次数、最近调用工具、最近错误和当前长操作。诊断结果不会返回 token 本身,也不会读取或修改项目业务数据。
项目上下文公共参数
除能力、诊断、操作状态、取消、打开、新建、列表和显式切换外,项目级工具都必须携带最新 projectId。查询只需要 projectId;预览和导出还必须传入 expectedRevision;执行、撤销、保存、关闭和所有单项修改还必须传入唯一 requestId。
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"client-20260806-0001"}
错误结果统一包含稳定的 code;客户端收到错误后应按 code 处理,不要只匹配英文提示文字。当前公共错误码按用途分为:
- 连接与主程序转发:
AUTH_TOKEN_REQUIRED、AUTH_TOKEN_INVALID、READ_ONLY_MODE、HOST_REQUEST_INVALID、HOST_ACTION_UNSUPPORTED、HOST_COMMAND_FAILED、HOST_RESPONSE_TOO_LARGE。 - 请求身份与并发:
REQUEST_ID_REQUIRED、REQUEST_ID_REUSED、EXPECTED_REVISION_REQUIRED、REVISION_CONFLICT。 - 项目选择与状态:
PROJECT_ID_REQUIRED、PROJECT_NOT_FOUND、PROJECT_SWITCH_FAILED、PROJECT_CONTEXT_UNAVAILABLE、PROJECT_EDIT_IN_PROGRESS、PROJECT_READ_ONLY、PROJECT_LIMIT_REACHED。 - 打开与新建:
PROJECT_PATH_REQUIRED、PROJECT_PATH_NOT_ABSOLUTE、PROJECT_FILE_TYPE_UNSUPPORTED、PROJECT_FILE_NOT_FOUND、NEW_PROJECT_ARGUMENTS_REQUIRED、PROJECT_DIRECTORY_NOT_ABSOLUTE、PROJECT_DIRECTORY_NOT_FOUND、PROJECT_NAME_INVALID、PROJECT_FILE_EXISTS、UNSAVED_PROJECT_BLOCKS_OPEN、UNSAVED_PROJECT_BLOCKS_CREATE、PROJECT_OPEN_FAILED、PROJECT_CREATE_FAILED。 - 外部导入:
IMPORT_SOURCE_PATH_REQUIRED、IMPORT_SOURCE_PATH_NOT_ABSOLUTE、IMPORT_SOURCE_FILE_NOT_FOUND、IMPORT_FORMAT_UNSUPPORTED、IMPORT_ARGUMENTS_REQUIRED、IMPORT_PATH_NOT_ABSOLUTE、IMPORT_TARGET_DIRECTORY_NOT_FOUND、IMPORT_TARGET_EXISTS、IMPORT_CONFLICT_POLICY_UNSUPPORTED、IMPORT_SCHEDULE_STRATEGY_INVALID、IMPORT_NO_TASKS、IMPORT_ANALYZE_FAILED、IMPORT_FAILED。 - 保存、另存与关闭:
PROJECT_UNNAMED、PROJECT_SAVE_FAILED、SAVE_AS_ARGUMENTS_REQUIRED、PROJECT_SAVE_AS_FAILED、UNSAVED_ACTION_INVALID、UNSAVED_CHANGES、PROJECT_SAVE_BEFORE_CLOSE_FAILED、PROJECT_CLOSE_FAILED。 - 正式输出:
EXPORT_FORMAT_UNSUPPORTED、EXPORT_PATH_INVALID、EXPORT_EXTENSION_MISMATCH、EXPORT_DIRECTORY_NOT_FOUND、EXPORT_FILE_EXISTS、EXPORT_OPTION_UNSUPPORTED、EXPORT_FAILED、EXPORT_CHANGED_PROJECT、EXPORT_COMMIT_FAILED。 - 批次、撤销与取消:
BATCH_ARGUMENTS_REQUIRED、BATCH_COMMANDS_REQUIRED、BATCH_COMMAND_LIMIT_EXCEEDED、BATCH_COMMAND_INVALID、BATCH_COMMAND_REQUIRED、BATCH_COMMAND_NOT_ALLOWED、COMMAND_BATCH_FAILED、UNDO_NOT_AVAILABLE、UNDO_STATE_CHANGED、UNDO_RESTORE_FAILED、OPERATION_NOT_RUNNING、OPERATION_ID_MISMATCH、OPERATION_NOT_CANCELLABLE、OPERATION_CANCELLED。 - 目标工期:
TARGET_DURATION_INVALID、TARGET_DURATION_BASIS_INVALID。 - 资源优化:
OPTIMIZATION_INFEASIBLE、OPTIMIZATION_ENGINE_UNAVAILABLE、OPTIMIZATION_ENGINE_FAILED、OPTIMIZATION_ANALYSIS_FAILED、OPTIMIZATION_BASE_SCHEDULE_INVALID、OPTIMIZATION_STRATEGY_INVALID、OPTIMIZATION_INTENT_INVALID、OPTIMIZATION_TIME_LIMIT_INVALID、OPTIMIZATION_ITERATION_LIMIT_INVALID、OPTIMIZATION_EVALUATION_LIMIT_INVALID、OPTIMIZATION_STAGNATION_LIMIT_INVALID、OPTIMIZATION_SETTING_INVALID、OPTIMIZATION_CANDIDATE_INVALID、OPTIMIZATION_RESOURCE_NOT_FOUND、OPTIMIZATION_TASK_NOT_FOUND、OPTIMIZATION_DURATION_APPLY_FAILED、OPTIMIZATION_PREVIEW_TOKEN_REQUIRED、OPTIMIZATION_PREVIEW_MISMATCH、OPTIMIZATION_AUTHORITY_VALIDATION_FAILED、OPTIMIZATION_CAPACITY_VALIDATION_FAILED、OPERATION_TIMED_OUT、OPERATION_EVALUATION_LIMIT。 - 双代号只读查询参数:
DOUBLECODE_VALIDATION_MODE_INVALID。校验结果中的问题代码位于validation.issues[].code,用于定位问题,不等同于工具调用失败。 - 通用计划:
PLAN_ARGUMENTS_REQUIRED、PLAN_SCHEMA_VERSION_UNSUPPORTED、PLAN_MODE_UNSUPPORTED、PLAN_PROJECT_INVALID、PLAN_SECTION_INVALID、PLAN_ITEM_INVALID、PLAN_CONTENT_REQUIRED、PLAN_UPDATE_TARGET_REQUIRED、PLAN_UPDATE_EMPTY、PLAN_RELATION_ACTION_INVALID、PLAN_DEFAULT_CALENDAR_CONFLICT、PLAN_CALENDAR_EXCEPTION_ARRAY_INVALID、PLAN_CALENDAR_EXCEPTION_DATE_INVALID、PLAN_CALENDAR_EXCEPTION_TARGET_REQUIRED、PLAN_REPLACE_OPTIONS_REQUIRED、PLAN_REPLACE_SCOPE_INVALID、PLAN_REPLACE_CONFIRMATION_REQUIRED、PLAN_REPLACE_COUNT_MISMATCH、PLAN_REPLACE_DELETE_GUID_INVALID。 - 项目元数据底层校验:
PROJECT_METADATA_FIELD_REQUIRED、PROJECT_METADATA_TEXT_TOO_LONG、PROJECT_TITLE_REQUIRED;通过计划工具调用时作为失败命令明细返回,外层批次仍为COMMAND_BATCH_FAILED并整体回滚。
HOST_COMMAND_FAILED 表示主程序已经拒绝请求,但旧失败分支没有更具体的错误码;客户端应读取 message,修正参数或项目状态后再使用新的 requestId,不得盲目重试。COMMAND_BATCH_FAILED 和 OPERATION_CANCELLED 都带有 rolledBack: true,说明整个批次已经恢复到执行前状态。
HOST_RESPONSE_TOO_LARGE 表示主程序已经生成结果,但单次 UTF-8 响应超过传输缓冲区。结果同时给出 requiredUtf8Bytes 与 responseCapacity;绘图诊断客户端应减小 limit,或改用 cccadDocument、cccadElements 等分页项继续读取,不能把它当成绘图或项目数据错误。
ccproject_get_operation_status 与 ccproject_cancel_operation
长操作执行期间可调用 ccproject_get_operation_status,传入空对象 {}。返回的主要字段为 busy、operationId、operation、elapsedMs、cancellable、cancelRequested 和 progressText。progressText 会显示自动布局或资源优化的当前阶段和已完成数量;资源优化还会按调用参数限制总时间、迭代次数、候选评估次数和停滞轮次。
需要取消时,建议把状态查询返回的操作 ID 原样传入:
{"operationId":"op-00000001"}
ccproject_cancel_operation 只对具有安全检查点的长操作生效。取消双代号自动布局或资源优化后,原执行请求返回 OPERATION_CANCELLED、cancelled: true、rolledBack: true,整个 MCP 批次恢复到执行前状态。资源优化超时返回 OPERATION_TIMED_OUT,评估预算用尽返回 OPERATION_EVALUATION_LIMIT,两者同样不保留正式修改。当前没有运行操作时返回 OPERATION_NOT_RUNNING,操作 ID 不一致时返回 OPERATION_ID_MISMATCH,活动操作没有安全取消点时返回 OPERATION_NOT_CANCELLABLE;不得删除操作 ID 后盲目重试。
ccproject_analyze_import
只读分析外部工程文件,不改变当前项目,也不创建目标文件:
{"sourcePath":"D:\\Imports\\schedule.mpp","format":"auto"}
sourcePath 必须是已存在的绝对路径。format 可取 auto、ccp、msproject、p6_xml 或 excel;自动识别覆盖 CCP/MDB、MPP/MPT、MS Project XML、P6 XML、XLSX、CSV 和制表符文本。成功结果返回 resolvedFormat、源文件大小/时间、源对象计数、可用排程策略、警告和耗时,并标记 sourceUnchanged=true。
分析不会弹出文件选择或导入设置窗口。格式不支持、文件不存在或内容无效时,错误结果包含稳定 code、stage、objectType 和 suggestedAction,调用方应据此修正路径、格式或源数据。
命令行等价调用:
ccprojectctl analyze-import "D:\Imports\schedule.mpp" auto
ccproject_import_project
把外部工程文件转换为新的原生 CCNDB,保存后在当前 CCProject 实例中打开:
{
"sourcePath":"D:\\Imports\\schedule.mpp",
"targetDirectory":"D:\\Projects",
"projectName":"Imported Schedule",
"format":"msproject",
"scheduleStrategy":"duration_relations",
"conflictPolicy":"reject",
"requestId":"import-20260809-0001"
}
targetDirectory 必须是已存在的绝对目录,projectName 使用与新建项目相同的 Windows 文件名规则;生成路径为 目标目录\项目名称.ccndb。当前只允许 conflictPolicy=reject,目标已经存在时返回 IMPORT_TARGET_EXISTS,绝不覆盖。源文件始终只读,成功和失败都不应改变源文件大小、时间或 SHA-256。
scheduleStrategy 可取:
auto:按格式使用默认的精确导入方式;start_duration:以开始日期和工期为主;start_finish:以开始、结束日期为主;duration_relations:以工期和逻辑关系重算日期。
返回的 sourceCounts 和 resultCounts 分开记录工作、摘要、关系、日历、资源、分配、约束、节点、虚工作和悬挂工作;conversionReport 说明过滤关系、映射日历/约束和生成拓扑,另有 requestedScheduleStrategy、appliedScheduleStrategy、warnings、耗时、projectId、targetPath 和 revision。导入成功后仍应按“查询 → 预览 → 修改 → 显式保存”的正常安全顺序继续,不会因为导入而自动保存后续修改。
命令行等价调用:
ccprojectctl import-project "D:\Imports\schedule.mpp" "D:\Projects" "Imported Schedule" req-import-001 msproject duration_relations
ccproject_open_project
打开本机已有的 CCProject 原生项目文件,并把它激活为当前项目:
{"path":"D:\\Projects\\demo.ccndb"}
path 必须是绝对路径,扩展名必须为 .ccndb,文件必须已经存在。成功返回实际路径、文件名、标题、当前视图、工作/节点/关系数量、revision 和打开耗时。该工具不会保存或改写项目文件;目标已经在当前实例中打开时只切换到该项目。
为避免无提示丢失数据,当前未命名项目存在未保存修改时工具会拒绝。CCProject 已经打开四个有文件名的项目时,也会拒绝再打开第五个项目,用户应先在软件中关闭一个项目。
ccproject_new_project
输入目录、项目名称和用户确认的图纸大小,自动创建、保存并打开一个空的 CCProject 项目文件。还可在创建时指定精确开工时间、默认工期单位和默认日历班次:
{"directoryPath":"D:\\Projects","projectName":"Demo Project","paperSize":"A3","projectStartDateTime":"2026-08-18 08:00","defaultTaskDurationUnit":"d","defaultCalendarShiftsPerDay":1,"defaultCalendarShiftWork24Hour":false,"requestId":"new-project-0001"}
生成路径为 D:\Projects\Demo Project.ccndb。directoryPath 必须是已经存在的绝对目录;projectName 为 1 至 200 个字符,不能包含路径、Windows 非法文件名字符、保留名称或 .ccndb 扩展名;paperSize 必须由用户确认并取 A2、A3 或 A4。可选的 projectStartDateTime 使用 YYYY-MM-DD HH:mm,defaultTaskDurationUnit 取 M、d、h、m 或 b,defaultCalendarShiftsPerDay 为 1~96。目标文件或同名目录已经存在时一律拒绝,不会覆盖。
成功后返回生成路径、文件名、项目名称、文件大小、工作/节点/关系数量和 revision;空项目的 taskCount 应为 0。与普通修改工具不同,这项工具的目的就是创建真实文件,因此调用成功时文件已经保存,项目也已经在当前 CCProject 实例中打开。当前未命名项目有未保存修改或已打开四个有文件名的项目时会拒绝。
ccproject_list_projects 与 ccproject_switch_project
ccproject_list_projects 传入空对象 {},返回当前工作区持有的所有项目。每项包括 projectId、active、unnamed、path、fileName、标题、视图、工作/节点/关系数量、modified、fileExists 和 revision。projectId 只在当前 CCProject 进程内有效,软件重启后必须重新查询。
切换项目时必须使用最新列表返回的 projectId:
{"projectId":2}
切换只改变当前活动项目;原项目的未保存编辑继续保留在 CCProject 工作区,不写入磁盘。成功后应再次查询当前项目,不得继续沿用切换前项目的 revision、任务 GUID 或节点号。
ccproject_save_project
保存当前有文件名的项目:
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"save-0001"}
expectedRevision 必须来自紧邻保存操作之前的 ccproject_query。版本不一致、当前项目未命名、文件被外部修改、保存锁失败或项目版本只读时均拒绝。成功保存沿用主程序原有保存链路,包括自动备份;返回保存路径、文件大小、modified=false 和保存后的新 revision。
ccproject_save_project_as
把当前项目保存到新路径,并把新路径设为当前项目路径:
{"directoryPath":"D:\\Projects","projectName":"Demo Copy","projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"save-as-0001"}
目录和名称规则与新建项目一致。目标文件或同名目录存在时一律拒绝,不提供隐式覆盖开关。另存成功后,原文件仍保留在磁盘,但当前工作区项目身份切换到新文件;后续查询和保存应使用返回的新路径与新 revision。
ccproject_close_project
关闭当前活动项目时,必须同时提供查询得到的版本和未保存数据处理方式:
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"close-0001","unsavedAction":"reject"}
unsavedAction 只能取:
reject:项目有未保存修改时拒绝关闭,是 AI 默认应使用的安全模式;save:有修改时先保存原路径,保存成功后才关闭;未命名项目必须先另存为;discard:明确丢弃未保存修改后关闭,属于破坏性操作,必须有用户清楚授权。
关闭后如果还有其他项目,CCProject 自动激活一个替代项目;如果没有,则返回启动欢迎空项目。返回结果包含已关闭项目、处理方式和新的活动项目信息。关闭工具不弹出人工确认框,因此 AI 不得把含糊的“退出一下”解释为 discard。
ccproject_query
scope 可取 dataDictionary、project、projectSettings、projectComplexFields、works、workDetails、drawingSettings、nodes、relationships、doubleCodeBlocks、doubleCodeMembership、doubleCodeRows、doubleCodeTopology、doubleCodeGeometry、doubleCodeValidation、topologyDiagnostics、calendars、constraints、scheduleSummary、criticalPath、taskAnalysis、milestones、delayed、qualityValidation、targetDuration、resources、resourceAssignments、resourceLoad、resourceOverAllocation、wbsSummary、wbsProgress、baselineSummary、baselineTasks、actualProgress、scheduleVariance、forecast、adjustmentPlans、adjustmentPlanTasks、analysisReports、analysisReportTasks、pdcaRecords、auditTrail、drawingDiagnostics 或 all,共 44 种,默认是 project。offset 从 0 开始,limit 范围为 1 至 200,默认 100。
新增的基础范围用于完整读取的稳定契约:
dataDictionary:返回公开数据域、对应查询范围、字段分类、隐私规则和分页规则,使 AI 能区分输入字段、计算结果、持久化设置和临时状态;具体结果字段仍以tools/list的 Schema 和该范围返回的schemaVersion为准;projectSettings:返回按业务分组的项目核心设置,并在scalarModel.fields中完整返回TProjectSnapshot的 612/612 个可直接序列化的持久化字段;30 个会话专用字段(包括项目标尺计算值和Bid*投标预览字段)单独放入runtimeScalarFields,不会混入持久化计数。外部主数据源 URI 和本机文件路径默认不返回;只有调用方明确传入includeSensitive: true时才包含;projectComplexFields:不传collection时返回项目快照 121 个复合字段目录;传入精确字段名后读取对应嵌套记录、数组、向量或映射,向量字段支持offset/limit分页。生成器递归覆盖相关记录类型;注释中的图片路径默认省略,只有明确指定includeSensitive: true才返回;pdcaRecords:不传collection时列出 11 类可读集合;branches、executionBatches和analysisReports返回项目级记录,其他集合按执行批次分页读取任务、变更、预测与前锋线。branchSnapshotSettings通过baselineBranchId或adjustmentBranchId读取分支快照直接字段;branchSnapshotComplex还需用field指定复合字段。九种非快照记录共 136/136 个字段进入反向覆盖,分析报告的输出文件索引默认脱敏;workDetails:分页返回TTaskRecord的全部 251 个标量字段,并按身份、WBS、排程、日历、工程量、责任、计算显示、各图形样式和标签布局分组;它比兼容性的works范围更适合逐项复核;drawingSettings:返回双代号和横道图的纸张、标题、列和核心持久化绘图设置,并通过coverage标明当前覆盖层级。drawingDiagnostics:从主程序生产显示列表建立不可变captureId,可用view指定图形、用从 1 开始的page指定图纸页;按summary、primitives、candidates、calculationTraces、allowedRelations、comparisonIndex或cccadSource分页读取图元语义、实体 GUID、子角色、序号、完整 CCCAD 图元、渲染指纹和布局诊断。后续数据必须复用同一捕获,不能把截图或 OCR 当作结构化验收依据。
每次成功查询都返回 dataSchemaVersion、signatureAlgorithm 和 resultSignature。当前算法名称为 fnv1a64-utf16le-v1;签名只代表本次规范化查询结果,用于客户端识别结果是否变化,不是完整项目文件指纹,也不能代替写操作必须使用的 revision。
relationships 的依赖关系记录覆盖 5/5 个模型字段;calendars 覆盖 19/19 个日历字段;resources 和 resourceAssignments 分别覆盖 14/14 个资源字段和 10/10 个分配字段。这里的“字段完整”是读取契约,不表示同名数据已经全部可写;修改能力仍应以命令目录和写工具 Schema 为准。
projectSettings.scalarModel 和 projectComplexFields 均由 TProjectSnapshot 源定义自动生成,并返回模型签名和覆盖计数。构建测试会在模型字段新增、删除或类型变化而生成物未同步时失败,防止后续版本静默漏字段。持久化直接字段、复合字段和会话字段合计覆盖项目快照顶层 763/763 个字段,pdcaRecords 再覆盖项目快照之外九种 B/E/F/R/A 记录的 136/136 个字段。这里完成的是只读能力;完整写入仍按后续阶段逐域开放。
任务筛选字段为 name、taskGuid、startNode、endNode;双代号六类查询另外支持 blockGuid、nodeGuid 和 summaryOnly,校验查询可用 validationMode=draft|strict。asOf 使用 YYYY-MM-DD,用于判断逾期工作,省略时取运行 CCProject 的本机当前日期。资源筛选字段为 resourceName、resourceGuid、resourceId、category;资源负荷和超配还可使用 fromDate、toDate 限定相交日期范围。WBS 查询可使用 wbsCode 精确选择摘要节点,name 在 WBS 范围中用于筛选摘要名称。B/E/F/R/A 查询可使用 baselineBranchId、baselineCode、executionBatchId、executionBatchGuid、executionBatchCode 精确选择数据链;R 查询增加 adjustmentBranchId、adjustmentCode,A 查询增加 reportId、reportGuid、reportCode。executionStatus 可筛选 not_started、in_progress 或 completed;scheduleVariance 和 wbsProgress 支持 onlyExceptions,adjustmentPlanTasks 支持 onlyChanges。
{"projectId":2,"scope":"all","offset":0,"limit":100}
返回结果中的 revision 表示当前项目内存状态。project.drawingPapers 返回每个视图的 viewModeIndex、paperName、widthMm、heightMm、orientation 和 autoAdjust。工作结果包含任务 ID/GUID、名称、日期、工期、节点和绘图行;节点结果包含节点号、GUID、行号及歧义标记;关系结果同时包含双代号工作的节点边和任务前后置关系。分页结果包含 total、offset、limit、hasMore 和 items。
topologyDiagnostics 返回双代号权威拓扑的有效性、真实工作/逻辑关系/物理工作数量、唯一总开始与总结束节点、循环、不可达节点、重复起止节点对、未被拓扑表达的逻辑关系,以及自动虚工作、挂起工作、GUID 和用途。project.taskCount 与 works 只统计真实业务工作;project.physicalTaskCount 和 generatedTopologyTaskCount 单独报告自动辅助对象。自动辅助工作不应作为行业工序展示或修改。
六种双代号增量编辑查询遵守 doublecode-edit/1.0 契约:
doubleCodeBlocks:按稳定顺序返回完整区块树、blockGuid、父子内部引用、层级、叶/父类型、行模式、锁定和派生行范围;doubleCodeMembership:按taskGuid -> blockGuid的持久化归属返回工作,明确区分未分配、失效区块和父区块直接工作,不按当前行号猜测归属;doubleCodeRows:返回每个区块的requiredRows、allocatedRows、usedRows、freeRows、overflowRows、startRow和endRow;doubleCodeTopology:分别分页返回节点和工作,工作标明真实、虚、挂起、里程碑或自动辅助类型及两端稳定节点 GUID;doubleCodeGeometry:返回项目中已持久化或可确定派生的逻辑行、日期、标签偏移和区块边界,每个位置标明stored、derived、default或unavailable;当前不把临时屏幕像素和绘制缓存作为项目数据;doubleCodeValidation:在draft或strict模式下返回结构、归属、容量、拓扑和越界问题;每项包含严重级别、稳定问题代码、对象 GUID、行号、是否可修复和建议命令。
{"projectId":2,"scope":"doubleCodeBlocks","offset":0,"limit":100}
{"projectId":2,"scope":"doubleCodeValidation","validationMode":"strict","summaryOnly":false,"offset":0,"limit":100}
summaryOnly=true 时仍返回总数和汇总指标,但分页 items 为空,适合 AI 先判断数据规模。六类查询只读,不改变项目 revision、修改状态或撤销历史;写操作应使用紧邻修改前查询得到的 revision。
calendars 返回项目日历、默认日历、每周非工作日掩码、每日工时、工作时间段、假日和调休工作日;constraints 返回项目要求开始/完成日期以及每项逻辑工作的约束类型、约束日期和截止日期。这两类查询都不修改项目。
七种排程与质量分析范围使用主程序当前排程模式和日历重新计算,但不修改项目:
scheduleSummary:返回项目起止时间、总工期、完成/剩余工作数、平均进度、关键/非关键工作数、里程碑数、关键线路工期、逾期数及计算错误状态;criticalPath:按顺序返回关键线路taskIds、工作明细和线路上的逻辑关系;taskAnalysis:分页返回每项工作的最早/最迟起止、总时差、自由时差、关键与里程碑标记;milestones:只返回计算后识别出的里程碑;delayed:返回已逾期、已有延误量、突破截止日期或出现负时差的工作,并在delayReasons中分别标记overdue、recordedDelay、deadlineMissed、negativeFloat。qualityValidation:报告循环、自我/重复关系、孤立工作、异常开放端、无效日期/工期/日历/约束、不可满足约束、负时差和突破截止日期;只判断通用技术一致性,不判断行业工艺是否合理;targetDuration:必须额外传入targetDurationDays(1至36500),durationBasis为workingDay或calendarDay;返回实际工期、差值、是否满足目标、目标完成日期和约束状态,不修改任何工作工期。
{"projectId":2,"scope":"scheduleSummary","asOf":"2026-08-20"}
{"projectId":2,"scope":"criticalPath","offset":0,"limit":100}
{"projectId":2,"scope":"taskAnalysis","name":"基础","offset":0,"limit":50}
{"projectId":2,"scope":"targetDuration","targetDurationDays":300,"durationBasis":"workingDay"}
排程分析结果按用户看到的逻辑工作返回。双代号组件在内部可能有多个物理分段,接口会合并为一项逻辑工作,并用 segmentCount 说明分段数。delayed 中的“逾期”定义为:工作进度小于 100,且计算后的最早完成日期早于 asOf。all 为兼容原客户端,仍只组合项目、工作、节点和关系;需要排程分析时应显式使用相应范围。
四种资源查询范围也使用主程序当前排程和资源汇总链,但不修改项目:
resources:分页返回资源库和usage汇总,包括计划总量、计划工时、平均用量、容量、峰值和超配标记;resourceAssignments:分页返回工作与资源的分配记录,同时给出物理工作和逻辑工作身份、计划/实际数量及排程起止时间;resourceLoad:返回项目资源汇总和计划用量不变的连续时间区间;每个区间包含units、capacityUnits和overAllocated;resourceOverAllocation:只返回超配时间区间,并给出项目超配资源数量。
{"projectId":2,"scope":"resources","resourceName":"钢筋","offset":0,"limit":50}
{"projectId":2,"scope":"resourceAssignments","resourceId":23,"offset":0,"limit":100}
{"projectId":2,"scope":"resourceLoad","resourceGuid":"资源GUID","fromDate":"2026-07-01","toDate":"2026-07-31"}
{"projectId":2,"scope":"resourceOverAllocation","category":"人工","fromDate":"2026-08-01","toDate":"2026-08-31"}
资源负荷与超配当前是计划口径,不是实际资源曲线。区间采用 [start, finish);项目中已保存的实际数量只在 resourceAssignments 中原样返回。all 同样不会隐式加入资源结果,需要时应明确使用资源范围。
两种 WBS 查询把逐项工作归纳为项目根节点和摘要层级,但不修改当前计划:
wbsSummary:读取当前项目的OutlineLevel、WbsCode和摘要工作,返回父子关系、直接/全部子 WBS 数、直接/全部工作数、计划起止、日历跨度、里程碑数、平均进度、按工期加权进度和工程量汇总;wbsProgress:读取指定基准和执行批次,按相同 WBS 层级汇总计划、实际和已保存预测,返回执行状态计数、actualCompletionPercent、remainingDurationTotal、实际/预测/预计起止、偏差依据、延期/异常/关键工作数。
{"projectId":2,"scope":"wbsSummary","wbsCode":"1.2","offset":0,"limit":50}
{"projectId":2,"scope":"wbsProgress","baselineCode":"B0","executionBatchCode":"E01","onlyExceptions":true}
WBS 分页对象是摘要节点,root 始终是项目级汇总。没有摘要工作的平面项目仍会返回有效 root,但 nodes.total 为 0。wbsProgress 的 taskGuid 和 executionStatus 用于筛选参加汇总的基准工作;name 和 wbsCode 只筛选返回的 WBS 节点。工程量只有在后代工作的单位一致时才求和;单位混合时 quantityUnit 返回 mixed,数量汇总返回 null,避免把不同单位直接相加。预计起止按逐工作“实际优先、无实际时使用预测”汇总,依据可能是 actual、forecast、mixed 或 none。all 不会隐式加入 WBS 数据。
五种 B/E/F 进度查询直接读取项目中已经保存的计划基准、执行批次和预测快照,不创建或修改业务记录:
baselineSummary:返回计划基准和执行批次列表,并标明当前/选中的基准和批次;baselineTasks:分页返回指定基准自身保存的计划工作,不用当前计划冒充历史基准;actualProgress:分页返回指定执行批次的实际日期、完成百分比、剩余工期和变更说明;scheduleVariance:同时返回计划、实际和预测日期。实际日期优先,无实际时才用预测;偏差字段明确使用日历日,并用actual、forecast或none标记依据;forecast:只返回已经保存的预测快照和逐工作结果,不会因查询而重新计算或生成预测。
{"projectId":2,"scope":"baselineSummary","offset":0,"limit":50}
{"projectId":2,"scope":"baselineTasks","baselineCode":"B0","name":"基础"}
{"projectId":2,"scope":"actualProgress","executionBatchCode":"E01","executionStatus":"in_progress"}
{"projectId":2,"scope":"scheduleVariance","executionBatchCode":"E01","onlyExceptions":true}
{"projectId":2,"scope":"forecast","executionBatchGuid":"执行批次GUID"}
未指定时,执行类查询(包括 wbsProgress)优先采用当前执行批次及其绑定基准,独立基准查询优先采用控制基准。显式选择的基准与批次不属于同一条数据链时返回错误。B/E/F 结果同时返回 progressRevision;它用于识别实际进度或预测内容变化,不能替代写命令使用的项目 revision。all 不会隐式加入这些数据。
四种 R/A 查询读取已经保存的调整方案和正式分析报告,不会创建方案、审批、发布基准或重新生成报告:
adjustmentPlans:分页返回 R 调整方案,包含来源 B/E/F、状态、数据日期、审批/发布时间、发布后的新基准代码、项目起止偏差及各类变化工作计数;adjustmentPlanTasks:选中一项 R,与其来源基准逐工作比较,返回新增、删除、修改或未变化标记,以及名称、起止、工期和进度变化;onlyChanges: true时只返回有变化的工作;analysisReports:分页返回 A 分析报告的标题、说明、结论、来源模式、B/E/R 数据链、筛选范围、选中工作数、创建人和时间;analysisReportTasks:选中一份 A,按报告保存的工作顺序返回基准工作、实际记录、预测结果和可选的 R 调整工作。
{"projectId":2,"scope":"adjustmentPlans","adjustmentCode":"R01"}
{"projectId":2,"scope":"adjustmentPlanTasks","adjustmentCode":"R01","onlyChanges":true,"offset":0,"limit":50}
{"projectId":2,"scope":"analysisReports","reportCode":"A01"}
{"projectId":2,"scope":"analysisReportTasks","reportGuid":"分析报告GUID","offset":0,"limit":50}
列表范围中的 name 用于匹配方案或报告代码、名称和标题;工作明细范围中的 name 用于筛选工作名称。未指定 R 或 A 时,明细范围选择满足其他筛选条件的最新记录;正式集成建议始终携带 adjustmentBranchId/adjustmentCode 或 reportId/reportGuid/reportCode。四种结果同时返回 progressRevision 和 analysisRevision:前者表示 B/E/F 数据链版本,后者还覆盖 R 方案和 A 报告。all 不会隐式加入 R/A 数据。
ccproject_preview_plan 与 ccproject_apply_plan
这两个工具让外部 AI 直接提交通用计划数据,不必手工拼装外层 projectCommandBatch。当前 Schema 版本为 1.0,支持 append、update 和 replace。新建或追加计划使用 append:
{
"projectId": 2,
"expectedRevision": "查询返回的 revision",
"requestId": "apply-plan-0001",
"schemaVersion": "1.0",
"mode": "append",
"project": {
"startDate": "2026-10-01",
"title": "通用工程进度计划",
"owner": "建设单位",
"designUnit": "设计单位",
"supervisionUnit": "监理单位",
"constructionUnit": "施工单位",
"principal": "项目负责人",
"drawingNumber": "PLAN-001",
"overview": "项目概况"
},
"calendars": [
{"clientCalendarId": "CAL-MAIN", "name": "标准五天八小时", "nonWorkingWeekMask": 65, "workHoursPerDay": 8, "holidays": ["2026-10-01"], "workingDays": ["2026-10-03"]}
],
"wbs": [
{"clientTaskId": "WBS-ROOT", "name": "项目", "wbsCode": "1"}
],
"tasks": [
{"clientTaskId": "A", "name": "工作A", "durationDays": 10, "parentClientTaskId": "WBS-ROOT", "calendarClientId": "CAL-MAIN"},
{"clientTaskId": "B", "name": "工作B", "durationDays": 20, "parentClientTaskId": "WBS-ROOT", "calendarClientId": "CAL-MAIN"}
],
"relationships": [
{"fromClientTaskId": "A", "toClientTaskId": "B", "type": "FS", "lagDays": 0}
]
}
调用 ccproject_preview_plan 时删除 requestId;预览返回 planPreview=true 和 simulatedTaskGuids=true,其中 GUID 不能用于正式修改。用户确认后,以相同 projectId、expectedRevision 和计划内容调用 ccproject_apply_plan,并增加新的 requestId。正式结果在顶层返回 clientTaskMap、clientCalendarMap 和 topology,可直接用于后续查询和修改。只要本次计划包含工作或关系,两种工具就在同一 DLL 事务内重建双代号拓扑;任何工作、关系或拓扑步骤失败都会整体回滚。正式应用不自动保存文件。
拓扑转换支持 FS、SS、FF、SF 和正、零、负 lagDays。真实工作 GUID 保持不变,自动生成的虚工作或挂起工作拥有稳定 GUID 和可查询用途。若项目含有未标记的人工虚工作、挂起工作、辅助工作或组件拓扑,自动重建会返回保护性冲突,不会覆盖人工拓扑;应由用户决定是否整理该项目,AI 不得删除保护标记或猜测处理方式。
project 可包含 startDate、title、owner、designUnit、supervisionUnit、constructionUnit、totalInvestment、principal、drafter、reviewer、proofreader、drawingTimeText、drawingNumber 和 overview,还可用 defaultCalendarClientId/defaultCalendarGuid 选择默认日历,并设置 requiredStart、requiredStartEnabled、requiredFinish、requiredFinishEnabled。除开始日期外,项目元数据由不依赖活动视图的命令处理;ccproject_query(scope=project) 返回同一组字段供执行后复核。网络图标题和横道图标题属于显示层,仍分别使用原有标题工具。
日历对象支持 nonWorkingWeekMask、workHoursPerDay、班次和 workingTimeText;holidays、workingDays 和 removeExceptions 都是 YYYY-MM-DD 字符串数组。append/replace 用 clientCalendarId 定位新日历,update 用正式 calendarGuid;同一天设置为假日或工作日时会自动从另一类例外中移除。工作对象可用 workType=MILESTONE 创建零工期里程碑,可设置八类 constraintType、constraintDate、deadline/clearDeadline,并用 calendarClientId 或 calendarGuid 指定日历。
修改现有计划使用 update。日历必须提供当前项目的 calendarGuid,WBS 和工作必须提供 taskGuid,关系必须提供 fromTaskGuid 与 toTaskGuid;关系的 action 为 set 或 remove:
{
"schemaVersion":"1.0",
"mode":"update",
"projectId":2,
"expectedRevision":"REVISION_FROM_QUERY",
"tasks":[
{"taskGuid":"TASK_GUID_A","name":"新名称","durationDays":12,"progress":25}
],
"relationships":[
{"action":"set","fromTaskGuid":"TASK_GUID_A","toTaskGuid":"TASK_GUID_B","type":"SS","lagDays":1}
]
}
update 只按正式 GUID 定位,同名工作不会导致选择第一个;GUID 不属于所传 projectId 时整批失败回滚。工作还可用 parentTaskGuid 调整 WBS 父级,或用 calendarGuid 设置任务日历。WBS 可更新名称、编码、折叠状态和父级;日历可更新现有属性并增删例外日期。
替换计划使用 replace,但不会隐式清空项目。调用方必须先查询当前工作,明确列出待删除 GUID;父子层级按子工作到父摘要排列:
{
"schemaVersion":"1.0",
"mode":"replace",
"projectId":2,
"expectedRevision":"REVISION_FROM_QUERY",
"replace":{
"scope":"listedTasks",
"confirmDelete":true,
"expectedDeleteCount":2,
"deleteTaskGuids":["CHILD_TASK_GUID","PARENT_SUMMARY_GUID"]
},
"tasks":[
{"clientTaskId":"NEW-A","name":"新工作","durationDays":10}
]
}
confirmDelete 不是 true、清单有空值/重复值或数量不一致时,DLL 在进入主程序前拒绝请求。正式结果返回 replaceScope=listedTasks、replaceConfirmed=true 和 replaceRequestedDeleteCount。替换只删除清单中的工作及其关联关系,保留既有日历;任一步失败均整体回滚。
每份计划展开后最多200条主程序业务命令。已经验证一次新增50项工作和100条关系,以及显式替换5项工作为2项工作。
命令行工具使用同一份不含项目上下文字段的计划 JSON:
ccprojectctl preview-plan 2 REVISION plan.json
ccprojectctl apply-plan 2 REVISION req-plan-0001 plan.json
ccproject_preview 与 ccproject_execute
两者都要求 projectId、expectedRevision 和 1 至 200 条 commands。ccproject_execute 还要求 requestId;ccproject_preview 不接受 requestId,因为它始终恢复原状态。必须把查询返回的 revision 原样传入;如果项目已经变化,调用会返回 REVISION_CONFLICT,防止 AI 按旧数据修改新状态。
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"execute-0001",
"commands":[
{"op":"setNetworkTitle","title":"施工进度网络图"},
{"op":"setWorkDurationByNodes","startNode":1,"endNode":2,"newDurationDays":20}
]
}
上例是执行参数;调用预览时删去 requestId,其余内容保持一致。ccproject_preview 在临时内存状态中执行同一套业务命令,返回项目、工作、节点和关系的预计差异,随后恢复原状态。ccproject_execute 把整批命令作为一个事务执行:任一步失败时整体回滚;成功且确有变化时只形成该 projectId 自己的一条撤销记录;不会自动保存项目文件。批次中禁止 save、saveAs、new、newProject 和 newFile。
当前批处理支持的主要 op 为:addWork、task.update、task.reorder、setView、drawing.paper.setPreset、linkWork、unlinkWork、dependency.set、dependency.remove、setNetworkTitle、setGanttTitle、setProjectStart、setWorkNameByNodes、setWorkDurationByNodes、moveWorkByNodes、diagram.moveWork、moveNode、diagram.moveNode、deleteWorkMergeNodes、deleteWorkDisconnectNodes、deleteAllBlankRows、diagram.autoLayout。具体别名和字段以 ccproject_get_capabilities 及实际执行校验为准。
DLL 通用业务命令批次
工作、关系、WBS、日历、资源、工作资源分配、项目要求日期、工作约束和目标工期分析统一放在一个外层 projectCommandBatch 中。这样增加普通 DLL 子命令时不需要继续增加 MCP 顶层工具,也不需要为每个子命令增加主程序 EXE 分支。
{
"projectId": 2,
"expectedRevision": "查询返回的 revision",
"requestId": "execute-dll-batch-0001",
"commands": [
{
"op": "projectCommandBatch",
"commands": [
{
"command": "task.add",
"arguments": {
"clientTaskId": "A",
"name": "基础施工",
"durationDays": 10
}
},
{
"command": "task.add",
"arguments": {
"clientTaskId": "B",
"name": "主体施工",
"durationDays": 20
}
},
{
"command": "dependency.set",
"arguments": {
"fromClientTaskId": "A",
"toClientTaskId": "B",
"dependencyType": "FS",
"lagDays": 0
}
}
]
}
]
}
调用 ccproject_preview 时删除 requestId,其余 JSON 保持一致。预览会执行同一套 DLL 校验并恢复项目;返回的任务、日历、资源和区块 GUID 都是本次预览中的临时结果,不得带入正式执行。正式执行任一 DLL 子命令失败时,外层 MCP 批次整体回滚;成功后仍然不自动保存文件。
当前 DLL 命令目录 V3 共登记 124 项子命令:
- 系统与批量:
system.capabilities、plan.previewBatch、plan.applyBatch; - 工作:
task.resolveByGuid、task.resolveByNodes、task.setNameByGuid、task.setNameByNodes、task.setDurationDaysByGuid、task.setDurationDaysByNodes、task.updateByGuid、task.add、task.deleteByGuid、task.reorderByGuid; - 关系:
dependency.set、dependency.remove; - WBS:
wbs.addSummary、wbs.updateSummary、wbs.setParent; - 日历:
calendar.list、calendar.add、calendar.update、calendar.setException、calendar.removeException、project.setDefaultCalendar、task.setCalendar; - 资源:
resource.list、resource.add、resource.update、resource.delete、taskResource.list、taskResource.set、taskResource.remove; - 资源优化:
resourceOptimization.run、resourceOptimization.archive、resourceOptimization.solution.updateMetadata、resourceOptimization.solution.apply; - 项目、约束与目标工期:
project.updateMetadata、project.scheduleSettings.update、project.bidSettings.update、project.constructionConditions.replace、project.constraint.get、project.constraint.set、project.targetDuration.analyze、task.constraint.list、task.constraint.set; - 双代号区块树:
doubleCode.block.add、doubleCode.block.update、doubleCode.block.move、doubleCode.block.reorder、doubleCode.block.delete; - 双代号工作:
doubleCode.work.add、doubleCode.work.update、doubleCode.work.copy、doubleCode.work.assign、doubleCode.work.unassign、doubleCode.work.moveToBlock、doubleCode.work.reorder; - 双代号总工作:
doubleCode.totalWork.create、doubleCode.totalWork.update、doubleCode.totalWork.members.set、doubleCode.totalWork.fold.set、doubleCode.totalWork.delete; - 双代号区块行数:
doubleCode.rows.set、doubleCode.rows.adjust、doubleCode.rows.insert、doubleCode.rows.delete、doubleCode.rows.autoFit; - 双代号关系同步:
doubleCode.relation.set、doubleCode.relation.remove、doubleCode.relation.setRepresentation; - 双代号节点:
doubleCode.node.add、doubleCode.node.delete、doubleCode.node.split、doubleCode.node.merge、doubleCode.node.renumber; - 双代号工作端点和删除:
doubleCode.work.connect、doubleCode.work.reconnect、doubleCode.work.deleteMergeNodes、doubleCode.work.deleteDisconnectNodes; - 双代号局部修复:
doubleCode.topology.repairLocal; - 双代号局部布局:
doubleCode.layout.analyze、doubleCode.layout.setLock、doubleCode.layout.moveWork、doubleCode.layout.moveNode、doubleCode.layout.setGeometry、doubleCode.layout.resetGeometry、doubleCode.layout.layoutBlock、doubleCode.layout.layoutSelection、doubleCode.layout.layoutAll、doubleCode.layout.setDisplayMode; - 横道图桥接:
doubleCode.syncToGantt、doubleCodeWbs.buildFromGantt; - 组件工作:
doubleCode.component.splitWork、doubleCode.component.formAtNode、doubleCode.component.mergeAtNode、doubleCode.component.dissolve、doubleCode.component.cleanUnusedNodes; - 绘图设置:
gantt.style.update、doubleCode.style.update、drawing.timeScale.update、drawing.timeDeformation.replace、drawing.gridColumn.update、drawing.paper.update、drawing.title.update、gantt.workStyle.update、doubleCode.workStyle.update; - 其他图形和报表:
drawing.otherSettings.update、drawing.taskStyle.update、drawing.taskOrder.replace; - 图上标注:
annotation.add、annotation.update、annotation.move、annotation.delete; - PDCA 闭环:
pdca.baseline.publishInitial、pdca.executionBatch.create、pdca.executionTask.update、pdca.executionBatch.confirm、pdca.forecast.generate、pdca.adjustmentPlan.create、pdca.adjustmentPlan.updateTask、pdca.adjustmentPlan.approve、pdca.adjustmentPlan.publishBaseline、pdca.analysisReport.create; - 双代号拓扑:
topology.rebuild。
内层每一项都使用 {"command":"命令名","arguments":{...}}。命令名、完整参数、结果 Schema、稳定错误码和示例以三项自描述工具读取的编译目录为准;system.capabilities 保留兼容性命令名列表。
第 3 阶段核心业务写入
project.scheduleSettings.update修改默认工作工期单位,以及项目总工期、横道图和双代号的非工作日扣除显示规则;project.bidSettings.update修改当前项目本次会话的投标显示设置,包括统一字体/颜色/边框、背景填充、工期显示边界和标尺覆盖。结果明确返回persistent=false;单独执行或只包含这类命令的批次不会写入 CCNDB、不会把项目标记为已修改,也不会触发分支快照保存;project.constructionConditions.replace按数组替换雨季和赶工时段。时段输入只决定不变的施工条件,排程日期和资源结果仍由 CCProject 计算;task.updateByGuid可修改普通工作的名称、编码、类型、重要性、工期单位、进度、工作日历例外、雨季/赶工参数、起止延时、工程量、责任人和扩展文字。组件工作的首尾延时必须使用后续组件专用命令,当前接口会明确拒绝直接改写;dependency.set的旧参数lagDays继续表示整数工作日;需要精确延时时使用lagValue与lagUnit=d|h|m,不能与lagDays同时传入;calendar.add和calendar.update除工作周、班次和工作时段外,还支持基准日历、休息日背景颜色/填充/类型。calendar.setException接受holiday、兼容别名nonworking或working;- 资源库、工作资源分配、WBS、工作约束与项目约束继续使用
resource.*、taskResource.*、wbs.*、task.constraint.*和project.constraint.*。实际执行量使用 PDCA 数据链;资源优化使用本页第 10 阶段专用工具或resourceOptimization.run; - 上述写入都应先通过
ccproject_get_command_schema取得当前 Schema,再放入ccproject_preview/ccproject_execute的projectCommandBatch。正式执行后 CCProject 会重算并生成一次可撤销历史,但不会自动保存文件。
第 4 阶段组件工作
doubleCode.component.splitWork把一项普通实体工作拆成 2~5 段;mode=component保持同一工作名称和组件身份,mode=independent生成独立工作并建立零延时 FS 关系;- 分段工期总和必须等于原工期,工程量、已完成工程量和资源分配量按各段工期确定性分配,原依赖的完成端迁移到最后一段;
doubleCode.component.formAtNode将一个节点处唯一的前后两项工作组成组件,要求两项工作之间存在显式零延时 FS 关系;doubleCode.component.mergeAtNode合并同一组件内相邻两段并汇总工期、工程量、进度量和资源分配量;doubleCode.component.cleanUnusedNodes重复执行这种安全合并;doubleCode.component.dissolve只解除组件身份和次序,不改写实体工作、工期或工程量;所有命令都必须先预览,再使用最新 revision 正式执行。
第 5 阶段双代号与横道图绘图设置
gantt.style.update和doubleCode.style.update修改项目级横道、关系线、重要/非重要工作、节点、箭头、文字、日期线和组件显示样式;drawing.timeScale.update分别设置横道图或双代号的顶部、底部时间刻度,包含显示行数、单位、间隔、格式、高度、对齐和分隔线;drawing.timeDeformation.replace原子替换时间坐标压缩、缩放和单点延展设置;drawing.gridColumn.update按稳定nameKey修改工作列表列顺序、宽度、可见性、对齐和名称;drawing.paper.update修改指定视图纸张尺寸、边距、分页、每页行数、空白区和自动间距;drawing.title.update修改标题、副标题、页码、位置和下划线;gantt.workStyle.update与doubleCode.workStyle.update按taskGuid设置或清除单项工作的横道颜色、高度、填充、字体,以及双代号线型、颜色、线宽和文字字体;ccproject_query(scope=drawingSettings)返回schemaVersion=1.2的项目绘图设置;单项工作覆盖由workDetails.displayOverrides、ganttFontOverride和doubleCodeFonts返回;- 九项命令均可放入同一个
projectCommandBatch预演和执行。执行后应查询设置并输出 PNG 预览核对,确认后再显式保存;撤销会恢复整个批次。
第 6 阶段其他图形、报表和标注
drawing.otherSettings.update通过view=singleCode|sCurve|slope|vertical|report修改对应视图的持久化边框、内部线、日期范围、图例、字体、里程、统计周期、汇总和数值格式设置。它不修改临时选区、滚动位置或窗口状态;drawing.taskStyle.update按稳定taskGuid修改或清除单项工作的斜率图线型/颜色/线宽,以及垂直图线、方框、里程和施工位置显示;drawing.taskOrder.replace按taskGuid数组替换斜率图或垂直图的持久化任务顺序,可同时显式设置任务筛选开关。摘要任务和重复 GUID 会被拒绝;annotation.add支持text、image、rectangle、line、arrow、ellipse、diamond、star和hexagon。新增后由 CCProject 分配稳定annotationId;后续使用annotation.update、annotation.move和annotation.delete精确修改;- 图片标注必须使用已存在的绝对本机路径。普通
drawingSettings查询只返回hasImagePath并把imagePath置为null;只有用户明确允许、且查询传入includeSensitive=true时才返回完整路径; drawingSettings.otherDrawings、drawingSettings.report和drawingSettings.annotations可读回所有本阶段开放字段;任务级覆盖继续在workDetails中读取;- 所有命令都经过同一项目快照持久化和绘图路径,不模拟菜单、鼠标或窗口坐标。建议把多项修改放入一个
projectCommandBatch,先预演,再执行、查询、导出预览,最后显式保存。
第 7 阶段 PDCA 全生命周期写入
pdca.baseline.publishInitial从当前计划发布初始控制基准 B0;只有符合软件现有发布规则的项目才能进入执行阶段;pdca.executionBatch.create建立执行批次,pdca.executionTask.update填写实际开始、实际完成、实际完成量及说明,pdca.executionBatch.confirm按软件规则封存本批实际事实。确认后不能直接回写篡改;- 只输入日期的
actualStart、actualFinish会分别对齐到基准工作的工作开始、工作结束时刻,避免同一天的午夜值与软件工作时间产生虚假排程差异; pdca.forecast.generate根据当前控制基准和已确认实际数据生成预测 F;pdca.adjustmentPlan.create、pdca.adjustmentPlan.updateTask、pdca.adjustmentPlan.approve形成并审批调整方案 R;pdca.adjustmentPlan.publishBaseline把已审批方案发布为新控制基准 B1。基准转换后的首个执行批次会继承上一基准已确认的实际事实,并按连续状态链校验;pdca.analysisReport.create生成分析记录 A,保存基准、实际、预测、调整方案和差异摘要的稳定引用;- 十项命令全部通过
projectCommandBatch调用,支持同一规则的预演、原子执行、revision 并发校验和显式保存。项目 revision 包含分支、执行批次、预测、调整方案和分析报告;MCP 最多保留 64 轮顺序撤销历史; - 查询使用
ccproject_query(scope=pdcaRecords),可读取baselineSummary、baselineTasks、actualProgress、forecast、adjustmentPlans、analysisReports等记录。正式修改后应重新查询、核对状态链并显式保存;保存重开后 B/E/F/R/A 状态保持一致。
第 8 阶段语义化窗口控制
“设置日历假期”沿用 calendar.manager 窗口标识及原有日历命令;菜单改名不改变 MCP 调用标识。
ccproject_list_windows返回固定windowId白名单。当前包括项目属性、工作属性、日历管理、资源管理、项目资源用量、计划版本、执行跟踪、三类报表窗口、打印预览和打印,共十二项;接口不公开 HWND、屏幕坐标、鼠标或键盘操作;ccproject_open_window必须传入明确的projectId、最新expectedRevision、唯一requestId和windowId。task.properties还必须传入从workDetails查询得到的稳定taskGuid;resource.optimization可打开软件原生资源优化工作区,供用户查看运行档案、比较方案或进行人工确认;数据自动化仍优先使用结构化资源优化工具;openMode=open_or_focus是默认方式:窗口未打开时在 CCProject UI 线程排队打开,已打开时只聚焦现有窗口;focus_only不会创建新窗口;- 打开请求会立即返回
windowRequestId,不会等用户在模态窗口中点击确定或取消。等待期间使用ccproject_get_window_status查询queued、open、closed或failed; - 同一个窗口不会重复弹出;已有另一模态窗口时返回
WINDOW_MODAL_BUSY。窗口创建失败会返回稳定状态,CCProject 主窗口和 MCP 服务继续运行; - 用户关闭窗口后,状态记录返回
accepted或cancelled以及最新项目 revision。AI 必须重新查询项目后再继续修改,不能假定用户在窗口中没有改动; - 命令行对应
ccprojectctl list-windows、open-window和window-status。窗口控制只负责把人工界面打开到明确对象,业务数据仍应优先使用结构化 MCP 命令修改。
第 9 阶段输出、打印和交换格式
ccproject_export_drawing复用人工菜单相同的绘图后端,支持 BMP、JPEG、PNG、TIFF、PDF、EMF、SVG、DXF、AutoCAD DXF 和 CCCAD;位图可设置 72~600 DPI,BMP/JPEG/PNG/TIFF/EMF 可按内容裁剪;ccproject_export_exchange复用软件现有交换与文档服务,支持 MS Project XML、P6 XML、Excel 工作明细、三种模拟横道图 Excel、Word 图片和 Word 模拟图;模拟 Excel 可设置intervalDays,Word 图片可设置dpi;- 两项正式输出都要求绝对目标路径和最新 revision,默认拒绝覆盖;
createDirectories=true只创建明确目标目录,overwrite=true只能在用户已经确认替换时使用; - 正式文件先在同一目录生成临时文件,确认文件存在、大小有效且项目 revision 未变化后再原子提交。失败会删除临时文件,不会以损坏文件替换原目标;
output.printPreview和output.print通过ccproject_open_window异步打开 CCProject 自己的打印界面。打印机、纸张、方向、页码范围和最终打印按钮继续由用户在原生窗口中确认,AI 不会静默提交物理打印任务;- 第 9 阶段真实服务验收使用两项工作和一项关系,成功生成并检查 10 种图形和 8 种交换/文档文件;核验了文件签名、XML、OpenXML 容器、默认不覆盖、临时文件清理及输出前后 revision 一致。
第 10 阶段资源优化和长操作
- 先查询
resourceLoad、resourceOverAllocation、workDetails和资源分配,再调用ccproject_analyze_resource_optimization;分析结果使用 CCProject 当前日历、关系、工期、资源用量和容量,不接受 AI 直接写入计算日期; ccproject_preview_resource_optimization的strategy可取fast、local_search、limited_combination或external。前三种由内置引擎产生候选;external接收 AI 提供的taskGuid以及工期、开始或完成候选,并由软件重新排程与复核;- 容量规则由
strictCapacity、allowOvertime、allowProjectDelay和maxProjectDelayWorkMinutes10明确控制;protectCriticalTasks、protectMilestones、freezeStartedTasks、freezeCompletedTasks与软件资源优化窗口使用同一套保护策略,省略时沿用项目当前设置。timeLimitMs、maxIterations、maxCandidateEvaluations和maxStagnationIterations防止复杂项目无限搜索; - 预演成功返回每项工作的当前/建议工期与日期、前后超配数、评价统计、停止原因和
previewToken。预演不改变 revision;不得自行改写候选后复用旧令牌; - 正式应用必须把同一组策略、资源筛选、约束、预算、外部候选和
previewToken原样传给ccproject_apply_resource_optimization,并增加唯一requestId。CCProject 会重新计算令牌和权威结果;任何差异、超配、取消、超时或 revision 冲突都会整体回滚; - 应用成功后重新查询排程和资源超配,再决定保存;整次应用形成一条撤销记录。软件内置方案与外部 AI 方案使用同一权威评价口径,AI 只提供可变输入,日期、关键线路和资源曲线均由 CCProject 计算。
- 需要保留本次搜索的全部方案时,使用与预演完全相同的参数和
previewToken调用ccproject_archive_resource_optimization。它新增一次运行档案,保存方案头、逐工作结果和逐资源报告,但不应用方案、不改变当前排程;为了保证档案输入含义完整,归档不接受局部resourceGuids筛选; - 运行与方案可通过
ccproject_query(scope=projectComplexFields, fieldName=ResourceOptimizationRuns|ResourceOptimizationSolutions|ResourceOptimizationSolutionTasks|ResourceOptimizationSolutionResources)分页读取。使用稳定runId、solutionId,不要用显示名称作为身份; ccproject_update_resource_optimization_solution只修改customName、notes、favorite或selectInRun。它不改方案计算结果,也不改排程;- 历史方案必须先调用
ccproject_preview_saved_resource_optimization_solution,再把返回令牌交给ccproject_apply_saved_resource_optimization_solution。当前日历、关系、工期、资源分配、容量时段、优化规则或其他参与计算的输入有任何变化,完整输入指纹即失效,历史方案只能对照查询,不能预览或应用; - 保存方案应用时,CCProject 还会逐项核对工作 GUID、ID、基线起止和逻辑工期,重新分配逻辑工期到物理分段,同步资源工程量/平均用量,写入排程锚点并进行两轮权威计算。AI 不得把保存方案中的建议日期当作独立可写事实。
命令行使用同一 JSON 参数:
ccprojectctl optimize-analyze PROJECT_ID REVISION --port PORT
ccprojectctl optimize-preview PROJECT_ID REVISION options.json --port PORT
ccprojectctl optimize-apply PROJECT_ID REVISION REQUEST_ID options-with-preview-token.json --port PORT
ccprojectctl optimize-archive PROJECT_ID REVISION REQUEST_ID archive-options-with-preview-token.json --port PORT
ccprojectctl optimize-solution-update PROJECT_ID REVISION REQUEST_ID solution-metadata.json --port PORT
ccprojectctl optimize-saved-preview PROJECT_ID REVISION saved-solution.json --port PORT
ccprojectctl optimize-saved-apply PROJECT_ID REVISION REQUEST_ID saved-solution-with-preview-token.json --port PORT
双代号与横道图桥接命令
正常交付以双代号为权威来源。双代号结构、拓扑和布局验收完成后,使用 doubleCode.syncToGantt 一次性生成横道图摘要层级和可见工作顺序;软件不会在后台持续监视或自动双向同步。
{
"commands":[{
"op":"projectCommandBatch",
"commands":[{
"command":"doubleCode.syncToGantt",
"arguments":{"mode":"update"}
}]
}]
}
mode=update保留本命令以前建立、且仍能按区块 GUID 对应的摘要;如果发现无法安全接管的横道图摘要,返回DOUBLECODE_GANTT_SYNC_CONFLICT;- 需要覆盖现有摘要时先预览,再使用
mode=replace、confirmReplace=true和预览时的expectedDeleteSummaryCount;计数变化会拒绝执行; - 返回
blockSummaryMappings[]、taskRowMappings[]、摘要/工作变更数量、直接 FS(0) 关系显示数量,以及横道图无法表示的拓扑辅助载体数量; - 真实工作的
taskGuid、名称、工期、日期和双代号节点拓扑不被同步命令重建;重复同步结果确定; - 同步成功仍不自动保存,应重新查询 revision、导出预览核对,然后显式保存。
从已有横道图/MPP 摘要建立双代号区块初稿时使用:
{
"commands":[{
"op":"projectCommandBatch",
"commands":[{
"command":"doubleCodeWbs.buildFromGantt",
"arguments":{"mode":"initialize"}
}]
}]
}
initialize 只允许在没有有效双代号区块树时执行。明确重新参考现有横道图时,先预览,再使用 mode=replace、confirmReplace=true 和当前 expectedBlockCount。多层摘要和空摘要会保留;父摘要直属工作放入稳定的空名称内部叶区。结果中的 summaryBlockMappings[] 用于核对,referenceOnly=true 和 liveSync=false 表明它不是日常反向同步入口。
MCP 与命令行使用完全相同的 JSON。把上面的对象保存为 batch.json 后:
ccprojectctl preview PROJECT_ID REVISION batch.json --port PORT
ccprojectctl execute PROJECT_ID REVISION REQUEST_ID batch.json --port PORT
AI 和第三方的多轮编辑顺序
当初始数据不完整时,不要求外部 AI 一次生成整张图。推荐固定使用下面的闭环;CCProject 只执行结构化命令,不负责理解工程行业语义:
- 调用
ccproject_list_projects确认目标projectId,再查询project和六个doubleCode*范围,取得最新 revision、GUID 和待修复问题; - 在
draft状态下逐轮补工作、区块、工作归属、区块行数、关系和节点。每一轮都使用稳定 GUID,新增对象在同一批内才使用clientTaskId/clientBlockId/clientNodeId; - 多项修改先调用
ccproject_preview。预览中的临时 GUID 不得带入正式执行;正式执行必须使用预览前未变化的 revision 和新的 requestId; - 对不接受的预览不执行。已执行的一整批可用
ccproject_undo撤销;任一内层命令失败时整批自动回滚; - 查询
doubleCodeValidation(validationMode=strict)。根据issues[].taskGuid/blockGuid/nodeGuid和suggestedCommands修复到valid=true; - 只对受影响区块使用
doubleCode.layout.layoutBlock或选择范围布局,导出 PNG 预览检查;必要时再执行整图布局; - 双代号验收后明确调用
doubleCode.syncToGantt,再检查横道图;这一步不会建立实时双向同步; - 显式保存,关闭、重开后重新查询 GUID 和严格校验;最后使用
ccproject_export_drawing输出 PNG/PDF/EMF。
第三方接入只需要以下资料:当前管理窗口复制出的 MCP 地址(含当次 token)、本页接口文档、需要操作的项目文件路径,以及用户的业务目标。不要把窗口句柄、鼠标坐标或数据库表结构交给 AI,也不要让客户端绕过 preview/revision/requestId。
同一批 JSON 可以由 MCP 客户端直接发送,也可以由命令行重放:
ccprojectctl capabilities --port 18360
ccprojectctl list-projects --port 18360
ccprojectctl query 2 doubleCodeValidation --validation-mode strict --port 18360
ccprojectctl preview 2 REVISION batch.json --port 18360
ccprojectctl execute 2 REVISION req-round-001 batch.json --port 18360
ccprojectctl undo 2 EXECUTED_REVISION req-undo-001 --port 18360
ccprojectctl save-project 2 CURRENT_REVISION req-save-001 --port 18360
如果同时打开多个项目,每个查询和写入都必须显式携带 projectId。修改 A 项目不会切换或修改 B 项目;revision 不匹配时应重新查询,不能把旧请求强行重放到当前项目。
双代号区块树命令
区块正式身份只使用 blockGuid。同名区块允许存在,名称不能作为修改目标。doubleCodeBlocks 查询同时返回每个区块的 blockGuid 和 parentBlockGuid;根区块的 parentBlockGuid 为 null。新建区块时由 CCProject 产生正式 GUID,同一批次通过 1~64 个 ASCII 字符的 clientBlockId 引用它:
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"block-edit-0001",
"commands":[{
"op":"projectCommandBatch",
"commands":[
{
"command":"doubleCode.block.add",
"arguments":{
"clientBlockId":"AREA-A",
"parentBlockGuid":"查询返回的根区块 GUID",
"name":"第一施工区",
"rowCount":6,
"rowMode":"auto"
}
},
{
"command":"doubleCode.block.add",
"arguments":{
"clientBlockId":"AREA-A-FOUNDATION",
"parentClientBlockId":"AREA-A",
"name":"基础工程",
"rowCount":4,
"rowMode":"manual"
}
},
{
"command":"doubleCode.block.update",
"arguments":{
"clientBlockId":"AREA-A-FOUNDATION",
"name":"基础及地下结构",
"layoutLocked":true,
"expanded":true
}
}
]
}]
}
doubleCode.block.add必须提供clientBlockId和显式name,名称可以是空字符串;空树可创建唯一根区块,已有根时必须提供parentBlockGuid或批内parentClientBlockId;rowCount默认为1、范围1~1000,rowMode为auto或manual。doubleCode.block.update必须提供blockGuid,或在同一批次中用clientBlockId指向已执行的新区块;至少修改name、rowMode、layoutLocked、expanded之一。doubleCode.block.move移动完整子树,newParentBlockGuid省略时移到根下,也可用newParentClientBlockId;禁止移入自身或后代,区块和工作 GUID 不变。doubleCode.block.reorder使用正整数sortOrder调整同级顺序,超出同级数量时定位到末尾;返回规范化后的最终顺序。- 根区块不能移动或删除。父区块同时出现子区块和直属工作时,命令层会建立
isInternalDirectWorkLeaf=true、默认空名称且具有正式 GUID 的内部叶区承载这些工作,查询时不能忽略它。
删除默认使用 rejectNonEmpty,只允许删除没有直属工作和子区块的非根区块。非空区块必须明确选择:
policy | 行为 | 额外参数 |
|---|---|---|
rejectNonEmpty | 非空即拒绝,不改变项目 | 无;默认值 |
promote | 把直属工作和直属子区块提升到父级 | 无 |
moveToBlock | 把直属工作和直属子区块移到指定区块 | targetBlockGuid,批内可用 targetClientBlockId |
deleteSubtree | 删除整棵子树及其中工作,并清理关系和工作绑定数据 | confirmDelete=true、与当前数据完全一致的 expectedBlockCount、expectedTaskCount |
{
"command":"doubleCode.block.delete",
"arguments":{
"blockGuid":"待删除区块 GUID",
"policy":"deleteSubtree",
"confirmDelete":true,
"expectedBlockCount":3,
"expectedTaskCount":12
}
}
删除前应先查询 doubleCodeBlocks 和 doubleCodeMembership 取得当前计数并预览。计数不一致、根区块、循环移动、无效 GUID 或任一内层命令失败时,整个外层批次回滚。命令成功不会自动保存;需要继续调用 ccproject_save_project。ccprojectctl 使用同一 JSON:ccprojectctl preview PROJECT_ID REVISION batch.json --port PORT,确认后再执行 ccprojectctl execute PROJECT_ID REVISION REQUEST_ID batch.json --port PORT。
双代号工作与区块归属命令
双代号工作身份使用 taskGuid,归属使用 taskGuid -> blockGuid,区块内顺序使用独立持久化的 orderInBlock。调整归属和顺序不会改变横道图任务数组顺序,也不会隐式修改工期、日期、进度或逻辑关系。
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"work-membership-0001",
"commands":[{
"op":"projectCommandBatch",
"commands":[
{
"command":"doubleCode.work.add",
"arguments":{
"clientTaskId":"WORK-A",
"name":"工作A",
"durationDays":10,
"workType":"REAL",
"targetBlockGuid":"目标叶区块 GUID",
"position":"last",
"rowPolicy":"autoExpand"
}
},
{
"command":"doubleCode.work.update",
"arguments":{
"taskClientTaskId":"WORK-A",
"workCode":"W-001",
"progress":20
}
},
{
"command":"doubleCode.work.copy",
"arguments":{
"clientTaskId":"WORK-B",
"sourceClientTaskId":"WORK-A",
"name":"工作B",
"targetBlockGuid":"目标叶区块 GUID",
"position":"after",
"relativeClientTaskId":"WORK-A",
"rowPolicy":"autoExpand"
}
}
]
}]
}
doubleCode.work.add必须指定targetBlockGuid,批内可用targetClientBlockId;支持REAL、MILESTONE、DUMMY、HANGING、AUXILIARY,里程碑和虚工作自动使用零工期。doubleCode.work.update可修改名称、工期、进度、类型、workCode、secondName、重要程度文本和已开放的双代号文字行数/偏移。日历使用同批次task.setCalendar,约束使用task.constraint.set。doubleCode.work.copy返回新的正式taskGuid,复制工作和显示属性,但不复制关系或端点;后续应通过拓扑命令明确连接。doubleCode.work.assign只接受未分配工作;已分配工作使用doubleCode.work.moveToBlock;doubleCode.work.unassign只允许validationMode=draft。doubleCode.work.reorder只调整同一区块内顺序。position为first、last、before或after;后两者必须提供同一区块内的relativeTaskGuid,批内可用relativeClientTaskId。rowPolicy=reject在行数不足时拒绝;reportOverflow仅在草稿模式允许并返回overflowRows;autoExpand显式扩充未锁定叶区块。新增归属当前至少按每个直属工作一行估算,第六阶段的行数命令可进一步精确调整。- 普通删除继续使用
task.deleteByGuid。涉及“合并前后节点”或“断开前后节点”的删除属于局部拓扑命令,不能用普通删除代替。
50项工作可以在同一个原子批次中按调用方给出的相对顺序重新分配;任何一项失败时整个批次回滚,成功后只形成一条撤销记录。命令行继续使用同一份外层 JSON。
双代号区块行数命令
行数命令只修改双代号叶区块及其受影响的图面几何,不改变工作归属、横道图任务顺序、工期、日期、进度或逻辑关系。先用 ccproject_query 的 doubleCodeRows 范围取得 blockGuid、rowMode、layoutLocked、requiredRows、allocatedRows、usedRows、freeRows 和 overflowRows,再携带最新 revision 预览:
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"doublecode-rows-0001",
"commands":[{
"op":"projectCommandBatch",
"commands":[
{
"command":"doubleCode.rows.insert",
"arguments":{"blockGuid":"目标叶区块 GUID","atRow":2,"count":2}
},
{
"command":"doubleCode.rows.delete",
"arguments":{"blockGuid":"目标叶区块 GUID","atRow":4,"count":1,"occupiedPolicy":"reject"}
}
]
}]
}
doubleCode.rows.set使用绝对rows;doubleCode.rows.adjust使用有符号deltaRows。doubleCode.rows.insert和delete的atRow是目标叶区块内从1开始的相对行;count必须为正数。- 删除被工作或节点占用的行时,
occupiedPolicy=reject原子拒绝;明确使用moveNearest才会先迁移到最近保留行。 set、adjust、insert、delete成功后进入manual;doubleCode.rows.autoFit按当前确定性需求恢复行数和auto模式。- 父区块行数由稳定顺序下全部叶区块汇总,不能直接对父区块设置第二套容量;
layoutLocked=true时所有行数修改均拒绝。 - 行数不足通过
overflowRows显式报告,不会把工作静默移入相邻区块。成功执行后仍需显式保存项目文件。
双代号节点和局部拓扑命令
节点正式身份使用 nodeGuid,显示编号只用于界面显示和查询。新增节点和拆分节点可在批次内声明 clientNodeId;后续命令用 startClientNodeId、endClientNodeId、sourceClientNodeId、survivorClientNodeId 或 mergedClientNodeId 引用。执行后重新查询 doubleCodeTopology 取得正式 GUID 和端点:
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"doublecode-topology-0001",
"commands":[{
"op":"projectCommandBatch",
"commands":[
{"command":"doubleCode.node.add","arguments":{"clientNodeId":"N1","logicalRow":1}},
{"command":"doubleCode.node.add","arguments":{"clientNodeId":"N2","logicalRow":2}},
{"command":"doubleCode.work.add","arguments":{"clientTaskId":"W1","name":"工作1","durationDays":5,"targetBlockGuid":"叶区块 GUID","rowPolicy":"autoExpand"}},
{"command":"doubleCode.work.connect","arguments":{"taskClientTaskId":"W1","startClientNodeId":"N1","endClientNodeId":"N2"}}
]
}]
}
doubleCode.node.renumber修改displayNumber,不改变nodeGuid;只有空节点可由node.delete删除。node.split使用moveStartTaskGuids和moveEndTaskGuids明确哪些端点迁入新节点;node.merge返回被合并 GUID 到保留 GUID 的映射。work.connect只用于未连接工作;已连接工作使用work.reconnect,可只传一个需要改变的端点。- 所有连接、重接、拆分和合并在提交前检查非里程碑自环、重复起止节点对和有向环路;失败时整个批次回滚。
- 删除工作并合并两端使用
doubleCode.work.deleteMergeNodes;删除工作但保留两个节点使用doubleCode.work.deleteDisconnectNodes。两者不能用普通删除互相替代。 doubleCode.relation.set/remove支持 FS、SS、FF、SF 和正负lagDays,关系与生成拓扑在同一事务中同步;双代号节点/工作拓扑是排程权威,兼容性的横道关系字符串不再作为持久化权威。doubleCode.relation.setRepresentation可在不改变逻辑关系身份的前提下切换零延时关系的合并节点或显式 DUMMY 表示。doubleCode.topology.repairLocal只补齐指定taskGuids的身份/布局记录,不猜测缺失端点,也不重建无关对象。doubleCode.topology.rebuild默认保留人工节点布局和锁定区块,返回变化计数;旧的valid、generatedTaskCount等诊断字段仍在结果顶层。
双代号局部布局和图元几何命令
布局命令只修改双代号图面几何,不改变工期、日期、时差、逻辑关系或工作端点。先查询 doubleCodeGeometry、doubleCodeRows 和 doubleCodeValidation,再携带最新 revision 预览:
{
"projectId":2,
"expectedRevision":"查询返回的 revision",
"requestId":"doublecode-layout-0001",
"commands":[{
"op":"projectCommandBatch",
"commands":[
{"command":"doubleCode.layout.setLock","arguments":{"objectType":"work","objectGuid":"工作 GUID","element":"name","mode":"locked"}},
{"command":"doubleCode.layout.moveNode","arguments":{"nodeGuid":"节点 GUID","direction":"down","rows":1}},
{"command":"doubleCode.layout.layoutBlock","arguments":{"blockGuid":"叶区块 GUID","autoExpand":true}}
]
}]
}
doubleCode.layout.analyze是只读分析,返回布局签名和可定位冲突;moveWork和moveNode使用targetRow、deltaRows或direction=up/down三选一;工作不得越出所属叶区块;setGeometry按工作或节点设置主体行、偏移、文字行/间距/换行、箭线角度/拐点或节点角度;allowPolyline显式控制工作箭线是否允许折线几何;resetGeometry按图元恢复自动几何;setLock的mode为locked、ai或auto。区块可锁定容量/内容,工作可锁定主体/名称/工期/箭线,节点可锁定位置/文字/连接;layoutBlock布局目标区块子树,layoutSelection必须提供非空taskGuids或nodeGuids,layoutAll使用同一组确定性规则布局整图;setDisplayMode修改双代号布局显示模式;- 普通自动布局尊重已锁定图元。
autoExpand=true只扩充未锁定叶区块,无关区块的几何签名保持不变; - 预览与正式执行复用同一布局逻辑,任一图元、区块、锁定或范围校验失败时整个批次回滚。
GUID 精确定位
ccproject_query 返回的 taskGuid、startNodeGuid、endNodeGuid 和节点结果中的 nodeGuid 可以直接用于后续批处理。新增工作后的第一次查询就会返回这些 GUID,不需要先保存文件。名称和显示编号只用于查询;AI 修改同名工作时应优先使用 GUID。
通过 GUID 修改工作属性:
{
"op":"task.update",
"taskGuid":"查询返回的工作 GUID",
"name":"基础施工",
"newDurationDays":7.5,
"startDate":"2026-08-10",
"progress":25
}
task.update 至少提供 name、newDurationDays、startDate、finishDate 或 progress 中的一项。工期范围为 0~36500 工作日,进度范围为 0~100。正排自动排程不能直接设置 finishDate,应修改开始日期和/或工期;手动排程、倒排模式仍按主程序现有排程规则处理。
通过工作 GUID 建立或删除关系:
{"op":"dependency.set","fromTaskGuid":"前置 GUID","toTaskGuid":"后置 GUID","dependencyType":"FS","lagDays":0}
{"op":"dependency.remove","fromTaskGuid":"前置 GUID","toTaskGuid":"后置 GUID"}
双代号排版操作可使用 {"op":"diagram.moveWork","taskGuid":"工作 GUID","direction":"down","rows":1} 和 {"op":"diagram.moveNode","nodeGuid":"节点 GUID","direction":"up","rows":1}。deleteWorkMergeNodes、deleteWorkDisconnectNodes 也可以用 taskGuid 代替节点对。若同时提供 GUID 和节点号,两者必须指向同一对象,否则整批失败并回滚。
任务顺序与自动布局
任务顺序和双代号绘图行是两种不同概念。调整任务表顺序使用:
{"op":"task.reorder","taskGuid":"工作 GUID","direction":"down","positions":1}
positions 默认 1,范围为 1~100。工作只能在相同摘要父级和相同层级的同级工作之间移动;摘要工作会带着其子级区块移动。移动会重新生成顺序编号并安全重映射关系,差异报告仍以稳定 taskGuid 标识对象。超出可移动范围时整批失败并回滚。
双代号全图自动布局使用:
{"op":"diagram.autoLayout"}
该命令无参数,只能在双代号网络图中执行,复用软件当前默认自动布局规则。它可能同时调整工作行、节点行、空行、日历比例、箭线和文字位置,应先调用 ccproject_preview,再正式执行并导出预览核对。大图可能运行较长时间;可通过 ccproject_get_operation_status 查看操作 ID、耗时和进度文字,通过 ccproject_cancel_operation 请求安全取消并整体回滚。不能因界面暂时未刷新而重复调用。
ccproject_undo
撤销指定项目最近一次确实改变了项目的 ccproject_execute 或单项修改批次。传入该项目的 projectId、执行后返回的 revision 和新的 requestId。每个打开项目各自保存撤销状态;若用户或其他命令在该批次后又改变了同一项目,工具返回 UNDO_STATE_CHANGED,避免覆盖无关操作。
ccproject_export_preview
把当前活动绘图导出为唯一命名的 PNG 文件,并返回本机绝对路径、file:/// URI、实际 DPI、文件大小和项目 revision。dpi 范围为 72 至 600,默认 144;cropToContent 默认 true。文件位于系统临时目录的 CCProject\McpPreview 子目录,不会写入项目文件。
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","dpi":144,"cropToContent":true}
ccproject_export_drawing
把当前 CCProject 图形正式输出到调用者指定的绝对本地路径。该工具写入项目文件之外的磁盘位置,因此必须使用新的 requestId;它不会修改项目内容,也不会自动保存 .ccndb。
{
"projectId": 2,
"expectedRevision": "REVISION_FROM_QUERY",
"requestId": "formal-export-0001",
"format": "pdf",
"filePath": "D:\\Output\\plan.pdf",
"overwrite": false,
"createDirectories": false
}
format可取bmp、jpeg、png、tiff、pdf、emf、svg、dxf、autocad_dxf或cccad;JPEG 目标可使用.jpg/.jpeg,TIFF 可使用.tif/.tiff,CCCAD 使用.ccdxf,其余扩展名必须与格式匹配;filePath必须是绝对路径;目录默认必须已经存在;- 默认拒绝覆盖已有文件,只有用户明确确认后才能传
overwrite=true; - BMP、JPEG、PNG、TIFF 支持 72~600 DPI;BMP、JPEG、PNG、TIFF 和 EMF 支持
cropToContent;PDF、SVG、DXF、AutoCAD DXF 和 CCCAD 保留当前纸张或矢量布局,对cropToContent=true返回EXPORT_OPTION_UNSUPPORTED; - 先生成同目录临时文件,再一次提交到目标路径;导出或提交失败不会留下伪成功目标;
- 返回实际路径、URI、格式、文件大小、页数、有效 DPI、裁剪状态、纸张宽高、方向和未变化的 revision。
CLI 示例:
ccprojectctl export-drawing 2 REVISION req-export-001 png "D:\Output\plan.png" --dpi 144 --crop-to-content
ccprojectctl export-drawing 2 REVISION req-export-002 pdf "D:\Output\plan.pdf"
ccprojectctl export-drawing 2 REVISION req-export-003 emf "D:\Output\plan.emf" --crop-to-content
ccprojectctl export-drawing 2 REVISION req-export-004 autocad_dxf "D:\Output\plan.dxf"
ccproject_export_exchange
把项目数据或当前图形输出为交换文件、Excel 或 Word 文档。公共参数、安全规则、原子提交和 revision 冻结与 ccproject_export_drawing 相同。
format | 扩展名 | 内容 |
|---|---|---|
msproject_xml | .xml | MS Project XML |
p6_xml | .xml | Primavera P6 XML |
excel_detail | .xlsx | 工作数据明细表 |
excel_simulated_1 | .xlsx | 模拟样式 1 |
excel_simulated_2 | .xlsx | 模拟样式 2 |
excel_simulated_4 | .xlsx | 模拟样式 4 |
word_image | .docx | 当前图形作为图片写入 Word;dpi 为 72~600,默认 300 |
word_simulated | .docx | 当前图形按矢量图元写入 Word |
模拟 Excel 的 intervalDays 范围为 1~366,默认 2。XML 和 Excel 从冻结的项目快照生成;Word 从当前绘图的冻结显示列表生成。所有格式均先写临时文件并核验,再提交到目标路径。
Word 模拟图(word_simulated)支持 wordRenderMode:high_fidelity(默认,高保真)或 editable(编辑优先,仅纯双代号网络图);可选 wordLineSpacingPt 设置 1~200 磅固定行距,例如 28。省略行距时保留原来的输出逻辑;设置固定行距时,同一工作名称的多行文字合为一个可编辑文本框,底部位置不变。
这两个参数仅适用于 Word 模拟图,其他格式返回 INVALID_ARGUMENT;不支持编辑优先的视图返回 EXPORT_VIEW_UNSUPPORTED。返回数据包含实际模式和行距(默认行距为 null)。命令行对应 --word-render-mode high_fidelity|editable、--word-line-spacing-pt 28。选项仅影响本次导出,不修改项目绘图。
ccprojectctl export-exchange 2 REVISION req-xml-001 msproject_xml "D:\Output\plan.xml"
ccprojectctl export-exchange 2 REVISION req-xlsx-001 excel_detail "D:\Output\plan.xlsx"
ccprojectctl export-exchange 2 REVISION req-word-001 word_image "D:\Output\plan.docx" --dpi 300
打印预览和受控打印
打印不提供绕过确认的“静默打印”工具。先调用 ccproject_list_windows,再以 windowId=output.printPreview 或 windowId=output.print 调用 ccproject_open_window;请求立即返回 windowRequestId。用户在 CCProject 原生窗口中选择打印机、纸张、方向、页码范围并最终确认或取消,再由 ccproject_get_window_status 返回 accepted/cancelled 和最新 revision。
下面十一项单项业务工具都必须把表格所列业务参数与公共的 projectId、expectedRevision、requestId 合并到同一个参数对象中。后续示例给出完整调用参数。
1. ccproject_set_network_title
修改当前活动的单代号或双代号网络图标题。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
title | 字符串 | 是 | 1 至 200 个字符 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"network-title-0001","title":"附属学校及基础设施配套工程项目进度网络图"}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
title | 字符串 | 执行后的标题 |
当前视图不是网络图时,工具会拒绝执行。
2. ccproject_set_gantt_title
修改当前活动横道图或带工作表横道图的标题。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
title | 字符串 | 是 | 1 至 200 个字符 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"gantt-title-0001","title":"某高层施工进度横道图"}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
title | 字符串 | 执行后的标题 |
当前视图不是横道图时,工具会拒绝执行。
3. ccproject_set_project_start
设置新的计划开始日期或精确到分钟的开工时间,并按相同的时间偏移量整体平移项目时间轴。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
newStartDate | 字符串 | 是 | 有效的 YYYY-MM-DD 或 YYYY-MM-DD HH:mm |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"project-start-0001","newStartDate":"2026-08-01 08:30"}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
newStartDate | 日期/时间字符串 | 执行后的新开始日期或精确开工时间 |
该工具保持工作工期、逻辑关系和相对间隔不变,但各项工作的日期会随项目整体平移。
4. ccproject_set_work_name_by_nodes
使用开始节点和结束节点唯一定位一项直接连接的工作,并修改工作名称。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
startNode | 整数 | 是 | 大于或等于 1 |
endNode | 整数 | 是 | 大于或等于 1,且不同于开始节点 |
newWorkName | 字符串 | 是 | 不能为空 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"work-name-0001","startNode":1,"endNode":2,"newWorkName":"基础施工"}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
startNode | 整数 | 开始节点编号 |
endNode | 整数 | 结束节点编号 |
newWorkName | 字符串 | 执行后的工作名称 |
节点不存在、没有直接工作或同一节点对匹配多项工作时,工具会失败且不修改任何匹配项。
5. ccproject_set_work_duration_by_nodes
使用开始节点和结束节点唯一定位一项直接连接的工作,并修改其工作日工期。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
startNode | 整数 | 是 | 大于或等于 1 |
endNode | 整数 | 是 | 大于或等于 1,且不同于开始节点 |
newDurationDays | 整数 | 是 | 1 至 36500 个工作日 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"work-duration-0001","startNode":1,"endNode":2,"newDurationDays":20}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
startNode | 整数 | 开始节点编号 |
endNode | 整数 | 结束节点编号 |
newDurationDays | 整数 | 执行后的工作日工期 |
工具会使用 CCProject 排程规则重新计算相关工作,可能改变后续日期、关键线路和项目总工期。
6. ccproject_move_work_by_nodes
按开始、结束节点唯一定位一项双代号工作,将该工作在图面上向上或向下移动指定行数。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
startNode | 整数 | 是 | 大于或等于 1 |
endNode | 整数 | 是 | 大于或等于 1,且不同于开始节点 |
direction | 字符串 | 是 | 只能为 up 或 down |
rows | 整数 | 否 | 1 至 1000;省略时为 1 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"move-work-0001","startNode":7,"endNode":8,"direction":"down","rows":2}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
startNode、endNode | 整数 | 被移动工作的节点编号 |
direction | 字符串 | 实际请求的方向 |
rows | 整数 | 实际请求的行数 |
此工具只调整图面排版,不修改工作工期或逻辑关系。它只能在双代号网络图中执行;工作必须唯一。向上移动已经位于最上行的工作会失败。
7. ccproject_move_node
将唯一编号的双代号节点在图面上向上或向下移动指定行数。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
node | 整数 | 是 | 大于或等于 1 |
direction | 字符串 | 是 | 只能为 up 或 down |
rows | 整数 | 否 | 1 至 1000;省略时为 1 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"move-node-0001","node":8,"direction":"up","rows":1}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
node | 整数 | 节点编号 |
direction | 字符串 | 实际请求的方向 |
rows | 整数 | 实际请求的行数 |
此工具只用于双代号网络图。节点不存在、不唯一、不能按要求移动,或已在最上行仍要求上移时会失败。
8. ccproject_delete_work_merge_nodes
删除由节点对唯一定位的双代号工作,并按照 CCProject 拓扑规则把结束节点合并到开始节点。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
startNode | 整数 | 是 | 大于或等于 1 |
endNode | 整数 | 是 | 大于或等于 1,且不同于开始节点 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"delete-merge-0001","startNode":7,"endNode":8}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
startNode、endNode | 整数 | 被删除工作的原节点编号 |
这是破坏性操作。合并节点可能同时改变与端点相连工作的拓扑关系。只有用户明确要求“删除工作并合并节点”后才能调用;组件工作不支持通过此命令删除。
9. ccproject_delete_work_disconnect_nodes
删除由节点对唯一定位的双代号工作,但不合并两个端点,原开始节点和结束节点继续分别保留。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
startNode | 整数 | 是 | 大于或等于 1 |
endNode | 整数 | 是 | 大于或等于 1,且不同于开始节点 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"delete-disconnect-0001","startNode":7,"endNode":8}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
startNode、endNode | 整数 | 被删除工作的原节点编号 |
这是破坏性操作。只有用户明确要求“删除工作但保留两个节点”后才能调用;组件工作不支持通过此命令删除。
10. ccproject_delete_all_blank_rows
删除当前双代号网络图中所有可删除的空白绘图行,并向上压缩剩余图面。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
| 无 | 对象 | 否 | 必须传空对象 {},不能附加其他字段 |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"delete-blank-rows-0001"}
| 输出字段 | 类型 | 说明 |
|---|---|---|
ok | 布尔值 | 是否执行成功 |
该工具只适用于双代号网络图。它会删除每个分部内可安全移除的空行,重新映射工作和节点的绘图行,并压缩图面;空分部至少保留一行,不能破坏原有分部对应关系。工作数据、工期和逻辑关系不因删除空行而改变。
这是影响整个双代号图面排版的破坏性操作,destructiveHint 为 true,idempotentHint 为 false。用户必须明确要求“删除所有空行”后才能调用。当前图中没有可删除空行、当前视图不是双代号网络图或项目版本只读时,工具会失败。
11. ccproject_set_drawing_paper
把指定绘图视图切换为横向 A2、A3 或 A4。接口修改项目中的纸张配置并同步右侧纸张按钮,成功执行形成一条 MCP 撤销记录,但不会自动保存项目文件。
| 输入参数 | 类型 | 必填 | 限制 |
|---|---|---|---|
paperSize | 字符串 | 是 | A2、A3 或 A4 |
view | 字符串 | 否 | current、double_draw、double_list、gantt_only 或 gantt_list;默认 current |
{"projectId":2,"expectedRevision":"REVISION_FROM_QUERY","requestId":"paper-a3-0001","paperSize":"A3","view":"double_draw"}
标准尺寸分别为 A2 594 × 420 mm、A3 420 × 297 mm、A4 297 × 210 mm。gantt_list 与界面纸张按钮行为一致,实际修改横道图纯绘图区所使用的纸张配置。返回的 commandData.drawingPapers 包含目标 viewModeIndex、paperSize、widthMm 和 heightMm;执行后应重新查询项目取得新 revision。命令行等价调用为:
ccprojectctl set-drawing-paper 2 REVISION req-paper-0001 A3 double_draw
多窗口和只读辅助视图
ccproject_list_windows 的 workspace 返回主视图和辅助视图清单。每个视图使用稳定的 hostId、viewId 和 projectId,并包含 viewKey、viewModeIndex、zoomPercent、scrollX/scrollY、readOnly、选择状态、纸张和辅助视图绘制耗时。不要保存或猜测 HWND、窗口标题和显示器坐标。
ccproject_manage_workspace_view 的 action 支持:
set_layout:single/horizontal/vertical/quad;create_aux、close_aux、close_all;set_view:double_code/double_code_with_list/gantt_with_list/gantt/table/single_code/s_curve/slope/report/vertical/logical_network;set_table_mode:list/engineering_quantity/resources/mileage/progress/components;navigate、zoom、pan;swap_with_main、promote_to_main。
所有动作都必须传当前 projectId、expectedRevision 和新的 requestId。辅助视图只读,操作完成后 previousRevision 与 revision 必须相同;返回的 operationMs、firstRenderMs 和 lastRenderMs 可用于显示速度比较。跨项目 hostId 会返回确定错误,不能把一个项目的辅助视图重新绑定到另一个项目。
Windows PDF 指定路径输出
ccproject_export_drawing 的 format 可传 windows_pdf。该模式明确选择 Windows 的 Microsoft Print to PDF,不会使用默认实体打印机。filePath 必须是绝对 .pdf 路径;先在同目录生成唯一临时文件,成功且文件稳定后再原子替换目标,失败时保留原目标。
常见确定错误码包括:
WINDOWS_PDF_PRINTER_NOT_INSTALLED;WINDOWS_PDF_DRIVER_UNSUPPORTED;WINDOWS_PDF_TIMEOUT;WINDOWS_PDF_CANCELLED;- 以及通用的扩展名、目录、目标已存在和输出失败错误。
全视图、逐页 drawingDiagnostics 1.4
ccproject_query(scope=drawingDiagnostics) 从正式完整纸张 DisplayList 建立只读图元快照,不使用截图或 OCR。view 可取 double_code、double_code_with_list、logical_network、gantt、gantt_with_list、single_code、s_curve、slope、vertical 或 report;省略时使用当前可绘制视图。page 是从 1 开始的页码,横道图和报表支持多页,其他视图只允许 page=1。
itemType=summary 返回该视图、该页独立的 captureId、renderFingerprint、viewModeIndex、paper.currentPage、paper.pageCount、项目修订号和设置指纹。后续 primitives/candidates/calculationTraces/allowedRelations/comparisonIndex/cccadSource 必须携带同一 captureId,因此不会误取另一页或当前界面的图元。抓取期间软件会临时建立离屏绘图状态并立即恢复,不切换用户界面,不改变选择、撤销/重做栈、修改标志、项目修订或文件。
页码超出范围返回 DRAWING_DIAGNOSTIC_PAGE_MISMATCH,details 含 requestedPage/currentPage/pageCount,不会静默退回当前页。无效视图或表格视图返回 DRAWING_DIAGNOSTIC_VIEW_UNSUPPORTED;把已有捕获与另一个 view 混用返回 DRAWING_DIAGNOSTIC_CAPTURE_VIEW_MISMATCH。纸张、字体、绘图设置或项目修订变化后,旧捕获返回 DRAWING_DIAGNOSTIC_CAPTURE_STALE。
文件操作统一结果与导入取消
open/new/import/save/saveAs/close/switch 的成功结果保留原有 data,并增加统一 operation 对象:schemaVersion/name/status/stage/objectType/suggestedAction。导入分析和导入转换在解析、预检和提交前设置安全取消点;可用 ccproject_get_operation_status 查询并用 ccproject_cancel_operation 请求取消。开始原子提交后不再接受取消,避免产生半项目、临时工作区或部分目标文件。
Schema 使用说明
- 顶层参数名称和大小写必须与
inputSchema完全一致,不能附加未定义的顶层字段;preview和execute的每个commands项允许携带该op所需的业务字段。 startNode、endNode、node、rows和工期字段必须使用整数,不能传递带单位的文字。direction只能使用英文小写up或down;rows省略时采用默认值 1。ccproject_delete_all_blank_rows没有业务参数,调用时必须使用空对象{}。outputSchema列出稳定的外层成功标记;查询、差异和预览文件等详细结果位于 MCP 返回的structuredContent中。调用外层返回isError: true时,应以错误文字为准。
AI 的授权检查、执行顺序和失败处理统一参见 把这个网页喂给你的AI;数据与隐私边界参见 MCP 会把哪些内容提供给 AI?。
清单维护要求
每次新增、删除或修改 MCP 工具后,应以真实 tools/list 为依据更新本页,并至少检查:
- 工具名称、说明和工具顺序;
- 输入参数的类型、必填项、范围和默认值;
- 输出字段和
readOnlyHint、destructiveHint、idempotentHint; - 适用视图、项目状态、匹配规则和组件限制;
- 修改影响及失败条件;
- 新工具的“加入日期”,以及已有工具的参数、返回值或规则变更日期;
- 页首“最后核对日期”和“功能更新记录”;更新记录只能追加,不应覆盖旧日期。
普通工具增减只需要更新本清单;只有数据开放范围发生变化时才更新“会把哪些内容提供给 AI”,只有授权、安全或执行流程发生变化时才更新“把这个网页喂给你的AI”。