UI Verify
Server Details
UI Verify is visual regression testing built for coding agents. Connect the MCP server and your agent (Claude Code, Cursor, Codex) pulls a pull request's UI changes into the conversation, views each visual diff, reads the AI judge's verdict of regression vs intended change, and accepts the intended baselines - all over MCP.
- Status
- Healthy
- Uptime
- 99.9% over 65 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 15 tools
Most tools have clearly distinct roles: get_build (triage), get_diff (per-story URL detail), render_diff_image (inline pixels), get_pr_changeset (PR vs base), and list_build_stories (pagination) are carefully differentiated in their descriptions. The main overlap is accept_build vs review_diff='accept', plus multiple tools returning changed-story lists, but the bulk/single distinction and pagination split are explicit enough to avoid misselection.
All names are snake_case and follow a verb_noun pattern (get_build, list_projects, post_comment, delete_comment, update_comment, resolve_comment). Minor deviations exist: 'review_diff' is a nonstandard verb and 'render_diff_image' is a three-word noun chain, but overall the set is predictable and readable.
15 tools sits at the upper edge of the ideal 3-15 range for a rich visual-regression workflow. Each tool maps to a distinct operation (project/build/story browsing, diff inspection, comment CRUD, bulk vs single review), and none appear redundant or filler.
The surface covers the full review lifecycle: browsing projects/builds/stories, inspecting diffs and inline images, commenting (create/read/update/delete/resolve), and accepting at both diff and build granularity, plus PR-level changesets including removals. Minor gaps: no way to trigger a build or create a project, though those may be intentionally out of scope (CI-driven).
Available Tools
15 toolsaccept_buildAccept every changed story in a buildDestructiveInspect
Accept ALL changed stories in one build at once (resolved by commitSha/prNumber/buildId), advancing each story's per-branch baseline so the next build is clean. This is the bulk form of review_diff='accept' — use it when you've decided the whole build's changes are intended. It accepts every changed story, including stories that already have a prior denied review; failed stories are unaffected. Returns the build triage after accepting (first page of changed stories, each now showing decision='accepted'; page the rest with list_build_stories if changedNextCursor is set). Refused, with nothing accepted, while any changed story has an unresolved review comment, including one a person left on an earlier build of the branch: the error names those stories; read them with list_comments, address each note, resolve_comment its thread, then accept again.
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| branch | Yes | |
| counts | Yes | |
| status | Yes | |
| blocked | Yes | Why a blocked build was paused and what to do next; null for any other build. |
| buildId | Yes | |
| aiReview | Yes | |
| comments | No | Absent on UI Verify's demo project, whose review comments only its team sees. |
| prNumber | Yes | |
| commitSha | Yes | |
| createdAt | Yes | |
| gateStatus | Yes | |
| failedStories | Yes | |
| changedStories | Yes | |
| failedNextCursor | Yes | |
| autoAcceptChanges | Yes | |
| changedNextCursor | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
delete_commentDelete a commentDestructiveIdempotentInspect
Soft-delete a comment (get its id from list_comments). An agent can delete only agent-authored comments, never a human's. Deleting a thread root removes its replies too.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | The comment id to delete (from list_comments). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
get_buildGet what changed in a UI Verify buildRead-onlyIdempotentInspect
Triage one build, resolved by commitSha, prNumber, or buildId (exactly one). Returns the gate verdict and counts (total/changed/failed/unchanged), then the FIRST page (25) of the changed stories (story id, viewport, % pixels changed, review decision, the AI verdict aiVerdict=intended|regression + aiConfidence, and for a regression the judge's one-line aiFlagReason=what-looks-unintended, when AI review is on, and the story's own review-comment tally comments {total, unresolved}) and the first page of failed stories (failedStories[].kind is render when the story produced no frame, or interaction when it rendered and its play() assertion threw; failedStories[].error is the message's first line, errorTruncated marks the ones that carried more). When AI review ran, aiReview tallies how many changes look like regressions vs intended, and the changed list is ordered likely-regressions-first. changedNextCursor / failedNextCursor are non-null when there are more than 25: page the rest with list_build_stories. counts.unchanged is how many stories did NOT change and have a baseline - this triage call does NOT list them (keeps the response lean); call list_build_stories status=unchanged to browse them (e.g. to confirm a passed build's stories are 'identical to baseline'). comments is the build-wide review-comment tally {total, unresolved}: unresolved>0 means a designer/QA (or another agent) left an open note on a story - read it with list_comments BEFORE you accept. No image URLs here - call get_diff or render_diff_image for pixels. A blocked build carries blocked: relay its message (or, on the demo project, its headline and nextSteps) to your user; do not retry the build.
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| branch | Yes | |
| counts | Yes | |
| status | Yes | |
| blocked | Yes | Why a blocked build was paused and what to do next; null for any other build. |
| buildId | Yes | |
| aiReview | Yes | |
| comments | No | Absent on UI Verify's demo project, whose review comments only its team sees. |
| prNumber | Yes | |
| commitSha | Yes | |
| createdAt | Yes | |
| gateStatus | Yes | |
| failedStories | Yes | |
| changedStories | Yes | |
| failedNextCursor | Yes | |
| autoAcceptChanges | Yes | |
| changedNextCursor | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
get_diffGet per-story diff detail with image URLsRead-onlyIdempotentInspect
Per-story diff detail for a build (resolved by commitSha/prNumber/buildId). Returns diff metrics and presigned, time-limited URLs (download them to a file, or link them in a PR comment) for the baseline, candidate, and diff PNGs. Defaults to the changed stories; pass storyId for one specific story. When that storyId is an UNCHANGED story it returns its baseline (diffResultId null, changed false, the baseline URL as both baselineUrl and candidateUrl) - the story rendered identical to baseline. Use render_diff_image instead when you want the actual pixels inline for a vision model, not a URL. When AI review is on, each diff carries the judge's call: aiVerdict (intended|regression), aiConfidence, aiSummary (what changed), aiReasoning, and aiFlagReason; all null when AI review didn't run for it. Each diff also carries comments {total, unresolved} for THAT story - unresolved>0 means an open review note; read the thread with list_comments before accepting.
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Resolve this exact build id. | |
| storyId | No | Limit to one story id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| diffs | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
get_pr_changesetGet what this PR does to the UI vs its base branchRead-onlyIdempotentInspect
The cumulative 'this PR vs base' visual changeset (resolved by commitSha/prNumber/buildId) - what the whole PR does to the UI versus the branch it merges into, INDEPENDENT of what is left to review on the latest build. Unlike get_build (this commit vs the branch's own accepted baseline), this survives in-PR accepts: a story accepted mid-PR still shows under changed with status=accepted, so it answers 'what did this PR change' even after the gate reads clean. Returns base (the branch it merges into), counts {new,changed,removed,unchanged}, and the first page of new + changed + removed stories (storyId, title, name, kind, review status, aiVerdict). removed lists stories that HAD a baseline on the base branch but are gone from this PR's head (a deletion - otherwise invisible; each carries lastBuildId, the build that rendered its now-orphaned baseline). newNextCursor / changedNextCursor / removedNextCursor page the rest with list_pr_stories. No image URLs - fetch pixels by storyId with get_diff / render_diff_image.
| Name | Required | Description | Default |
|---|---|---|---|
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| new | Yes | |
| base | Yes | |
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| counts | Yes | |
| changed | Yes | |
| removed | Yes | |
| newNextCursor | Yes | |
| changedNextCursor | Yes | |
| removedNextCursor | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
list_buildsList recent UI Verify buildsRead-onlyIdempotentInspect
Recent UI Verify builds for one project, newest first. Each row is a one-line verdict (gateStatus: passed | changed | failed) for a commit/PR — use it to find the build to inspect. No image URLs or per-story detail here: call get_build for the changed-story list, get_diff for images. A blocked build carries blocked: relay its message (or, on the demo project, its headline and nextSteps) to your user; do not retry the build.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max builds to return (default 20). | |
| branch | No | Only builds on this git branch. | |
| status | No | Only builds with this raw status. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| builds | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
list_build_storiesPage through a build's stories by statusRead-onlyIdempotentInspect
Page through one build's stories filtered by status (resolved by commitSha/prNumber/buildId). Use it to read past get_build's first page, or to browse the unchanged/passed stories get_build only counts. status='changed' returns changed stories (same shape + order as get_build, regression-first, each with its comments {total, unresolved}; unresolved>0 means an open review note - read it with list_comments first); status='failed' returns failed stories; status='unchanged' returns the stories that did NOT change this build but have a baseline on this branch (storyId, viewport, browser) - fetch any of their images by storyId with get_diff or render_diff_image to confirm 'identical to baseline'. Returns { stories, nextCursor }: pass nextCursor back as cursor for the next page; null means no more. limit defaults to 25 (max 100). Unchanged is only available once the build has settled (an in-progress build has rendered nothing, so it returns an empty page).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25, max 100). | |
| cursor | No | The nextCursor from a prior page; omit for the first page. | |
| status | Yes | Which stories to page: changed, failed, or unchanged (baselined, didn't change this build). | |
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| stories | Yes | |
| nextCursor | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
list_commentsList the review comments on a build's diffs or on a branchRead-onlyIdempotentInspect
Review comments left on screens, each carrying its diffResultId, buildId/buildNumber and story (storyId, viewport, browser), author (human name or 'agent'), body, createdAt, and anchor - where on the candidate image it points: null (whole diff), {type:'point',x,y}, {type:'rect',x,y,w,h}, or {type:'path',points,closed}, all normalized 0..1 to the candidate image. Two ways to ask. By build (commitSha/prNumber/buildId): that build's own comments plus the open comments left on earlier builds of its branch (carried: true), because an open comment stays with its branch until someone resolves it. By branch: every open comment on that branch, whatever build it was left on. When you start or resume work on a git branch, call this with that branch (and projectId when you can reach several projects) and address each open comment from a person before you continue. A comment you left for the reviewer is omitted until a person replies in its thread; includeAgentNotes adds those.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Read every open comment on this git branch instead of resolving a build. | |
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. | |
| includeAgentNotes | No | With branch: also include open comments you (an agent) left that no person has replied to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
list_projectsList the UI Verify projects you can accessRead-onlyIdempotentInspect
Every UI Verify project you can access, across all the teams you are a member of, most recently built first. Each row carries the projectId to pass to list_builds, or to a commitSha/prNumber lookup, when you can access several projects, plus the team and project slugs, name, type (storybook | playwright | vitest | bun | screenshot), repo, and lastBuildAt. Calls that take a buildId, diffResultId, or commentId never need a projectId. When you aren't in any project yet, it lists UI Verify's demo project instead (demo: true): every read tool works on it, so you can show what UI Verify does on a real build, but nothing can be accepted or commented there. Every response about the demo carries a note saying so. When the list is empty, note says how to get a first project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | What to do next, present when you aren't in any project yet (the list is empty or the demo). |
| projects | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
list_pr_storiesPage through the PR-vs-base changeset by kindRead-onlyIdempotentInspect
Page through the PR-vs-base changeset stories of one kind (resolved by commitSha/prNumber/buildId) - use it to read past get_pr_changeset's first page. kind='new' returns stories the PR adds that the base branch has no baseline for; kind='changed' returns stories whose image differs from the base branch's accepted image (even if accepted mid-PR, with status=accepted); kind='removed' returns stories that HAD a baseline on the base branch but are gone from head (a deletion; each carries lastBuildId, not a review status or verdict). Returns { stories, nextCursor }: pass nextCursor back as cursor for the next page; null means no more. limit defaults to 25 (max 100).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which changeset stories to page: new (added), changed (vs base), or removed (deleted). | |
| limit | No | Page size (default 25, max 100). | |
| cursor | No | The nextCursor from a prior page; omit for the first page. | |
| buildId | No | Resolve this exact build id. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when this is UI Verify's demo project rather than one of yours; says how to set up your own. |
| stories | Yes | |
| nextCursor | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
post_commentComment on a build's diffInspect
Leave a review comment on one of a build's changed-story diffs (resolve the build by commitSha/prNumber/buildId, target the diff by diffResultId from get_build/get_diff). The comment is authored as the agent. Optionally anchor it to a spot on the candidate image with anchor: omit or null for a whole-diff comment, {type:'point',x,y} to pin a point, {type:'rect',x,y,w,h} for a box, or {type:'path',points:[{x,y},...],closed} for a shape - all coordinates 0..1 normalized to the candidate image. side picks the pane ('after' the candidate, default; 'before' the baseline). Pass parentId (a root comment id from list_comments) to REPLY in that thread instead - a reply inherits the root's side and carries no anchor, so anchor/side are ignored. A new root comment is refused when a newer build exists on the branch (comment on the latest build); replies stay allowed. Reference: https://uiverify.ai/docs/mcp-tools
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The comment text. | |
| side | No | Which pane: 'after' (candidate, default) or 'before' (baseline). Ignored on a reply. | |
| anchor | No | Where on the candidate image to pin it (0..1 normalized): omit/null = whole diff; {type:'point',x,y}; {type:'rect',x,y,w,h}; {type:'path',points,closed}. Ignored on a reply. | |
| buildId | No | Resolve this exact build id. | |
| parentId | No | Reply to this thread ROOT comment's id (from list_comments) instead of starting a new thread. | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. | |
| diffResultId | Yes | The diff result to comment on (from get_build/get_diff). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
render_diff_imageFetch the actual pixels of a story imageARead-onlyIdempotentInspect
Fetch a story's image as an INLINE image (base64 pixels, not a URL) so a vision model can look at it directly. Needs a native MCP client that renders image content; piped through raw curl it is useless (use get_diff's URLs there instead). Two ways to address it: (1) diffResultId + which for a CHANGED story - which is baseline|candidate|diff (the triptych) or before_after, the baseline and candidate SIDE BY SIDE (before on the left, after on the right) cropped to the changed region - and when a story changed in SEVERAL far-apart places, one such crop PER region stacked top to bottom, so a header-plus-footer change is two tight crops, not a page-tall image. before_after is usually what you want for a code change - it zooms to what moved instead of a full page. Get diffResultId from get_build (changedStories[].diffResultId) or get_diff. (2) a build selector (commitSha|prNumber|buildId) + storyId for ANY story's current image - the candidate if it changed this build, else its baseline. This second form is the only way to see an UNCHANGED/passed story's pixels (list them via list_build_stories status=unchanged), so you can confirm 'identical to baseline'. Errors if the image doesn't exist (a genuinely new story has no baseline, so no before_after either). When the story has unresolved review comments, a text note saying so comes with the image: read them with list_comments before you accept.
| Name | Required | Description | Default |
|---|---|---|---|
| which | No | For the diffResultId form: baseline|candidate|diff (one triptych image, default candidate), or before_after (baseline+candidate side by side, cropped to the change - one crop per changed region, stacked, when the change spans several places). Ignored for the storyId form. | |
| buildId | No | Resolve this exact build id. | |
| storyId | No | With a build selector: fetch THIS story's current image (works for unchanged stories). | |
| prNumber | No | Resolve the latest build for this PR number. | |
| commitSha | No | Resolve the build for this git commit SHA. | |
| projectId | No | The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project. | |
| diffResultId | No | A CHANGED story's diff result id (from get_build/get_diff); pair with `which`. | |
| pxPagination | No | Paginate a TALL image slice by slice instead of one unreadable image: return the `height` device px starting at y=`offset`, so a 5000px page is reviewed in readable slices. Omit for the whole image. Ignored for the before_after form (already cropped to the change). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/idempotent safety profile, and the description adds real operational context: it returns inline base64 requiring a rendering MCP client, it errors when no image exists (new stories have no baseline), and unresolved review comments attach a text note pointing at list_comments. None of this is derivable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the single most important fact (inline pixels, not a URL) before any schema talk, and essentially every sentence carries actionable information. The cost is a dense run-on paragraph with heavy capitalization that is harder to scan than a bulleted form, though there is no true filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with a nested pagination object and no output schema, the description covers both addressing modes, pagination rationale, error conditions, and the review-comment side effect. An agent has enough to select and invoke it without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by explaining cross-parameter semantics the schema cannot - that `which` is ignored for the storyId form, that pxPagination is ignored for before_after, and that projectId is only needed with multiple projects. It adds addressing-mode context rather than restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the exact return format: an inline base64 image, explicitly 'not a URL'. It distinguishes itself from sibling get_diff (whose URLs are the fallback in constrained clients) and from get_build/list_build_stories as sources of the ids it consumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use branching: form (1) diffResultId+which for changed stories, form (2) build selector+storyId for any story including unchanged ones, and calls out before_after as 'usually what you want for a code change'. It also names when-not (raw curl pipe is useless) and the alternative (get_diff's URLs).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_commentResolve or reopen a comment threadIdempotentInspect
Mark a comment thread resolved or reopen it (get the id from list_comments). Resolving stamps the thread ROOT, so pass a root comment's id - a reply id is a no-op. Any team writer may toggle this. A resolved comment stops showing on every build of its branch, and in every response's openReviewComments pointer.
| Name | Required | Description | Default |
|---|---|---|---|
| resolved | Yes | true to resolve the thread, false to reopen it. | |
| commentId | Yes | The thread root comment id (from list_comments). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| resolved | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
review_diffAccept, deny, or ignore one story's changeDestructiveInspect
Record a review on a single diff result (get diffResultId from get_build/get_diff). 'accept' makes the candidate the new baseline for that story on its branch, so the next build is clean; 'deny' records the rejection without changing the baseline; 'ignore' excludes the story from the gate persistently (the snapshot keeps differing on future builds but no longer flags the check) — use it for an intentional, ongoing diff like an animation or a live timestamp. This is the same accept/deny/ignore as the dashboard, attributed to the agent (and to you, when you logged in). Use after you've inspected the diff (e.g. with render_diff_image) and decided intended vs. regression. accept and ignore are refused while the story has an unresolved review comment, including one left on an earlier build of the branch (read it with list_comments, address it, resolve_comment the thread, then retry); deny is always allowed.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | 'accept' advances the baseline; 'deny' records a rejection; 'ignore' excludes the story from the gate. | |
| diffResultId | Yes | The diff result id from get_build or get_diff. |
Output Schema
| Name | Required | Description |
|---|---|---|
| decision | Yes | |
| diffResultId | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
update_commentEdit a comment's textDestructiveIdempotentInspect
Replace the body of a comment (get its id from list_comments). An agent can edit only agent-authored comments, never a human's. Reference: https://uiverify.ai/docs/mcp-tools
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The new comment text. | |
| commentId | Yes | The comment id to edit (from list_comments). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| openReviewComments | No | Present when open review comments are waiting on some branch of this project; read yours with list_comments. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
- Changed
accept_build1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
delete_comment1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
get_build1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
get_diff1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
get_pr_changeset1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
list_build_stories2 fields changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +} - changed
Output schema / properties / stories / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "aiClassification": { - "type": [ - "string", - "null" - ] - }, - "aiConfidence": { - "type": [ - "string", - "null" - ] - }, - "aiFlagReason": { - "type": [ - "string", - "null" - ] - }, - "aiIntroducedBy": { - "type": [ - "string", - "null" - ] - }, - "aiSummary": { - "type": [ - "string", - "null" - ] - }, - "aiVerdict": { - "type": [ - "string", - "null" - ] - }, - "browser": { - "type": "string" - }, - "changedPct": { - "type": [ - "number", - "null" - ] - }, - "comments": { - "additionalProperties": false, - "description": "Absent on UI Verify's demo project, whose review comments only its team sees.", - "properties": { - "total": { - "type": "number" - }, - "unresolved": { - "type": "number" - } - }, - "required": [ - "total", - "unresolved" - ], - "type": "object" - }, - "decision": { - "type": [ - "string", - "null" - ] - }, - "diffResultId": { - "format": "uuid", - "type": "string" - }, - "isNew": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "unstable": { - "type": "boolean" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "error": { - "type": "string" - }, - "errorTruncated": { - "type": "boolean" - }, - "kind": { - "enum": [ - "render", - "interaction" - ], - "type": "string" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "title", - "name", - "viewport", - "browser", - "error", - "errorTruncated", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "viewport", - "browser" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "aiClassification": { + "type": [ + "string", + "null" + ] + }, + "aiConfidence": { + "type": [ + "string", + "null" + ] + }, + "aiFlagReason": { + "type": [ + "string", + "null" + ] + }, + "aiIntroducedBy": { + "type": [ + "string", + "null" + ] + }, + "aiSummary": { + "type": [ + "string", + "null" + ] + }, + "aiVerdict": { + "type": [ + "string", + "null" + ] + }, + "browser": { + "type": "string" + }, + "changedPct": { + "type": [ + "number", + "null" + ] + }, + "comments": { + "additionalProperties": false, + "description": "Absent on UI Verify's demo project, whose review comments only its team sees.", + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" + }, + "decision": { + "type": [ + "string", + "null" + ] + }, + "diffResultId": { + "format": "uuid", + "type": "string" + }, + "isNew": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "unstable": { + "type": "boolean" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorTruncated": { + "type": "boolean" + }, + "kind": { + "enum": [ + "render", + "interaction" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "title", + "name", + "viewport", + "browser", + "error", + "errorTruncated", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "comments": { + "additionalProperties": false, + "description": "Absent on UI Verify's demo project, whose review comments only its team sees.", + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" + }, + "storyId": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "viewport", + "browser" + ], + "type": "object" + } +]
- Changed
list_builds1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
list_comments10 fields changed- added
Input schema / properties / branchAdded value: +{ + "description": "Read every open comment on this git branch instead of resolving a build.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / includeAgentNotesAdded value: +{ + "description": "With branch: also include open comments you (an agent) left that no person has replied to.", + "type": "boolean" +} - added
Output schema / properties / comments / items / properties / browserAdded value: +{ + "type": "string" +} - added
Output schema / properties / comments / items / properties / buildIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / comments / items / properties / buildNumberAdded value: +{ + "type": "number" +} - added
Output schema / properties / comments / items / properties / carriedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / comments / items / properties / storyIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / comments / items / properties / viewportAdded value: +{ + "type": "string" +} - changed
Output schema / properties / comments / items / requiredPrevious value: -[ - "diffResultId", - "id", - "authorType", - "authorName", - "side", - "parentId", - "anchor", - "body", - "createdAt", - "resolved" -]New value: +[ + "diffResultId", + "id", + "authorType", + "authorName", + "side", + "parentId", + "anchor", + "body", + "createdAt", + "resolved", + "buildId", + "buildNumber", + "storyId", + "viewport", + "browser", + "carried" +] - added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
list_pr_stories1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
list_projects1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
post_comment1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
resolve_comment1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
review_diff1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
- Changed
update_comment1 field changed- added
Output schema / properties / openReviewCommentsAdded value: +{ + "additionalProperties": false, + "description": "Present when open review comments are waiting on some branch of this project; read yours with list_comments.", + "properties": { + "branches": { + "items": { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "lastActivityAt": { + "type": "string" + }, + "open": { + "type": "number" + } + }, + "required": [ + "branch", + "open", + "lastActivityAt" + ], + "type": "object" + }, + "type": "array" + }, + "branchesTotal": { + "type": "number" + }, + "hint": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "branches", + "branchesTotal", + "projectId", + "hint" + ], + "type": "object" +}
3 tool updates
- Changed
accept_build2 fields changed- added
Output schema / properties / blockedAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "limit": { + "type": [ + "number", + "null" + ] + }, + "message": { + "type": "string" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "requested": { + "type": [ + "number", + "null" + ] + }, + "resetsAt": { + "type": [ + "string", + "null" + ] + }, + "resetsOn": { + "type": [ + "string", + "null" + ] + }, + "statusLine": { + "type": "string" + }, + "used": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine", + "used", + "limit", + "requested", + "resetsAt", + "resetsOn", + "message" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "statusLine": { + "type": "string" + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } + ], + "description": "Why a blocked build was paused and what to do next; null for any other build." +} - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "blocked", + "counts", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
get_build2 fields changed- added
Output schema / properties / blockedAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "limit": { + "type": [ + "number", + "null" + ] + }, + "message": { + "type": "string" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "requested": { + "type": [ + "number", + "null" + ] + }, + "resetsAt": { + "type": [ + "string", + "null" + ] + }, + "resetsOn": { + "type": [ + "string", + "null" + ] + }, + "statusLine": { + "type": "string" + }, + "used": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine", + "used", + "limit", + "requested", + "resetsAt", + "resetsOn", + "message" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "statusLine": { + "type": "string" + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } + ], + "description": "Why a blocked build was paused and what to do next; null for any other build." +} - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "blocked", + "counts", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
list_builds2 fields changed- added
Output schema / properties / builds / items / properties / blockedAdded value: +{ + "anyOf": [ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "limit": { + "type": [ + "number", + "null" + ] + }, + "message": { + "type": "string" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "requested": { + "type": [ + "number", + "null" + ] + }, + "resetsAt": { + "type": [ + "string", + "null" + ] + }, + "resetsOn": { + "type": [ + "string", + "null" + ] + }, + "statusLine": { + "type": "string" + }, + "used": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine", + "used", + "limit", + "requested", + "resetsAt", + "resetsOn", + "message" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "headline": { + "type": "string" + }, + "hints": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "no-default-branch-baseline", + "type": "string" + } + }, + "required": [ + "kind", + "branch" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "kind": { + "const": "build-exceeds-allowance", + "type": "string" + } + }, + "required": [ + "kind" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "nextSteps": { + "items": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "branch": { + "type": "string" + }, + "kind": { + "const": "run-default-branch", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "branch", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "callUrl": { + "type": "string" + }, + "email": { + "type": "string" + }, + "kind": { + "const": "contact", + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "kind", + "text", + "email", + "callUrl" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "reason": { + "enum": [ + "allowance", + "billing", + "unknown" + ], + "type": "string" + }, + "statusLine": { + "type": "string" + } + }, + "required": [ + "reason", + "headline", + "hints", + "nextSteps", + "statusLine" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } + ], + "description": "Why a blocked build was paused and what to do next; null for any other build." +} - changed
Output schema / properties / builds / items / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "blocked" +]
8 tool updates
- Changed
accept_build4 fields changed- added
Output schema / properties / changedStories / items / properties / comments / descriptionAdded value: +"Absent on UI Verify's demo project, whose review comments only its team sees." - changed
Output schema / properties / changedStories / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason", - "comments" -]New value: +[ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason" +] - added
Output schema / properties / comments / descriptionAdded value: +"Absent on UI Verify's demo project, whose review comments only its team sees." - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "comments", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "counts", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
get_build5 fields changed- added
Output schema / properties / changedStories / items / properties / comments / descriptionAdded value: +"Absent on UI Verify's demo project, whose review comments only its team sees." - changed
Output schema / properties / changedStories / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason", - "comments" -]New value: +[ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason" +] - added
Output schema / properties / comments / descriptionAdded value: +"Absent on UI Verify's demo project, whose review comments only its team sees." - added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "comments", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "counts", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
get_diff3 fields changed- added
Output schema / properties / diffs / items / properties / comments / descriptionAdded value: +"Absent on UI Verify's demo project, whose review comments only its team sees." - changed
Output schema / properties / diffs / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "viewport", - "browser", - "changed", - "decision", - "metrics", - "baselineUrl", - "candidateUrl", - "diffUrl", - "aiSummary", - "aiVerdict", - "aiConfidence", - "aiReasoning", - "aiFlagReason", - "comments" -]New value: +[ + "diffResultId", + "storyId", + "viewport", + "browser", + "changed", + "decision", + "metrics", + "baselineUrl", + "candidateUrl", + "diffUrl", + "aiSummary", + "aiVerdict", + "aiConfidence", + "aiReasoning", + "aiFlagReason" +] - added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +}
- Changed
get_pr_changeset1 field changed- added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +}
- Changed
list_build_stories2 fields changed- added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +} - changed
Output schema / properties / stories / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "aiClassification": { - "type": [ - "string", - "null" - ] - }, - "aiConfidence": { - "type": [ - "string", - "null" - ] - }, - "aiFlagReason": { - "type": [ - "string", - "null" - ] - }, - "aiIntroducedBy": { - "type": [ - "string", - "null" - ] - }, - "aiSummary": { - "type": [ - "string", - "null" - ] - }, - "aiVerdict": { - "type": [ - "string", - "null" - ] - }, - "browser": { - "type": "string" - }, - "changedPct": { - "type": [ - "number", - "null" - ] - }, - "comments": { - "additionalProperties": false, - "properties": { - "total": { - "type": "number" - }, - "unresolved": { - "type": "number" - } - }, - "required": [ - "total", - "unresolved" - ], - "type": "object" - }, - "decision": { - "type": [ - "string", - "null" - ] - }, - "diffResultId": { - "format": "uuid", - "type": "string" - }, - "isNew": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "unstable": { - "type": "boolean" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason", - "comments" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "error": { - "type": "string" - }, - "errorTruncated": { - "type": "boolean" - }, - "kind": { - "enum": [ - "render", - "interaction" - ], - "type": "string" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "title", - "name", - "viewport", - "browser", - "error", - "errorTruncated", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "viewport", - "browser" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "aiClassification": { + "type": [ + "string", + "null" + ] + }, + "aiConfidence": { + "type": [ + "string", + "null" + ] + }, + "aiFlagReason": { + "type": [ + "string", + "null" + ] + }, + "aiIntroducedBy": { + "type": [ + "string", + "null" + ] + }, + "aiSummary": { + "type": [ + "string", + "null" + ] + }, + "aiVerdict": { + "type": [ + "string", + "null" + ] + }, + "browser": { + "type": "string" + }, + "changedPct": { + "type": [ + "number", + "null" + ] + }, + "comments": { + "additionalProperties": false, + "description": "Absent on UI Verify's demo project, whose review comments only its team sees.", + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" + }, + "decision": { + "type": [ + "string", + "null" + ] + }, + "diffResultId": { + "format": "uuid", + "type": "string" + }, + "isNew": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "unstable": { + "type": "boolean" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorTruncated": { + "type": "boolean" + }, + "kind": { + "enum": [ + "render", + "interaction" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "title", + "name", + "viewport", + "browser", + "error", + "errorTruncated", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "viewport", + "browser" + ], + "type": "object" + } +]
- Changed
list_builds1 field changed- added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +}
- Changed
list_pr_stories1 field changed- added
Output schema / properties / noteAdded value: +{ + "description": "Present when this is UI Verify's demo project rather than one of yours; says how to set up your own.", + "type": "string" +}
- Changed
list_projects2 fields changed- changed
Output schema / properties / note / descriptionPrevious value: -"What to do next, present only when projects is empty."New value: +"What to do next, present when you aren't in any project yet (the list is empty or the demo)." - added
Output schema / properties / projects / items / properties / demoAdded value: +{ + "const": true, + "description": "UI Verify's read-only demo project, not one of yours.", + "type": "boolean" +}
1 tool update
- Changed
list_projects1 field changed- added
Output schema / properties / noteAdded value: +{ + "description": "What to do next, present only when projects is empty.", + "type": "string" +}
5 tool updates
- Changed
accept_build4 fields changed- removed
Output schema / properties / changedStories / items / properties / comments / properties / total / $refRemoved value: -"#/properties/comments/properties/total" - added
Output schema / properties / changedStories / items / properties / comments / properties / total / typeAdded value: +"number" - removed
Output schema / properties / changedStories / items / properties / comments / properties / unresolved / $refRemoved value: -"#/properties/comments/properties/unresolved" - added
Output schema / properties / changedStories / items / properties / comments / properties / unresolved / typeAdded value: +"number"
- Changed
get_build4 fields changed- removed
Output schema / properties / changedStories / items / properties / comments / properties / total / $refRemoved value: -"#/properties/comments/properties/total" - added
Output schema / properties / changedStories / items / properties / comments / properties / total / typeAdded value: +"number" - removed
Output schema / properties / changedStories / items / properties / comments / properties / unresolved / $refRemoved value: -"#/properties/comments/properties/unresolved" - added
Output schema / properties / changedStories / items / properties / comments / properties / unresolved / typeAdded value: +"number"
- Changed
get_pr_changeset5 fields changed- removed
Output schema / properties / changed / items / $refRemoved value: -"#/properties/new/items" - added
Output schema / properties / changed / items / additionalPropertiesAdded value: +false - added
Output schema / properties / changed / items / propertiesAdded value: +{ + "aiConfidence": { + "type": [ + "string", + "null" + ] + }, + "aiVerdict": { + "type": [ + "string", + "null" + ] + }, + "browsers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "enum": [ + "new", + "changed" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "enum": [ + "accepted", + "denied", + "ignored", + "pending" + ], + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "unstable": { + "type": "boolean" + }, + "viewports": { + "items": { + "type": "string" + }, + "type": "array" + } +} - added
Output schema / properties / changed / items / requiredAdded value: +[ + "storyId", + "title", + "name", + "kind", + "status", + "browsers", + "viewports", + "aiVerdict", + "aiConfidence", + "unstable" +] - added
Output schema / properties / changed / items / typeAdded value: +"object"
- Changed
list_comments1 field changed- changed
Output schema / properties / comments / items / properties / anchor / anyOfPrevious value: -[ - { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "type": { - "const": "point", - "type": "string" - }, - "x": { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - "y": { - "$ref": "#/properties/comments/items/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "type", - "x", - "y" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "h": { - "exclusiveMinimum": 0, - "maximum": 1, - "type": "number" - }, - "type": { - "const": "rect", - "type": "string" - }, - "w": { - "exclusiveMinimum": 0, - "maximum": 1, - "type": "number" - }, - "x": { - "$ref": "#/properties/comments/items/properties/anchor/anyOf/0/anyOf/0/properties/x" - }, - "y": { - "$ref": "#/properties/comments/items/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "type", - "x", - "y", - "w", - "h" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "closed": { - "type": "boolean" - }, - "points": { - "items": { - "additionalProperties": false, - "properties": { - "x": { - "$ref": "#/properties/comments/items/properties/anchor/anyOf/0/anyOf/0/properties/x" - }, - "y": { - "$ref": "#/properties/comments/items/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "x", - "y" - ], - "type": "object" - }, - "maxItems": 512, - "minItems": 2, - "type": "array" - }, - "type": { - "const": "path", - "type": "string" - } - }, - "required": [ - "type", - "points", - "closed" - ], - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "type": { + "const": "point", + "type": "string" + }, + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "type", + "x", + "y" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "h": { + "exclusiveMinimum": 0, + "maximum": 1, + "type": "number" + }, + "type": { + "const": "rect", + "type": "string" + }, + "w": { + "exclusiveMinimum": 0, + "maximum": 1, + "type": "number" + }, + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "type", + "x", + "y", + "w", + "h" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "closed": { + "type": "boolean" + }, + "points": { + "items": { + "additionalProperties": false, + "properties": { + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "maxItems": 512, + "minItems": 2, + "type": "array" + }, + "type": { + "const": "path", + "type": "string" + } + }, + "required": [ + "type", + "points", + "closed" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
post_comment1 field changed- changed
Input schema / properties / anchor / anyOfPrevious value: -[ - { - "anyOf": [ - { - "additionalProperties": false, - "properties": { - "type": { - "const": "point", - "type": "string" - }, - "x": { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - "y": { - "$ref": "#/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "type", - "x", - "y" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "h": { - "exclusiveMinimum": 0, - "maximum": 1, - "type": "number" - }, - "type": { - "const": "rect", - "type": "string" - }, - "w": { - "exclusiveMinimum": 0, - "maximum": 1, - "type": "number" - }, - "x": { - "$ref": "#/properties/anchor/anyOf/0/anyOf/0/properties/x" - }, - "y": { - "$ref": "#/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "type", - "x", - "y", - "w", - "h" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "closed": { - "type": "boolean" - }, - "points": { - "items": { - "additionalProperties": false, - "properties": { - "x": { - "$ref": "#/properties/anchor/anyOf/0/anyOf/0/properties/x" - }, - "y": { - "$ref": "#/properties/anchor/anyOf/0/anyOf/0/properties/x" - } - }, - "required": [ - "x", - "y" - ], - "type": "object" - }, - "maxItems": 512, - "minItems": 2, - "type": "array" - }, - "type": { - "const": "path", - "type": "string" - } - }, - "required": [ - "type", - "points", - "closed" - ], - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "type": { + "const": "point", + "type": "string" + }, + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "type", + "x", + "y" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "h": { + "exclusiveMinimum": 0, + "maximum": 1, + "type": "number" + }, + "type": { + "const": "rect", + "type": "string" + }, + "w": { + "exclusiveMinimum": 0, + "maximum": 1, + "type": "number" + }, + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "type", + "x", + "y", + "w", + "h" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "closed": { + "type": "boolean" + }, + "points": { + "items": { + "additionalProperties": false, + "properties": { + "x": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "y": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "maxItems": 512, + "minItems": 2, + "type": "array" + }, + "type": { + "const": "path", + "type": "string" + } + }, + "required": [ + "type", + "points", + "closed" + ], + "type": "object" + } + ] + }, + { + "type": "null" + } +]
11 tool updates
- Changed
accept_build1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
get_build1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
get_diff1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
get_pr_changeset1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
list_build_stories1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
list_builds1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
list_comments1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
list_pr_stories1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Added
list_projects - Changed
post_comment1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
- Changed
render_diff_image1 field changed- added
Input schema / properties / projectIdAdded value: +{ + "description": "The project to look in (a projectId from list_projects). Needed only when you can access several projects; a buildId already names its project.", + "format": "uuid", + "type": "string" +}
3 tool updates
- Changed
accept_build2 fields changed- added
Output schema / properties / changedStories / items / properties / commentsAdded value: +{ + "additionalProperties": false, + "properties": { + "total": { + "$ref": "#/properties/comments/properties/total" + }, + "unresolved": { + "$ref": "#/properties/comments/properties/unresolved" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" +} - changed
Output schema / properties / changedStories / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason" -]New value: +[ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason", + "comments" +]
- Changed
get_build2 fields changed- added
Output schema / properties / changedStories / items / properties / commentsAdded value: +{ + "additionalProperties": false, + "properties": { + "total": { + "$ref": "#/properties/comments/properties/total" + }, + "unresolved": { + "$ref": "#/properties/comments/properties/unresolved" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" +} - changed
Output schema / properties / changedStories / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason" -]New value: +[ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason", + "comments" +]
- Changed
list_build_stories1 field changed- changed
Output schema / properties / stories / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "aiClassification": { - "type": [ - "string", - "null" - ] - }, - "aiConfidence": { - "type": [ - "string", - "null" - ] - }, - "aiFlagReason": { - "type": [ - "string", - "null" - ] - }, - "aiIntroducedBy": { - "type": [ - "string", - "null" - ] - }, - "aiSummary": { - "type": [ - "string", - "null" - ] - }, - "aiVerdict": { - "type": [ - "string", - "null" - ] - }, - "browser": { - "type": "string" - }, - "changedPct": { - "type": [ - "number", - "null" - ] - }, - "decision": { - "type": [ - "string", - "null" - ] - }, - "diffResultId": { - "format": "uuid", - "type": "string" - }, - "isNew": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "unstable": { - "type": "boolean" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "diffResultId", - "storyId", - "title", - "name", - "viewport", - "browser", - "changedPct", - "decision", - "isNew", - "unstable", - "aiVerdict", - "aiClassification", - "aiIntroducedBy", - "aiConfidence", - "aiSummary", - "aiFlagReason" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "error": { - "type": "string" - }, - "errorTruncated": { - "type": "boolean" - }, - "kind": { - "enum": [ - "render", - "interaction" - ], - "type": "string" - }, - "name": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "title": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "title", - "name", - "viewport", - "browser", - "error", - "errorTruncated", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "browser": { - "type": "string" - }, - "storyId": { - "type": "string" - }, - "viewport": { - "type": "string" - } - }, - "required": [ - "storyId", - "viewport", - "browser" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "aiClassification": { + "type": [ + "string", + "null" + ] + }, + "aiConfidence": { + "type": [ + "string", + "null" + ] + }, + "aiFlagReason": { + "type": [ + "string", + "null" + ] + }, + "aiIntroducedBy": { + "type": [ + "string", + "null" + ] + }, + "aiSummary": { + "type": [ + "string", + "null" + ] + }, + "aiVerdict": { + "type": [ + "string", + "null" + ] + }, + "browser": { + "type": "string" + }, + "changedPct": { + "type": [ + "number", + "null" + ] + }, + "comments": { + "additionalProperties": false, + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" + }, + "decision": { + "type": [ + "string", + "null" + ] + }, + "diffResultId": { + "format": "uuid", + "type": "string" + }, + "isNew": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "unstable": { + "type": "boolean" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "diffResultId", + "storyId", + "title", + "name", + "viewport", + "browser", + "changedPct", + "decision", + "isNew", + "unstable", + "aiVerdict", + "aiClassification", + "aiIntroducedBy", + "aiConfidence", + "aiSummary", + "aiFlagReason", + "comments" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "error": { + "type": "string" + }, + "errorTruncated": { + "type": "boolean" + }, + "kind": { + "enum": [ + "render", + "interaction" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "title", + "name", + "viewport", + "browser", + "error", + "errorTruncated", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "browser": { + "type": "string" + }, + "storyId": { + "type": "string" + }, + "viewport": { + "type": "string" + } + }, + "required": [ + "storyId", + "viewport", + "browser" + ], + "type": "object" + } +]
1 tool update
- Changed
render_diff_image1 field changed- added
Input schema / properties / pxPaginationAdded value: +{ + "additionalProperties": false, + "description": "Paginate a TALL image slice by slice instead of one unreadable image: return the `height` device px starting at y=`offset`, so a 5000px page is reviewed in readable slices. Omit for the whole image. Ignored for the before_after form (already cropped to the change).", + "properties": { + "height": { + "default": 500, + "description": "Slice height in device px (default 500).", + "exclusiveMinimum": 0, + "type": "integer" + }, + "offset": { + "description": "Top y (device px) of the slice to return.", + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "offset" + ], + "type": "object" +}
3 tool updates
- Changed
accept_build2 fields changed- added
Output schema / properties / commentsAdded value: +{ + "additionalProperties": false, + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "counts", + "comments", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
get_build2 fields changed- added
Output schema / properties / commentsAdded value: +{ + "additionalProperties": false, + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "buildId", - "commitSha", - "branch", - "prNumber", - "status", - "gateStatus", - "autoAcceptChanges", - "createdAt", - "counts", - "aiReview", - "changedStories", - "changedNextCursor", - "failedStories", - "failedNextCursor" -]New value: +[ + "buildId", + "commitSha", + "branch", + "prNumber", + "status", + "gateStatus", + "autoAcceptChanges", + "createdAt", + "counts", + "comments", + "aiReview", + "changedStories", + "changedNextCursor", + "failedStories", + "failedNextCursor" +]
- Changed
get_diff2 fields changed- added
Output schema / properties / diffs / items / properties / commentsAdded value: +{ + "additionalProperties": false, + "properties": { + "total": { + "type": "number" + }, + "unresolved": { + "type": "number" + } + }, + "required": [ + "total", + "unresolved" + ], + "type": "object" +} - changed
Output schema / properties / diffs / items / requiredPrevious value: -[ - "diffResultId", - "storyId", - "viewport", - "browser", - "changed", - "decision", - "metrics", - "baselineUrl", - "candidateUrl", - "diffUrl", - "aiSummary", - "aiVerdict", - "aiConfidence", - "aiReasoning", - "aiFlagReason" -]New value: +[ + "diffResultId", + "storyId", + "viewport", + "browser", + "changed", + "decision", + "metrics", + "baselineUrl", + "candidateUrl", + "diffUrl", + "aiSummary", + "aiVerdict", + "aiConfidence", + "aiReasoning", + "aiFlagReason", + "comments" +]
4 tool updates
- Added
delete_comment - Added
post_comment - Added
resolve_comment - Added
update_comment
1 tool update
- Added
list_comments
1 tool update
- Removed
get_change_attribution
1 tool update
- Changed
get_change_attribution3 fields changed- added
Output schema / properties / stories / items / properties / approxReasonAdded value: +{ + "anyOf": [ + { + "enum": [ + "no-graph", + "global-change", + "too-large", + "github-error", + "unexplained" + ], + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / stories / items / properties / narrowedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / stories / items / requiredPrevious value: -[ - "storyId", - "base", - "truncated", - "partial", - "refs" -]New value: +[ + "storyId", + "base", + "truncated", + "partial", + "narrowed", + "approxReason", + "refs" +]
1 tool update
- Added
get_change_attribution
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.