Debugg AI
resmiKod üretme aracılarınızın, Debugg AI test platformu aracılığıyla uzak tarayıcılardaki yeni kod değişikliklerine karşı sıfır yapılandırmalı uçtan uca testler oluşturmasını ve çalıştırmasını sağlayın.
Debugg AI MCP ile neler yapabilirsiniz?
- AI tarayıcı testlerini çalıştırın —
check_app_in_browserile herhangi bir URL veya localhost uygulamasını doğal dil talimatlarıyla test etmeyi isteyin; ekran görüntüleriyle birlikte geçti/kaldı sonucu döndürür. - Birden fazla sayfayı hızlıca inceleyin —
probe_pagekullanarak 1-20 URL'yi konsol hataları, ağ sorunları ve işlenmiş durum için LLM maliyeti olmadan toplu olarak kontrol edin. - Test ortamlarını yönetin —
environmentaracıyla kimlik bilgileri ve yetkili SSO ana bilgisayarları içeren ortamlar oluşturun, güncelleyin veya listeleyin. - Site taramalarını tetikleyin — Projenin bilgi grafiğini sunucu tarafı tarayıcı aracısı taramasıyla doldurmak için
trigger_crawlkomutunu çalıştırın. - Test paketlerini çalıştırın ve izleyin — Paketler oluşturun, eşzamansız çalıştırmaları tetikleyin ve
test_suiteeylemleriyle test başına sonuçları alın. - Yürütme yapıtlarını inceleyin — Çalışma zamanı sorunlarını hata ayıklamak için
executionsaracılığıyla tam çalıştırma ayrıntılarını, HAR ağ izlerini ve konsol günlüklerini alın.
Dokümantasyon
Debugg AI — MCP Sunucusu
Yapay zeka destekli tarayıcı testleri, Model Context Protocol üzerinden. Herhangi bir URL'ye (veya localhost'a) yönlendirin ve ne test edileceğini tanımlayın — bir yapay zeka ajanı uygulamanızda gezinir ve ekran görüntüleriyle birlikte geçti/kaldı sonucunu döndürür.
Kurulum
Node.js 20.20.0 veya sonrası gerekir (posthog-node@^5.26.0 kaynaklı geçişli gereksinim).
http://localhost:... URL'lerini test etmek için caddy ikili dosyası gerekir — check_app_in_browser,
probe_page ve trigger_crawl, localhost hedeflerini yerel bir Caddy ters proxy üzerinden tüneller.
Bu otomatik olarak kurulur: @radically-straightforward/caddy npm bağımlılığı, platformunuz için sabitlenmiş bir
Caddy sürümünü npm install/npx sırasında indirir — normal durumda kendiniz bir şey kurmanıza gerek yoktur. Bu paketin indirdiği tek ikili dosya artık budur; tünel istemcisinin kendisi
saf TypeScript'tir — ngrok ajanını getiren ngrok paketinin yerini almıştır.
Bu indirme hiç çalışmadıysa (npm install --ignore-scripts, çevrimdışı/hava boşluklu kurulum), CADDY_BIN'i
kendi kurulumunuza yönlendirin (brew install caddy / apt install caddy / bkz.
caddyserver.com/docs/install) — eksik olması, ilk localhost-URL çağrısında
sessiz bir takılma değil, net bir hata olarak ortaya çıkar. Genel-URL çağrıları, her
tarayıcı dışı araç ve kendi özel tünelini kullanan ve Caddy'yi tamamen atlayan
test_suite {action:"run"} her iki durumda da buna ihtiyaç duymaz.
debugg.ai adresinden bir API anahtarı alın, ardından MCP istemci yapılandırmanıza ekleyin:
{
"mcpServers": {
"debugg-ai": {
"command": "npx",
"args": ["-y", "@debugg-ai/debugg-ai-mcp"],
"env": {
"DEBUGGAI_API_KEY": "your_api_key_here"
}
}
}
}
Veya Docker ile:
docker run -i --rm --init -e DEBUGGAI_API_KEY=your_api_key quinnosha/debugg-ai-mcp
Dockerfile'in npm install adımı, caddy'i yerel kurulumların yaptığı gibi
aynı otomatik şekilde, prensipte alırdı — ancak bu yazının yazıldığı tarih itibarıyla Dockerfile,
derlemenin artık ihtiyaç duyduğu birkaç dizini (handlers, tools, types, config) COPY yapmıyor ve hâlâ artık var olmayan bir tunnels/
dizinine referans veriyor, bu nedenle taze bir derleme muhtemelen bu önemli hale gelmeden başarısız olur. Bu,
Caddy ile ilgisi olmayan, önceden var olan bir boşluktur. Şu anda yayınlanan quinnosha/debugg-ai-mcp imajı
her durumda Caddy bağımlılığından öncedir — check_app_in_browser/probe_page/trigger_crawl adreslerine yapılan localhost-URL çağrıları,
bu imajın içinde CaddyBinaryNotFoundError ile başarısız olur; yeniden derlenip (Dockerfile düzeltilerek) yeniden yayınlanana veya CADDY_BIN ayrı olarak hazırlanmış bir tanesine işaret edene kadar. Genel-URL çağrıları, tarayıcı dışı araçlar ve test_suite {action:"run"}
her iki durumda da etkilenmez.
Araçlar
Sunucu 8 araç sunar: üç Tarayıcı aracı artı yönetilen her varlık için bir eylem tabanlı araç. Öne çıkan araçlar check_app_in_browser (tam yapay zeka ajanı) ve probe_page (hafif, LLM'siz sayfa probu). Geri kalanlar — project, environment, test_suite, test_case, executions — her biri işlemi seçen bir action ayırt edici (ör. {"action":"list"}) alır. Yıkıcı delete eylemleri onay gerektirir (desteklenen yerlerde bir aydınlatma istemi, aksi takdirde confirm: true).
Tarayıcı
check_app_in_browser
Uygulamanıza karşı bir yapay zeka tarayıcı ajanı çalıştırır. Ajan gezinir, etkileşime girer ve ekran görüntüleriyle birlikte geri bildirimde bulunur. Localhost URL'leri, debugg tünel sunucusu üzerinden otomatik olarak tünellenir.
| Parametre | Tür | Açıklama |
|---|---|---|
description | string gerekli | Ne test edileceği (doğal dil) |
url | string gerekli | Hedef URL — http://localhost:3000 otomatik tünellenir |
environmentId | string | Belirli bir ortamın UUID'si |
credentialId | string | Belirli bir kimlik bilgisinin UUID'si |
credentialRole | string | Role göre bir kimlik bilgisi seçin (ör. admin, guest) |
username | string | Giriş için kullanıcı adı (geçici — kalıcı değil) |
password | string | Giriş için şifre (geçici — kalıcı değil) |
loginCredentials | array | Ajanın görev sırasında karşılaştığı girişler için hesaplar — [{username, password, label?}] |
useEnvironmentCredentials | boolean | Varsayılan true. false, ortamın saklanan kimlik bilgilerinin otomatik doldurulmasını yasaklar; adlandırılmış hesap yoksa hiç giriş yapma anlamına gelir |
freshSession | boolean | Varsayılan false. true, o hesap için tutulan sıcak oturumu yeniden kullanmak yerine gerçek bir girişi zorlar |
auth | object | Kimlik doğrulama ön koşulu — {precondition, entryUrl, deepUrl, environmentId, username, password} |
repoName | string | Otomatik algılanan git deposu adını geçersiz kıl (ör. my-org/my-repo) |
Çağrı başına odaklanmış tek bir kontrol. Ajanın ~25 adımlık dahili bir bütçesi vardır; daha geniş paketleri birden çok çağrıya bölün.
Kimlik bilgileri: bunları düzyazı olarak değil, parametre olarak iletin
Yalnızca description içinde bir hesap adlandırmak, ajanın onu kullanmasını sağlamaz — ortamın saklanan kimlik bilgisine geri döner ve uygulamanın yanlış hesabı reddetmesi, bir uygulama hatası gibi görünür. Parametre olarak ilettiğiniz her şey, yalnızca ilk değil, çalıştırmadaki her giriş için ortam varsayılanını yener:
username/password(veyacredentialId/credentialRole) — çalıştırmanın kimliği.auth.username/auth.password—auth.precondition: "login"kullandığınızda ön koşul girişini sabitler.loginCredentials— ajanın görevin ortasında ulaştığı bir giriş formu için hesaplar. Bu, şifre belirle → oturum açma sayfasına yönlendiril → az önce oluşturduğunuz hesapla giriş yap gibi akışlar içindir; burada ayrı çağrılara bölmek tarayıcı durumunu kaybeder.
Varsayılan test kullanıcısına sessiz bir geri dönüş kontrolü geçersiz kılacağında useEnvironmentCredentials: false ayarlayın.
Çapraz alan SSO'su mu? Bir çalıştırma, kimlik bilgilerini yalnızca uygulamanın kendi ana bilgisayarına ve alt alan adlarına yazar; başka bir alandaki oturum açma sayfası offscope_host olarak reddedilir. Kimlik sağlayıcının ana bilgisayarını ortamın authorizedCredentialHosts alanına ekleyin (bkz. environment).
Hiç giriş gerektirmeyen bir sayfayı mı kontrol ediyorsunuz? useEnvironmentCredentials: false iletin ve hiçbir hesap adlandırmayın. Bu kombinasyon tam olarak söylediği anlama gelir — giriş yapma — ve çalıştırma, bir giriş formu aramak yerine kimlik doğrulamayı tamamen atlar. Genel sayfalar, pazarlama siteleri, dokümanlar ve kimlik doğrulama öncesi her şey için kullanın. Ayrıca daha hızlıdır: varsayılan (auto) üzerinde ajan, sayfanızdaki bir "Giriş yap" bağlantısını takip eder ve herhangi bir şeyi değerlendirmeden önce ortamın saklanan hesabını dener.
Oturum yeniden kullanımı: bir kontrolün neden "giriş formu yok" bildirebileceği
Çalıştırmalar her seferinde giriş yapmaz. Doğrulanmış bir girişten sonra arka uç, o hesabın oturumunu yakalar ve aynı kimlik için sonraki çalıştırmada onu geri yükler; bu da girişi tamamen atlar — bu yüzden bir kontrol meşru olarak submitted: false ve giriş formu olmadan geri gelebilir: zaten oturum açılmıştı. Geri yüklenen bir çalıştırma, kendisini logins içinde reason: "restored_session" ile bildirir; böylece onu gerçekten form bulamayan bir çalıştırmadan ayırt edebilirsiniz.
Oturumlar hesap başına anahtarlanır, bu nedenle farklı bir hesap adlandırmak asla başkasınınkini yeniden kullanmaz. Yeniden kullanımı atlamanın iki yolu:
- Tek bir çağrıda
freshSession: true— bu sefer gerçekten giriş yapın, ardından yeniden yakalayın. Giriş akışının kendisini kontrol ettiğinizde, saklanan oturumun bayat olduğundan şüphelendiğinizde veya uygulamanın kişilikler arasındaki tek yolunun çıkış yapmak olduğu durumlarda kullanın. environmentaracı,action: "clearSessions"— saklanan oturumları geçersiz kılın, böylece sonraki çalıştırmalar giriş yapar.username/credentialIdile daraltın; kapsamsız temizlikler onay gerektirir çünkü ortamdaki her hesap daha sonra yeniden kimlik doğrular.
Bir ortamın şu anda ne tuttuğunu ve her birinin yeniden kullanılıp kullanılmayacağını görmek için action: "sessions" kullanın.
Sonuçlar gerçekte kullanılan kimliği bildirir; böylece yanlış bir kimlik, bozuk bir uygulama gibi gizlenmek yerine görünür olur:
"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 şunlardan biridir: task | explicit | credential_id (adlandırdığınız bir hesap) veya env | env_default (ortamın saklanan hesabı). submitted yalnızca kimlik bilgileri gerçekten yazılıp gönderildiğinde doğrudur; reason ne olduğunu söyler (ör. offscope_host, restored_session) ve detail, mevcut olduğunda, bunun insan tarafından okunabilir bir açıklamasıdır — bir offscope_host reddi için ana bilgisayarı ve onu nasıl yetkilendireceğinizi adlandırır. credentialWarning yalnızca bir hesap adlandırdığınızda ve farklı bir hesap için bir ortam varsayılanı gerçekten gönderildiğinde görünür — asla reddedilen veya atlanan bir giriş için değil. loginError, adlandırılmış bir hesap çözülemediğinde ve çalıştırma farklı bir tane ikame etmeyi reddettiğinde görünür.
Her başarılı çalıştırma, ekran görüntüsünün yanında bir browserSession bloğu döndürür — yakalanan HAR (tam ağ izi) ve konsol günlüğü (her JS konsol mesajı) için önceden imzalanmış S3 URL'leri. Yeniden getirme döngülerini, hidrasyon hatalarını ve tür denetimlerini ve birim testlerini geçen diğer çalışma zamanı sorunlarını tespit etmek için bunları kullanın:
"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'ler kısa ömürlü önceden imzalanmış S3'tür — yenilemek için üst yürütmeyi executions {action:"get", uuid} ile yeniden getirin. harStatus / consoleLogStatus şunları ayırt eder: 'downloaded' (URL getirilebilir), 'not_available' (sayfa hiçbir şey yaymadı), 'failed' (yakalama bozuldu). Yeni bir çalıştırmada URL'ler genellikle null olur çünkü yakalama, ajan bitirdikten sonra eşzamansız olarak yüklenir — durum 'downloaded' değerine ulaşana kadar executions {action:"get", uuid: executionId} yoklayın. Yetkilendirme / Çerez / token/secret/api_key başlıkları, yapılar kalıcı hale getirilmeden önce sunucu tarafında temizlenir.
trigger_crawl
Projenin bilgi grafiğini doldurmak için sunucu tarafında bir tarayıcı ajanı taraması başlatır. Localhost URL'leri otomatik olarak tünellenir. Başarılı alımda knowledgeGraph.skipped === false ile {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} döndürür. crawlSummary ve knowledgeGraph yalnızca arka uç tarama / içe aktarma düğümlerinin bildirdiği anahtarları taşır — eksik bir sayı yoktur, asla doldurulmuş bir 0 değildir. browserSession bloğu (HAR + konsol-günlüğü URL'leri, yukarıdakiyle aynı şekil) tamamlanan taramalarda da mevcuttur.
probe_page
Hafif, LLM'siz toplu sayfa probu. 1-20 URL iletin; her biri gezinir, içerikte durulur (DOM'un sessizleşmesi, sınırlı — asla canlı bir uygulamanın asla ulaşamayacağı ağ sessizliğinde değil) ve işlenmiş durumu döndürür — ekran görüntüsü + sayfa meta verileri + yapılandırılmış konsol hataları + ağ özeti. Ajan döngüsü yok, LLM maliyeti yok, senaryo iddiası yok. "/settings'i mi bozdum?", yeniden düzenleme sonrası çok yönlü duman testi, CI başına PR taramaları ve check_app_in_browser'in 60-150sn ajan döngüsünün aşırı olduğu hızlı çalışıyor mu kontrolleri için kullanın.
| Parametre | Tür | Açıklama |
|---|---|---|
targets | array gerekli | 1-20 giriş: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}] |
targets[].url | string gerekli | Genel URL veya localhost (otomatik tünellenir) |
targets[].waitForLoadState | enum | 'domcontentloaded' (varsayılan, + sınırlı bir içerik durulması) / 'load' (ayrıca üçüncü taraf yerleşiklerini bekler) / 'networkidle' (kabul edilir, asla verilmez — canlı bir sitenin ağı boşta kalmaz) |
targets[].waitForSelector | string | Gezinmeden sonra beklemek için isteğe bağlı CSS seçici |
targets[].timeoutMs | number | URL başına zaman aşımı, 1000-30000 (varsayılan 10000) |
includeHtml | boolean | Her sonuçta ham HTML döndür (varsayılan false) |
captureScreenshots | boolean | Hedef başına bir PNG döndür (varsayılan true) |
Bir toplu işteki tüm hedefler tek bir oturum tünelini paylaşır, ancak yalnızca aynı bağlantı noktasındaki (veya tamamen genel) toplu işler tek bir arka uç yürütmeyi paylaşır — tek çağrıda bir bağlantı noktasındaki 5 URL, 5 paralel tek-URL çağrısından önemli ölçüde daha hızlıdır. Birden çok yerel bağlantı noktasını karıştıran bir toplu iş, bağlantı noktası grubu başına bir sıralı arka uç yürütmesine ayrışır (yine tek çağrı, yine orijinal sıranızda tek bir birleştirilmiş results[], ancak bir yerine N arka uç gidiş-dönüşü — daha yavaş, reddedilmez). URL başına error alanı toplu iş dayanıklılığını korur: tek bir başarısız hedef diğerlerini başarısız etmez.
networkSummary toplama anahtarı origin + pathname'dır — yeniden getirme döngüleri (?n=0..4 aynı uç noktayı tekrar tekrar çağıran) sayı ile birlikte tek bir girdiye daraltılır; böylece /api/poll ile birlikte görünen count: 47, kullanıcıların başlangıçta istediği eyleme dönüştürülebilir "sonsuz yeniden getirme döngüsü" sinyalidir.
Performans bütçesi: 1 URL için <10 sn, 20 URL için <25 sn. Localhost ölü bağlantı noktası, bir iş akışı yürütmesi harcamadan <2 sn içinde LocalServerUnreachable döndürür.
project
| Eylem | Parametreler | Sonuç |
|---|---|---|
get | {uuid} | Seçilmiş proje detayı |
list | {q?, page?, pageSize?} | Sayfalanmış özetler |
create | {name, platform, (teamUuid|teamName), (repoUuid|repoName)} | Oluşturulan proje |
Takım ve depo, uuid veya ad ile çözümlenir (büyük/küçük harf duyarsız tam eşleşme; hiçbiri yoksa NotFound, birden fazlaysa AmbiguousMatch). update/delete yoktur — projeyi DebuggAI web uygulamasından yeniden adlandırın veya silin.
environment
| Eylem | Parametreler | Sonuç |
|---|---|---|
get | {uuid, projectUuid?} | Kimlik bilgileri satır içi eklenmiş ortam (parolalar asla döndürülmez) |
list | {projectUuid?, q?, page?, pageSize?} | Her birinde kimlik bilgileri dizisi bulunan sayfalanmış ortamlar |
create | {name, url, description?, projectUuid?, credentials?, authorizedCredentialHosts?} | Oluşturulan ortam (isteğe bağlı olarak kimlik bilgilerini ekler) |
update | {uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?, authorizedCredentialHosts?} | Yamanmış ortam; kimlik bilgisi işlemleri kaldır → güncelle → ekle sırasıyla çalışır |
delete | {uuid, projectUuid?, confirm?} | Ortamı siler (kimlik bilgilerini basamaklı olarak siler) — onay gerektirir |
sessions | {uuid, username?, credentialId?} | Ortamın tuttuğu, hesap başına, her biri kendi isUsable değerine sahip yakalanmış oturum açma oturumları |
clearSessions | {uuid, username?, credentialId?, confirm?} | Bunları geçersiz kılar, böylece sonraki çalıştırma gerçekten oturum açar — kapsam dışı temizlemeler onay gerektirir |
projectUuid, atlandığında git deposundan otomatik olarak çözümlenir. Kimlik bilgisi başına hatalar, ortam işlemini engellemeden credentialWarnings[] içinde yüzeye çıkar.
authorizedCredentialHosts, bir çalıştırmanın uygulamanın kendi ana bilgisayarı dışında bu ortamın kimlik bilgilerine girebileceği ana bilgisayarları listeler — çapraz alan SSO için IdP ana bilgisayarını buraya ekleyin (örn. ["auth.example.com"]). Yalnızca çıplak ana bilgisayar adları: şema, yol, bağlantı noktası veya joker karakter yok (uygulamanın ana bilgisayarının alt alan adları zaten kapsamdadır). update üzerinde listeyi değiştirir; [] onu temizler. get/list, sunucu desteklediğinde onu döndürür. Yanıt, kaydedilen listeyi yansıtır; sunucu bunu kalıcı hale getirmediyse (eski sunucular alanı yok sayar), sonuç sessiz bir başarı yerine authorizedCredentialHostsWarning: {requested, returned} taşır.
sessions / clearSessions, arka ucun oturum açmayı atlamak için yeniden kullandığı sıcak kimliği doğrulanmış oturumları yönetir (bkz. Oturum yeniden kullanımı). Oturum içerikleri asla döndürülmez — bir oturum çerezi, taşıyıcı kimlik bilgisidir. clearSessions, satırları silmek yerine oturumları geçersiz olarak işaretler; böylece yeniden kullanım hemen dururken yakalama geçmişi okunabilir kalır.
test_suite
| Eylem | Parametreler | Sonuç |
|---|---|---|
list | {projectUuid|projectName, search?, page?, pageSize?} | Durum + geçme oranı ile sayfalanmış paketler |
create | {name, description, projectUuid|projectName} | Oluşturulan paket |
run | {suiteUuid|(suiteName+project), targetUrl?} | Tüm testleri eşzamansız olarak tetikler |
results | {suiteUuid|(suiteName+project)} | Paket + test başına sonuçlar |
delete | {suiteUuid|(suiteName+project), confirm?} | Yumuşak silme — onay gerektirir |
test_case
| Eylem | Parametreler | Sonuç |
|---|---|---|
create | {name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?} | Oluşturulan test senaryosu (otomatik çalıştırılmaz) |
update | {testUuid, name?, description?, agentTaskDescription?} | Yamanmış test senaryosu |
delete | {testUuid, confirm?} | Yumuşak silme — onay gerektirir |
executions
| Eylem | Parametreler | Sonuç |
|---|---|---|
get | {uuid} | Tam detay (nodeExecutions + durum + errorInfo) + ekran görüntüsü/gif yapıtları |
list | {status?, projectUuid?, page?, pageSize?} | Sayfalanmış özetler |
Arka uçtan 404, {error: 'NotFound', message, uuid} ile birlikte isError: true olarak yüzeye çıkar. Kimlik bilgileri her zaman parolalar olmadan döndürülür.
Sayfalama
Her list yanıtı sayfalanmıştır. Yanıt şekli:
{
"pageInfo": { "page": 1, "pageSize": 20, "totalCount": 47, "totalPages": 3, "hasMore": true },
"<items>": [ ... ]
}
İsteğe bağlı page (1 tabanlı, varsayılan 1) ve pageSize (varsayılan 20, maksimum 200; aşırı büyük değerler sınırlandırılır) iletin. Hiçbir yanıt asla sessizce kesilmez.
Bir get, tek nesneyi tekil adı altında döndürür — {project}, {execution}, {project, environment} — pageInfo olmadan.
Kaynaklar
Araçların yanında sunucu, salt okunur varlıkları MCP kaynakları olarak sunar; böylece istemciler bunlara göz atabilir ve bağlam olarak @-bahsedebilir:
| URI | Ne |
|---|---|
debugg-ai://projects | Tüm projeler (ilk sayfa) |
debugg-ai://environments | Otomatik algılanan proje için ortamlar |
debugg-ai://executions | Son yürütmeler (ilk sayfa) |
debugg-ai://project/{uuid} | Tek proje, tam detay |
debugg-ai://environment/{uuid} | Tek ortam (kimlik bilgileri satır içi, parolalar gizlenmiş) |
debugg-ai://execution/{uuid} | Tek yürütme, tam düğüm detayı + yapıt bağlantıları |
Okumalar, project / environment / executions araçlarıyla aynı işleyicilere dağıtılır; böylece veri ve kimlik doğrulama aynıdır. Kaynaklar ek niteliktedir — kaynak desteği olmayan istemciler araçları kullanmaya devam eder.
Güvenlik değişmezleri
- Parolalar yalnızca yazılabilir. Hiçbir araçtan gelen hiçbir yanıt gövdesinde asla görünmezler.
- Tünel URL'leri (
*.tunnel.debugg.aive geçmiş çalıştırmaların hâlâ başvurduğu kullanımdan kaldırılmış*.ngrok.debugg.ai), aracı tarafından yazılmış metin de dahil olmak üzere tüm tarayıcı aracı yanıtlarından çıkarılır. - Arka uçtan 404'ler, fırlatılmış istisnalar olarak değil,
{error: 'NotFound', ...}ile birlikteisError: trueolarak yüzeye çıkar. - Eksik
DEBUGGAI_API_KEY, ilk çağrıda yapılandırılmış bir araç hatası olarak yüzeye çıkar — sunucu yine de araçları normal şekilde kaydeder ve listeler.
v6.0.0'a geçiş (arka uç kararları, MCP tarafından yazılmış metin yok)
Bir çalıştırma kararı pass | fail | error'dir ve arka ucun reason değeri aynen aktarılır. Hiçbir test denememiş bir çalıştırma outcome: null, skipped: true, skipReason okur.
| Kaldırılan | Değiştirme |
|---|---|
success | outcome |
failureCategory | outcome + reason |
stepsTaken / stepsBudget / stepsRemaining | budget: {maxSteps, usedSteps} |
failedNode | errorInfo |
get → projects[0] / executions[0] / environments[0] + pageInfo + filter | {project} / {execution} / {project, environment} |
message / note uyarılar ve sonuçlar üzerinde | yalnızca yapılandırılmış alanlar |
Tam liste: CHANGELOG.md 6.0.0.
v3.0.0'a geçiş (eylem tabanlı araçlar)
v3, 20 fiil başına aracı 8 eylem tabanlı araçta birleştirdi. Eski araç → yeni tool {action}:
| Kaldırılan | Değiştirme |
|---|---|
search_projects | project {action:"get"} / project {action:"list"} |
create_project | project {action:"create"} |
update_project, delete_project | Kaldırıldı — DebuggAI web uygulamasını kullanın |
search_environments | environment {action:"get"} / {action:"list"} |
create_environment / update_environment / delete_environment | environment {action:"create"|"update"|"delete"} |
create_test_suite / search_test_suites / run_test_suite / get_test_suite_results / delete_test_suite | test_suite {action:"create"|"list"|"run"|"results"|"delete"} |
create_test_case / update_test_case / delete_test_case | test_case {action:"create"|"update"|"delete"} |
search_executions | executions {action:"get"|"list"} |
trigger_crawl headless parametresi | Kaldırıldı — her zaman başsız |
delete eylemleri artık onay gerektirir (sorgulama istemi veya confirm: true). İstemciler, MCP yeniden başlatıldığında yeni yüzeyi alır.
v1.x'ten geçiş (v2.0.0'da sonlandırıcı değişiklik)
v2, 22 araçlık yüzeyi 11'e daralttı. Eski araç → yeni araç eşlemesi:
| Kaldırılan | Değiştirme |
|---|---|
list_projects, get_project | search_projects (uuid modu vs filtre modu) |
list_environments, get_environment | search_environments |
list_credentials, get_credential | search_environments — kimlik bilgileri her ortamda satır içi |
create_credential | create_environment({credentials: [...]}) tohumu veya update_environment({addCredentials: [...]}) |
update_credential | update_environment({updateCredentials: [{uuid, ...patch}]}) |
delete_credential | update_environment({removeCredentialIds: [uuid]}) |
list_teams, list_repos | create_project({teamName, repoName}) — belirsizlik işleme ile ad çözümleme |
list_executions, get_execution | search_executions |
cancel_execution | Kaldırıldı — arka uç kapanması otomatiktir |
Yanıt şekli değişiklikleri: liste yanıtlarındaki çıplak count alanı gitti — pageInfo.totalCount kullanın.
Yapılandırma
| Ortam değişkeni | Gerekli | Amaç |
|---|---|---|
DEBUGGAI_API_KEY | evet | Arka uç API anahtarı. Takma adlar: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN. |
DEBUGGAI_API_URL | hayır | Arka uç temel URL'si. Varsayılan: https://api.debugg.ai. |
DEBUGGAI_TOKEN_TYPE | hayır | token (varsayılan) veya bearer. |
DEBUGGAI_EVAL_TEMPLATE | hayır | check_app_in_browser'ün gönderdiği App Evaluation iş akışı slug'ını geçersiz kılar. Varsayılan: flow/e2es/app-eval. Gönderim bu slug'a sabitlenir; böylece arka uç şablon yeniden adlandırması onu bozamaz. |
LOG_LEVEL | hayır | error / warn / info (varsayılan) / debug. |
POSTHOG_API_KEY | hayır | Gömülü telemetri proje anahtarını geçersiz kılar (örn. özel çatal). |
DEBUGGAI_TELEMETRY_DISABLED | hayır | Telemetriyi tamamen devre dışı bırakmak için 1 / true / yes / on olarak ayarlayın. |
DEBUGGAI_API_KEY=your_api_key
Uzak / HTTP taşıması (isteğe bağlı)
Varsayılan olarak sunucu stdio (yerel npx) konuşur. Bunun yerine, durumsuz Streamable HTTP + OAuth üzerinden barındırılan, çok kullanıcılı bir uzak MCP olarak çalışabilir:
DEBUGGAI_MCP_TRANSPORT=http PORT=3000 DEBUGGAI_TOKEN_TYPE=bearer npx -y @debugg-ai/debugg-ai-mcp@latest
Bir OAuth Kaynak Sunucusudur: her POST /mcp Authorization: Bearer <token> gerektirir; eksik/geçersiz belirteçler, RFC 9728 meta verilerini gösteren bir WWW-Authenticate ile birlikte 401 alır ve istemciler, reklamı yapılan yetkilendirme sunucusuna karşı OAuth akışını çalıştırır. Taşıyıcı istek kapsamlıdır — api.debugg.ai onu doğrular.
| Uç nokta | Amaç |
|---|---|
POST /mcp | MCP Streamable HTTP (taşıyıcı korumalı) |
GET /.well-known/oauth-protected-resource | RFC 9728 meta verileri (yetkilendirme sunucusu keşfi) |
GET /health | Yük dengeleyici / ECS sağlık kontrolü |
| Ortam değişkeni | Varsayılan | Amaç |
|---|---|---|
DEBUGGAI_MCP_TRANSPORT | stdio | Uzak taşıma için http olarak ayarlayın |
PORT | 3000 | HTTP dinleme bağlantı noktası |
DEBUGGAI_MCP_PUBLIC_URL | https://mcp.debugg.ai | Bu sunucunun genel kaynak URL'si (RFC 9728 resource) |
DEBUGGAI_OAUTH_ISSUER | https://auth.debugg.ai | İstemcilere reklamı yapılan yetkilendirme sunucusu |
DEBUGGAI_TOKEN_TYPE | token | OAuth belirteçlerinin Authorization: Bearer olarak iletilmesi için bearer olarak ayarlayın |
stdio kurulumları bunların hiçbirine ihtiyaç duymaz.
Çok kopyalı dağıtımlar (yayın öncesi onay/onay yok): tünel durumu (oturum tüneli, Caddy örneği ve bağlantı noktası yolu kilidi) süreç içidir, çağıran başına taşıyıcı belirtecin bir karmasıyla anahtarlanır — çapraz süreç koordinasyonu yoktur. Düz bir round-robin yük dengeleyicinin arkasında birden çok kopya çalıştırmak, bir çağıranın çağrılarının farklı kopyalara düşebileceği ve tüm oturum için bir yerine her vurdukları kopya için bir tünel oluşturabileceği anlamına gelir (kopya sayısıyla sınırlı, mevcut 55 dakikalık boşta otomatik kapanma ile kendi kendini iyileştirir — asla çapraz oturum doğruluk hatası değildir, çünkü herhangi bir tek araç çağrısı tüm süresi boyunca tek bir kopyada kalır). Çok kopyalı bir HTTP dağıtımında amaçlanan "oturum başına bir tünel" davranışını elde etmek için, yük dengeleyicide oturum benzeşimli yönlendirme yapılandırın (getSessionKey()'ün türettiği aynı kimlik üzerinde anahtarlı yapışkan/tutarlı karma — pratikte, çağıranın Authorization taşıyıcı belirteci). Tam gerekçe ve bu yapılandırılmazsa dürüst düşüş yolu için docs/local-tunnel-multiplexer-architecture-2026-07-31.md §2.1'e bakın.
Telemetri
MCP sunucusu, varsayılan olarak telemetri etkin şekilde gelir — gömülü salt-yazılır bir PostHog proje anahtarı (phc_*) sayesinde ekip, kurulum tabanı genelinde önbellek isabet oranlarını, yoklama sıklığını, tünel güvenilirliğini ve diğer operasyonel metrikleri gözlemleyebilir. Yakalanan olaylar:
| Olay | Zaman |
|---|---|
tool.executed / tool.failed | Her araç çağrısında |
workflow.executed | Her tarayıcı aracısı yürütmesinde (pollCount, durationMs, finalIntervalMs taşır) |
tunnel.provisioned / tunnel.provision_retry / tunnel.stopped | Her tünel yaşam döngüsü olayında |
template.lookup / project.lookup | Önbellek isabeti/ıskası, soğuk çağrıda durationMs ile |
Gizlilik duruşu:
- Benzersiz kimlik
SHA-256(api_key).slice(0, 16)'dır — asla ham anahtar değil, PII yok. phc_*anahtarları PostHog kuralı gereği salt-yazılır; kaynak koda gömmek güvenlidir.- Tamamen devre dışı bırakmak için
DEBUGGAI_TELEMETRY_DISABLED=1ayarlayın (no-op sağlayıcıya çözümlenir; süreçten hiçbir olay çıkmaz).
Etkin mod, başlangıçta günlüğe kaydedilir:
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)
Yerel Geliştirme
npm install
npm run build
npm run test:e2e # real end-to-end evals against the backend
Değerlendirme paketi, derlenmiş MCP sunucusunu bir alt süreç olarak başlatır, her aracı gerçek bir arka uca karşı çalıştırır ve akış başına yapıtları scripts/evals/artifacts/<timestamp>/ konumuna yazar. Bireysel senaryolar için scripts/evals/flows/ bölümüne bakın.
MCP kaydı: debugg-ai-local ve debugg-ai
Bu depo, .mcp.json ile birlikte gelir ve debugg-ai-local adlı proje kapsamlı bir sunucuyu node dist/index.js adresine işaret ederek kaydeder — yeni derlenmiş yerel kod. Yalnızca Claude Code'un çalışma dizini bu depo olduğunda etkinleşir.
Diğer projeleriniz, yayınlanan npm paketinden çeken kullanıcı kapsamlı debugg-ai kaydını kullanmalıdır:
npm run mcp:global # registers debugg-ai in ~/.claude.json to npx -y @debugg-ai/debugg-ai-mcp
Buradaki kodu düzenledikten sonra, npm run mcp:local komutunu çalıştırın (yalnızca yeniden derler) böylece debugg-ai-local sonraki çağrısı değişikliklerinizi alır.
Bağlantılar
Dashboard · Docs · Issues · Discord
Apache-2.0 Lisansı © 2025 DebuggAI