Your agent.
Our evidence.

Point any MCP-capable coding agent — Claude Code, Cursor, Windsurf, VS Code, Codex, Gemini CLI — at Snag's MCP server and it reads each bug's captured context straight from your workspace: replay, console, network, repro steps. Your agent opens the fix PR in your repo. Snag never touches your code.

Seven tools — six hand out evidence, one links your PR back to the ticket. None of them reach into your code.

One URL. Sign in once. Any client.

Add the server URL to your client and connect. MCP is included from the Capture plan up, and free for life for founding workspaces. Clients that support MCP authorization find Snag's sign-in on their own: they open a consent page in your browser, you sign in to Snag and approve, and the client keeps its own token. No token to copy, nothing shown once. Standard MCP over Streamable HTTP — no SDK, no webhook, nothing to host.

# Claude Code
claude mcp add --transport http snag https://mcp.dev.snag.ac/mcp

Claude Code lists the server as needing authentication until you run /mcp and pick snag — that opens Snag's consent page in your browser.

// ~/.cursor/mcp.json
{
  "mcpServers": {
    "snag": { "url": "https://mcp.dev.snag.ac/mcp" }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "snag": { "type": "http", "url": "https://mcp.dev.snag.ac/mcp" }
  }
}

Any client that supports MCP authorization — Cursor, VS Code and the MCP Inspector included — opens this same consent page the first time it connects: sign in to Snag, then approve.

No browser? Use a workspace token.

For CI, headless agents, or a client without MCP sign-in: generate a workspace token in Settings → Choose your agent → Bring your own, and send it as a bearer token in the Authorization header. Tokens start with mcp_.

# Claude Code
claude mcp add --transport http snag \
  https://mcp.dev.snag.ac/mcp \
  --header "Authorization: Bearer mcp_…"

Your real token comes from the dashboard — it's shown exactly once per generate.

// mcp.json
{
  "mcpServers": {
    "snag": {
      "url": "https://mcp.dev.snag.ac/mcp",
      "headers": { "Authorization": "Bearer mcp_…" }
    }
  }
}

Header-less client? The same URL accepts ?token=… instead.

Everything your agent needs. Nothing it doesn't.

A deliberately small surface: find a bug, get its evidence, link the fix back. Six of the seven tools only read, grounding the fix in what actually happened. The seventh writes exactly one thing — the URL of the PR your agent opened, onto the ticket it fixes.

The workspace's open, unresolved bug reports, newest first — the agent's worklist. Resolved tickets are filtered out so it never re-fixes what's done.

The full captured evidence for one bug — what the reporter saw, on which page, and what the browser was doing at the time. The tool description tells the agent to ground its fix in this evidence and never invent details that aren't there.

Five more, same shape: get_console_logs and get_network_requests for a bug's raw browser artifacts, get_bug_annotations for the reporter's marked-up screenshot, get_test_harness_analysis for whether your own tests can verify a fix — and post_pr_link, the one write, which posts your PR's URL back to the ticket.

Access that travels with the workspace.

Evidence out, never code in

Six of the seven tools only read. The seventh writes a single field back to Snag: the URL of the PR your agent opened. Branches, commits and the PR itself happen inside your own repo and infrastructure — nothing reaches in.

Entitlement, not just a token

Every call re-checks the workspace's plan, not just the token. Included from the Capture plan up — and free for life for founding workspaces. A downgraded workspace's token stops working within a minute.

Expiring evidence links

Raw artifact, replay, and video links are signed and expire after 15 minutes — long enough for the agent to read them, never a standing URL to your users' sessions.

Wire it up in two minutes.

Paste one snippet, approve Snag in your browser, and ask your agent to list open bugs. Prefer not to run your own? Snag's built-in agent does the whole loop.