MCP · Cursor · Claude Code · Codex

Your users find the bugs.
Your agent fixes them.

One script tag adds a Report a bug button to your app. Your coding agent gets the element the user pointed at, the error it threw, the failing request and the steps.

So fix SHOP-142 just works — in Cursor, Claude Code or Codex. No agent yet? Reports land in your inbox or tracker.

https://mcp.snagrelay.com/v1

Use the “Add to Cursor” button, or add this URL as a remote MCP server. Then click Allow.

  • Free plan, no card
  • Users install nothing
  • localhost → production
Example. A shopper clicks Apply coupon and the order total does not change. The picker outlines the button in red because it threw a TypeError right after the click. SnagRelay sends the button, the error, the coupon request and the steps. A coding agent reads the report over MCP, edits lib/coupons.ts to read the total from the new response shape, and marks the ticket fixed.

A shopper clicks Apply. The total doesn’t change.

shop.example/checkout

Checkout

Coupon

SAVE10Apply coupon
Total€128.00

Wool coat

€120.00

Gift wrap

€8.00

Designing or testing? Visual bug reporting →Shipping a React Native app? SnagRelay for mobile →Building client sites? WordPress plugin →

Cursor Claude Code Codex VS Code Next.js Lovable Bolt v0 Vite Linear GitHub Jira

The gap

Your IDE’s browser sees your session. The bug happened in someone else’s.

Your agent can read the repo, run tests and change code. But what reaches it from a real user is a sentence and a cropped screenshot.

Today · what arrives

From a shopper · via support

“The coupon thing doesn’t work?? Tried 3 times.”

IMG_4021.png · cropped

  • Which button?
  • Console?
  • Network?
  • Steps?
  • Browser?

Your agent

I can’t reproduce this locally. Which button? Was there a console error? What was in the cart?

Back to the user. Wait. Ask again. The bug sits.

With SnagRelay · same bug

SHOP-142 · “Apply does nothing”

Element
Checkout › “Apply coupon” button
Error
TypeError: reading ‘total’ · 180 ms after the click
Source
lib/coupons.ts:27
Request
POST /api/coupons/apply → 200
Steps
Open /checkout → enter SAVE10 → Apply
Replay
The 60 seconds before the report

Your agent

Reproduced. The API now nests the total under order. Fixing lib/coupons.ts:27.

One report. No follow-up questions.

How it works

Three steps.
Two aren’t yours.

You add one line once. Your users report. Your agent does the rest.

  1. 01 · you, once

    Add the snippet

    <script async
      src="https://app.snagrelay.com/widget/load/KEY">
    </script>

    Next.js, Vite, Lovable, Bolt, WordPress, plain HTML.

  2. 02 · your user

    They point at it

    SAVE10Apply couponErrorTypeError · “Apply coupon” button
    + replay, console, networkSend

    Whatever just failed is already outlined in red. No extension, no account — everything else is captured for them.

  3. 03 · your agent

    It fixes it

    › fix SHOP-142

    ↳ get_issue_context

    ↳ edit lib/coupons.ts

    ↳ mark_issue_resolved

    The agent pulls the evidence over MCP, proposes the change, and the reporter hears it’s fixed.

What your agent gets

Evidence, not screenshots.

Everything a senior engineer would ask for before touching the code — attached to every report, without the user doing anything.

ElementConsoleNetworkReproReplay
label      Checkout › “Apply coupon” button
component  <CouponForm/>
selector   form.checkout button[type=submit]
page       /checkout · 1280×800

errors tied to it
✕ TypeError · 180 ms after the click

Redacted in the browser: passwords, tokens, cookies, auth headers and emails never leave the page.

MCP server

Your agent takes it from here.

Type the ticket key. Your agent connects over MCP and calls the tools below. Sign in once in your browser, no token to copy.

  • get_issue_contextEverything about a bug, by key: SHOP-142, #88 or a URL
  • get_related_historySimilar past bugs and the changes that fixed them
  • find_issuesSearch and list open bugs for this project
  • get_issue_payloadOne full request or response body, only when it needs it
  • mark_issue_resolvedClose the bug and tell the person who reported it
Connect your agent →
Cursor · agent
  1. fix SHOP-142
  2. get_issue_contextSHOP-142
  3. The shopper clicked Checkout › “Apply coupon” button. POST /api/coupons/apply returned 200, then 180 ms later TypeError: reading ‘total’ at lib/coupons.ts:27. The response now nests the total under order.
  4. readlib/coupons.ts
  5. lib/coupons.ts- setTotal(res.cart.total)+ setTotal(res.order.total)
  6. Same steps now update the total to €115.20. Ready for review.
  7. mark_issue_resolvedSHOP-142 · ticket commented · reporter emailed

Close the loop

Every fix makes the next one faster.

SnagRelay keeps what your agent learned: which reports were the same bug, and which change fixed it.

  • 01Repeat reports are groupedFive users hitting the same bug are linked, so your agent sees one problem with five reporters. Nothing is closed for you.
  • 02Your agent sees what fixed it last timeget_related_history returns similar past bugs and the change that closed them.
  • 03The reporter hears backWhen the agent marks it resolved, the person who reported it gets a plain-language email.

Example

The coupon bug you reported is fixed

Northwind · now

Thanks, Maria — applying a coupon now updates your total correctly. It was live 40 minutes after you told us.

Reported 10:02

Agent 10:09

Fixed 10:42

Where it fits

Built for the bugs other people find.

Use your IDE’s browser for your own testing. Use SnagRelay for everyone else.

SnagRelayIDE browser / DevTools MCPExtension-based recorders
Who can reportAnyone, any deviceOnly you, in your IDEPeople with the extension
Catches a bug you weren’t there for
Full request + response bodiesVaries
Hands off to your agent (MCP)Most do
Remembers what fixed it before
Tells the reporter it’s fixed
Price for unlimited reportersFrom $0IncludedPer creator

Based on public documentation, October 2026.

Pricing

Priced per project. Never per reporter.

Every plan includes request bodies and MCP. Paid plans add projects, history and team features.

Free

1 project · 25 reports a month

$0forever

  • 1 project · 25 reports a month
  • Element, errors, console and network with bodies
  • 30-second replay
  • MCP for Cursor, Claude Code and Codex
  • SnagRelay inbox or 1 tracker
  • 7-day history
Start freeNo card needed

Solo

3 projects · unlimited reports

$12/ mo

$144 billed yearly

Start 14-day trial
  • Unlimited reporters and teammates
  • Screenshots and markup
  • 60-second replay and repro steps
  • Console and network with bodies
  • MCP for Cursor, Claude Code and Codex
  • 30-day history
Most picked

Studio

10 projects · unlimited reports

$23/ mo

$276 billed yearly

Start 14-day trial
  • Everything in Solo
  • Video recording
  • Report types
  • 90-day history

Agency

Unlimited projects · unlimited reports

$63/ mo

$756 billed yearly

Start 14-day trial
  • Everything in Studio
  • No SnagRelay badge
  • Two-way tracker sync
  • 3-minute replay
  • 1-year history

Every account starts with a 14-day trial of the full product, then stays on Free unless you upgrade. No card.

Compare plans and billing questions →

FAQ

Questions developers ask first.

How is this different from my IDE’s browser or Chrome DevTools MCP?
Those see your own session on your machine — great for testing what you just built. SnagRelay captures the session of whoever hit the bug: a user on their phone, a client on production, a tester on staging, hours before you looked. Use both.
Which agents does it work with?
Cursor, Claude Code, Codex and VS Code agent mode, plus any other client that supports remote MCP servers with browser sign-in. One server URL. Your agent opens a SnagRelay page, you click Allow, and there is no token to copy.
What exactly does my agent receive?
get_issue_context returns the user’s description, the element they pointed at with the errors tied to it, AI repro steps, console errors with file and line, failed requests with full request and response bodies, environment, a screenshot and a replay link. Bodies can be fetched one at a time with get_issue_payload to keep context small.
Do I need to change my code for the element picker?
No. The picker names elements from what is already on the page — the accessible name, the role and the section around it — and outlines anything that just failed. One script tag, no build plugin.
What about privacy?
Passwords, tokens, cookies, authorization headers and emails are redacted in the browser before anything is sent. Nothing leaves the page until someone presses Send. History is kept 7 days on Free and up to a year on paid plans.
Do I need a coding agent?
No. Reports land in the SnagRelay inbox or in your tracker, and you or your team fix them from the evidence. Connect an agent whenever you want it to read and fix reports for you.
Do I need Jira or Linear?
No. Bugs land in a simple SnagRelay inbox and your agent reads them from there. Connect Linear, GitHub Issues, Jira, GitLab, Trello or Azure DevOps whenever you want.
Does it work with Lovable, Bolt, v0 or plain Next.js?
Yes. It’s one script tag (or an npm package), so it works on any web app — localhost, preview deployments and production.

Ship it.
Let your users
find the bugs.

Free to start, no card. Set up in two minutes.