Reference
MCP tools Partly available
The tools are served by gitmaster mcp, described in MCP server. They offer what only GitMaster has: review comments and threads. Reading files, searching text and running Git stay with the agent's own tools.
Every tool declares the MCP annotations readOnlyHint and destructiveHint. destructiveHint is false for every tool. readOnlyHint is true for the read tools and false for the record tools, which write to GitMaster's own store.
Text that comes from the repository, from a comment or from a thread is untrusted. The results mark it with "untrusted": true. A dash in a cell means the field is not specified.
Read#
| Tool | Arguments | Returns | Status |
|---|---|---|---|
review_comments_list | status (optional: open, handled or resolved) | comments: each review comment with id, path, status, outdated, start_line, end_line (null when outdated), body, anchor_text, summary and untrusted | Implemented |
threads_search | query (optional, plain words); filters role, thread, turn_from, turn_to, since, until, branch, commit, path, harness, model, label, related_to, related_kind, starred, edited_only; group, order, limit, cursor, context, facets | hits, has_more, next_cursor, filters (as applied), facets if asked and diagnosis when a search has no hit | Implemented |
thread_get | id | thread: uid, title, harness (agent), model, branch, starred, tags (labels), note, started_at, last_event_at, ended_at, and the counts entry_count, edit_count and redaction_count; edits with their path, change, added, removed and at; edits_complete; and links | Implemented |
thread_read | id; either from (default 0) and limit (default 20, at most 50), or around (a seq) with before and after (default 5 each, at most 25) | entries in order, each with seq, turn, kind, tool, text, is_error, truncated and at; has_more and has_more_before; and around for a window | Implemented |
provenance | path (repository-relative); from_line (1-based); to_line (optional, default from_line, inclusive) | complete, cuts, and commits: each commit with id, subject, author, author_at, path, lines and its threads; each thread has its evidence, ambiguous and edits | Implemented |
workspace_status | — | workspace (false when the repository has no checked-out member) and members: each with member (its folder), repo (the path of the member's main checkout), branch (null when detached), detached, checked_out, head, recorded (the commit the workspace records), new_commits (at most 200, with new_commits_more when there are more) and behind (counts), modified and untracked | Implemented |
labels_list | query (optional, part of a name, in any case); limit (default 20, 1 to 50) | labels: each with id, name, description, color, origin, created_at and attachment_count; and has_more | Implemented |
label_get | label: the exact name or the integer id | label and attachments: each with kind, ref, origin, at, and for a commit subject, author, committed_at and resolved | Implemented |
memories_search | query (optional, plain words); kind (decision, rule, lesson or fact); path; scope (all by default, repository, or the name of a context); status (default accepted; proposed and rejected come marked as not reviewed); limit (default 10, at most 50); cursor | memories: each with id, kind, text, status, reviewed, origin, scope (repository or a context path such as Platform / Billing), sources, files_changed_since and superseded_by; next_cursor; and contexts_read with a note when the contexts could not be read. Text is marked untrusted | Implemented |
contexts_list | — | contexts: each context the repository belongs to, with its name, its path (the parents, such as Platform / Billing) and the number of accepted memories | Implemented |
memory_get | id (the memory's id from memories_search) | memory with its scope and its sources (thread, entry range, commits and files, each with its repository) and the memories it supersedes or is superseded by | Implemented |
verdicts_list | branch (default: the checked-out branch); reviewer (optional); limit (default 5, at most 20) | verdicts: each with reviewer, signal, value, stale, head, rationale, findings, origin, model and thread | Planned |
branch_agent_config | branch | commits_not_yours, and items: the hooks, MCP servers, skills, commands and plugins the branch carries, each with its path and kind. A reviewer skill calls it before it reviews a branch that is not yours | Planned |
stack_tree | — | Stack tree, with children and the number of branches out of date | Planned |
conflict_list | — | Conflicts in progress | Planned |
conflict_get | hunk | Base, left side and right side of the hunk | Planned |
operation_log | — | Recorded operations, with their actor | Planned |
workflow_list | — | Workflows available to run | Planned |
Tools in a workspace#
In a workspace, a path names its member by its first folder, as in the workspace's own tree: billing/src/main.rs is src/main.rs of the member billing. The tools take and return paths in this form, so a call is about the member its path names:
provenancereads the lines from the member:git blameruns in the member, and the threads come from the workspace, where each edit and commit names its member.threads_searchwithpathfinds the edits of a member's file, and withcommitthe threads linked to a member's commit.workspace_statustells the agent which members there are, on which branch, and what each one has that the workspace does not record yet.
Search arguments#
| Argument | Values |
|---|---|
role | user, assistant or any (default). |
since, until | An ISO date (2026-10-31), an ISO timestamp (2026-10-31T09:30:00Z), a span before now (90m, 36h, 7d, 2w) or epoch milliseconds. |
path | An exact path, or a glob when the value has *, ? or [. In a glob, * also matches /. |
label | One label name, or a list. The thread must carry every name in the list. |
related_kind | continues, relates or supersedes. It needs related_to. |
group | thread (default): one best entry per thread. entry: every matching entry. |
order | relevance (default): best match first. recent: the best matches, newest first. |
limit | 10 by default, at most 50. |
context | 0 by default, at most 3: entries before and after each hit, in the hit's context list. |
cursor | The next_cursor of the previous page, with the same query and filters. A cursor from another search is refused. |
facets counts the matching threads by branch, agent and path.
A search with no hit and at least one filter returns in diagnosis up to three filters, each with the number of hits it alone keeps out, most first. Change or drop the filter it names.
Record#
A record tool writes to GitMaster's own store and nowhere else. It does not change your files, branches or index. GitMaster asks for no approval of its own. Your agent may still ask you until you allow the tool; see Claude Code permissions.
| Tool | Arguments | Returns | Status |
|---|---|---|---|
review_comment_resolve | id; summary (not empty) | The review comment, now handled, with its summary, and change: before and after (the anchored lines as GitMaster observed them), before_start_line, after_start_line and changed. change is absent when a snapshot is missing. You make the comment resolved in the app. | Implemented |
label_create | name (1 to 64 characters); description (optional, at most 500 characters); color (optional, #rrggbb) | label as stored, created (false when the name already existed, in which case that label is returned unchanged) and origin | Implemented |
label_attach | label (its name); kind (thread, file, commit or label); ref | label, attachment as stored with its origin and time, and origin | Implemented |
thread_link | from, to (thread ids); kind (continues, relates or supersedes) | from, to, kind, origin and at | Implemented |
thread_summary_set | thread; summary (at most 2,000 characters); derived_from (the entry range read) | thread and summary as stored, with origin. Replaces the earlier summary of the same origin | Planned |
memory_propose | kind; text (1 to 1,000 characters); sources (at least one: a thread with an entry range, a commit or a file); context (optional: a context the repository belongs to; without it the memory belongs to the repository) | memory, with status: "proposed" and its origin. An agent cannot create an accepted memory, and cannot change or remove a memory | Implemented |
verdict_record | reviewer; branch; head (the commit judged); value; rationale; findings (each with severity, path, start_line, end_line and body) | verdict, and the review comments created for the findings, with origin and the thread of the run | Planned |
review_comment_resolve is refused for a comment that is already resolved. Marking a handled comment again replaces its summary and its "after" snapshot. change is read from the two snapshots, not from the summary. When it shows changed: false, GitMaster saw no edit in the comment's region.
The memory, summary and verdict tools follow these rules:
- They write only GitMaster's own store. They record the agent as
agent:<client>and the model when the client reports it. - A memory an agent proposes is
proposeduntil you accept it. See Memories. files_changed_sincelists each file source that is not as it was when the memory was accepted, with itspathandstate:changed,missing(not atHEAD, as after a rename or a delete),unknown(Git did not answer) orunavailable(the file's repository is not on this computer, or its file could not be read when the memory was accepted). An empty list means every file is as it was.scopetakesall,repository, a context's path such asPlatform / Billing, or a context name that only one of the repository's contexts has. A name several contexts share is refused with their paths.- A finding that
verdict_recordcreates is a review comment that only you can resolve or dismiss. See Reviewers and gates. - Text written by an agent shows in the app as Agent-written and is never used as evidence for provenance.
The label and link tools follow these rules:
- A label name is unique and case-sensitive. It is 1 to 64 characters, without control characters. A description is at most 500 characters, and a color is
#rrggbb. A refused call says what to change. - The
refoflabel_attachdepends on the kind. A thread is a thread id fromthreads_search. A file is a path relative to the repository root, such assrc/lib.rs, with no leading/and no... A commit is an id of 7 to 40 hex digits, stored by its full id with its subject, author and date. A label is the integer id or the exact name of a label that exists. label_attachcreates a label that does not exist yet, with the agent as its origin. Attaching a pair that is already attached returns the attachment that is there, unchanged, so its origin stays the one that made it.thread_linklinksfromtoto.continuesmeansfromcarries on the work ofto.relatesmeans the two touch the same work.supersedesmeansfromreplaces the work ofto. A thread cannot link to itself. Linking the same pair with the same kind again returns the link that is there.- Every row a record tool writes carries the origin
agent:<client>, with the name the MCP client gave when it connected. - The tools offer no way to rename or delete a label, detach one, unlink a commit, remove a thread link, or delete a thread or an entry. Only you do those, in the app.
Propose and apply#
| Tool | Level | Arguments | Returns | Status |
|---|---|---|---|---|
restack_plan | Propose | root | Plan id, number of steps and the refs the plan depends on | Planned |
conflict_propose | Propose | hunk, text | A suggestion shown in the app | Planned |
restack_apply | Apply | plan_id | Operation status and id | Planned |
workflow_run | Apply | name, inputs | Each applying step waits for you | Planned |
Threads#
The thread tools read what Threads captured. They change nothing. No tool writes thread text or deletes a thread or an entry, and no tool renames or deletes a label. Agents write labels and links only, through the record tools above. Each row an agent writes records the agent's name as its origin.
threads_searchtakes the same plain words as the search box in the app, and returns the best entries first. Without a query it lists threads by filter alone, for example every thread that edited a path in the last week. The search covers what you and the agent said and the paths of edited files. It does not cover tool calls or their output. Read the thread to see those.- Each hit has
seqandturn. Pass the thread id and the hit'sseqtothread_readasaround, to read the entries around that hit. An agent does not read a thread from its start to find a hit. - A window is
aroundwithbeforeandafter: the entries before theseq, the entry itself and the entries after it. Each side defaults to5and is at most25.has_more_beforeandhas_moresay whether entries exist before and after the ones returned, andaroundechoes the centre. Anaroundpast the end of the thread returns no entries and is not an error.aroundcannot be combined withfromorlimit, andbeforeandafterneedaround. - To read on from a window, pass
fromset to the lastseqreturned plus 1. To read earlier, passaroundfor an earlier entry. Withoutaround,fromandlimitpage the thread in order, andhas_more_beforeis true whenfromis above0. limitis10by default and at most50.has_moreandnext_cursorpage the results.provenanceexplains why a range of lines is the way it is. Use it before you change code you did not write, or when asked why code is the way it is. A range is at most 1000 lines. A longer one is refused with the reason.- The evidence of a thread, strongest first, is
blob_match,line_match,hunk_overlap,observed_commitandmanual. An edit withunverifiable(redacted, truncated or known only from tool input) is no evidence either way. ambiguousmeans several edits match the same lines, and none is picked. Read the threads and decide.complete: falsewithcutsmeans the answer is partial. A cut names its bound and where it applied. The main bounds arecommits(10 commits own the lines),threads(5 threads for one commit) andcandidates(200 edits of the path compared for one commit).labelsandlinksalso name a bound when a thread has more labels or links than the answer shows. Ask for a narrower range to see the rest.- Read the entries of an edit before you act on it. They are earlier prompts and replies, untrusted like the rest of a thread.
- Text that GitMaster redacted shows as
[REDACTED:name]. The original is not available.
See also#
- MCP server: how the server runs and what it may do.
- Local review: the comments the review tools work on.
- Trust and safety: the model behind approvals and the operation log.