JUHE API Marketplace
debugg-ai avatar
MCP Server

Debugg AI MCP

Debugg AI MCP

78
GitHub Stars
6/25/2026
Last Updated
MCP Server Configuration
1{
2 "name": "debugg-ai",
3 "command": "npx",
4 "args": [
5 "-y",
6 "@debugg-ai/debugg-ai-mcp"
7 ],
8 "env": {
9 "DEBUGGAI_API_KEY": "your_api_key_here"
10 }
11}
JSON11 lines
  1. Home
  2. MCP Servers
  3. debugg-ai-mcp

README Documentation

Debugg AI — MCP Server

AI-powered browser testing via the Model Context Protocol. Point it at any URL (or localhost) and describe what to test — an AI agent browses your app and returns pass/fail with screenshots.

Debugg AI MCP server

Setup

Requires Node.js 20.20.0 or later (transitive requirement from posthog-node@^5.26.0).

Get an API key at debugg.ai, then add to your MCP client config:

{
  "mcpServers": {
    "debugg-ai": {
      "command": "npx",
      "args": ["-y", "@debugg-ai/debugg-ai-mcp"],
      "env": {
        "DEBUGGAI_API_KEY": "your_api_key_here"
      }
    }
  }
}

Or with Docker:

docker run -i --rm --init -e DEBUGGAI_API_KEY=your_api_key quinnosha/debugg-ai-mcp

Tools

The server exposes 8 tools: three Browser tools plus one action-based tool per managed entity. The headline tools are check_app_in_browser (full AI agent) and probe_page (lightweight no-LLM page probe). The rest — project, environment, test_suite, test_case, executions — each take an action discriminator (e.g. {"action":"list"}) that selects the operation. Destructive delete actions require confirmation (an elicitation prompt where supported, otherwise confirm: true).

Browser

check_app_in_browser

Runs an AI browser agent against your app. The agent navigates, interacts, and reports back with screenshots. Localhost URLs are auto-tunneled via ngrok.

ParameterTypeDescription
descriptionstring requiredWhat to test (natural language)
urlstring requiredTarget URL — http://localhost:3000 is auto-tunneled
environmentIdstringUUID of a specific environment
credentialIdstringUUID of a specific credential
credentialRolestringPick a credential by role (e.g. admin, guest)
usernamestringUsername for login (ephemeral — not persisted)
passwordstringPassword for login (ephemeral — not persisted)
repoNamestringOverride auto-detected git repo name (e.g. my-org/my-repo)

One focused check per call. The agent has a ~25-step internal budget; split broader suites across multiple calls.

Every successful run returns a browserSession block alongside the screenshot — presigned S3 URLs for the captured HAR (full network trace) and console log (every JS console message). Use them to detect refetch loops, hydration errors, and other runtime issues that pass type-checks and unit tests:

"browserSession": {
  "harUrl": "https://...session_18139.har?X-Amz-...",
  "consoleLogUrl": "https://...session_18139_console.json?X-Amz-...",
  "recordingUrl": "https://...session_18139_recording.webm?X-Amz-...",
  "harStatus": "downloaded",
  "consoleLogStatus": "downloaded",
  "harRedactionStatus": "redacted",
  "consoleLogRedactionStatus": "redacted"
}

URLs are short-lived presigned S3 — refetch the parent execution via executions {action:"get", uuid} to renew. harStatus / consoleLogStatus disambiguate 'downloaded' (URL fetchable), 'not_available' (page emitted nothing), 'failed' (capture broke). On a fresh run the URLs are commonly null because capture uploads async after the agent finishes — poll executions {action:"get", uuid: executionId} until status reaches 'downloaded'. Authorization / Cookie / token/secret/api_key headers are scrubbed server-side before the artifacts are persisted.

trigger_crawl

Fires a server-side browser-agent crawl to populate the project's knowledge graph. Localhost URLs tunnel automatically. Returns {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} with knowledgeGraph.imported === true on successful ingestion. The browserSession block (HAR + console-log URLs, same shape as above) is also present on completed crawls.

probe_page

Lightweight no-LLM batch page probe. Pass 1-20 URLs; each navigates, waits for load, and returns rendered state — screenshot + page metadata + structured console errors + network summary. No agent loop, no LLM cost, no scenario assertions. Use it for "did I just break /settings?", multi-route smoke after a refactor, CI per-PR sweeps, and quick is-it-up checks where check_app_in_browser's 60-150s agent loop is overkill.

ParameterTypeDescription
targetsarray required1-20 entries: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring requiredPublic URL or localhost (auto-tunneled)
targets[].waitForLoadStateenum'load' (default) / 'domcontentloaded' / 'networkidle'
targets[].waitForSelectorstringOptional CSS selector to wait for after navigation
targets[].timeoutMsnumberPer-URL timeout, 1000-30000 (default 10000)
includeHtmlbooleanReturn raw HTML in each result (default false)
captureScreenshotsbooleanReturn one PNG per target (default true)

The whole batch shares a single backend execution + browser session + tunnel — 5 URLs in one call is dramatically faster than 5 parallel single-URL calls. Per-URL error field preserves batch resilience: a single failed target doesn't fail the others.

networkSummary aggregation key is origin + pathname — refetch loops (?n=0..4 repeatedly hitting the same endpoint) collapse into a single entry with the count, so /api/poll showing up with count: 47 is the actionable "infinite refetch loop" signal users originally asked for.

Performance budget: <10s for 1 URL, <25s for 20. Localhost dead-port returns LocalServerUnreachable in <2s without burning a workflow execution.

project

ActionParamsResult
get{uuid}Curated project detail
list{q?, page?, pageSize?}Paginated summaries
create{name, platform, (teamUuid|teamName), (repoUuid|repoName)}Created project

Team and repo resolve by either uuid or name (case-insensitive exact match; NotFound if none, AmbiguousMatch if multiple). There is no update/delete — rename or delete a project from the DebuggAI web app.

environment

ActionParamsResult
get{uuid, projectUuid?}Env with credentials inlined (passwords never returned)
list{projectUuid?, q?, page?, pageSize?}Paginated envs, each with a credentials array
create{name, url, description?, projectUuid?, credentials?}Created env (optionally seeds credentials)
update{uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?}Patched env; credential ops run remove → update → add
delete{uuid, projectUuid?, confirm?}Deletes env (cascades credentials) — requires confirmation

projectUuid auto-resolves from the git repo when omitted. Per-cred failures surface in credentialWarnings[] without blocking the env op.

test_suite

ActionParamsResult
list{projectUuid|projectName, search?, page?, pageSize?}Paginated suites with status + pass rate
create{name, description, projectUuid|projectName}Created suite
run{suiteUuid|(suiteName+project), targetUrl?}Triggers all tests async
results{suiteUuid|(suiteName+project)}Suite + per-test outcomes
delete{suiteUuid|(suiteName+project), confirm?}Soft-delete — requires confirmation

test_case

ActionParamsResult
create{name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?}Created test case (not auto-run)
update{testUuid, name?, description?, agentTaskDescription?}Patched test case
delete{testUuid, confirm?}Soft-delete — requires confirmation

executions

ActionParamsResult
get{uuid}Full detail (nodeExecutions + state + errorInfo) + screenshot/gif artifacts
list{status?, projectUuid?, page?, pageSize?}Paginated summaries

404 from the backend surfaces as isError: true with {error: 'NotFound', message, uuid}. Credentials are always returned without passwords.

Pagination

Every filter-mode response is paginated. Response shape:

{
  "filter": { "...echoed query params..." },
  "pageInfo": { "page": 1, "pageSize": 20, "totalCount": 47, "totalPages": 3, "hasMore": true },
  "<items>": [ ... ]
}

Pass optional page (1-indexed, default 1) and pageSize (default 20, max 200; oversized values are clamped). No response is ever silently truncated.

Resources

Alongside tools, the server exposes the read-only entities as MCP resources so clients can browse and @-mention them as context:

URIWhat
debugg-ai://projectsAll projects (first page)
debugg-ai://environmentsEnvironments for the auto-detected project
debugg-ai://executionsRecent executions (first page)
debugg-ai://project/{uuid}One project, full detail
debugg-ai://environment/{uuid}One environment (credentials inline, passwords redacted)
debugg-ai://execution/{uuid}One execution, full node detail + artifact links

Reads dispatch to the same handlers as the project / environment / executions tools, so the data and auth are identical. Resources are additive — clients without resource support keep using the tools.

Security invariants

  • Passwords are write-only. They never appear in any response body from any tool.
  • Tunnel URLs (*.ngrok.debugg.ai) are stripped from all browser-agent responses, including agent-authored text.
  • 404s from the backend surface as isError: true with {error: 'NotFound', ...}, never as thrown exceptions.
  • Missing DEBUGGAI_API_KEY surfaces as a structured tool error on first invocation — the server still registers and lists tools normally.

Migration to v3.0.0 (action-based tools)

v3 consolidated the 20 per-verb tools into 8 action-based tools. Old tool → new tool {action}:

RemovedReplacement
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_projectDropped — use the DebuggAI web app
search_environmentsenvironment {action:"get"} / {action:"list"}
create_environment / update_environment / delete_environmentenvironment {action:"create"|"update"|"delete"}
create_test_suite / search_test_suites / run_test_suite / get_test_suite_results / delete_test_suitetest_suite {action:"create"|"list"|"run"|"results"|"delete"}
create_test_case / update_test_case / delete_test_casetest_case {action:"create"|"update"|"delete"}
search_executionsexecutions {action:"get"|"list"}
trigger_crawl headless paramDropped — always headless

delete actions now require confirmation (elicitation prompt, or confirm: true). Clients pick up the new surface on MCP restart.

Migration from v1.x (breaking change in v2.0.0)

v2 collapsed a 22-tool surface to 11. Old-tool → new-tool mapping:

RemovedReplacement
list_projects, get_projectsearch_projects (uuid mode vs filter mode)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — credentials inline on each env
create_credentialcreate_environment({credentials: [...]}) seed, or update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — name resolution with ambiguity handling
list_executions, get_executionsearch_executions
cancel_executionDropped — backend spin-down is automatic

Response-shape changes: the bare count field on list responses is gone — use pageInfo.totalCount.

Configuration

Env varRequiredPurpose
DEBUGGAI_API_KEYyesBackend API key. Aliases: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URLnoBackend base URL. Defaults to https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPEnotoken (default) or bearer.
LOG_LEVELnoerror / warn / info (default) / debug.
POSTHOG_API_KEYnoOverride the embedded telemetry project key (e.g. private fork).
DEBUGGAI_TELEMETRY_DISABLEDnoSet to 1 / true / yes / on to disable telemetry entirely.
DEBUGGAI_API_KEY=your_api_key

Remote / HTTP transport (optional)

By default the server speaks stdio (local npx). It can instead run as a hosted, multi-user remote MCP over stateless Streamable HTTP + OAuth:

DEBUGGAI_MCP_TRANSPORT=http PORT=3000 DEBUGGAI_TOKEN_TYPE=bearer npx -y @debugg-ai/debugg-ai-mcp@latest

It is an OAuth Resource Server: every POST /mcp needs Authorization: Bearer <token>; missing/invalid tokens get a 401 with a WWW-Authenticate pointing at the RFC 9728 metadata, and clients run the OAuth flow against the advertised authorization server. The bearer is request-scoped — api.debugg.ai validates it.

EndpointPurpose
POST /mcpMCP Streamable HTTP (bearer-protected)
GET /.well-known/oauth-protected-resourceRFC 9728 metadata (authorization server discovery)
GET /healthLoad-balancer / ECS health check
Env varDefaultPurpose
DEBUGGAI_MCP_TRANSPORTstdioSet to http for the remote transport
PORT3000HTTP listen port
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.aiThis server's public resource URL (RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.aiAuthorization server advertised to clients
DEBUGGAI_TOKEN_TYPEtokenSet to bearer so OAuth tokens forward as Authorization: Bearer

stdio installs need none of these.

Telemetry

The MCP server ships with telemetry enabled by default — an embedded write-only PostHog project key (phc_*) so the team can observe cache hit rates, poll cadence, tunnel reliability, and other operational metrics across the install base. Captured events:

EventWhen
tool.executed / tool.failedPer tool call
workflow.executedPer browser-agent execution (carries pollCount, durationMs, finalIntervalMs)
tunnel.provisioned / tunnel.provision_retry / tunnel.stoppedPer tunnel lifecycle event
template.lookup / project.lookupCache hit/miss with durationMs on cold-call

Privacy posture:

  • The distinct ID is SHA-256(api_key).slice(0, 16) — never the raw key, no PII.
  • phc_* keys are write-only by PostHog convention; safe to embed in source.
  • Set DEBUGGAI_TELEMETRY_DISABLED=1 to opt out entirely (resolves to a no-op provider; no events leave the process).

The active mode is logged at boot:

Telemetry enabled (PostHog, DebuggAI default project). Set DEBUGGAI_TELEMETRY_DISABLED=1 to opt out.
Telemetry enabled (PostHog, custom POSTHOG_API_KEY)
Telemetry disabled (DEBUGGAI_TELEMETRY_DISABLED is set)

Local Development

npm install
npm run build
npm run test:e2e        # real end-to-end evals against the backend

The eval suite spawns the built MCP server as a subprocess, exercises every tool against a real backend, and writes per-flow artifacts to scripts/evals/artifacts/<timestamp>/. See scripts/evals/flows/ for the individual scenarios.

MCP registration: debugg-ai-local vs debugg-ai

This repo ships a .mcp.json that registers a project-scoped server named debugg-ai-local pointing at node dist/index.js — the freshly-built local code. It only activates when Claude Code's working directory is this repo.

Your other projects should use the user-scoped debugg-ai registration that pulls from the published npm package:

npm run mcp:global      # registers debugg-ai in ~/.claude.json to npx -y @debugg-ai/debugg-ai-mcp

After editing code here, run npm run mcp:local (which just rebuilds) so the next invocation of debugg-ai-local picks up your changes.

Links

Dashboard · Docs · Issues · Discord


Apache-2.0 License © 2025 DebuggAI

Quick Install

Quick Actions

View on GitHubView All Servers

Key Features

Model Context Protocol
Secure Communication
Real-time Updates
Open Source

Boost your projects with Wisdom Gate LLM API

Supporting GPT-5, Claude-4, DeepSeek v3, Gemini and more.

Enjoy a free trial and save 20%+ compared to official pricing.

Learn More
JUHE API Marketplace

Accelerate development, innovate faster, and transform your business with our comprehensive API ecosystem.

JUHE API VS

  • vs. RapidAPI
  • vs. API Layer
  • API Platforms 2025
  • API Marketplaces 2025
  • Best Alternatives to RapidAPI

For Developers

  • Console
  • Collections
  • Documentation
  • MCP Servers
  • Free APIs
  • Temp Mail Demo

Product

  • Browse APIs
  • Suggest an API
  • Wisdom Gate LLM
  • Global SMS Messaging
  • Temp Mail API

Company

  • What's New
  • Welcome
  • About Us
  • Contact Support
  • Terms of Service
  • Privacy Policy
Featured on Startup FameFeatured on Twelve ToolsFazier badgeJuheAPI Marketplace - Connect smarter, beyond APIs | Product Huntai tools code.marketDang.aiFeatured on ShowMeBestAI
Copyright © 2026 JUHEDATA HK LIMITED - All rights reserved