Skip to main content
Glama

UI Verify

Server Details

MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
uiverify/uiverify
GitHub Stars
18

Available Tools

9 tools
accept_buildAccept every changed story in a buildAInspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
buildIdNoResolve this exact build id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
branchYes
countsYes
statusYes
buildIdYes
aiReviewYes
prNumberYes
commitShaYes
createdAtYes
gateStatusYes
failedStoriesYes
changedStoriesYes
failedNextCursorYes
autoAcceptChangesYes
changedNextCursorYes

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses important side effects beyond the annotations: it advances each story's per-branch baseline, accepts stories with prior denied reviews, leaves failed stories unaffected, and returns the post-acceptance triage. This gives the agent a clear model of what changes and what does not.

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

Conciseness5/5

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

The description is well-structured and front-loaded: main action first, then usage condition, then behavioral side effects, then return behavior. Every sentence adds useful information and there is no filler.

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

Completeness5/5

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

For a mutation tool with annotations and an output schema, the description covers the key behavioral context: what gets accepted, which stories are affected, what happens to baselines, and what the response contains. No essential operational detail is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already explains each parameter. The description only restates the identifiers ('commitSha/prNumber/buildId') without adding new meaning such as precedence, mutual exclusivity, or default behavior when multiple are supplied.

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

Purpose5/5

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

The description states a specific verb and resource: 'Accept ALL changed stories in one build at once.' It also distinguishes itself from the sibling tool review_diff by explicitly calling itself 'the bulk form of review_diff=accept,' so an agent can correctly separate it from per-story review tools.

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

Usage Guidelines5/5

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

It gives an explicit usage condition: 'use it when you've decided the whole build's changes are intended.' It also names the relevant alternative (review_diff) and implies per-story review for non-bulk decisions, giving clear routing guidance.

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

get_buildGet what changed in a UI Verify buildA
Read-only
Inspect

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 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'). No image URLs here - call get_diff or render_diff_image for pixels.

ParametersJSON Schema
NameRequiredDescriptionDefault
buildIdNoResolve this exact build id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
branchYes
countsYes
statusYes
buildIdYes
aiReviewYes
prNumberYes
commitShaYes
createdAtYes
gateStatusYes
failedStoriesYes
changedStoriesYes
failedNextCursorYes
autoAcceptChangesYes
changedNextCursorYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses significant behavior: only the first 25 items are returned, cursors indicate pagination, changed stories are ordered likely-regressions-first, unchanged stories are deliberately omitted, failed stories distinguish render vs interaction errors, and error truncation is indicated. This is rich, accurate behavioral context.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and resolver rule, and every clause contributes meaningful guidance. It is long because it covers many response details and routing decisions, but some of the return-field enumeration overlaps with the existing output schema. Still, no content is wasted.

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

Completeness5/5

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

For a complex triage tool, the description covers resolution rules, response contents, pagination, ordering, error kinds, and explicit redirection to the correct sibling tools. Given the rich output schema and annotations, nothing essential is missing for an agent to select and invoke this tool correctly.

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

Parameters4/5

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

The schema already documents each parameter with 100% coverage, so the baseline is solid. The description adds the crucial constraint that exactly one resolver must be provided, which the schema does not enforce. It does not need to repeat individual parameter descriptions because the schema already handles them.

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

Purpose5/5

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

The description starts with a specific action ('Triage one build') and identifies the exact resource and resolvers (commitSha, prNumber, buildId). It clearly distinguishes this from the sibling pagination/listing tool by stating what this call does NOT return and pointing to list_build_stories, get_diff, and render_diff_image.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use guidance: use it for triaging one build and reviewing changed/failed stories; use list_build_stories for unchanged stories or pagination; use get_diff or render_diff_image for images. This makes tool selection unambiguous.

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

get_diffGet per-story diff detail with image URLsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
buildIdNoResolve this exact build id.
storyIdNoLimit to one story id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffsYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description matches that by describing a read-only detail query. It adds valuable behavioral context beyond annotations: URLs are presigned and time-limited, unchanged stories return a special shape with diffResultId null and changed false, and AI review fields are null when review did not run. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is dense and front-loaded, starting with the core purpose and resolution paths. It packs necessary usage, edge-case, alternative-tool, and AI-field behavior into a few sentences. The AI field enumeration is slightly long, though useful, which keeps it from a perfect score.

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

Completeness4/5

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

For a read-only tool with an output schema and four optional-looking parameters, the description is largely complete: it covers resolution paths, defaults, the main edge case, URL behavior, and the close sibling alternative. A minor gap is that it does not state what happens if no build identifier is supplied, even though the schema lists all parameters as optional.

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

Parameters4/5

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

The schema already covers 100% of parameters with brief descriptions, so the baseline is 3. The description adds meaning beyond that by explaining the default behavior of storyId (default to changed stories) and the unusual unchanged-story result semantics. It does not add much per-parameter syntax, but the added scope and edge-case semantics justify one point above baseline.

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

Purpose5/5

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

The description states a specific verb and resource ('Per-story diff detail for a build') and immediately clarifies the resolution paths (commitSha/prNumber/buildId). It also distinguishes itself from a close sibling by saying 'Use render_diff_image instead when you want the actual pixels inline for a vision model, not a URL.' This lets an agent separate get_diff from render_diff_image without opening schemas.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: get_diff is for diff metrics and URLs, and render_diff_image is the alternative when inline pixel data is needed. It also explains the default story scope, the optional storyId override, and the unchanged-story edge case, which is exactly the kind of usage context an agent needs.

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

get_pr_changesetGet what this PR does to the UI vs its base branchA
Read-only
Inspect

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. Requires the PR visual changeset feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
buildIdNoResolve this exact build id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
newYes
baseYes
countsYes
changedYes
removedYes
newNextCursorYes
changedNextCursorYes
removedNextCursorYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnlyHint=true; the description goes well beyond that by explaining the resolved-by semantics (commitSha/prNumber/buildId), the independent-of-review-state behavior, and especially the `removed` list which surfaces otherwise-invisible baseline deletions with lastBuildId context. It also notes the feature requirement and the absence of image URLs, both useful behavioral disclosures.

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

Conciseness4/5

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

The description is long but information-dense: every clause earns its place, and the most decision-relevant contrast (vs get_build, survives in-PR accepts) is front-loaded. It trails into a multi-item return-value inventory, which makes it slightly heavy, but that inventory includes behavioral caveats (removed stories carry lastBuildId) rather than mere schema repetition.

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

Completeness5/5

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

The description covers what the tool answers, how it differs from its closest sibling, what the response contains including pagination cursors, and how to get pixels elsewhere. With an output schema present, return-value detail is appropriately summarized. For a read-only changeset query, this is complete at the right level of detail.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that resolution can come from any of the three identifiers and that the result is 'resolved by commitSha/prNumber/buildId', tying the parameters to the same concept. It doesn't explain precedence among them, but the schema already documents each field adequately.

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

Purpose5/5

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

The description opens with a precise noun phrase and verb — 'cumulative this PR vs base visual changeset' — and immediately distinguishes it from get_build by the in-PR accept behavior. It names siblings and states exactly what it returns (base, counts, first page of stories, deleted stories with lastBuildId).

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

Usage Guidelines5/5

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

Explicitly contrasts with get_build ('unlike get_build...') and even explains the carve-out for mid-PR accepted stories, so an agent knows when to choose this tool over the alternative. It also tells the caller to page with list_pr_stories and fetch pixels with get_diff / render_diff_image, which are concrete routing instructions.

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

list_buildsList recent UI Verify buildsA
Read-only
Inspect

Recent UI Verify builds for your 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax builds to return (default 20).
branchNoOnly builds on this git branch.
statusNoOnly builds with this raw status.

Output Schema

ParametersJSON Schema
NameRequiredDescription
buildsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool as read-only, and the description adds useful behavioral context: results are newest-first rows containing only a gateStatus verdict, and the tool intentionally omits image URLs and per-story details. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

Three sentences, all information-dense and front-loaded with the core purpose before limitations and alternatives. Every sentence earns its place, and there is no redundant restating of the schema or title.

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

Completeness5/5

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

For a read-only list tool with an output schema present, the description covers what an agent needs: what the rows look like, how results are ordered, what is intentionally excluded, and which sibling tools to use for the excluded details. No critical call-time context is missing.

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

Parameters3/5

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

The input schema fully documents all three parameters (limit, branch, status) with descriptions and enumerations, so the schema carries the parameter-meaning burden. The description does not add additional parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb and resource ('List recent UI Verify builds'), specifies ordering ('newest first'), and defines the output scope ('one-line verdict'). It also differentiates itself from siblings by explicitly stating what it lacks ('no image URLs or per-story detail') and naming the alternatives for those details.

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

Usage Guidelines5/5

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

The description gives explicit usage direction: use this to find the build to inspect, then 'call get_build for the changed-story list, get_diff for images.' This directly routes the agent to the correct sibling tools and states the boundary of this tool's usefulness.

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

list_build_storiesPage through a build's stories by statusA
Read-only
Inspect

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); 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100).
cursorNoThe nextCursor from a prior page; omit for the first page.
statusYesWhich stories to page: changed, failed, or unchanged (baselined, didn't change this build).
buildIdNoResolve this exact build id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
storiesYes
nextCursorYes

TDQS

A5/5.0
Behavior5/5

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

The description discloses behavior far beyond the annotations: what each status returns, ordering for changed stories, cursor semantics with nextCursor, default/max limit, and the edge case that unchanged stories are only available after the build settles. This is rich, non-obvious behavior.

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

Conciseness5/5

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

The description is dense but every clause earns its place. It front-loads the purpose, then covers status behaviors, return shape, paging, limits, and a timing edge case without redundant filler.

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

Completeness5/5

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

The description is complete for a paginated read-only tool: it explains return shape, pagination, status-specific semantics, build resolution, and the important unsettled-build behavior. No significant gap remains for an agent to call it correctly.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds substantial meaning: it explains the exact meaning of each status value, how cursor should be passed back, how build resolution works via commitSha/prNumber/buildId, and the limit default. This goes well beyond the bare schema descriptions.

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

Purpose5/5

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

The description states a specific verb and resource: page through one build's stories filtered by status. It also distinguishes itself from get_build by noting it reads past get_build's first page and includes unchanged/passed stories that get_build only counts.

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

Usage Guidelines5/5

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

The description explicitly says when to use it: to read past get_build's first page or to browse unchanged/passed stories. It also gives follow-up guidance for retrieving images with get_diff or render_diff_image, helping the agent choose the correct tool chain.

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

list_pr_storiesPage through the PR-vs-base changeset by kindA
Read-only
Inspect

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). Requires the PR visual changeset feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich changeset stories to page: new (added), changed (vs base), or removed (deleted).
limitNoPage size (default 25, max 100).
cursorNoThe nextCursor from a prior page; omit for the first page.
buildIdNoResolve this exact build id.
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
storiesYes
nextCursorYes

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds meaningful behavior: exact semantics of new/changed/removed, that removed stories carry lastBuildId rather than review status/verdict, the cursor round-trip contract, and the default/max limit. No statement contradicts the annotations.

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

Conciseness5/5

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

The description is information-dense but every clause earns its place: pagination role, kind semantics, output shape, cursor handling, limit, and feature gate. It is front-loaded with the core action and routing hint before the detailed kind definitions.

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

Completeness5/5

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

For a 6-parameter paging tool, the description plus the provided schema and output schema cover resolution modes, pagination state, return shape, defaults, and prerequisites. An agent has what it needs to call the tool correctly and continue paging.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description goes beyond the schema by defining what each kind means (e.g., 'even if accepted mid-PR, with status=accepted') and how cursor pagination works. It does not fully remove ambiguity about whether exactly one of commitSha/prNumber/buildId must be supplied, which keeps it from a 5.

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

Purpose5/5

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

The description opens with a specific verb ('Page through'), a precise resource ('PR-vs-base changeset stories'), and a kind selector, then immediately ties it to the sibling tool: 'read past get_pr_changeset's first page'. Each kind value gets a distinct semantic definition, so an agent can tell this apart from get_pr_changeset and list_build_stories without opening schemas.

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

Usage Guidelines5/5

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

It explicitly names get_pr_changeset as the tool whose first-page result this continues, giving the when-condition ('read past ... first page'). It also states the prerequisite ('Requires the PR visual changeset feature'), which prevents calls in unsupported contexts.

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

render_diff_imageFetch the actual pixels of a story imageA
Read-only
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
whichNoFor 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.
buildIdNoResolve this exact build id.
storyIdNoWith a build selector: fetch THIS story's current image (works for unchanged stories).
prNumberNoResolve the latest build for this PR number.
commitShaNoResolve the build for this git commit SHA.
diffResultIdNoA CHANGED story's diff result id (from get_build/get_diff); pair with `which`.

TDQS

A5/5.0
Behavior5/5

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

Even though annotations already declare readOnlyHint=true, the description adds substantial behavioral context: output is inline base64, before_after crops to changed regions and stacks multiple crops, and the tool errors when an image genuinely doesn't exist. This goes well beyond the annotations and fully discloses the tool's runtime behavior.

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

Conciseness5/5

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

The description is long but every sentence earns its place; the tool genuinely has two distinct invocation modes and nuanced image-format behavior. It is front-loaded with the core purpose, then logically organized into the two addressing forms, with caveats placed in context.

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

Completeness5/5

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

For a tool with 6 optional parameters, two call forms, no output schema, and no nested objects, the description fully covers the invocation methods, image variants, error behavior, and how to get the required IDs. Nothing needed to call the tool correctly is missing.

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

Parameters5/5

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

Schema coverage is 100%, so the schema already documents each parameter. The description goes further by explaining the two valid parameter combinations, the meaning of each `which` value (including before_after's side-by-side crop behavior), and how to obtain diffResultId from get_build/get_diff. This transforms the flat parameter list into actionable usage knowledge.

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

Purpose5/5

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

The description states a specific verb and resource: fetch a story's image as an inline base64 image for vision-model consumption. It clearly distinguishes itself from get_diff by noting that get_diff returns URLs while this tool returns pixels, so an agent can tell them apart.

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

Usage Guidelines5/5

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

The description explicitly says when to use this tool (vision-model needs pixels), when NOT to use it (piped through raw curl, use get_diff's URLs), and gives two concrete addressing forms with step-by-step guidance. It also identifies the only way to view unchanged/passed story pixels, leaving no ambiguity about tool selection.

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

review_diffAccept, deny, or ignore one story's changeAInspect

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 your project key. Use after you've inspected the diff (e.g. with render_diff_image) and decided intended vs. regression.

ParametersJSON Schema
NameRequiredDescriptionDefault
decisionYes'accept' advances the baseline; 'deny' records a rejection; 'ignore' excludes the story from the gate.
diffResultIdYesThe diff result id from get_build or get_diff.

Output Schema

ParametersJSON Schema
NameRequiredDescription
decisionYes
diffResultIdYes

TDQS

A4.7/5.0
Behavior5/5

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

The description fully discloses the persistent side effects of each decision: accept changes the baseline so the next build is clean, deny records rejection without changing baseline, ignore permanently excludes the story from the gate while the snapshot keeps differing. It also notes attribution to the project key, which is useful context beyond the annotations.

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

Conciseness5/5

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

The description is information-dense but not bloated; it front-loads the core purpose and then expands each decision. Every sentence adds either behavioral clarity or workflow guidance, and the length is justified by the need to distinguish three decision outcomes.

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

Completeness5/5

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

For a two-parameter write operation with a fully documented schema and an output schema present, the description covers the workflow, side effects, parameter sourcing, and decision criteria. No critical operational detail is missing.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters already have descriptions. The description adds value by explaining the real-world consequences of each decision value and reinforcing that diffResultId comes from get_build/get_diff, but it does not introduce semantics the schema entirely lacks.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Record a review on a single diff result') and then defines each decision outcome ('accept' makes the candidate the new baseline, 'deny' records rejection, 'ignore' persists gate exclusion). The title and 'single diff result' wording distinguish it from build-level siblings like accept_build.

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

Usage Guidelines4/5

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

It explicitly says when to use the tool: 'Use after you've inspected the diff (e.g. with render_diff_image) and decided intended vs. regression.' It also gives a concrete use case for 'ignore' (intentional ongoing diffs like animation or live timestamp). It does not explicitly contrast with a sibling alternative like accept_build, so no exclusions are stated.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updates
    • First observedaccept_build
    • First observedget_build
    • First observedget_diff
    • First observedget_pr_changeset
    • First observedlist_build_stories
    • First observedlist_builds
    • First observedlist_pr_stories
    • First observedrender_diff_image
    • First observedreview_diff

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.7/5.0
Disambiguation4/5

Most tools target distinct resources and actions, and the descriptions carefully separate build triage from PR changesets. However, get_diff and render_diff_image both provide diff imagery (URLs vs inline), and accept_build overlaps with review_diff's accept mode, so one or two selections could be mis-picked without reading closely.

Naming Consistency5/5

All nine tools use a consistent snake_case verb_noun pattern: list_* for paginated listings, get_* for detail/triage, render_* for image output, and review_diff/accept_build for review actions. The naming convention is predictable and easy to reason about.

Tool Count5/5

Nine tools is well within the ideal scope for a visual-regression review server. Each tool maps to a distinct workflow step—finding builds, triaging results, paging stories, fetching images, and recording reviews—without redundant or bloated additions.

Completeness5/5

The tool surface covers the full UI-verification loop: discover builds, inspect gate verdicts, page through changed/failed/unchanged stories, fetch diff details and inline images, review individually or bulk-accept, and inspect PR-level visual changesets. No essential operation for the stated domain is missing.