Skip to main content
Glama

Review finding verdict

record_finding_verdict
Destructive

Apply a post-hoc triage verdict to a finding that was previously recorded via record_finding. Used by the /reply-to-code-review flow to persist whether a finding is TRUE / FALSE / UNCERTAIN and the FIX / DEFER / IGNORE action taken. The finding is located only by the exact finding_id returned by list_pr_findings, on ANY lifecycle status (open, fixed, or dismissed — so verdicts still apply after a PR is merged and findings were swept to dismissed). Only findings recorded into the data layer (the aictrl-dev MCP path) can receive a verdict. Idempotent: re-applying overwrites the prior verdict. A not_found response is an application error; call list_pr_findings to refresh stale IDs and do not treat the write as successful. judged_at_sha is required: send the full 40-hex commit SHA of the code you actually read. A SHA that is neither the review SHA nor a later commit of the same PR is rejected with validation_error. reasoning is required too (#5364): a verdict whose reasoning cannot be audited later is not worth storing. Each write appends to the finding's judgment history; a re-judge from the same run at the same commit updates that run's own row rather than appending a duplicate. A FALSE verdict on an OPEN finding of severity MINOR or NIT (medium/low/info) also dismisses it as a false positive, with your reason as the note; on MAJOR or BLOCKER (high/critical) it stays a suggestion a person confirms. The result reports autoDismissed (and autoDismissReason when false). A dismissal is not reopened by this tool; a person can restore the finding from the pull-request page.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
prYes
actionNoAction taken on the finding (optional).
reasonNoOptional one-line summary. NOT a substitute for `reasoning` — it is kept only for continuity with pre-#5364 verdicts and is not used for calibration.
verdictYesTriage outcome: is the finding a real, actionable issue?
evidenceNoRepo-relative locations you read to form the verdict. Each file must exist at `judged_at_sha`; a file that does not is rejected when the repository is reachable. Optional, but a verdict that cites nothing is weaker evidence.
reasoningYesRequired reasoning chain. Each part must carry at least 40 characters of substance about the code. Run bookkeeping ("[A/B wave 3]", "[re-judge 2026-07-14]") is stripped before the length is measured and is never stored, so padding with it does not help. Placeholders ("n/a", "test", "looks fine") are rejected.
finding_idYesRequired exact recorded finding id returned by list_pr_findings. This is the only supported finding selector.
repositoryYes
judged_at_shaYesRequired full 40-character commit SHA of the code the verdict was formed at. Must be the SHA the finding was reviewed at or a later commit of the same PR — a SHA outside the PR, or one that precedes the review SHA, is rejected. Send the commit you actually read, not the branch tip.
organization_idYesThe organization that owns the pull request. Call list_organizations if you do not have it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a destructive write, and the description goes well beyond them: idempotent overwrite semantics, judgment-history append behavior, the SHA validation rule and its rejection mode, the auto-dismiss side effect on FALSE/MINOR findings vs. confirmed suggestions on MAJOR/BLOCKER, and that dismissals are not reopened. This is unusually rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and dense with useful detail, but it runs long (~300+ words) as a single block, with several clauses packed per sentence. Every sentence carries information, but the volume slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned fields (`autoDismissed`, `autoDismissReason`) and covering required inputs, validation failures, and side effects. For a 10-parameter nested-object tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, so the baseline is 3, but the description adds real meaning: it clarifies that finding_id is the only supported selector, that judged_at_sha must be the SHA actually read (not the branch tip), and warns that `reason` is not a substitute for `reasoning`. Most remaining detail is duplicated from the schema, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply a post-hoc triage verdict to a finding') and scopes the operation precisely. It names its companion tools (record_finding for creation, list_pr_findings for lookup) so an agent can distinguish it from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when it applies (the /reply-to-code-review flow), the prerequisite that only findings recorded into the data layer can receive a verdict, and the recovery path on not_found ('call list_pr_findings to refresh stale IDs and do not treat the write as successful'). It also states when a verdict does not reopen a dismissal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources