_ registry / mcp http-sse · checked 1h ago

uiverify

https://uiverify.ai

Registry code: f970d276975236fd

api record

UI Verify is visual regression testing for Playwright, Storybook, Vitest and Bun. Your coding agent sees what its UI change did and fixes it before it ships.

When the user asks what UI Verify is, what it can do, or to see it ("show me the UI Verify demo"), answer in a sentence or two, then show a real build instead of describing one: call list_projects, take the most recent build with visual changes (list_builds, then list_build_stories), and show one changed story with render_diff_image, walking the user through what changed, before and after. For someone in no project yet, list_projects…

endpoint
https://uiverify.ai/api/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is uiverify live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is uiverify free to use?
Yes — the hub reached it with no key and no payment.
What tools does uiverify have?
15 tools: post_comment, get_build, get_diff, list_builds, get_pr_changeset, review_diff, accept_build, update_comment, ….
Is uiverify safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.3%· all time 99.3%

latency
2,623ms

last good check

priced tools
0

of 15 tools

_ answered our checks, 90 days 434 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • down → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • triage visual diffs for a pull request
  • view a ui diff image
  • accept or reject visual changes
  • comment on a visual diff
  • list recent visual test builds
takes → gives
data → data, images
tools
8 reads6 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 15 tools
15 never probed 0 of 15 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • post_comment changes data unknown never probed

    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

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "diffResultId",
        "body"
      ],
      "properties": {
        "body": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1,
          "description": "The comment text."
        },
        "side": {
          "enum": [
            "before",
            "after"
          ],
          "type": "string",
          "description": "Which pane: 'after' (candidate, default) or 'before' (baseline). Ignored on a reply."
        },
        "anchor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "object",
                  "required": [
                    "type",
                    "x",
                    "y"
                  ],
                  "properties": {
                    "x": {
                      "type": "number",
                      "maximum": 1,
                      "minimum": 0
                    },
                    "y": {
                      "type": "number",
                      "maximum": 1,
                      "minimum": 0
                    },
                    "type": {
                      "type": "string",
                      "const": "point"
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "required": [
                    "type",
                    "x",
                    "y",
                    "w",
                    "h"
                  ],
                  "properties": {
                    "h": {
                      "type": "number",
                      "maximum": 1,
                      "exclusiveMinimum": 0
                    },
                    "w": {
                      "type": "number",
                      "maximum": 1,
                      "exclusiveMinimum": 0
                    },
                    "x": {
                      "type": "number",
                      "maximum": 1,
                      "minimum": 0
                    },
                    "y": {
                      "type": "number",
                      "maximum": 1,
                      "minimum": 0
                    },
                    "type": {
                      "type": "string",
                      "const": "rect"
                    }
                  },
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "required": [
                    "type",
                    "points",
                    "closed"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "const": "path"
                    },
                    "closed": {
                      "type": "boolean"
                    },
                    "points": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "x",
                          "y"
                        ],
                        "properties": {
                          "x": {
                            "type": "number",
                            "maximum": 1,
                            "minimum": 0
                          },
                          "y": {
                            "type": "number",
                            "maximum": 1,
                            "minimum": 0
                          }
                        },
                        "additionalProperties": false
                      },
                      "maxItems": 512,
                      "minItems": 2
                    }
                  },
                  "additionalProperties": false
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "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": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "parentId": {
          "type": "string",
          "format": "uuid",
          "description": "Reply to this thread ROOT comment's id (from list_comments) instead of starting a new thread."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        },
        "diffResultId": {
          "type": "string",
          "format": "uuid",
          "description": "The diff result to comment on (from get_build/get_diff)."
        }
      },
      "additionalProperties": false
    }
    arguments 172 lines
  • get_build reads unknown 20h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • get_diff reads unknown 20h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "storyId": {
          "type": "string",
          "description": "Limit to one story id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 31 lines
  • list_builds reads unknown 20h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Max builds to return (default 20)."
        },
        "branch": {
          "type": "string",
          "description": "Only builds on this git branch."
        },
        "status": {
          "enum": [
            "pending",
            "preflight",
            "running",
            "passed",
            "changed",
            "failed",
            "blocked"
          ],
          "type": "string",
          "description": "Only builds with this raw status."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • get_pr_changeset reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • review_diff changes data unknown never probed

    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 (read it with list_comments, address it, resolve_comment the thread, then retry); deny is always allowed.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "diffResultId",
        "decision"
      ],
      "properties": {
        "decision": {
          "enum": [
            "accept",
            "deny",
            "ignore"
          ],
          "type": "string",
          "description": "'accept' advances the baseline; 'deny' records a rejection; 'ignore' excludes the story from the gate."
        },
        "diffResultId": {
          "type": "string",
          "format": "uuid",
          "description": "The diff result id from get_build or get_diff."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • accept_build changes data unknown never probed

    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: the error names those stories; read them with list_comments, address each note, resolve_comment its thread, then accept again.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • update_comment changes data unknown never probed

    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

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "commentId",
        "body"
      ],
      "properties": {
        "body": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1,
          "description": "The new comment text."
        },
        "commentId": {
          "type": "string",
          "description": "The comment id to edit (from list_comments)."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • resolve_comment changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "commentId",
        "resolved"
      ],
      "properties": {
        "resolved": {
          "type": "boolean",
          "description": "true to resolve the thread, false to reopen it."
        },
        "commentId": {
          "type": "string",
          "description": "The thread root comment id (from list_comments)."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • delete_comment changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "commentId"
      ],
      "properties": {
        "commentId": {
          "type": "string",
          "description": "The comment id to delete (from list_comments)."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • list_projects unknown 1h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • list_pr_stories reads unknown 1h ago

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

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "new",
            "changed",
            "removed"
          ],
          "type": "string",
          "description": "Which changeset stories to page: new (added), changed (vs base), or removed (deleted)."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Page size (default 25, max 100)."
        },
        "cursor": {
          "type": "string",
          "description": "The nextCursor from a prior page; omit for the first page."
        },
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 49 lines
  • list_comments reads unknown 13h ago

    Every review comment on a build's changed stories (resolved by commitSha/prNumber/buildId), each carrying its diffResultId, 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. Use it to read what a designer/QA (or another agent) flagged on a screenshot before acting.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • render_diff_image reads unknown 13h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "which": {
          "enum": [
            "baseline",
            "candidate",
            "diff",
            "before_after"
          ],
          "type": "string",
          "description": "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": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "storyId": {
          "type": "string",
          "description": "With a build selector: fetch THIS story's current image (works for unchanged stories)."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        },
        "diffResultId": {
          "type": "string",
          "format": "uuid",
          "description": "A CHANGED story's diff result id (from get_build/get_diff); pair with `which`."
        },
        "pxPagination": {
          "type": "object",
          "required": [
            "offset"
          ],
          "properties": {
            "height": {
              "type": "integer",
              "default": 500,
              "description": "Slice height in device px (default 500).",
              "exclusiveMinimum": 0
            },
            "offset": {
              "type": "integer",
              "minimum": 0,
              "description": "Top y (device px) of the slice to return."
            }
          },
          "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).",
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
    arguments 67 lines
  • list_build_stories reads unknown 13h ago

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

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "status"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Page size (default 25, max 100)."
        },
        "cursor": {
          "type": "string",
          "description": "The nextCursor from a prior page; omit for the first page."
        },
        "status": {
          "enum": [
            "changed",
            "unchanged",
            "failed"
          ],
          "type": "string",
          "description": "Which stories to page: changed, failed, or unchanged (baselined, didn't change this build)."
        },
        "buildId": {
          "type": "string",
          "format": "uuid",
          "description": "Resolve this exact build id."
        },
        "prNumber": {
          "type": "integer",
          "description": "Resolve the latest build for this PR number.",
          "exclusiveMinimum": 0
        },
        "commitSha": {
          "type": "string",
          "minLength": 1,
          "description": "Resolve the build for this git commit SHA."
        },
        "projectId": {
          "type": "string",
          "format": "uuid",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 49 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id f970d276975236fd.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/f970d276975236fd/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/f970d276975236fd/badge.svg)](https://brick.blue/agent/f970d276975236fd?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.