MCP 工具
cc_server 承载一个 MCP(JSON-RPC 2.0)工具注册表,在主服务器端口(默认 9030)上以 POST /mcp 和 GET /sse 对外提供服务,协议版本为 2024-11-05。每个客户端触达的都是同一个注册表:桌面端、Web 构建产物、外部 MCP 客户端,以及内置的智能体运行时。外部 MCP 服务器可以作为动态层桥接进同一个注册表。
注册表规模
标题为“注册表规模”的部分| 指标 | 数量 |
|---|---|
由 cc_server 注册的工具 |
110 |
来自 packages/cc_mcp |
108 |
来自 packages/cc_mcp_client(工具发现) |
2 |
在基础注册表中注册(server_mcp_registry.dart) |
63 |
启动后随各自服务就绪而注册(cc_server_runtime.dart) |
47 |
| 基础注册表那 63 个中,以存在代码图仓库为条件的 | 5 |
这五个代码图工具只有在宿主向 buildServerMcpRegistry 传入代码图仓库时才会注册。cc_server 总会传一个,因此在随附的二进制文件中,全部 110 个都是生效的。
完整的注册表会在 tools/list 中公布,不带任何发现门控。工单编辑是类型化工具。
通用参数
标题为“通用参数”的部分workspace_id
标题为“workspace_id”的部分必填。凡是涉及工作区范围数据的工具都要求它。缺失或无效的 workspace_id 会返回一个明确的错误,而与目标实体所属工作区不匹配的值会被拒绝,而不是被静默忽略。在真正全局的工具上请省略它:list_workspaces 和六个新闻流工具(list_feeds、list_articles、get_article、set_article_read、set_article_saved、refresh_feeds),它们依附于服务器所有者的按用户维度的订阅源列表。发现类工具(search_tool_bm25、list_my_tools)把它作为可选参数,以便按对话模式对可调用性进行分类。当智能体由服务器派发时,工作区是在服务器侧强制指定的,因此智能体无法通过传入一个外来的 id 触达另一个工作区。
工具发现
标题为“工具发现”的部分二者都来自 cc_mcp_client 而非 cc_mcp,并且都会查询模式守卫,因此它们报告的是当前对话模式下可调用的内容。
| 工具 | 说明 |
|---|---|
search_tool_bm25 |
按关键词搜索工具目录;返回匹配的工具、它们的参数 schema,以及每个工具此刻是否可调用 |
list_my_tools |
列出此对话中此刻可调用的工具,按其模式过滤 |
第三个发现类工具 search_tools 只存在于内置运行框架内部,不属于这个 MCP 注册表。它会对本次运行自身的工具面排序,并且与 search_tool_bm25 不同,它会加载所找到内容的 schema,以便智能体在下一轮就能调用其中的匹配项。运行框架上的智能体应优先用它;MCP 客户端则有 search_tool_bm25。
智能体工具
标题为“智能体工具”的部分| 工具 | 说明 |
|---|---|
list_agents |
列出工作区中已注册的智能体 |
智能体之间的消息传递与委派
标题为“智能体之间的消息传递与委派”的部分智能体通过空间彼此交流(持久、在名册中可见)。ask_agent 是请求/应答模式,超时是强制的;delegate_task 在服务器侧由深度上限、环路检测、预算包络和自主权上限守卫。
| 工具 | 说明 |
|---|---|
send_to_agent |
向另一个智能体发送单向消息,以 to_agent_id 或精确的 to_agent_name 寻址 |
ask_agent |
向另一个智能体提问并等待其答复,或等到超时 |
delegate_task |
把一个任务作为可跟踪的子工单委派给另一个智能体 |
consult_agent |
把按技能最匹配的专家加入空间,并用一份聚焦的任务简报派发它 |
todo_read |
读取此对话持久保存的任务清单 |
技能工具
标题为“技能工具”的部分每次安装和更新都要先通过一道失败即拒绝的扫描闸门,之后任何技能内容才会落到磁盘上或进入智能体提示词。
| 工具 | 说明 |
|---|---|
list_skills |
列出工作区中可用的技能 slug |
create_skill |
用 markdown 内容创建一项新技能 |
install_skill |
从 GitHub 仓库按固定的 ref 安装一项技能的整个目录 |
update_skill |
把已安装的 GitHub 技能更新到新的 ref,重新扫描并重新固定 |
list_skill_updates |
列出有新版本可用的技能 |
verify_skills |
按磁盘上的内容哈希校验已锁定的技能 |
pin_skill |
把磁盘上已有的技能哈希进 skills-lock.json |
计划、剧本与工件工具
标题为“计划、剧本与工件工具”的部分| 工具 | 说明 |
|---|---|
submit_plan |
计划模式的输出契约:发出一个类型化的 PlanDocument,它会在 Plan Studio 中打开 |
create_playbook |
把一个计划保存为具名、带版本的模板,并带有类型化的 {{param}} 占位符 |
run_playbook |
用参数值实例化一个剧本,生成一份由操作员批准的计划 |
publish_artifact |
发布一个有序的类型化块列表(markdown、table、chart、mermaid、code、JSON),由客户端原生渲染 |
revise_artifact |
替换已发布工件的内容 |
list_artifacts |
列出工作区的工件 |
get_artifact |
读取一个工件 |
complete_goal |
声明此对话当前活跃的持久目标(以 /goal 或 /loop 启动)已达成 |
工作区工具
标题为“工作区工具”的部分| 工具 | 说明 |
|---|---|
list_workspaces |
列出所有工作区及其 id 和名称(全局;无 workspace_id) |
仓库工具
标题为“仓库工具”的部分| 工具 | 说明 |
|---|---|
list_repos |
列出工作区中注册的仓库。以智能体身份调用时,拿到的是本次对话隔离的写时复制工作树路径,绝不是原始检出 |
消息工具
标题为“消息工具”的部分| 工具 | 说明 |
|---|---|
list_spaces |
列出工作区中的消息空间 |
get_messages |
从某个空间获取消息 |
send_message |
以具名发送者智能体的身份向某个空间发送消息 |
get_space_notes |
读取某个空间的共享交接文档 |
update_space_notes |
替换某个空间的共享交接文档 |
todo_write |
一次调用替换此对话的任务清单(传入完整列表) |
审查工具
标题为“审查工具”的部分| 工具 | 说明 |
|---|---|
start_ai_review |
为某个 PR 启动 AI 审查:计算审查区域,把专家审查者扇出到 PR 空间,撰写走查并定稿 |
add_review_node |
向审查空间添加一条结构化的审查发现项(文件、行号、P0–P3 优先级) |
confirm_review_node |
确认同行的发现项;作者不能自我确认 |
resolve_review_node |
在真正做出修改后把一条发现项标记为已修复;向审查空间发布一条轨迹 |
dismiss_review_node |
驳回一条不适用的发现项;记录一条抑制事实,使审查者不再反复标记它 |
request_peer_review |
请另一个审查智能体对某条发现项再看一眼 |
dispatch_reviewers |
把匹配的审查智能体并发派发到某个审查空间 |
submit_reviewer_verdict |
提交每名审查者的 ship/hold/block 判定,并附上置信度和说明 |
finalize_review |
计算逐节点共识与整个 PR 的判定,并关闭这次审查 |
set_cohort_summary |
设置某个审查队列的通俗语言摘要 |
add_review_diagram |
把经过图校验的结构化图(sequence、entityRelation、stateMachine)附加到某个队列 |
publish_review_to_github |
把定稿的审查发布到 GitHub,形式为行内评论加一个摘要正文 |
记忆工具
标题为“记忆工具”的部分| 工具 | 说明 |
|---|---|
search_memory |
搜索事实和策略(关键词、语义或混合——混合是默认值) |
propose_fact |
在某个域中存一条简短的 markdown 事实 |
supersede_fact |
把一条事实标记为被另一条取代 |
propose_policy |
在某个域中存一条规范性规则(需要对该域有写权限) |
supersede_policy |
停用一条策略——把它标为不活跃,同时保留以供审计 |
list_policies |
列出活跃的策略,可按域筛选 |
list_memory_domains |
列出工作区的记忆域及其事实和策略数量 |
record_observation |
把一条原始观察记录写入智能体的工作记忆 |
get_my_notes |
读取调用方智能体的工作记忆便签 |
update_my_notes |
更新调用方智能体的工作记忆便签 |
remember |
为本次会话向智能体的热工作记忆添加一条便签(受 TTL 和条数限制) |
consolidate_memory |
运行一次整合(“睡眠”)过程:清除过期的热记忆项,把持久项归并为长期事实 |
harmonize_memory |
运行智能体之间的信念调和(SHMR)并标记矛盾 |
list_memory_conflicts |
列出检测到的矛盾以及每条矛盾的解决方式 |
治理工具
标题为“治理工具”的部分| 工具 | 说明 |
|---|---|
create_goal |
创建一条组织目标(公司、团队、智能体或任务层级) |
list_goals |
列出目标的层级、状态和汇总进度 |
update_goal_progress |
设置某个目标的进度 |
create_approval |
为某个受治理的操作发起一项董事会审批(计划退出、合并、发布、招聘、自定义) |
list_approvals |
列出审批,可按状态筛选 |
decide_approval |
记录一项决定:批准、驳回、要求修改或重新提交 |
comment_approval |
对某项董事会审批发表评论 |
exit_plan_mode |
发起(并在获批后消费)一项 plan_exit 审批,把对话切出计划模式 |
agent_heartbeat |
上报存活状态(alive、idle、stuck);静默下来会把运行时健康翻转为 recently-lost,然后是 offline |
list_runtime_health |
列出每名智能体的运行时健康 |
list_agent_presence |
列出每名智能体的在线状态(健康、生命周期、运行中和排队中的数量、容量) |
get_org_chart |
读取汇报树,CEO 位于根节点,按 reports_to 嵌套 |
create_work_product |
创建一个挂在工单上的持久交付物 |
save_work_product_revision |
保存一个新版本;传入 base_revision_id 以在并发编辑时被拒绝 |
list_work_products |
列出工作产物,可筛选到单张工单 |
get_work_product |
读取一个工作产物及其版本历史 |
create_runtime_profile |
定义一个可复用的运行时配置文件(协议族、CLI 命令、固定的启动参数) |
list_runtime_profiles |
列出工作区的运行时配置文件 |
代码图工具
标题为“代码图工具”的部分仅当宿主提供代码图仓库时才会注册。索引覆盖随附的语法集合(Dart、JS/TS、PHP、Python、Rust、Zig、C/C++、Go、Java、Ruby、C#、Swift、Kotlin、R、Assembly、MATLAB、Ada);其他任何语言中的符号都不在其中。
| 工具 | 说明 |
|---|---|
search_code |
按名称、签名和文档注释搜索已索引的符号(BM25 + 语义混合) |
code_symbol |
按精确名称查找符号;返回 file:line 和签名 |
code_callers |
列出调用某符号或依赖某符号的符号(入边) |
code_callees |
列出某符号所调用或所依赖的符号(出边) |
code_impact |
计算某个符号在给定深度内的传递影响半径 |
工单工具
标题为“工单工具”的部分| 工具 | 说明 |
|---|---|
create_ticket |
在配置的提供方上创建一张工单 |
get_ticket |
按 id 获取一张工单 |
list_tickets |
列出工单,可按状态或负责人筛选 |
update_ticket |
更新状态、标题、描述、优先级或标签(状态接受 in_progress / completed 等别名) |
assign_ticket |
把工单分配给一个智能体和/或团队 |
reassign_ticket |
把工单改派给另一个智能体 |
add_ticket_collaborator |
邀请一个智能体协作处理工单(被加入其空间) |
comment_on_ticket |
对工单发表评论 |
close_ticket |
关闭工单(标记为已完成),可附带输出 |
fail_ticket |
用一条错误消息把工单标记为失败 |
delegate_ticket |
把工单委派给一个智能体,并创建一张可跟踪的工单 |
ticket_pr_link |
按 PR 节点 id 关联或取消关联一张工单与一个 pull request(action:link | unlink) |
ticket_relation |
添加或移除两张工单之间的关系——blocked_by、blocking、related_to、duplicate_of、duplicated_by、sub_issue_of、parent_of(action:add | remove) |
list_ticket_relations |
列出某张工单的父工单、子问题和依赖链接 |
团队与流水线工具
标题为“团队与流水线工具”的部分| 工具 | 说明 |
|---|---|
record_team_activity |
记录一条团队负责人针对某张工单的活动条目 |
preview_trigger |
试运行一个假想事件会启动哪些流水线运行,不提交任何东西 |
submit_output |
为调用方当前这次流水线运行提交结构化输出载荷;会按该运行声明的输出 schema 校验 |
编排工具
标题为“编排工具”的部分| 工具 | 说明 |
|---|---|
propose_orchestration |
发出一个结构化的多智能体编排计划,以取得一次性前置批准;会校验并返回任何违规 |
新闻流工具
标题为“新闻流工具”的部分| 工具 | 说明 |
|---|---|
list_feeds |
列出已注册的 RSS/Atom 订阅源 |
list_articles |
列出文章,可按订阅源、未读或已保存筛选 |
get_article |
获取一篇文章 |
set_article_read |
把文章标记为已读或未读 |
set_article_saved |
保存或取消保存文章 |
refresh_feeds |
立即重新抓取所有已启用的订阅源 |
隔离舱(机台)工具
标题为“隔离舱(机台)工具”的部分在一次运行内部驱动一次性机器——一个被隔离的浏览器或 Linux 桌面、一个 Android
模拟器,或一个 iOS 模拟器。启动后无条件注册:某台机器究竟能否启动,是一个探测问题,
由这些工具在每次调用时回答。同一对话中的重复调用会复用同一台机器;
截图以图片内容返回,每个结果限一张图,而抽取出的页面/界面内容会被围栏标记为
不受信任的数据。四个 use 工具加上 rig_close 都会声明 enclosureControl
操作类别(这些 use 工具还声明 networkEgress 和
processSpawn;mobile_use 和 ios_use 另外声明 packageInstall),因此只读模式会
拒绝它们。rig_list 不声明任何类别——它只读取工作区状态。每种形态完整的动词表见
机台参考。
| 工具 | 说明 |
|---|---|
computer_use |
在隔离的 VM 中驱动 Linux 桌面:移动、点击、拖拽、滚动、输入、调整大小、剪贴板、截图 |
browser_use |
驱动无头 Chromium、Firefox 或 WebKit(engine):导航、点击、填写、抽取(a11y/DOM/console)、剪贴板、截图 |
mobile_use |
通过 ADB 驱动 Android:检查/输入、截图、安装/启动/停止/重置/卸载应用、深链接以及 argv 形式的设备命令 |
ios_use |
通过 WebDriverAgent/CoreSimulator 驱动 iOS 模拟器:检查/输入、截图、安装/启动/停止/卸载应用、深链接以及 argv 形式的模拟器进程 |
rig_list |
列出工作区的机台,含形态、状态、显示尺寸和控制器 |
rig_close |
销毁一台机台并丢弃它拥有的机器状态 |
未通过 MCP 暴露
标题为“未通过 MCP 暴露”的部分日历和会议没有任何 MCP 工具。智能体无法读取你的日历、会议、转录记录、行动项或决定。产出行动项和决定的那份摘要,是作为内置的 meeting_summary 流水线运行的,而不是作为一个智能体可以调用的工具。
按模式进行的工具门控
标题为“按模式进行的工具门控”的部分门控由同一张表(ModeToolPolicy)强制执行两次:一次在面向 Claude Code 适配器的 MCP 调度器中,一次在内置运行框架注册表中。被阻止的调用会返回原因。
| 模式 | 工具面 |
|---|---|
chat |
所有已注册的工具;没有允许列表 |
plan |
一份精心筛选的允许列表。不允许工作树写入,也不允许 create / assign / delegate 这几个工单动词,但允许记忆、工件、待办、submit_plan、exit_plan_mode,以及针对被派发工单的工单完成动词 |
review |
一份精心筛选的允许列表:审查参与、沟通、只读的上下文获取器,以及完整的工单动词集,包括 create_ticket 和 assign_ticket |
orchestrate |
一份精心筛选的允许列表:调研和读取类工具,加上 propose_orchestration、create_playbook 和 run_playbook。招聘、任务分解和工单完成会在批准之后确定性地发生,绝不会在运行中途进行 |
无论允许列表如何,在每种模式下都允许:
| 集合 | 工具 |
|---|---|
| 记忆与工件 | search_memory, propose_fact, propose_policy, supersede_fact, supersede_policy, record_observation, update_my_notes, get_my_notes, list_memory_domains, list_policies, publish_artifact, revise_artifact, list_artifacts, get_artifact |
| 代码图 | search_code, code_symbol, code_callers, code_callees, code_impact |
| 运行机制 | search_tool_bm25, list_my_tools, todo_write, todo_read |
出现在允许列表上并不等于工具可调用,反过来也一样:向操作员提问这项能力是一个运行框架工具(ask_user),因此它根本不会出现在这个 MCP 目录中。
受审批约束的工具
标题为“受审批约束的工具”的部分工具可以声明 requiresApproval。调度器随后会构建一个 ApprovalPayload,并在工具运行前通过 ConfirmationPort 把它呈现出来;cc_server 接好了这个端口,因此闸门是生效的。
声明了它的已注册工具:create_ticket、update_ticket、assign_ticket、reassign_ticket、close_ticket、ticket_relation、create_goal、update_goal_progress、create_approval、decide_approval、comment_approval、create_work_product、save_work_product_revision、create_runtime_profile、install_skill、update_skill。
另外,统一的操作护栏会对任何声明了非空 ActionClass 集合的工具进行门控。在没有连接任何审批者时,prompt 决定会被拒绝。参见护栏。
背后没有对应工具的能力
标题为“背后没有对应工具的能力”的部分产品中并非每一项能力都能被智能体触达。这些能力根本没有对应的工具, 因此你在别处可能见过被引用的某个名称,会返回 “unknown tool”:
| 能力 | 它改为存在于何处 |
|---|---|
| 招聘、解雇或编辑智能体 | 智能体界面。没有 hire_agent / fire_agent / update_agent 工具 |
| 创建工作区 | 通过 RPC 调用 workspace.upsert,它会播种并盖上所有权标记 |
| 项目(创建 / 列出 / 更新 / 归入) | 工单界面。项目是操作员的功能面——参见项目 |
| 向操作员提问一个会阻塞的问题 | 运行框架的 ask_user 工具,而非 MCP。它会在对话中渲染一个表单,并阻塞等待回答 |
| 逐智能体诊断 | 无。没有 doctor——参见诊断智能体 |
| 日历和会议 | 仅面向人类客户端的 RPC(见上文) |