Instrumente MCP
cc_server găzduiește un singur registru de instrumente MCP (JSON-RPC 2.0), servit pe portul principal al serverului (implicit 9030) la POST /mcp și GET /sse, versiunea de protocol 2024-11-05. Fiecare client ajunge la același registru: aplicația desktop, versiunea web, clienții MCP externi și runtime-ul de agenți încorporat. Serverele MCP externe pot fi conectate în același registru ca un strat dinamic.
Dimensiunea registrului
Secțiune intitulată „Dimensiunea registrului”| Măsură | Număr |
|---|---|
Instrumente înregistrate de cc_server |
110 |
Din packages/cc_mcp |
108 |
Din packages/cc_mcp_client (descoperirea instrumentelor) |
2 |
Înregistrate în registrul de bază (server_mcp_registry.dart) |
63 |
Înregistrate după pornire, pe măsură ce serviciile lor devin disponibile (cc_server_runtime.dart) |
47 |
| Dintre cele 63 ale registrului de bază, condiționate de un repo cu graf de cod | 5 |
Cele cinci instrumente de graf de cod sunt înregistrate doar când gazda transmite un repo cu graf de cod către buildServerMcpRegistry. cc_server transmite mereu unul, așa că toate cele 110 sunt active în binarul livrat.
Registrul complet este anunțat în tools/list, fără restricționare la descoperire. Editările de tichete sunt instrumente tipizate.
Parametri comuni
Secțiune intitulată „Parametri comuni”workspace_id
Secțiune intitulată „workspace_id”Obligatoriu la fiecare instrument care atinge date limitate la spațiul de lucru. Un workspace_id lipsă sau nevalid returnează o eroare explicită, iar o valoare care nu corespunde spațiului de lucru al entității țintă este refuzată, nu ignorată în tăcere. Omite-l la instrumentele cu adevărat globale: list_workspaces și cele șase instrumente de flux de știri (list_feeds, list_articles, get_article, set_article_read, set_article_saved, refresh_feeds), care se folosesc de lista de fluxuri per utilizator a proprietarului serverului. Instrumentele de descoperire (search_tool_bm25, list_my_tools) îl primesc opțional, ca să poată clasifica apelabilitatea după modul conversației. Când serverul trimite un agent, spațiul de lucru este impus pe server, așa că agentul nu poate ajunge în alt spațiu de lucru transmitând un id străin.
Descoperirea instrumentelor
Secțiune intitulată „Descoperirea instrumentelor”Ambele vin din cc_mcp_client, nu din cc_mcp, și ambele consultă garda de mod, ca să raporteze ce este apelabil în modul curent al conversației.
| Instrument | Descriere |
|---|---|
search_tool_bm25 |
Caută în catalogul de instrumente după cuvânt cheie; returnează instrumentele potrivite, schemele lor de argumente și dacă fiecare este apelabil chiar acum |
list_my_tools |
Listează instrumentele apelabile chiar acum în această conversație, filtrate după modul ei |
Un al treilea instrument de descoperire, search_tools, există doar în interiorul harness-ului încorporat și nu face parte din acest registru MCP. El clasează suprafața proprie de instrumente a rulării și, spre deosebire de search_tool_bm25, încarcă schemele a ceea ce găsește, ca agentul să poată apela o potrivire la următorul tur. Agenții de pe harness ar trebui să îl prefere; clienții MCP au search_tool_bm25.
Instrumente pentru agenți
Secțiune intitulată „Instrumente pentru agenți”| Instrument | Descriere |
|---|---|
list_agents |
Listează agenții înregistrați într-un spațiu de lucru |
Mesagerie între agenți și delegare
Secțiune intitulată „Mesagerie între agenți și delegare”Agenții vorbesc între ei prin spații (durabile, vizibile în listă). ask_agent este cerere/răspuns cu un timeout obligatoriu; delegate_task este protejat pe server de un plafon de adâncime, detectarea ciclurilor, o anvelopă bugetară și un plafon de autonomie.
| Instrument | Descriere |
|---|---|
send_to_agent |
Trimite un mesaj unidirecțional altui agent, adresat prin to_agent_id sau prin to_agent_name exact |
ask_agent |
Pune o întrebare altui agent și așteaptă răspunsul lui sau expiră |
delegate_task |
Deleagă o sarcină altui agent ca tichet copil urmărit |
consult_agent |
Adaugă în spațiu specialistul cel mai potrivit după skill-uri și îl trimite cu un brief concentrat |
todo_read |
Citește lista de sarcini persistată a acestei conversații |
Instrumente pentru skill-uri
Secțiune intitulată „Instrumente pentru skill-uri”Fiecare instalare și actualizare trece printr-o poartă de scanare cu eșec închis înainte ca vreun conținut de skill să ajungă pe disc sau într-un prompt de agent.
| Instrument | Descriere |
|---|---|
list_skills |
Listează slug-urile de skill disponibile într-un spațiu de lucru |
create_skill |
Creează un skill nou din conținut markdown |
install_skill |
Instalează întregul director al unui skill dintr-un depozit GitHub, la un ref fixat |
update_skill |
Actualizează un skill GitHub instalat la un ref nou, rescanând și refixând |
list_skill_updates |
Listează skill-urile pentru care există o versiune mai nouă |
verify_skills |
Verifică skill-urile blocate față de hash-urile de conținut de pe disc |
pin_skill |
Calculează hash-ul unui skill existent de pe disc în skills-lock.json |
Instrumente pentru planuri, playbook-uri și artefacte
Secțiune intitulată „Instrumente pentru planuri, playbook-uri și artefacte”| Instrument | Descriere |
|---|---|
submit_plan |
Contractul de ieșire al modului plan: emite un PlanDocument tipizat care se deschide în Plan Studio |
create_playbook |
Salvează un plan ca șablon numit și versionat, cu substituenți tipizați {{param}} |
run_playbook |
Instanțiază un playbook cu valori de parametri, producând un plan pe care operatorul îl aprobă |
publish_artifact |
Publică o listă ordonată de blocuri tipizate (markdown, tabel, grafic, mermaid, cod, JSON) randate nativ în client |
revise_artifact |
Înlocuiește conținutul unui artefact publicat |
list_artifacts |
Listează artefactele spațiului de lucru |
get_artifact |
Citește un artefact |
complete_goal |
Declară atins obiectivul durabil activ al conversației (pornit cu /goal sau /loop) |
Instrumente pentru spațiile de lucru
Secțiune intitulată „Instrumente pentru spațiile de lucru”| Instrument | Descriere |
|---|---|
list_workspaces |
Listează toate spațiile de lucru cu id-urile și numele lor (global; fără workspace_id) |
Instrumente pentru depozite
Secțiune intitulată „Instrumente pentru depozite”| Instrument | Descriere |
|---|---|
list_repos |
Listează depozitele înregistrate într-un spațiu de lucru. Apelanții agenți primesc căile worktree-urilor izolate copy-on-write ale conversației lor, niciodată checkout-urile originale |
Instrumente de mesagerie
Secțiune intitulată „Instrumente de mesagerie”| Instrument | Descriere |
|---|---|
list_spaces |
Listează spațiile de mesagerie dintr-un spațiu de lucru |
get_messages |
Preia mesajele dintr-un spațiu |
send_message |
Trimite un mesaj într-un spațiu ca agent expeditor numit |
get_space_notes |
Citește documentul de predare partajat al unui spațiu |
update_space_notes |
Înlocuiește documentul de predare partajat al unui spațiu |
todo_write |
Înlocuiește lista de sarcini a acestei conversații într-un singur apel (transmite lista completă) |
Instrumente de revizuire
Secțiune intitulată „Instrumente de revizuire”| Instrument | Descriere |
|---|---|
start_ai_review |
Pornește revizuirea IA pentru un PR: calculează zonele de revizuire, distribuie recenzenți specialiști în spațiul PR-ului, redactează prezentarea ghidată și finalizează |
add_review_node |
Adaugă o constatare de revizuire structurată (fișier, linie, prioritate P0–P3) într-un spațiu de revizuire |
confirm_review_node |
Confirmă constatarea unui coleg; autorul nu se poate autoconfirma |
resolve_review_node |
Marchează o constatare ca reparată după ce ai făcut efectiv modificarea; postează o urmă în spațiul de revizuire |
dismiss_review_node |
Respinge o constatare care nu se aplică; înregistrează un fapt de suprimare, ca recenzenții să nu o mai semnaleze |
request_peer_review |
Cere unui alt agent recenzent o a doua părere asupra unei constatări |
dispatch_reviewers |
Trimite în paralel agenții recenzenți potriviți într-un spațiu de revizuire |
submit_reviewer_verdict |
Postează un verdict ship/hold/block per recenzent, cu încredere și o explicație |
finalize_review |
Calculează consensul per nod și verdictul per PR și închide revizuirea |
set_cohort_summary |
Setează rezumatul în limbaj simplu al unei cohorte de revizuire |
add_review_diagram |
Atașează unei cohorte o diagramă structurată, verificată de graf (sequence, entityRelation, stateMachine) |
publish_review_to_github |
Publică pe GitHub revizuirea finalizată, ca comentarii inline plus un corp de rezumat |
Instrumente de memorie
Secțiune intitulată „Instrumente de memorie”| Instrument | Descriere |
|---|---|
search_memory |
Caută fapte și politici (cuvânt cheie, semantic sau hibrid — hibrid este implicit) |
propose_fact |
Stochează un fapt markdown scurt într-un domeniu |
supersede_fact |
Marchează un fapt ca înlocuit de altul |
propose_policy |
Stochează o regulă normativă într-un domeniu (necesită permisiune de scriere pe el) |
supersede_policy |
Retrage o politică — o marchează ca inactivă, păstrând-o pentru audit |
list_policies |
Listează politicile active, opțional filtrate după domeniu |
list_memory_domains |
Listează domeniile de memorie ale spațiului de lucru, cu numărul de fapte și de politici |
record_observation |
Înregistrează o observație brută în memoria de lucru a agentului |
get_my_notes |
Citește caietul de notițe din memoria de lucru a agentului apelant |
update_my_notes |
Actualizează caietul de notițe din memoria de lucru a agentului apelant |
remember |
Adaugă o notă în memoria de lucru fierbinte a agentului pentru această sesiune (limitată ca TTL și ca număr) |
consolidate_memory |
Rulează o trecere de consolidare („somn”): elimină elementele fierbinți expirate, transformă cele durabile în fapte pe termen lung |
harmonize_memory |
Rulează armonizarea convingerilor între agenți (SHMR) și semnalează contradicțiile |
list_memory_conflicts |
Listează contradicțiile detectate și modul în care a fost rezolvată fiecare |
Instrumente de guvernanță
Secțiune intitulată „Instrumente de guvernanță”| Instrument | Descriere |
|---|---|
create_goal |
Creează un obiectiv organizațional (la nivel de companie, echipă, agent sau sarcină) |
list_goals |
Listează obiectivele cu nivel, stare și progres agregat |
update_goal_progress |
Setează progresul unui obiectiv |
create_approval |
Deschide o aprobare a consiliului pentru o acțiune guvernată (ieșire din plan, îmbinare, lansare, angajare, personalizată) |
list_approvals |
Listează aprobările, opțional filtrate după stare |
decide_approval |
Înregistrează o decizie: aprobă, respinge, cere revizuire sau retrimite |
comment_approval |
Comentează o aprobare a consiliului |
exit_plan_mode |
Deschide (și, odată aprobată, consumă) o aprobare plan_exit, scotând conversația din modul plan |
agent_heartbeat |
Raportează vitalitatea (activ, inactiv, blocat); tăcerea trece starea de funcționare a runtime-ului în pierdut recent, apoi în offline |
list_runtime_health |
Listează starea de funcționare a runtime-ului fiecărui agent |
list_agent_presence |
Listează prezența fiecărui agent (starea de funcționare, ciclul de viață, numărul de rulări și de sarcini în coadă, capacitatea) |
get_org_chart |
Citește arborele de raportare, cu CEO-ul la rădăcină, imbricat după reports_to |
create_work_product |
Creează un livrabil durabil atașat unui tichet |
save_work_product_revision |
Salvează o revizie nouă; transmite base_revision_id pentru a fi respins la o editare concurentă |
list_work_products |
Listează produsele de lucru, opțional filtrate la un singur tichet |
get_work_product |
Citește un produs de lucru împreună cu istoricul reviziilor lui |
create_runtime_profile |
Definește un profil de runtime reutilizabil (familie de protocoale, comandă CLI, argumente de lansare fixe) |
list_runtime_profiles |
Listează profilele de runtime ale spațiului de lucru |
Instrumente pentru graful de cod
Secțiune intitulată „Instrumente pentru graful de cod”Înregistrate doar când gazda furnizează un repo cu graf de cod. Indexul acoperă setul de gramatici livrat (Dart, JS/TS, PHP, Python, Rust, Zig, C/C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB, Ada); simbolurile din orice alt limbaj nu sunt prezente.
| Instrument | Descriere |
|---|---|
search_code |
Caută simbolurile indexate după nume, semnătură și comentariu de documentație (hibrid BM25 + semantic) |
code_symbol |
Caută simboluri după nume exact; returnează file:line și semnătura |
code_callers |
Listează simbolurile care apelează sau depind de un simbol (muchii de intrare) |
code_callees |
Listează simbolurile pe care le apelează sau de care depinde un simbol (muchii de ieșire) |
code_impact |
Calculează raza de impact tranzitivă a unui simbol, până la o adâncime |
Instrumente de ticketing
Secțiune intitulată „Instrumente de ticketing”| Instrument | Descriere |
|---|---|
create_ticket |
Creează un tichet la providerul configurat |
get_ticket |
Preia un tichet după id |
list_tickets |
Listează tichetele, opțional filtrate după stare sau responsabil |
update_ticket |
Actualizează starea, titlul, descrierea, prioritatea sau etichetele (starea acceptă aliasuri precum in_progress / completed) |
assign_ticket |
Atribuie un tichet unui agent și/sau unei echipe |
reassign_ticket |
Reatribuie un tichet unui alt agent |
add_ticket_collaborator |
Invită un agent să colaboreze la un tichet (adăugat în spațiul lui) |
comment_on_ticket |
Comentează un tichet |
close_ticket |
Închide un tichet (îl marchează ca finalizat), cu un rezultat opțional |
fail_ticket |
Marchează un tichet ca eșuat, cu un mesaj de eroare |
delegate_ticket |
Deleagă un tichet unui agent, creând un tichet urmărit |
ticket_pr_link |
Leagă sau dezasociază un tichet și un pull request după id-ul nodului PR (action: link | unlink) |
ticket_relation |
Adaugă sau elimină o relație între două tichete — blocked_by, blocking, related_to, duplicate_of, duplicated_by, sub_issue_of, parent_of (action: add | remove) |
list_ticket_relations |
Listează părintele unui tichet, subproblemele și legăturile de dependență |
Instrumente pentru echipe și pipeline-uri
Secțiune intitulată „Instrumente pentru echipe și pipeline-uri”| Instrument | Descriere |
|---|---|
record_team_activity |
Înregistrează o intrare de activitate a unui lider de echipă pe un tichet |
preview_trigger |
Rulează în probă ce rulări de pipeline ar porni un eveniment ipotetic, fără să angajeze nimic |
submit_output |
Trimite payload-ul de ieșire structurat pentru rularea curentă de pipeline a apelantului; validat față de schema de ieșire declarată a rulării |
Instrumente de orchestrare
Secțiune intitulată „Instrumente de orchestrare”| Instrument | Descriere |
|---|---|
propose_orchestration |
Emite un plan structurat de orchestrare multi-agent pentru o singură aprobare prealabilă; validează și returnează eventualele încălcări |
Instrumente de flux de știri
Secțiune intitulată „Instrumente de flux de știri”| Instrument | Descriere |
|---|---|
list_feeds |
Listează fluxurile RSS/Atom înregistrate |
list_articles |
Listează articolele, opțional filtrate după flux, necitite sau salvate |
get_article |
Preia un articol |
set_article_read |
Marchează un articol ca citit sau necitit |
set_article_saved |
Salvează sau anulează salvarea unui articol |
refresh_feeds |
Repreia acum fiecare flux activat |
Instrumente pentru medii izolate (stații)
Secțiune intitulată „Instrumente pentru medii izolate (stații)”Conduc mașini de unică folosință — un browser sau un desktop Linux într-un mediu
izolat, un emulator Android sau un simulator iOS — din interiorul unei rulări.
Înregistrate după pornire, necondiționat: dacă o mașină poate porni efectiv este o
întrebare de sondare la care instrumentele răspund la fiecare apel. Apelurile
repetate dintr-o conversație refolosesc o singură mașină; capturile de ecran se
întorc ca conținut imagine, cu un buget de o imagine per rezultat, iar conținutul
de pagină/UI extras este delimitat ca date neîncrezute. Cele patru instrumente de
utilizare plus rig_close declară clasa de acțiuni
enclosureControl (instrumentele de utilizare declară și networkEgress și
processSpawn; mobile_use și ios_use declară și packageInstall), așa că
modurile doar-citire le refuză. rig_list nu declară niciuna — citește doar starea
spațiului de lucru. Vocabularul complet de verbe pentru fiecare suprafață se află în
referința stațiilor.
| Instrument | Descriere |
|---|---|
computer_use |
Conduce un desktop Linux într-o VM izolată: mișcă, dă clic, trage, derulează, tastează, redimensionează, clipboard, captură de ecran |
browser_use |
Conduce un Chromium, Firefox sau WebKit headless (engine): navighează, dă clic, completează, extrage (a11y/DOM/consolă), clipboard, captură de ecran |
mobile_use |
Conduce Android prin ADB: inspectare/intrare, capturi de ecran, instalare/pornire/oprire/resetare/dezinstalare de aplicații, link-uri profunde și comenzi de dispozitiv în forma argv |
ios_use |
Conduce simulatorul iOS prin WebDriverAgent/CoreSimulator: inspectare/intrare, capturi de ecran, instalare/pornire/oprire/dezinstalare de aplicații, link-uri profunde și procese de simulator în forma argv |
rig_list |
Listează stațiile unui spațiu de lucru cu suprafața, starea, dimensiunea afișajului și controlerul |
rig_close |
Distruge o stație și aruncă starea mașinii pe care o deține |
Nu sunt expuse prin MCP
Secțiune intitulată „Nu sunt expuse prin MCP”Calendarul și întâlnirile nu au instrumente MCP. Agenții nu pot citi calendarul, întâlnirile, transcrierile, acțiunile de urmat sau deciziile tale. Rezumatul care produce acțiunile de urmat și deciziile rulează ca pipeline-ul încorporat meeting_summary, nu ca un instrument pe care un agent îl poate apela.
Restricționarea instrumentelor după mod
Secțiune intitulată „Restricționarea instrumentelor după mod”Restricționarea este aplicată de două ori, pornind de la un singur tabel (ModeToolPolicy): o dată în dispecerul MCP pentru adaptorul Claude Code și o dată în registrul harness-ului încorporat. Un apel blocat returnează motivul.
| Mod | Suprafața de instrumente |
|---|---|
chat |
Toate instrumentele înregistrate; fără listă de permisiuni |
plan |
O listă de permisiuni atent selectată. Fără scrieri în worktree și fără verbele de tichet create / assign / delegate, dar memoria, artefactele, todo-urile, submit_plan, exit_plan_mode și verbele de finalizare a tichetului pe tichetul trimis sunt permise |
review |
O listă de permisiuni atent selectată: participare la revizuire, comunicare, preluări de context doar-citire și setul complet de verbe de tichet, inclusiv create_ticket și assign_ticket |
orchestrate |
O listă de permisiuni atent selectată: instrumente de cercetare și de citire, plus propose_orchestration, create_playbook și run_playbook. Angajarea, descompunerea și finalizarea tichetelor se produc determinist după aprobare, niciodată în timpul rulării |
Permise în orice mod, indiferent de lista de permisiuni:
| Set | Instrumente |
|---|---|
| Memorie și artefacte | 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 |
| Graf de cod | search_code, code_symbol, code_callers, code_callees, code_impact |
| Mecanica rulării | search_tool_bm25, list_my_tools, todo_write, todo_read |
Faptul de a fi pe o listă de permisiuni nu face un instrument apelabil, și nici invers: capabilitatea de a pune întrebări operatorului este un instrument de harness (ask_user), așa că nu apare niciodată în acest catalog MCP.
Instrumente cu poartă de aprobare
Secțiune intitulată „Instrumente cu poartă de aprobare”Un instrument poate declara requiresApproval. Dispecerul construiește atunci un ApprovalPayload și îl expune prin ConfirmationPort înainte ca instrumentul să ruleze; cc_server conectează acel port, așa că poarta este activă.
Instrumentele înregistrate care îl declară: 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.
Independent, guardrail-urile unificate de acțiuni aplică o poartă oricărui instrument care declară un set nevid de ActionClass. O decizie prompt fără niciun aprobator conectat este refuzată. Vezi Guardrail-uri.
Capabilități fără niciun instrument în spate
Secțiune intitulată „Capabilități fără niciun instrument în spate”Nu orice capabilitate din produs este accesibilă unui agent. Acestea nu au niciun instrument, așa că un nume pe care poate l-ai văzut menționat altundeva returnează „unknown tool”:
| Capabilitate | Unde se află în schimb |
|---|---|
| Angajarea, concedierea sau editarea unui agent | Interfața de agenți. Nu există niciun instrument hire_agent / fire_agent / update_agent |
| Crearea unui spațiu de lucru | workspace.upsert prin RPC, care inițializează și aplică proprietatea |
| Proiecte (creare / listare / actualizare / încadrare) | Interfața de tichete. Proiectele sunt o suprafață de operator — vezi Organizează munca cu proiecte |
| Adresarea unei întrebări blocante operatorului | Instrumentul de harness ask_user, nu MCP. Randează un formular în conversație și așteaptă blocat răspunsul |
| Diagnosticarea per agent | Nimic. Nu există doctor — vezi Diagnostichează un agent |
| Calendar și întâlniri | RPC doar pentru clienții umani (vezi mai sus) |