Debugg AI

官方

讓你的程式碼生成代理能夠透過 Debugg AI 測試平台,針對遠端瀏覽器中的新程式碼變更,建立並執行零設定的端到端測試。

你可以用 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 Server

透過 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 呼叫、每個 非瀏覽器工具,以及 test_suite {action:"run"}(使用自己專用的隧道並 完全繞過 Caddy)無論如何都不需要它。

在 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 尚未 COPY 建置現在需要的幾個目錄(handlers、tools、types、config),且仍引用一個已不存在的 tunnels/ 目錄,因此全新的建置可能會在達到該步驟之前就失敗。這是 既有的缺口,與 Caddy 無關。目前發布的 quinnosha/debugg-ai-mcp 映像檔 無論如何都早於 Caddy 依賴項 — 對 check_app_in_browser/probe_page/trigger_crawl 的 localhost-URL 呼叫 在該映像檔內會以 CaddyBinaryNotFoundError 失敗,直到它被重建(修正 Dockerfile)並重新發布,或 CADDY_BIN 指向 單獨烘焙進去的版本。公開 URL 呼叫、非瀏覽器工具和 test_suite {action:"run"} 無論如何都不受影響。

工具

伺服器暴露 8 個工具:三個 Browser 工具,加上每個受管實體一個基於動作的工具。主打工具是 check_app_in_browser(完整 AI 代理)和 probe_page(輕量級無 LLM 頁面探測)。其餘的 — project、environment、test_suite、test_case、executions — 每個都接受一個 action 判別器(例如 {"action":"list"})來選擇操作。破壞性的 delete 動作需要確認(在支援的地方顯示提示,否則為 confirm: true)。

Browser

check_app_in_browser

對您的應用程式執行 AI 瀏覽器代理。代理會導覽、互動,並回傳螢幕截圖。Localhost URL 會自動透過 debugg 隧道伺服器進行隧道傳輸。

參數型別說明
descriptionstring 必填要測試的內容(自然語言)
urlstring 必填目標 URL — http://localhost:3000 會自動隧道傳輸
environmentIdstring特定環境的 UUID
credentialIdstring特定憑證的 UUID
credentialRolestring依角色選擇憑證(例如 admin、guest)
usernamestring登入的使用者名稱(暫時性 — 不會持久化)
passwordstring登入的密碼(暫時性 — 不會持久化)
loginCredentialsarray代理在任務期間遇到的登入帳戶 — [{username, password, label?}]
useEnvironmentCredentialsboolean預設 true。false 禁止自動填入環境儲存的憑證;若未指定帳戶名稱,則表示完全不登入
freshSessionboolean預設 false。true 強制實際登入,而非重複使用該帳戶持有的暖 session
authobject驗證前置條件 — {precondition, entryUrl, deepUrl, environmentId, username, password}
repoNamestring覆寫自動偵測的 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(請參閱 environment)。

檢查完全不需要登入的頁面? 傳入 useEnvironmentCredentials: false 且不命名任何帳戶。這個組合的意義正如其字面 — 不要登入 — 執行會完全跳過驗證,而不是尋找登入表單。適用於公開頁面、行銷網站、文件,以及任何驗證前的內容。它也更快:在預設(auto)下,代理會在評估任何內容之前,先跟隨頁面上的「登入」連結並嘗試環境儲存的帳戶。

Session 重用:為什麼檢查會回報「沒有登入表單」

執行不會每次都登入。驗證登入成功後,後端會擷取該帳戶的 session,並在下次相同身分的執行時還原它,這會完全跳過登入 — 這就是為什麼檢查可以合理地回傳 submitted: false 且沒有登入表單:它已經登入了。還原的執行會在 logins 中以 reason: "restored_session" 自我回報,因此您可以將它與真正找不到表單的執行區分開來。

Session 依帳戶為鍵,因此命名不同的帳戶絕不會重用其他人的 session。有兩種方式繞過重用:

  • 單次呼叫使用 freshSession: true — 這次實際登入,然後重新擷取。當登入流程就是您要檢查的內容、懷疑儲存的 session 已過期,或應用程式在角色之間唯一的途徑是登出時使用。
  • environment 工具,action: "clearSessions" — 使儲存的 session 失效,讓後續執行登入。使用 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。使用它們來偵測重新擷取迴圈、hydration 錯誤,以及其他通過型別檢查和單元測試的執行時期問題:

"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,因為擷取在代理完成後非同步上傳 — 輪詢 executions {action:"get", uuid: executionId} 直到狀態達到 'downloaded'。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

輕量級無 LLM 批次頁面探測。 傳入 1-20 個 URL;每個會導覽、在內容上穩定(DOM 安靜下來,有界限 — 絕不依賴網路靜默,因為活躍的應用程式永遠不會達到網路閒置),並回傳渲染狀態 — 螢幕截圖 + 頁面元資料 + 結構化主控台錯誤 + 網路摘要。沒有代理迴圈、沒有 LLM 成本、沒有情境斷言。用於「我是不是弄壞了 /settings?」、重構後的多路由冒煙測試、CI 每次 PR 掃描,以及 check_app_in_browser 的 60-150 秒代理迴圈過度設計時的快速是否上線檢查。

參數型別說明
targetsarray 必填1-20 個條目:[{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring 必填公開 URL 或 localhost(自動隧道傳輸)
targets[].waitForLoadStateenum'domcontentloaded'(預設,+ 有界限的內容穩定)/ 'load'(也等待第三方嵌入)/ 'networkidle'(接受但從不發出 — 活躍網站的網路不會閒置)
targets[].waitForSelectorstring可選的 CSS 選擇器,導覽後等待
targets[].timeoutMsnumber每個 URL 的逾時,1000-30000(預設 10000)
includeHtmlboolean在每個結果中回傳原始 HTML(預設 false)
captureScreenshotsboolean每個目標回傳一個 PNG(預設 true)

批次中的所有目標共用一個 session 隧道,但只有同埠(或全部公開)的批次共用單一後端執行 — 一次呼叫中同一埠的 5 個 URL 比 5 個並行的單一 URL 呼叫快得多。混合多個本機埠的批次會分解為每個埠群組一個循序後端執行(仍然是一次呼叫,仍然是以您原始順序合併的單一 results[],但是 N 次後端往返而非一次 — 較慢,不會被拒絕)。每個 URL 的 error 欄位保持批次韌性:單一失敗的目標不會使其他目標失敗。 networkSummary 聚合鍵為 origin + pathname — 重複抓取迴圈(?n=0..4 重複命中同一端點)會合併為單一條目並附上計數,因此 /api/poll 搭配 count: 47 出現,即是用戶最初要求的可操作「無限重複抓取迴圈」訊號。

效能預算:1 個 URL 小於 10 秒,20 個小於 25 秒。Localhost 死埠在 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"])。僅限裸主機名稱:不允許 scheme、路徑、連接埠或萬用字元(應用程式主機的子網域已在範圍內)。在 update 時會取代清單;[] 會清除它。get/list 在伺服器支援時回傳它。回應會回顯已儲存的清單;若伺服器未持久化(較舊的伺服器忽略此欄位),結果會攜帶 authorizedCredentialHostsWarning: {requested, returned} 而非靜默成功。

sessions / clearSessions 管理後端重複使用的暖認證工作階段,以跳過登入(請參閱 工作階段重用)。工作階段內容絕不回傳 — 工作階段 cookie 是 bearer 憑證。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 工作流程 slug。預設為 flow/e2es/app-eval。分派固定到此 slug,因此後端範本重新命名不會破壞它。
LOG_LEVEL否error / warn / info(預設) / debug。
POSTHOG_API_KEY否覆寫內嵌遙測專案金鑰(例如私有 fork)。
DEBUGGAI_TELEMETRY_DISABLED否設為 1 / true / yes / on 以完全停用遙測。
DEBUGGAI_API_KEY=your_api_key

遠端 / HTTP 傳輸(選用)

預設情況下,伺服器使用 stdio(本機 npx)。它也可以作為託管的多用戶遠端 MCP,透過 無狀態 Streamable HTTP + OAuth 執行:

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

它是 OAuth 資源伺服器:每個 POST /mcp 都需要 Authorization: Bearer <token>;缺少/無效的權杖會取得 401,並附上指向 RFC 9728 中繼資料的 WWW-Authenticate,用戶端會針對公告的授權伺服器執行 OAuth 流程。Bearer 是請求範圍的 — api.debugg.ai 會驗證它。

端點用途
POST /mcpMCP Streamable HTTP(bearer 保護)
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_TYPEtoken設為 bearer 以便 OAuth 權杖轉發為 Authorization: Bearer

stdio 安裝都不需要這些。

多副本部署(上線前的 go/no-go): 隧道狀態(工作階段隧道、其 Caddy 實例及其連接埠路由鎖)是進程內的,以 bearer 權杖的雜湊為每個呼叫者鍵控 — 沒有跨進程協調。在純輪詢負載平衡器後執行多個副本,意味著一個呼叫者的呼叫可能落在不同副本上,並為他們命中的每個副本建立一個隧道,而不是整個工作階段一個(受副本數限制,透過現有的 55 分鐘閒置自動關閉自我修復 — 絕不會是跨工作階段的正確性錯誤,因為任何單一工具呼叫在整個持續時間內都停留在一個副本上)。要在多副本 HTTP 部署上獲得預期的「每個工作階段一個隧道」行為,請在負載平衡器設定工作階段親和路由(以 getSessionKey() 衍生的相同身分鍵控的黏性/一致性雜湊 — 實際上,是呼叫者的 Authorization bearer 權杖)。請參閱 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

隱私立場:

  • 唯一識別碼是 SHA-256(api_key).slice(0, 16)——絕非原始金鑰,不含任何個人識別資訊(PII)。
  • phc_* 金鑰依 PostHog 慣例僅供寫入;可安全嵌入原始碼。
  • 設定 DEBUGGAI_TELEMETRY_DISABLED=1 即可完全退出(解析為無操作提供者;不會有任何事件離開程序)。

啟動時會記錄目前模式:

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 與 debugg-ai

此儲存庫附帶一個 .mcp.json,用於註冊一個專案範圍的伺服器,名為 debugg-ai-local,指向 node dist/index.js——即剛建置好的本機程式碼。它僅在 Claude Code 的工作目錄為此儲存庫時才會啟用。

你的其他專案應使用使用者範圍的 debugg-ai 註冊,從已發布的 npm 套件拉取:

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 時能套用你的變更。

連結

儀表板 · 文件 · 問題回報 · Discord


Apache-2.0 授權 © 2025 DebuggAI