Let your AI coding agent verify its own work in a real browser before opening the PR.
The only MCP AI server with auto-tunneled localhost, write-only credentials, and full project control. 21 tools. Point it at http://localhost:3000 or any URL.
npx -y @debugg-ai/debugg-ai-mcp ยท works with Claude Desktop, Claude Code, Cursor, and any MCP client
Most browser MCPs are thin wrappers around a driver. This is the whole testing platform, built for AI coding agents.
Point the agent at http://localhost:3000 and it just works. A secure tunnel is created automatically. No ngrok, no port forwarding, no config.
Store a credential once and agents use it by role (like 'admin' or 'guest'). The raw password never comes back out of any tool, even when you rotate it.
Claude Desktop, Claude Code, Cursor, LangChain, or your own client over stdio. One API key, no SDK lock-in, no per-client setup.
Projects, environments, credentials, and run history are all first-class tools. Your agent can set up a new project, run a test, and inspect the result in one session.
If an agent goes sideways, call cancel_execution and the browser session stops cleanly. No burned tokens, no stuck processes.
Grab an API key at app.debugg.ai, npx the server, and go. No credit card, no trial clock, no seat minimums.
Most browser automation MCPs only reach public URLs. To test localhost, you manually set up ngrok, copy-paste tunnel URLs, and hope the agent doesn't echo them back into logs.
DebuggAI's MCP AI server creates the tunnel for you on every check_app_in_browser call, and the tunnel URL never leaks back to the agent.
# You run your dev server
$ npm run dev
# Listening on http://localhost:3000
# Agent calls check_app_in_browser
url: "http://localhost:3000"
description: "Sign up with a new email, confirm redirect to /onboarding"
โ Tunnel opened automatically
โ Remote browser reached your dev server
โ Agent signed up and was redirected
โ Status: pass ยท Screenshot captured
check_app_in_browserGive an AI agent eyes on a live website or app. The agent browses it, interacts with it, and tells you whether a given task or check passed.
description + url.| Name | Type | Required | Purpose |
|---|---|---|---|
| description | string | โ | Natural language. What to test or evaluate. |
| url | string | โ | Public URL or localhost (auto-tunneled) |
| environmentId | string | No | UUID of a saved environment |
| credentialId | string | No | UUID of a saved credential |
| credentialRole | string | No | Pick a credential by role (e.g. admin, guest) |
| username | string | No | Ephemeral login, not persisted server-side |
| password | string | No | Ephemeral login, not persisted, not logged |
| repoName | string | No | Override auto-detected git repo name |
Not just a browser. The whole testing platform as tools your agent can call.
Run an AI browser agent against your app. Navigates, interacts, and reports pass/fail with screenshots.
description, url (+ optional environmentId, credentialId, credentialRole, username, password, repoName)
You want an AI agent to test authenticated flows. You do not want the password showing up in a transcript, a prompt cache, or an error message.
DebuggAI stores credentials server-side. Agents reference them by UUID or role, so they never see the password itself.
Passwords go in, not out
The raw password never appears in any tool response, even when an agent rotates it.
Pick credentials by role
Pass credentialRole="admin" and the agent logs in without ever touching the credential directly.
Or skip the vault
Pass username + password directly for a one-off run. Used once, never stored.
// 1. Create the credential (password goes in)
create_credential({
environmentId: "env-abc-123",
label: "Admin test user",
username: "admin@example.com",
password: "supersecret",
role: "admin"
})
// โ { uuid: "cred-xyz", username, role }
// password? nope, never echoed
// 2. Agent runs a test by role
check_app_in_browser({
url: "http://localhost:3000",
description: "Log in and open /admin",
environmentId: "env-abc-123",
credentialRole: "admin"
})
// โ agent resolves the credential
// server-side, never sees the password
// 3. Rotate. Still no echo
update_credential({
uuid: "cred-xyz",
environmentId: "env-abc-123",
password: "new-supersecret"
})
// โ { uuid, username, role }. No passwordBrowser tests run async, so history and cancel are first-class tools. Your agents can look back at what failed, and you can pull the plug on a run that's going sideways.
Scroll back through every run your agents have made. Filter by status to find the failures.
See exactly what the agent did step by step, so you (or another agent) can reason about why a test failed.
Stop a runaway run before it burns more time or tokens. One call and the browser session closes cleanly.
An AI agent setting up a new DebuggAI project from scratch and running its first test. Every step is a tool call.
// Agent: discover a team and a GitHub-linked repo
const { teams } = await list_teams({ q: "acme" })
const { repos } = await list_repos({ q: "checkout-service" })
// Create the project
const project = await create_project({
name: "Checkout E2E",
platform: "web",
teamUuid: teams[0].uuid,
repoUuid: repos[0].uuid,
})
// Add a staging environment + admin credential
const env = await create_environment({
projectUuid: project.uuid,
name: "staging",
url: "https://staging.checkout.acme.dev",
})
await create_credential({
environmentId: env.uuid,
label: "Admin",
username: "admin@acme.dev",
password: process.env.ADMIN_PW, // goes in, never comes back out
role: "admin",
})
// Run a browser test by role, not by password
await check_app_in_browser({
url: "http://localhost:3000", // localhost auto-tunneled
description: "Add item to cart, apply coupon CART20, checkout, verify receipt page",
environmentId: env.uuid,
credentialRole: "admin",
})
// Later: inspect or cancel from history
const { executions } = await list_executions({ status: "running", limit: 5 })
if (executions[0].durationMs > 120_000) {
await cancel_execution({ uuid: executions[0].uuid })
}Spot-check these claims against the linked repos before relying on them. They're moving targets.
| Feature | DebuggAI MCP AI | playwright-mcp | puppeteer-mcp |
|---|---|---|---|
| Tool count | 21 | ~20 | ~10 |
| Localhost auto-tunneling | |||
| Saved credentials (passwords never returned) | |||
| Run history and mid-run cancel | |||
| Project and environment management | |||
| Managed remote browsers (no local Chrome) | |||
| Open source | Apache-2.0 | Apache-2.0 | Apache-2.0 |
Grab a free API key at app.debugg.ai, then wire up the MCP AI server in your client of choice.
DEBUGGAI_API_KEY=your_api_key npx -y @debugg-ai/debugg-ai-mcpDEBUGGAI_API_KEY=your_api_key
Repo, branch, and file context are auto-detected from the cwd. No DEBUGGAI_LOCAL_* boilerplate required.
Free API key. Zero config beyond one env var. Works with every MCP client you already have.
Made with ๐ฉธ, ๐ฆ, and ๐ญ in San Francisco