Debugg AI

resmi

Memungkinkan agen pembuat kode Anda untuk membuat dan menjalankan pengujian ujung-ke-ujung tanpa konfigurasi terhadap perubahan kode baru di peramban jarak jauh melalui platform pengujian Debugg AI.

Apa yang bisa Anda lakukan dengan Debugg AI MCP?

  • Menjalankan tes browser AI — Minta asisten untuk check_app_in_browser terhadap URL mana pun atau localhost, jelaskan apa yang ingin diuji dalam bahasa alami, dan dapatkan hasil lulus/gagal beserta tangkapan layar.
  • Periksa banyak halaman dengan cepat — Gunakan probe_page untuk memeriksa batch 1–20 URL untuk kesalahan konsol, masalah jaringan, dan status render tanpa biaya LLM atau loop agen.
  • Picu perayapan grafik pengetahuan — Panggil trigger_crawl untuk memicu perayapan agen browser sisi server yang mengisi grafik pengetahuan proyek dengan artefak HAR dan log konsol.
  • Kelola rangkaian tes dan kasus — Buat, jalankan, dan tinjau hasil untuk entitas test_suite dan test_case, dengan hasil per tes dan tingkat kelulusan.
  • Periksa artefak eksekusi — Ambil detail eksekusi lengkap melalui executions termasuk tangkapan layar, jejak jaringan HAR, dan log konsol untuk men-debug masalah runtime.
  • Kelola lingkungan dan sesi — Buat atau perbarui lingkungan dengan kredensial melalui environment, dan gunakan sessions/clearSessions untuk mengontrol penggunaan ulang sesi login hangat.

Dokumentasi

Debugg AI — MCP Server

Pengujian browser bertenaga AI melalui Model Context Protocol. Arahkan ke URL mana pun (atau localhost) dan jelaskan apa yang ingin diuji — agen AI menjelajahi aplikasi Anda dan mengembalikan hasil lulus/gagal beserta tangkapan layar.

Debugg AI MCP server

Pengaturan

Membutuhkan Node.js 20.20.0 atau lebih baru (persyaratan turunan dari posthog-node@^5.26.0).

Pengujian URL http://localhost:... membutuhkan biner caddycheck_app_in_browser, probe_page, dan trigger_crawl membuat terowongan target localhost melalui proxy balik Caddy lokal. Ini terinstal otomatis: dependensi npm @radically-straightforward/caddy mengunduh rilis Caddy yang disematkan untuk platform Anda selama npm install/npx, sama seperti proyek ini lakukan untuk biner ngrok — tidak perlu menginstal sendiri dalam kasus normal. Jika pengunduhan itu tidak pernah berjalan (npm install --ignore-scripts, instalasi offline/terisolasi), arahkan CADDY_BIN ke instalasi Anda sendiri (brew install caddy / apt install caddy / lihat caddyserver.com/docs/install) — ketiadaannya muncul sebagai kesalahan yang jelas pada panggilan URL localhost pertama, bukan hang yang senyap. Panggilan URL publik, setiap alat non-browser, dan test_suite {action:"run"} (yang menggunakan terowongan khusus sendiri dan sepenuhnya melewati Caddy) tidak membutuhkannya juga.

Dapatkan kunci API di debugg.ai, lalu tambahkan ke konfigurasi klien MCP Anda:

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

Atau dengan Docker:

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

Langkah npm install dari Dockerfile akan mengambil caddy dengan cara otomatis yang sama seperti instalasi lokal lakukan, pada prinsipnya — tetapi pada saat penulisan ini, Dockerfile tidak COPY beberapa direktori yang dibutuhkan build sekarang (handlers, tools, types, config) dan masih merujuk ke direktori tunnels/ yang tidak lagi ada, sehingga build baru kemungkinan gagal sebelum itu menjadi masalah. Itu adalah celah yang sudah ada sebelumnya, tidak terkait dengan Caddy. Gambar quinnosha/debugg-ai-mcp yang saat ini diterbitkan mendahului dependensi Caddy — panggilan URL localhost ke check_app_in_browser/probe_page/trigger_crawl akan gagal dengan CaddyBinaryNotFoundError di dalam gambar itu sampai dibangun ulang (Dockerfile diperbaiki) dan diterbitkan ulang, atau CADDY_BIN menunjuk ke salah satu yang disematkan secara terpisah. Panggilan URL publik, alat non-browser, dan test_suite {action:"run"} tidak terpengaruh.

Alat

Server mengekspos 8 alat: tiga alat Browser plus satu alat berbasis aksi per entitas yang dikelola. Alat utama adalah check_app_in_browser (agen AI penuh) dan probe_page (probe halaman ringan tanpa-LLM). Sisanya — project, environment, test_suite, test_case, executions — masing-masing mengambil diskriminator action (mis. {"action":"list"}) yang memilih operasi. Aksi delete yang merusak memerlukan konfirmasi (prompt elisitasi jika didukung, jika tidak confirm: true).

Browser

check_app_in_browser

Menjalankan agen browser AI terhadap aplikasi Anda. Agen menavigasi, berinteraksi, dan melaporkan kembali dengan tangkapan layar. URL localhost secara otomatis dibuat terowongan melalui ngrok.

ParameterTipeDeskripsi
descriptionstring wajibApa yang akan diuji (bahasa alami)
urlstring wajibURL target — http://localhost:3000 dibuat terowongan otomatis
environmentIdstringUUID dari lingkungan tertentu
credentialIdstringUUID dari kredensial tertentu
credentialRolestringPilih kredensial berdasarkan peran (mis. admin, guest)
usernamestringNama pengguna untuk masuk (sementara — tidak disimpan)
passwordstringKata sandi untuk masuk (sementara — tidak disimpan)
loginCredentialsarrayAkun untuk login yang ditemui agen selama tugas — [{username, password, label?}]
useEnvironmentCredentialsbooleanDefault true. false melarang pengisian otomatis kredensial tersimpan lingkungan; tanpa akun yang disebutkan berarti jangan masuk sama sekali
freshSessionbooleanDefault false. true memaksa login nyata alih-alih menggunakan kembali sesi hangat yang disimpan untuk akun itu
authobjekPrasyarat autentikasi — {precondition, entryUrl, deepUrl, environmentId, username, password}
repoNamestringMenimpa nama repositori git yang terdeteksi otomatis (mis. my-org/my-repo)

Satu pemeriksaan terfokus per panggilan. Agen memiliki anggaran internal ~25 langkah; bagi rangkaian yang lebih luas ke beberapa panggilan.

Kredensial: berikan sebagai parameter, bukan prosa

Menyebutkan akun hanya di description tidak membuat agen menggunakannya — agen akan kembali ke kredensial tersimpan lingkungan, dan penolakan aplikasi terhadap akun yang salah terlihat seperti kegagalan aplikasi. Apa pun yang Anda berikan sebagai parameter mengalahkan default lingkungan untuk setiap login dalam proses, bukan hanya yang pertama:

  • username / password (atau credentialId / credentialRole) — identitas proses.
  • auth.username / auth.password — mengunci login prasyarat saat Anda juga menggunakan auth.precondition: "login".
  • loginCredentials — akun untuk formulir login yang dijangkau agen di tengah tugas. Ini untuk alur seperti atur kata sandi → dilempar ke halaman masuk → masuk sebagai akun yang baru Anda buat, di mana memisahkan ke beberapa panggilan akan kehilangan status browser.

Setel useEnvironmentCredentials: false saat fallback senyap ke pengguna uji default akan membatalkan pemeriksaan.

Memeriksa halaman yang tidak memerlukan login sama sekali? Berikan useEnvironmentCredentials: false dan jangan sebutkan akun. Kombinasi itu berarti persis seperti yang dikatakan — jangan masuk — dan proses melewati autentikasi sepenuhnya alih-alih mencari formulir login. Gunakan untuk halaman publik, situs pemasaran, dokumentasi, dan apa pun sebelum autentikasi. Ini juga lebih cepat: pada default (auto) agen akan mengikuti tautan "Masuk" dari halaman Anda dan mencoba akun tersimpan lingkungan sebelum mengevaluasi apa pun.

Penggunaan kembali sesi: mengapa pemeriksaan melaporkan "tidak ada formulir login"

Proses tidak masuk setiap kali. Setelah login terverifikasi, backend menangkap sesi akun itu dan memulihkannya pada proses berikutnya untuk identitas yang sama, yang melewati login sepenuhnya — itulah mengapa pemeriksaan dapat secara sah kembali dengan submitted: false dan tanpa formulir login: sudah masuk. Proses yang dipulihkan melaporkan dirinya di logins dengan reason: "restored_session", sehingga Anda dapat membedakannya dari proses yang benar-benar tidak menemukan formulir.

Sesi dikunci per akun, jadi menyebutkan akun yang berbeda tidak akan pernah menggunakan kembali milik orang lain. Dua cara untuk melewati penggunaan kembali:

  • freshSession: true pada satu panggilan — masuk sungguhan sekali ini, lalu tangkap ulang. Gunakan saat alur login adalah yang Anda periksa, saat Anda mencurigai sesi tersimpan basi, atau saat satu-satunya rute aplikasi antar persona adalah keluar.
  • Alat environment, action: "clearSessions" — batalkan sesi tersimpan sehingga proses berikutnya masuk. Persempit dengan username / credentialId; pembersihan tanpa cakupan memerlukan konfirmasi karena setiap akun di lingkungan kemudian mengautentikasi ulang.

Gunakan action: "sessions" untuk melihat apa yang saat ini disimpan lingkungan dan apakah masing-masing akan digunakan kembali.

Hasil melaporkan identitas yang sebenarnya digunakan, sehingga yang salah terlihat alih-alih menyamar sebagai aplikasi yang rusak:

"logins": [
  { "username": "qa+invitefix@example.com", "source": "task", "submitted": true, "authenticated": true }
],
"credentialWarning": {
  "requested": "qa+invitefix@example.com",
  "used": ["qatest123@example.com"],
  "message": "This run signed in with an environment default credential even though '…' was specified. …"
}

source adalah task | explicit | credential_id (akun yang Anda sebutkan) atau env | env_default (akun tersimpan lingkungan). credentialWarning muncul hanya saat Anda menyebutkan akun dan default lingkungan tetap digunakan. loginError muncul saat akun yang disebutkan tidak dapat diselesaikan dan proses menolak mengganti dengan yang berbeda.

Setiap proses yang berhasil mengembalikan blok browserSession di samping tangkapan layar — URL S3 yang telah ditandatangani untuk HAR yang ditangkap (jejak jaringan lengkap) dan log konsol (setiap pesan konsol JS). Gunakan untuk mendeteksi loop refetch, kesalahan hidrasi, dan masalah runtime lain yang lolos pemeriksaan tipe dan pengujian unit:

"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 bersifat sementara (presigned S3) — ambil ulang eksekusi induk melalui executions {action:"get", uuid} untuk memperbarui. harStatus / consoleLogStatus membedakan 'downloaded' (URL dapat diambil), 'not_available' (halaman tidak mengeluarkan apa pun), 'failed' (penangkapan rusak). Pada proses baru, URL biasanya null karena unggahan penangkapan berjalan asinkron setelah agen selesai — polling executions {action:"get", uuid: executionId} hingga status mencapai 'downloaded'. Header Authorization / Cookie / token/secret/api_key dibersihkan di sisi server sebelum artefak disimpan.

trigger_crawl

Menjalankan perayapan agen browser sisi server untuk mengisi grafik pengetahuan proyek. URL localhost dibuat terowongan otomatis. Mengembalikan {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} dengan knowledgeGraph.imported === true pada penyerapan yang berhasil. Blok browserSession (URL HAR + log konsol, bentuk yang sama seperti di atas) juga ada pada perayapan yang selesai.

probe_page

Probe halaman batch ringan tanpa-LLM. Berikan 1-20 URL; masing-masing menavigasi, menetap pada konten (DOM menjadi tenang, terbatas — tidak pernah pada keheningan jaringan, yang tidak pernah dicapai aplikasi langsung), dan mengembalikan status yang dirender — tangkapan layar + metadata halaman + kesalahan konsol terstruktur + ringkasan jaringan. Tidak ada loop agen, tidak ada biaya LLM, tidak ada asersi skenario. Gunakan untuk "apakah saya baru saja merusak /settings?", pemeriksaan asap multi-rute setelah refactor, sapuan per-PR CI, dan pemeriksaan cepat apakah aktif di mana loop agen 60-150 detik check_app_in_browser berlebihan.

ParameterTipeDeskripsi
targetsarray wajib1-20 entri: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring wajibURL publik atau localhost (dibuat terowongan otomatis)
targets[].waitForLoadStateenum'domcontentloaded' (default, + penenangan konten terbatas) / 'load' (juga menunggu embed pihak ketiga) / 'networkidle' (diterima, tidak pernah dikeluarkan — jaringan situs langsung tidak pernah idle)
targets[].waitForSelectorstringSelektor CSS opsional untuk menunggu setelah navigasi
targets[].timeoutMsangkaBatas waktu per-URL, 1000-30000 (default 10000)
includeHtmlbooleanMengembalikan HTML mentah di setiap hasil (default false)
captureScreenshotsbooleanMengembalikan satu PNG per target (default true)

Semua target dalam satu batch berbagi satu terowongan sesi, tetapi hanya batch dengan port yang sama (atau semua publik) yang berbagi satu eksekusi backend — 5 URL pada satu port dalam satu panggilan jauh lebih cepat daripada 5 panggilan paralel satu-URL. Batch yang mencampur beberapa port lokal terurai menjadi satu eksekusi backend berurutan per grup port (tetap satu panggilan, tetap satu results[] gabungan dalam urutan asli Anda, tetapi N perjalanan pulang-pergi backend alih-alih satu — lebih lambat, tidak ditolak). Bidang error per-URL menjaga ketahanan batch: satu target yang gagal tidak menggagalkan yang lain.

Kunci agregasi networkSummary adalah origin + pathname — loop refetch (?n=0..4 berulang kali mengenai endpoint yang sama) runtuh menjadi satu entri dengan jumlah, sehingga /api/poll muncul dengan count: 47 adalah sinyal "loop refetch tak terbatas" yang dapat ditindaklanjuti yang awalnya diminta pengguna.

Anggaran kinerja: <10 detik untuk 1 URL, <25 detik untuk 20. Port mati localhost mengembalikan LocalServerUnreachable dalam <2 detik tanpa membakar eksekusi alur kerja.

project

AksiParameterHasil
get{uuid}Detail proyek terkurasi
list{q?, page?, pageSize?}Ringkasan berpaginate
create{name, platform, (teamUuid|teamName), (repoUuid|repoName)}Proyek yang dibuat

Tim dan repositori diselesaikan dengan uuid atau nama (pencocokan tepat tidak peka huruf; NotFound jika tidak ada, AmbiguousMatch jika banyak). Tidak ada update/delete — ganti nama atau hapus proyek dari aplikasi web DebuggAI.

environment

AksiParameterHasil
get{uuid, projectUuid?}Env dengan kredensial yang disisipkan (kata sandi tidak pernah dikembalikan)
list{projectUuid?, q?, page?, pageSize?}Env dengan paginasi, masing-masing dengan array kredensial
create{name, url, description?, projectUuid?, credentials?}Env yang dibuat (opsional mengisi kredensial awal)
update{uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?}Env yang di-patch; operasi kredensial berjalan hapus → perbarui → tambah
delete{uuid, projectUuid?, confirm?}Menghapus env (menghapus kredensial secara berjenjang) — memerlukan konfirmasi
sessions{uuid, username?, credentialId?}Sesi login yang ditangkap yang dimiliki env, per akun, dengan isUsable dan usableCount
clearSessions{uuid, username?, credentialId?, confirm?}Membatalkannya sehingga proses berikutnya melakukan login sungguhan — penghapusan tanpa batasan memerlukan konfirmasi

projectUuid diselesaikan otomatis dari repositori git saat dihilangkan. Kegagalan per-kredensial muncul di credentialWarnings[] tanpa memblokir operasi env.

sessions / clearSessions mengelola sesi terautentikasi yang hangat yang digunakan ulang oleh backend untuk melewati login (lihat Penggunaan ulang sesi). Isi sesi tidak pernah dikembalikan — cookie sesi adalah kredensial bearer. clearSessions menandai sesi sebagai tidak valid alih-alih menghapus barisnya, sehingga penggunaan ulang berhenti segera sementara riwayat penangkapan tetap dapat dibaca.

test_suite

AksiParameterHasil
list{projectUuid|projectName, search?, page?, pageSize?}Rangkaian dengan paginasi beserta status + tingkat kelulusan
create{name, description, projectUuid|projectName}Rangkaian yang dibuat
run{suiteUuid|(suiteName+project), targetUrl?}Memicu semua pengujian secara asinkron
results{suiteUuid|(suiteName+project)}Rangkaian + hasil per-pengujian
delete{suiteUuid|(suiteName+project), confirm?}Penghapusan lunak — memerlukan konfirmasi

test_case

AksiParameterHasil
create{name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?}Kasus pengujian yang dibuat (tidak dijalankan otomatis)
update{testUuid, name?, description?, agentTaskDescription?}Kasus pengujian yang di-patch
delete{testUuid, confirm?}Penghapusan lunak — memerlukan konfirmasi

executions

AksiParameterHasil
get{uuid}Detail lengkap (nodeExecutions + status + errorInfo) + artefak tangkapan layar/gif
list{status?, projectUuid?, page?, pageSize?}Ringkasan dengan paginasi

404 dari backend muncul sebagai isError: true dengan {error: 'NotFound', message, uuid}. Kredensial selalu dikembalikan tanpa kata sandi.

Paginasi

Setiap respons mode-filter dipaginasi. Bentuk respons:

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

Berikan page opsional (berindeks 1, default 1) dan pageSize (default 20, maks 200; nilai yang terlalu besar dibatasi). Tidak ada respons yang pernah dipotong secara diam-diam.

Sumber Daya

Selain alat, server mengekspos entitas hanya-baca sebagai sumber daya MCP sehingga klien dapat menjelajah dan menyebutnya dengan @ sebagai konteks:

URIIsi
debugg-ai://projectsSemua proyek (halaman pertama)
debugg-ai://environmentsLingkungan untuk proyek yang terdeteksi otomatis
debugg-ai://executionsEksekusi terbaru (halaman pertama)
debugg-ai://project/{uuid}Satu proyek, detail lengkap
debugg-ai://environment/{uuid}Satu lingkungan (kredensial disisipkan, kata sandi disunting)
debugg-ai://execution/{uuid}Satu eksekusi, detail node lengkap + tautan artefak

Pembacaan diteruskan ke penangan yang sama dengan alat project / environment / executions, sehingga data dan autentikasinya identik. Sumber daya bersifat aditif — klien tanpa dukungan sumber daya tetap menggunakan alat.

Invariant keamanan

  • Kata sandi bersifat tulis-saja. Kata sandi tidak pernah muncul di badan respons mana pun dari alat mana pun.
  • URL terowongan (*.ngrok.debugg.ai) dihapus dari semua respons agen peramban, termasuk teks yang ditulis agen.
  • 404 dari backend muncul sebagai isError: true dengan {error: 'NotFound', ...}, tidak pernah sebagai pengecualian yang dilempar.
  • DEBUGGAI_API_KEY yang hilang muncul sebagai kesalahan alat terstruktur pada pemanggilan pertama — server tetap mendaftar dan mencantumkan alat secara normal.

Migrasi ke v3.0.0 (alat berbasis aksi)

v3 menggabungkan 20 alat per-kata-kerja menjadi 8 alat berbasis aksi. Alat lama → tool {action} baru:

DihapusPengganti
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_projectDihapus — gunakan aplikasi web 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 parameterDihapus — selalu headless

Aksi delete kini memerlukan konfirmasi (prompt elisitasi, atau confirm: true). Klien mengambil permukaan baru saat MCP dimulai ulang.

Migrasi dari v1.x (perubahan besar di v2.0.0)

v2 menggabungkan permukaan 22 alat menjadi 11. Pemetaan alat lama → alat baru:

DihapusPengganti
list_projects, get_projectsearch_projects (mode uuid vs mode filter)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — kredensial disisipkan di setiap env
create_credentialcreate_environment({credentials: [...]}) seed, atau update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — resolusi nama dengan penanganan ambiguitas
list_executions, get_executionsearch_executions
cancel_executionDihapus — penghentian backend bersifat otomatis

Perubahan bentuk respons: bidang count telanjang pada respons daftar telah hilang — gunakan pageInfo.totalCount.

Konfigurasi

Variabel envWajibTujuan
DEBUGGAI_API_KEYyaKunci API backend. Alias: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URLtidakURL dasar backend. Default ke https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPEtidaktoken (default) atau bearer.
DEBUGGAI_EVAL_TEMPLATEtidakMenimpa slug alur kerja Evaluasi Aplikasi yang dituju check_app_in_browser. Default ke flow/e2es/app-eval. Pengiriman mengunci slug ini sehingga penggantian nama templat backend tidak dapat merusaknya.
LOG_LEVELtidakerror / warn / info (default) / debug.
POSTHOG_API_KEYtidakMenimpa kunci proyek telemetri yang disematkan (mis. fork pribadi).
DEBUGGAI_TELEMETRY_DISABLEDtidakSetel ke 1 / true / yes / on untuk menonaktifkan telemetri sepenuhnya.
DEBUGGAI_API_KEY=your_api_key

Transport HTTP / jarak jauh (opsional)

Secara default server menggunakan stdio (npx lokal). Server juga dapat berjalan sebagai MCP jarak jauh multi-pengguna yang dihosting melalui Streamable HTTP tanpa status + OAuth:

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

Ini adalah Server Sumber Daya OAuth: setiap POST /mcp memerlukan Authorization: Bearer <token>; token yang hilang/tidak valid mendapatkan 401 dengan WWW-Authenticate yang menunjuk ke metadata RFC 9728, dan klien menjalankan alur OAuth terhadap server otorisasi yang diiklankan. Bearer bersifat cakupan-permintaan — api.debugg.ai memvalidasinya.

Titik akhirTujuan
POST /mcpMCP Streamable HTTP (dilindungi bearer)
GET /.well-known/oauth-protected-resourceMetadata RFC 9728 (penemuan server otorisasi)
GET /healthPemeriksaan kesehatan penyeimbang beban / ECS
Variabel envDefaultTujuan
DEBUGGAI_MCP_TRANSPORTstdioSetel ke http untuk transport jarak jauh
PORT3000Port listen HTTP
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.aiURL sumber daya publik server ini (RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.aiServer otorisasi yang diiklankan ke klien
DEBUGGAI_TOKEN_TYPEtokenSetel ke bearer sehingga token OAuth diteruskan sebagai Authorization: Bearer

Instalasi stdio tidak memerlukan semua ini.

Penerapan multi-replika (go/no-go sebelum peluncuran): status terowongan (sesi terowongan ngrok, instans Caddy-nya, dan kunci rute port-nya) berada dalam proses, dikunci per pemanggil oleh hash dari token bearer — tidak ada koordinasi lintas proses. Menjalankan beberapa replika di belakang penyeimbang beban round-robin biasa berarti panggilan satu pemanggil dapat mendarat di replika berbeda dan membuat satu terowongan per replika yang mereka temui alih-alih satu untuk seluruh sesi (biaya ngrok ekstra, dibatasi oleh jumlah replika, menyembuhkan diri melalui penghentian otomatis idle 55 menit yang ada — tidak pernah menjadi bug kebenaran lintas sesi, karena setiap panggilan alat tunggal tetap di satu replika selama durasinya). Untuk mendapatkan perilaku "satu terowongan per sesi" yang dimaksud pada penerapan HTTP multi-replika, konfigurasikan routing afinitas-sesi di penyeimbang beban (sticky/consistent-hash yang dikunci pada identitas yang sama yang diturunkan getSessionKey() — dalam praktiknya, token bearer Authorization pemanggil). Lihat docs/local-tunnel-multiplexer-architecture-2026-07-31.md §2.1 untuk alasan lengkap dan jalur penurunan yang jujur jika ini tidak dikonfigurasi.

Telemetri

Server MCP dikirim dengan telemetri yang diaktifkan secara default — kunci proyek PostHog tulis-saja yang disematkan (phc_*) sehingga tim dapat mengamati tingkat hit cache, irama polling, keandalan terowongan, dan metrik operasional lainnya di seluruh basis instalasi. Peristiwa yang ditangkap:

PeristiwaKapan
tool.executed / tool.failedPer panggilan alat
workflow.executedPer eksekusi agen peramban (membawa pollCount, durationMs, finalIntervalMs)
tunnel.provisioned / tunnel.provision_retry / tunnel.stoppedPer peristiwa siklus hidup terowongan
template.lookup / project.lookupHit/miss cache dengan durationMs pada panggilan dingin

Postur privasi:

  • ID yang berbeda adalah SHA-256(api_key).slice(0, 16) — tidak pernah kunci mentah, tanpa PII.
  • Kunci phc_* bersifat tulis-saja menurut konvensi PostHog; aman untuk disematkan di sumber.
  • Setel DEBUGGAI_TELEMETRY_DISABLED=1 untuk memilih keluar sepenuhnya (menyelesaikan ke penyedia no-op; tidak ada peristiwa yang meninggalkan proses).

Mode aktif dicatat saat 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)

Pengembangan Lokal

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

Rangkaian evaluasi memunculkan server MCP yang dibangun sebagai subproses, menjalankan setiap alat terhadap backend nyata, dan menulis artefak per-alur ke scripts/evals/artifacts/<timestamp>/. Lihat scripts/evals/flows/ untuk skenario individual.

Registrasi MCP: debugg-ai-local vs debugg-ai

Repositori ini mengirim .mcp.json yang mendaftarkan server bercakupan proyek bernama debugg-ai-local yang menunjuk ke node dist/index.js — kode lokal yang baru dibangun. Ini hanya aktif ketika direktori kerja Claude Code adalah repositori ini.

Proyek lain Anda harus menggunakan registrasi bercakupan pengguna debugg-ai yang menarik dari paket npm yang diterbitkan:

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

Setelah mengedit kode di sini, jalankan npm run mcp:local (yang hanya membangun ulang) sehingga pemanggilan berikutnya dari debugg-ai-local mengambil perubahan Anda.

Tautan

Dashboard · Dokumen · Masalah · Discord


Lisensi Apache-2.0 © 2025 DebuggAI