Debugg AI

공식

코드 생성 에이전트가 Debugg AI 테스팅 플랫폼을 통해 원격 브라우저에서 새로운 코드 변경 사항에 대해 0-구성 엔드-투-엔드 테스트를 생성 및 실행할 수 있도록 지원합니다.

Debugg AI MCP(으)로 무엇을 할 수 있나요?

  • AI 브라우저 테스트 실행 — check_app_in_browser를 통해 자연어 지시로 모든 URL 또는 localhost 앱을 테스트하고, 스크린샷과 함께 통과/실패 결과를 반환하도록 요청하세요.
  • 여러 페이지 빠르게 탐색 — probe_page를 사용하여 1-20개 URL의 콘솔 오류, 네트워크 문제, 렌더링 상태를 LLM 비용 없이 일괄 확인하세요.
  • 테스트 환경 관리 — environment 도구를 사용하여 자격 증명 및 승인된 SSO 호스트가 포함된 환경을 생성, 업데이트 또는 나열하세요.
  • 사이트 크롤링 트리거 — trigger_crawl을 실행하여 서버 측 브라우저 에이전트 크롤링으로 프로젝트의 지식 그래프를 채우세요.
  • 테스트 스위트 실행 및 추적 — 스위트를 생성하고, 비동기 실행을 트리거하며, test_suite 작업을 통해 테스트별 결과를 가져오세요.
  • 실행 아티팩트 검사 — executions를 통해 전체 실행 세부 정보, HAR 네트워크 추적, 콘솔 로그를 검색하여 런타임 문제를 디버깅하세요.

문서

Debugg AI — MCP 서버

Model Context Protocol을 통한 AI 기반 브라우저 테스트. URL(또는 localhost)을 지정하고 테스트할 내용을 설명하면 AI 에이전트가 앱을 탐색하고 스크린샷과 함께 통과/실패 결과를 반환합니다.

Debugg AI MCP server

설정

Node.js 20.20.0 이상 필요 (posthog-node@^5.26.0의 전이적 요구사항).

http://localhost:... URL 테스트에는 caddy 바이너리가 필요합니다 — check_app_in_browser, probe_page, trigger_crawl는 로컬 Caddy 리버스 프록시를 통해 localhost 대상을 터널링합니다. 이것은 자동으로 설치됩니다: @radically-straightforward/caddy npm 의존성이 npm install/npx 중에 플랫폼에 맞는 고정된 Caddy 릴리스를 다운로드합니다 — 일반적인 경우 직접 설치할 필요가 없습니다. 이제 이 패키지가 다운로드하는 유일한 바이너리입니다; 터널 클라이언트 자체는 순수 TypeScript입니다 — ngrok 에이전트를 가져오던 ngrok 패키지를 대체했습니다. 다운로드가 실행되지 않은 경우(npm install --ignore-scripts, 오프라인/에어갭 설치), CADDY_BIN을 자체 설치본으로 지정하세요 (brew install caddy / apt install caddy / 참조 caddyserver.com/docs/install) — 누락 시 첫 localhost-URL 호출에서 조용히 멈추는 대신 명확한 오류로 표시됩니다. 공개 URL 호출, 모든 비브라우저 도구, 그리고 자체 전용 터널을 사용하고 Caddy를 완전히 우회하는 test_suite {action:"run"}는 어느 쪽이든 필요하지 않습니다.

debugg.ai에서 API 키를 받은 후 MCP 클라이언트 설정에 추가하세요:

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

또는 Docker 사용 시:

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

Dockerfile의 npm install 단계는 원칙적으로 로컬 설치와 동일한 자동 방식으로 caddy를 선택할 수 있습니다 — 하지만 현재 작성 시점 기준으로 Dockerfile는 빌드에 필요한 여러 디렉토리(handlers, tools, types, config)를 COPY하지 않으며 더 이상 존재하지 않는 tunnels/ 디렉토리를 참조하므로, 신규 빌드는 그 전에 실패할 가능성이 높습니다. 이것은 Caddy와 무관한 기존의 격차입니다. 현재 게시된 quinnosha/debugg-ai-mcp 이미지는 어쨌든 Caddy 의존성 이전의 것입니다 — 해당 이미지 내에서 check_app_in_browser/probe_page/trigger_crawl에 대한 localhost-URL 호출은 재빌드(Dockerfile 수정) 및 재게시, 또는 CADDY_BIN이 별도로 포함된 것을 가리킬 때까지 CaddyBinaryNotFoundError로 실패합니다. 공개 URL 호출, 비브라우저 도구, test_suite {action:"run"}는 어느 쪽이든 영향을 받지 않습니다.

도구

서버는 8개의 도구를 노출합니다: 세 개의 브라우저 도구와 관리 엔티티당 하나의 액션 기반 도구. 주요 도구는 check_app_in_browser (전체 AI 에이전트)와 probe_page (경량 no-LLM 페이지 프로브)입니다. 나머지 — project, environment, test_suite, test_case, executions — 각각 작업을 선택하는 action 판별자(예: {"action":"list"})를 받습니다. 파괴적인 delete 작업은 확인이 필요합니다(지원되는 경우 유도 프롬프트, 그렇지 않으면 confirm: true).

브라우저

check_app_in_browser

앱에 대해 AI 브라우저 에이전트를 실행합니다. 에이전트가 탐색, 상호작용하고 스크린샷과 함께 보고합니다. Localhost URL은 debugg 터널 서버를 통해 자동 터널링됩니다.

매개변수유형설명
description문자열 필수테스트할 내용 (자연어)
url문자열 필수대상 URL — http://localhost:3000는 자동 터널링됨
environmentId문자열특정 환경의 UUID
credentialId문자열특정 자격 증명의 UUID
credentialRole문자열역할로 자격 증명 선택 (예: admin, guest)
username문자열로그인용 사용자 이름 (임시 — 저장되지 않음)
password문자열로그인용 비밀번호 (임시 — 저장되지 않음)
loginCredentials배열에이전트가 작업 중에 만나는 로그인용 계정 — [{username, password, label?}]
useEnvironmentCredentials부울기본값 true. false는 환경의 저장된 자격 증명 자동 입력을 금지합니다; 계정 이름이 없으면 전혀 로그인하지 않음을 의미합니다
freshSession부울기본값 false. true는 해당 계정에 대해 유지된 웜 세션을 재사용하는 대신 실제 로그인을 강제합니다
auth객체인증 사전 조건 — {precondition, entryUrl, deepUrl, environmentId, username, password}
repoName문자열자동 감지된 git 저장소 이름 재정의 (예: my-org/my-repo)

호출당 하나의 집중된 검사. 에이전트는 약 25단계의 내부 예산이 있습니다; 더 큰 테스트 스위트는 여러 호출로 분할하세요.

자격 증명: 산문이 아닌 매개변수로 전달

description에서만 계정 이름을 지정하면 에이전트가 사용하지 않습니다 — 환경의 저장된 자격 증명으로 대체되며, 잘못된 계정에 대한 앱의 거부는 애플리케이션 실패처럼 보입니다. 매개변수로 전달하는 모든 것은 실행의 모든 로그인에 대해 환경 기본값보다 우선합니다 (첫 번째만이 아님):

  • username / password (또는 credentialId / credentialRole) — 실행의 신원.
  • auth.username / auth.password — auth.precondition: "login"도 사용할 때 사전 조건 로그인을 고정합니다.
  • loginCredentials — 에이전트가 작업 도중에 만나는 로그인 양식용 계정. 비밀번호 설정 → 로그인 화면으로 이동 → 방금 만든 계정으로 로그인 같은 흐름에 사용하며, 별도 호출로 분할하면 브라우저 상태가 손실됩니다.

기본 테스트 사용자로의 조용한 대체가 검사를 무효화할 때 useEnvironmentCredentials: false를 설정하세요.

크로스 도메인 SSO? 실행은 앱 자체 호스트와 하위 도메인에서만 자격 증명을 입력합니다; 다른 도메인의 로그인 페이지는 offscope_host로 거부됩니다. 환경의 authorizedCredentialHosts에 ID 공급자 호스트를 추가하세요 (environment 참조).

로그인이 필요 없는 페이지를 확인하나요? useEnvironmentCredentials: false를 전달하고 계정을 지정하지 마세요. 그 조합은 말 그대로 로그인하지 않음을 의미하며, 실행은 로그인 양식을 찾는 대신 인증을 완전히 건너뜁니다. 공개 페이지, 마케팅 사이트, 문서 및 인증 전 모든 것에 사용하세요. 또한 더 빠릅니다: 기본(auto)에서 에이전트는 페이지의 "로그인" 링크를 따라가서 평가 전에 환경의 저장된 계정을 시도합니다.

세션 재사용: 검사가 "로그인 양식 없음"을 보고하는 이유

실행은 매번 로그인하지 않습니다. 검증된 로그인 후 백엔드는 해당 계정의 세션을 캡처하고 동일한 신원에 대한 다음 실행에서 복원하여 로그인을 완전히 건너<0xEB><0x9A><0xB1>니다 — 이것이 검사가 submitted: false 및 로그인 양식 없음으로 정당하게 돌아올 수 있는 이유입니다: 이미 로그인되어 있었기 때문입니다. 복원된 실행은 logins에서 reason: "restored_session"으로 자신을 보고하므로, 실제로 양식을 찾지 못한 실행과 구분할 수 있습니다.

세션은 계정별로 키가 지정되므로 다른 계정을 지정해도 다른 사람의 세션을 재사용하지 않습니다. 재사용을 우회하는 두 가지 방법:

  • 단일 호출에 freshSession: true — 이번 한 번 실제 로그인 후 다시 캡처합니다. 로그인 흐름 자체를 확인할 때, 저장된 세션이 오래되었다고 의심될 때, 또는 앱의 페르소나 간 유일한 경로가 로그아웃일 때 사용하세요.
  • environment 도구, action: "clearSessions" — 저장된 세션을 무효화하여 이후 실행이 로그인하도록 합니다. username / credentialId로 범위를 좁히세요; 범위 없는 삭제는 환경의 모든 계정이 재인증해야 하므로 확인이 필요합니다.

action: "sessions"를 사용하여 환경이 현재 보유한 것과 각각이 재사용될지 확인하세요.

결과는 실제 사용된 신원을 보고하므로 잘못된 신원이 깨진 앱으로 위장하는 대신 표시됩니다:

"logins": [
  { "username": "qa+invitefix@example.com", "source": "task", "submitted": true, "authenticated": true },
  { "username": "qatest123@example.com", "source": "env_default", "submitted": false, "authenticated": false,
    "reason": "offscope_host", "detail": "refused to enter credentials on auth.idp.example: not part of this run's scope …" }
],
"credentialWarning": {
  "requested": "qa+invitefix@example.com",
  "used": ["qatest123@example.com"]
}

source은 task | explicit | credential_id (지정한 계정) 또는 env | env_default (환경의 저장된 계정)입니다. submitted은 자격 증명이 실제로 입력되고 제출된 경우에만 true입니다; reason은 발생한 상황을 말합니다 (예: offscope_host, restored_session), detail은 있는 경우 이에 대한 사람이 읽을 수 있는 설명입니다 — offscope_host 거부의 경우 호스트 이름과 권한 부여 방법을 지정합니다. credentialWarning은 계정을 지정했고 다른 계정에 대한 환경 기본값이 실제로 제출된 경우에만 나타납니다 — 거부되거나 건너뛴 로그인에는 절대 나타나지 않습니다. loginError은 지정된 계정을 확인할 수 없고 실행이 다른 계정으로 대체하지 않기로 결정한 경우 나타납니다.

모든 성공적인 실행은 스크린샷과 함께 browserSession 블록을 반환합니다 — 캡처된 HAR(전체 네트워크 추적) 및 콘솔 로그(모든 JS 콘솔 메시지)에 대한 사전 서명된 S3 URL. 이를 사용하여 유형 검사와 단위 테스트를 통과하는 리페치 루프, 하이드레이션 오류 및 기타 런타임 문제를 감지하세요:

"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"
}

URL은 수명이 짧은 사전 서명된 S3입니다 — executions {action:"get", uuid}를 통해 상위 실행을 다시 가져와 갱신하세요. harStatus / consoleLogStatus은 'downloaded' (URL 가져오기 가능), 'not_available' (페이지가 아무것도 내보내지 않음), 'failed' (캡처 중단)을 구분합니다. 새 실행에서 URL은 일반적으로 null입니다 — 캡처가 에이전트 완료 후 비동기적으로 업로드되기 때문입니다 — 상태가 'downloaded'에 도달할 때까지 executions {action:"get", uuid: executionId}를 폴링하세요. Authorization / Cookie / token/secret/api_key 헤더는 아티팩트가 저장되기 전에 서버 측에서 스크러빙됩니다.

trigger_crawl

프로젝트의 지식 그래프를 채우기 위해 서버 측 브라우저 에이전트 크롤을 실행합니다. Localhost URL은 자동으로 터널링됩니다. 성공적인 수집 시 {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?}와 함께 knowledgeGraph.skipped === false을 반환합니다. crawlSummary 및 knowledgeGraph은 백엔드의 크롤/가져오기 노드가 보고한 키만 전달합니다 — 누락된 수는 없으며 채워진 0가 아닙니다. browserSession 블록(HAR + 콘솔 로그 URL, 위와 동일한 형태)도 완료된 크롤에 존재합니다.

probe_page

경량 no-LLM 일괄 페이지 프로브. 1-20개 URL을 전달하세요; 각각 탐색하고 콘텐츠에 안착하며(DOM이 조용해짐, 제한됨 — 라이브 앱이 도달할 수 없는 네트워크 침묵에는 절대 안 함), 렌더링된 상태 — 스크린샷 + 페이지 메타데이터 + 구조화된 콘솔 오류 + 네트워크 요약을 반환합니다. 에이전트 루프, LLM 비용, 시나리오 어설션이 없습니다. "방금 /settings를 망가뜨렸나?", 리팩터링 후 다중 경로 스모크, CI PR별 스윕, check_app_in_browser의 60-150초 에이전트 루프가 과한 빠른 작동 확인에 사용하세요.

매개변수유형설명
targets배열 필수1-20개 항목: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].url문자열 필수공개 URL 또는 localhost (자동 터널링)
targets[].waitForLoadState열거형'domcontentloaded' (기본값, + 제한된 콘텐츠 안착) / 'load' (타사 임베드도 차단) / 'networkidle' (허용되지만 발행되지 않음 — 라이브 사이트의 네트워크는 유휴 상태가 되지 않음)
targets[].waitForSelector문자열탐색 후 대기할 선택적 CSS 선택자
targets[].timeoutMs숫자URL당 시간 초과, 1000-30000 (기본값 10000)
includeHtml부울각 결과에 원시 HTML 반환 (기본값 false)
captureScreenshots부울대상당 PNG 하나 반환 (기본값 true)

배치의 모든 대상은 하나의 세션 터널을 공유하지만, 동일 포트(또는 모두 공개) 배치만 단일 백엔드 실행을 공유합니다 — 한 호출에서 한 포트의 5개 URL은 5개의 병렬 단일 URL 호출보다 훨씬 빠릅니다. 여러 로컬 포트를 혼합한 배치는 포트 그룹당 하나의 순차 백엔드 실행으로 분해됩니다(여전히 한 호출, 원래 순서의 병합된 results[] 하나, 그러나 N개의 백엔드 왕복 — 느리지만 거부되지 않음). URL당 error 필드는 배치 복원력을 유지합니다: 단일 실패 대상이 다른 대상에 실패를 일으키지 않습니다. networkSummary 집계 키는 origin + pathname — 재요청 루프(동일 엔드포인트를 반복 호출하는 ?n=0..4)는 카운트와 함께 단일 항목으로 축소되므로, /api/poll가 count: 47와 함께 나타나는 것이 사용자들이 원래 요청했던 실행 가능한 "무한 재요청 루프" 신호입니다.

성능 예산: URL 1개에 <10초, 20개에 <25초. 로컬호스트 죽은 포트는 워크플로우 실행을 소모하지 않고 <2초 내에 LocalServerUnreachable를 반환합니다.

project

작업매개변수결과
get{uuid}선별된 프로젝트 상세 정보
list{q?, page?, pageSize?}페이지네이션된 요약
create{name, platform, (teamUuid|teamName), (repoUuid|repoName)}생성된 프로젝트

팀과 저장소는 uuid 또는 이름(대소문자 구분 없는 정확히 일치; 없으면 NotFound, 여러 개면 AmbiguousMatch)으로 해석됩니다. update/delete는 없습니다 — 프로젝트 이름 변경이나 삭제는 DebuggAI 웹 앱에서 하세요.

environment

작업매개변수결과
get{uuid, projectUuid?}자격 증명이 인라인된 환경(비밀번호는 절대 반환되지 않음)
list{projectUuid?, q?, page?, pageSize?}각각 자격 증명 배열이 있는 페이지네이션된 환경
create{name, url, description?, projectUuid?, credentials?, authorizedCredentialHosts?}생성된 환경(선택적으로 자격 증명 시드)
update{uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?, authorizedCredentialHosts?}패치된 환경; 자격 증명 작업은 제거 → 업데이트 → 추가 순서로 실행
delete{uuid, projectUuid?, confirm?}환경 삭제(자격 증명 계단식 삭제) — 확인 필요
sessions{uuid, username?, credentialId?}환경이 보유한 캡처된 로그인 세션(계정별, 각각 자체 isUsable 포함)
clearSessions{uuid, username?, credentialId?, confirm?}무효화하여 다음 실행 시 실제 로그인 — 범위 없는 삭제는 확인 필요

projectUuid는 생략 시 git 저장소에서 자동 해석됩니다. 개별 자격 증명 실패는 환경 작업을 차단하지 않고 credentialWarnings[]에 표시됩니다.

authorizedCredentialHosts는 앱 자체 호스트 외에 실행이 이 환경의 자격 증명에 들어갈 수 있는 호스트를 나열합니다 — 크로스 도메인 SSO의 경우 IdP 호스트를 여기에 추가하세요(예: ["auth.example.com"]). 호스트 이름만 가능: 스킴, 경로, 포트 또는 와일드카드 없음(앱 호스트의 하위 도메인은 이미 범위에 포함). update에서 목록을 대체하고, []는 목록을 지웁니다. get/list는 서버가 지원할 때 목록을 반환합니다. 응답은 저장된 목록을 에코합니다. 서버가 저장하지 않은 경우(이전 서버는 필드를 무시), 결과는 조용한 성공 대신 authorizedCredentialHostsWarning: {requested, returned}을 전달합니다.

sessions / clearSessions는 백엔드가 로그인을 건너뛰기 위해 재사용하는 웜 인증 세션을 관리합니다(세션 재사용 참조). 세션 내용은 절대 반환되지 않습니다 — 세션 쿠키는 베어러 자격 증명입니다. clearSessions은 행을 삭제하는 대신 세션을 무효로 표시하므로 캡처 기록은 읽을 수 있는 상태로 유지되면서 재사용이 즉시 중지됩니다.

test_suite

작업매개변수결과
list{projectUuid|projectName, search?, page?, pageSize?}상태 + 통과율이 있는 페이지네이션된 스위트
create{name, description, projectUuid|projectName}생성된 스위트
run{suiteUuid|(suiteName+project), targetUrl?}모든 테스트를 비동기로 트리거
results{suiteUuid|(suiteName+project)}스위트 + 테스트별 결과
delete{suiteUuid|(suiteName+project), confirm?}소프트 삭제 — 확인 필요

test_case

작업매개변수결과
create{name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?}생성된 테스트 케이스(자동 실행 아님)
update{testUuid, name?, description?, agentTaskDescription?}패치된 테스트 케이스
delete{testUuid, confirm?}소프트 삭제 — 확인 필요

executions

작업매개변수결과
get{uuid}전체 상세 정보(nodeExecutions + 상태 + errorInfo) + 스크린샷/gif 아티팩트
list{status?, projectUuid?, page?, pageSize?}페이지네이션된 요약

백엔드의 404는 isError: true와 {error: 'NotFound', message, uuid}로 표시됩니다. 자격 증명은 항상 비밀번호 없이 반환됩니다.

페이지네이션

모든 list 응답은 페이지네이션됩니다. 응답 형태:

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

선택적 page(1-인덱스, 기본값 1) 및 pageSize(기본값 20, 최대 200; 초과 값은 클램프됨)를 전달하세요. 어떤 응답도 조용히 잘리지 않습니다.

get는 단일 이름 아래 하나의 객체를 반환합니다 — {project}, {execution}, {project, environment} — pageInfo 없이.

리소스

도구와 함께, 서버는 읽기 전용 엔티티를 MCP 리소스로 노출하여 클라이언트가 컨텍스트로 탐색하고 @-멘션할 수 있게 합니다:

URI내용
debugg-ai://projects모든 프로젝트(첫 페이지)
debugg-ai://environments자동 감지된 프로젝트의 환경
debugg-ai://executions최근 실행(첫 페이지)
debugg-ai://project/{uuid}하나의 프로젝트, 전체 상세 정보
debugg-ai://environment/{uuid}하나의 환경(자격 증명 인라인, 비밀번호 편집됨)
debugg-ai://execution/{uuid}하나의 실행, 전체 노드 상세 정보 + 아티팩트 링크

읽기는 project / environment / executions 도구와 동일한 핸들러로 디스패치되므로 데이터와 인증이 동일합니다. 리소스는 추가적입니다 — 리소스 지원이 없는 클라이언트는 계속 도구를 사용합니다.

보안 불변 조건

  • 비밀번호는 쓰기 전용입니다. 어떤 도구의 응답 본문에도 절대 나타나지 않습니다.
  • 터널 URL(*.tunnel.debugg.ai, 그리고 과거 실행이 여전히 참조하는 폐기된 *.ngrok.debugg.ai)은 에이전트가 작성한 텍스트를 포함한 모든 브라우저 에이전트 응답에서 제거됩니다.
  • 백엔드의 404는 예외를 던지는 대신 isError: true와 {error: 'NotFound', ...}로 표시됩니다.
  • 누락된 DEBUGGAI_API_KEY는 첫 호출 시 구조화된 도구 오류로 표시됩니다 — 서버는 여전히 도구를 정상적으로 등록하고 나열합니다.

v6.0.0으로 마이그레이션(백엔드 판정, MCP 작성 텍스트 없음)

실행 판정은 pass | fail | error이며, 백엔드의 reason가 그대로 전달됩니다. 테스트를 시도하지 않은 실행은 outcome: null, skipped: true, skipReason로 읽힙니다.

제거됨대체
successoutcome
failureCategoryoutcome + reason
stepsTaken / stepsBudget / stepsRemainingbudget: {maxSteps, usedSteps}
failedNodeerrorInfo
get → projects[0] / executions[0] / environments[0] + pageInfo + filter{project} / {execution} / {project, environment}
message / note 경고 및 결과구조화된 필드만

전체 목록: CHANGELOG.md 6.0.0.

v3.0.0으로 마이그레이션(액션 기반 도구)

v3는 20개의 동사별 도구를 8개의 액션 기반 도구로 통합했습니다. 이전 도구 → 새 tool {action}:

제거됨대체
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_project삭제됨 — DebuggAI 웹 앱 사용
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 매개변수삭제됨 — 항상 헤드리스

delete 작업은 이제 확인이 필요합니다(유도 프롬프트 또는 confirm: true). 클라이언트는 MCP 재시작 시 새 표면을 선택합니다.

v1.x에서 마이그레이션(v2.0.0의 주요 변경)

v2는 22개 도구 표면을 11개로 축소했습니다. 이전 도구 → 새 도구 매핑:

제거됨대체
list_projects, get_projectsearch_projects(uuid 모드 vs 필터 모드)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — 각 환경에 자격 증명 인라인
create_credentialcreate_environment({credentials: [...]}) 시드 또는 update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — 모호성 처리가 있는 이름 해석
list_executions, get_executionsearch_executions
cancel_execution삭제됨 — 백엔드 종료는 자동

응답 형태 변경: 목록 응답의 단순 count 필드가 사라졌습니다 — pageInfo.totalCount를 사용하세요.

구성

환경 변수필수용도
DEBUGGAI_API_KEY예백엔드 API 키. 별칭: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URL아니요백엔드 기본 URL. 기본값: https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPE아니요token(기본값) 또는 bearer.
DEBUGGAI_EVAL_TEMPLATE아니요check_app_in_browser가 디스패치하는 App Evaluation 워크플로우 슬러그를 재정의합니다. 기본값: flow/e2es/app-eval. 디스패치는 이 슬러그에 고정되므로 백엔드 템플릿 이름 변경이 깨뜨릴 수 없습니다.
LOG_LEVEL아니요error / warn / info(기본값) / debug.
POSTHOG_API_KEY아니요임베디드 텔레메트리 프로젝트 키를 재정의합니다(예: 개인 포크).
DEBUGGAI_TELEMETRY_DISABLED아니요1 / true / yes / on로 설정하여 텔레메트리를 완전히 비활성화합니다.
DEBUGGAI_API_KEY=your_api_key

원격 / HTTP 전송(선택 사항)

기본적으로 서버는 stdio(로컬 npx)를 사용합니다. 대신 상태 비저장 Streamable HTTP + OAuth를 통한 호스팅된 다중 사용자 원격 MCP로 실행할 수 있습니다:

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

OAuth 리소스 서버입니다: 모든 POST /mcp는 Authorization: Bearer <token>가 필요합니다. 누락/잘못된 토큰은 RFC 9728 메타데이터를 가리키는 WWW-Authenticate와 함께 401을 받고, 클라이언트는 광고된 인증 서버에 대해 OAuth 흐름을 실행합니다. 베어러는 요청 범위입니다 — api.debugg.ai가 이를 검증합니다.

엔드포인트용도
POST /mcpMCP Streamable HTTP(베어러 보호)
GET /.well-known/oauth-protected-resourceRFC 9728 메타데이터(인증 서버 검색)
GET /health로드 밸런서 / ECS 상태 확인
환경 변수기본값용도
DEBUGGAI_MCP_TRANSPORTstdio원격 전송을 위해 http로 설정
PORT3000HTTP 수신 포트
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.ai이 서버의 공개 리소스 URL(RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.ai클라이언트에 광고된 인증 서버
DEBUGGAI_TOKEN_TYPEtokenOAuth 토큰이 Authorization: Bearer로 전달되도록 bearer로 설정

stdio 설치에는 이 중 어떤 것도 필요하지 않습니다.

다중 복제본 배포(롤아웃 전 go/no-go): 터널 상태(세션 터널, 해당 Caddy 인스턴스 및 포트 라우트 잠금)는 프로세스 내에 있으며, 베어러 토큰의 해시로 호출자별 키가 지정됩니다 — 교차 프로세스 조정이 없습니다. 일반 라운드 로빈 로드 밸런서 뒤에서 여러 복제본을 실행하면 한 호출자의 호출이 다른 복제본에 도달하여 전체 세션에 대해 하나가 아닌 도달한 복제본당 하나의 터널을 생성할 수 있습니다(복제본 수로 제한, 기존 55분 유휴 자동 종료로 자가 치유 — 단일 도구 호출이 전체 기간 동안 한 복제본에 유지되므로 교차 세션 정확성 버그는 절대 아님). 다중 복제본 HTTP 배포에서 의도된 "세션당 하나의 터널" 동작을 얻으려면 로드 밸런서에서 세션 고정 라우팅을 구성하세요(getSessionKey()가 파생하는 동일한 ID에 키가 지정된 스티키/일관성 해시 — 실제로는 호출자의 Authorization 베어러 토큰). 전체 추론과 구성되지 않은 경우의 정직한 저하 경로는 docs/local-tunnel-multiplexer-architecture-2026-07-31.md §2.1을 참조하세요.

텔레메트리

MCP 서버는 기본적으로 텔레메트리가 활성화된 상태로 제공됩니다 — 팀이 설치 기반 전반의 캐시 적중률, 폴링 주기, 터널 안정성 및 기타 운영 지표를 관찰할 수 있도록 임베디드 쓰기 전용 PostHog 프로젝트 키(phc_*)가 포함되어 있습니다. 캡처되는 이벤트:

이벤트시점
tool.executed / tool.failed도구 호출마다
workflow.executed브라우저 에이전트 실행마다 (pollCount, durationMs, finalIntervalMs 포함)
tunnel.provisioned / tunnel.provision_retry / tunnel.stopped터널 수명주기 이벤트마다
template.lookup / project.lookup캐시 적중/실패, 콜드 콜 시 durationMs 포함

개인정보 보호 방침:

  • 고유 ID는 SHA-256(api_key).slice(0, 16) — 원시 키가 절대 아니며, PII가 없습니다.
  • phc_* 키는 PostHog 규칙에 따라 쓰기 전용입니다. 소스에 포함해도 안전합니다.
  • DEBUGGAI_TELEMETRY_DISABLED=1을 설정하면 완전히 옵트아웃됩니다(no-op 공급자로 해석되며, 프로세스 외부로 이벤트가 전송되지 않습니다).

활성 모드는 부팅 시 기록됩니다:

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)

로컬 개발

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

평가 스위트는 빌드된 MCP 서버를 하위 프로세스로 실행하고, 실제 백엔드에 대해 모든 도구를 테스트하며, 각 흐름의 산출물을 scripts/evals/artifacts/<timestamp>/에 기록합니다. 개별 시나리오는 scripts/evals/flows/을 참조하세요.

MCP 등록: debugg-ai-local vs debugg-ai

이 저장소에는 .mcp.json이 포함되어 있으며, debugg-ai-local라는 이름의 프로젝트 범위 서버를 node dist/index.js — 방금 빌드된 로컬 코드를 가리키도록 등록합니다. 이는 Claude Code의 작업 디렉터리가 이 저장소일 때만 활성화됩니다.

다른 프로젝트에서는 게시된 npm 패키지에서 가져오는 사용자 범위 debugg-ai 등록을 사용해야 합니다:

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

여기에서 코드를 편집한 후 npm run mcp:local을 실행하면(단순히 재빌드) 다음 debugg-ai-local 호출 시 변경 사항이 반영됩니다.

링크

대시보드 · 문서 · 이슈 · 디스코드


Apache-2.0 라이선스 © 2025 DebuggAI