MCP 도구
cc_server는 하나의 MCP(JSON-RPC 2.0) 도구 레지스트리를 호스팅하며, 메인 서버 포트(기본값 9030)에서 POST /mcp와 GET /sse로 제공되고 프로토콜 버전은 2024-11-05입니다. 데스크톱, 웹 빌드, 외부 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가 아니라 cc_mcp_client에서 오며, 둘 다 모드 가드를 참조하므로 현재 대화 모드에서 호출 가능한 것을 보고합니다.
| 도구 | 설명 |
|---|---|
search_tool_bm25 |
키워드로 도구 카탈로그를 검색하고, 일치하는 도구와 그 인자 스키마, 그리고 각각이 지금 호출 가능한지 여부를 반환합니다 |
list_my_tools |
이 대화에서 지금 호출 가능한 도구를 해당 모드로 필터링해 나열합니다 |
세 번째 탐색 도구인 **search_tools**는 내장 하네스 안에만 존재하며 이 MCP 레지스트리의 일부가 아닙니다. 이것은 실행 자체의 도구 표면의 순위를 매기고, search_tool_bm25와 달리 찾아낸 것의 스키마를 적재하므로 에이전트가 다음 턴에 일치 항목을 호출할 수 있습니다. 하네스의 에이전트는 이것을 우선해야 하며, 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 |
워크스페이스에서 사용할 수 있는 스킬 슬러그를 나열합니다 |
create_skill |
마크다운 콘텐츠로 새 스킬을 생성합니다 |
install_skill |
핀으로 고정한 ref에서 GitHub 저장소의 스킬 디렉터리 전체를 설치합니다 |
update_skill |
설치된 GitHub 스킬을 새 ref로 업데이트하며, 다시 검사하고 핀을 다시 고정합니다 |
list_skill_updates |
더 새 버전을 사용할 수 있는 스킬을 나열합니다 |
verify_skills |
잠긴 스킬을 디스크상의 콘텐츠 해시와 대조해 검증합니다 |
pin_skill |
디스크에 있는 기존 스킬을 해시해 skills-lock.json에 기록합니다 |
플랜, 플레이북, 아티팩트 도구
섹션 제목: “플랜, 플레이북, 아티팩트 도구”| 도구 | 설명 |
|---|---|
submit_plan |
플랜 모드의 출력 계약: 플랜 스튜디오에서 열리는 타입이 지정된 PlanDocument를 내보냅니다 |
create_playbook |
플랜을 타입이 지정된 {{param}} 자리 표시자가 있는 이름 붙은 버전 관리 템플릿으로 저장합니다 |
run_playbook |
매개변수 값으로 플레이북을 인스턴스화해 운영자가 승인하는 플랜을 만듭니다 |
publish_artifact |
클라이언트에서 네이티브로 렌더링되는 타입이 지정된 블록(마크다운, 표, 차트, mermaid, 코드, JSON)의 순서 있는 목록을 게시합니다 |
revise_artifact |
게시된 아티팩트의 콘텐츠를 교체합니다 |
list_artifacts |
워크스페이스의 아티팩트를 나열합니다 |
get_artifact |
아티팩트 하나를 읽습니다 |
complete_goal |
대화의 활성 영속 목표(/goal 또는 /loop로 시작됨)가 달성되었음을 선언합니다 |
워크스페이스 도구
섹션 제목: “워크스페이스 도구”| 도구 | 설명 |
|---|---|
list_workspaces |
모든 워크스페이스를 id와 이름과 함께 나열합니다(전역, workspace_id 없음) |
저장소 도구
섹션 제목: “저장소 도구”| 도구 | 설명 |
|---|---|
list_repos |
워크스페이스에 등록된 저장소를 나열합니다. 에이전트 호출자는 원본 체크아웃이 아니라 자신의 대화에 격리된 copy-on-write 워크트리 경로를 받습니다 |
메시징 도구
섹션 제목: “메시징 도구”| 도구 | 설명 |
|---|---|
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 |
도메인에 짧은 마크다운 팩트를 저장합니다 |
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 |
생존 상태(활성, 유휴, 멈춤)를 보고합니다. 조용해지면 런타임 상태가 최근 손실로, 그다음 오프라인으로 바뀝니다 |
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로 티켓과 풀 리퀘스트를 연결하거나 연결 해제합니다(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 |
호출자의 현재 파이프라인 실행에 대한 구조화된 출력 페이로드를 제출합니다. 실행이 선언한 출력 스키마에 따라 검증됩니다 |
오케스트레이션 도구
섹션 제목: “오케스트레이션 도구”| 도구 | 설명 |
|---|---|
propose_orchestration |
한 번의 사전 승인을 위한 구조화된 다중 에이전트 오케스트레이션 플랜을 내보냅니다. 위반 사항을 검증해 반환합니다 |
뉴스피드 도구
섹션 제목: “뉴스피드 도구”| 도구 | 설명 |
|---|---|
list_feeds |
등록된 RSS/Atom 피드를 나열합니다 |
list_articles |
아티클을 나열하며, 선택적으로 피드, 읽지 않음 또는 저장됨으로 필터링합니다 |
get_article |
아티클 하나를 가져옵니다 |
set_article_read |
아티클을 읽음 또는 읽지 않음으로 표시합니다 |
set_article_saved |
아티클을 저장하거나 저장 해제합니다 |
refresh_feeds |
활성화된 모든 피드를 지금 다시 가져옵니다 |
인클로저(리그) 도구
섹션 제목: “인클로저(리그) 도구”실행 안에서 일회용 머신 — 인클로저 안의 브라우저나 Linux 데스크톱, Android
에뮬레이터 또는 iOS 시뮬레이터 — 을 조작합니다. 부팅 후 무조건 등록됩니다.
머신이 실제로 부팅될 수 있는지는 도구가 호출마다 답하는 프로브 질문입니다.
한 대화에서 반복 호출하면 하나의 머신을 재사용하며, 스크린샷은 결과당 한 장의
이미지 예산으로 이미지 콘텐츠로 반환되고, 추출된 페이지/UI 콘텐츠는 신뢰할 수
없는 데이터로 격리됩니다. 네 개의 사용 도구와 rig_close는 enclosureControl
액션 클래스를 선언하므로(사용 도구는
networkEgress와 processSpawn도 선언하고, mobile_use와 ios_use는
packageInstall도 선언합니다), 읽기 전용 모드에서는 이들을 거부합니다.
rig_list는 아무것도 선언하지 않으며, 워크스페이스 상태만 읽습니다. 표면별
전체 동사 어휘는 리그 레퍼런스에
있습니다.
| 도구 | 설명 |
|---|---|
computer_use |
인클로저 VM의 Linux 데스크톱을 조작합니다: 이동, 클릭, 드래그, 스크롤, 입력, 크기 조정, 클립보드, 스크린샷 |
browser_use |
헤드리스 Chromium, Firefox 또는 WebKit(engine)을 조작합니다: 탐색, 클릭, 채우기, 추출(a11y/DOM/콘솔), 클립보드, 스크린샷 |
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”을 반환합니다:
| 기능 | 대신 어디에 있는가 |
|---|---|
| 에이전트 채용, 해고, 편집 | 에이전트 UI. hire_agent / fire_agent / update_agent 도구는 없습니다 |
| 워크스페이스 생성 | RPC를 통한 workspace.upsert. 소유권을 시드하고 각인합니다 |
| 프로젝트(생성 / 나열 / 업데이트 / 파일링) | 티켓 UI. 프로젝트는 운영자 표면입니다 — 프로젝트를 참고하십시오 |
| 운영자에게 차단 질문하기 | MCP가 아니라 하네스 ask_user 도구입니다. 대화에 양식을 렌더링하고 답변을 기다리며 차단합니다 |
| 에이전트별 진단 | 없습니다. doctor가 없습니다 — 에이전트 진단을 참고하십시오 |
| 캘린더와 회의 | 사람 클라이언트 전용 RPC(위 참조) |