Debugg AI

resmi

Kod ü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_browser ile 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_page kullanarak 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 — environment aracı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_crawl komutunu çalıştırın.
  • Test paketlerini çalıştırın ve izleyin — Paketler oluşturun, eşzamansız çalıştırmaları tetikleyin ve test_suite eylemleriyle test başına sonuçları alın.
  • Yürütme yapıtlarını inceleyin — Çalışma zamanı sorunlarını hata ayıklamak için executions aracı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.

Debugg AI MCP server

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.

ParametreTürAçıklama
descriptionstring gerekliNe test edileceği (doğal dil)
urlstring gerekliHedef URL — http://localhost:3000 otomatik tünellenir
environmentIdstringBelirli bir ortamın UUID'si
credentialIdstringBelirli bir kimlik bilgisinin UUID'si
credentialRolestringRole göre bir kimlik bilgisi seçin (ör. admin, guest)
usernamestringGiriş için kullanıcı adı (geçici — kalıcı değil)
passwordstringGiriş için şifre (geçici — kalıcı değil)
loginCredentialsarrayAjanın görev sırasında karşılaştığı girişler için hesaplar — [{username, password, label?}]
useEnvironmentCredentialsbooleanVarsayılan true. false, ortamın saklanan kimlik bilgilerinin otomatik doldurulmasını yasaklar; adlandırılmış hesap yoksa hiç giriş yapma anlamına gelir
freshSessionbooleanVarsayılan false. true, o hesap için tutulan sıcak oturumu yeniden kullanmak yerine gerçek bir girişi zorlar
authobjectKimlik doğrulama ön koşulu — {precondition, entryUrl, deepUrl, environmentId, username, password}
repoNamestringOtomatik 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 (veya credentialId / 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.
  • environment aracı, action: "clearSessions" — saklanan oturumları geçersiz kılın, böylece sonraki çalıştırmalar giriş yapar. username / credentialId ile 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.

ParametreTürAçıklama
targetsarray gerekli1-20 giriş: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring gerekliGenel URL veya localhost (otomatik tünellenir)
targets[].waitForLoadStateenum'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[].waitForSelectorstringGezinmeden sonra beklemek için isteğe bağlı CSS seçici
targets[].timeoutMsnumberURL başına zaman aşımı, 1000-30000 (varsayılan 10000)
includeHtmlbooleanHer sonuçta ham HTML döndür (varsayılan false)
captureScreenshotsbooleanHedef 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

EylemParametrelerSonuç
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

EylemParametrelerSonuç
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

EylemParametrelerSonuç
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

EylemParametrelerSonuç
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

EylemParametrelerSonuç
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:

URINe
debugg-ai://projectsTüm projeler (ilk sayfa)
debugg-ai://environmentsOtomatik algılanan proje için ortamlar
debugg-ai://executionsSon 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.ai ve 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 birlikte isError: true olarak 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ılanDeğiştirme
successoutcome
failureCategoryoutcome + reason
stepsTaken / stepsBudget / stepsRemainingbudget: {maxSteps, usedSteps}
failedNodeerrorInfo
get → projects[0] / executions[0] / environments[0] + pageInfo + filter{project} / {execution} / {project, environment}
message / note uyarılar ve sonuçlar üzerindeyalnı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ılanDeğiştirme
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_projectKaldırıldı — DebuggAI web uygulamasını kullanın
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 parametresiKaldı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ılanDeğiştirme
list_projects, get_projectsearch_projects (uuid modu vs filtre modu)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — kimlik bilgileri her ortamda satır içi
create_credentialcreate_environment({credentials: [...]}) tohumu veya update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — belirsizlik işleme ile ad çözümleme
list_executions, get_executionsearch_executions
cancel_executionKaldı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şkeniGerekliAmaç
DEBUGGAI_API_KEYevetArka uç API anahtarı. Takma adlar: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URLhayırArka uç temel URL'si. Varsayılan: https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPEhayırtoken (varsayılan) veya bearer.
DEBUGGAI_EVAL_TEMPLATEhayırcheck_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_LEVELhayırerror / warn / info (varsayılan) / debug.
POSTHOG_API_KEYhayırGömülü telemetri proje anahtarını geçersiz kılar (örn. özel çatal).
DEBUGGAI_TELEMETRY_DISABLEDhayırTelemetriyi 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ç noktaAmaç
POST /mcpMCP Streamable HTTP (taşıyıcı korumalı)
GET /.well-known/oauth-protected-resourceRFC 9728 meta verileri (yetkilendirme sunucusu keşfi)
GET /healthYük dengeleyici / ECS sağlık kontrolü
Ortam değişkeniVarsayılanAmaç
DEBUGGAI_MCP_TRANSPORTstdioUzak taşıma için http olarak ayarlayın
PORT3000HTTP dinleme bağlantı noktası
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.aiBu sunucunun genel kaynak URL'si (RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.aiİstemcilere reklamı yapılan yetkilendirme sunucusu
DEBUGGAI_TOKEN_TYPEtokenOAuth 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:

OlayZaman
tool.executed / tool.failedHer araç çağrısında
workflow.executedHer tarayıcı aracısı yürütmesinde (pollCount, durationMs, finalIntervalMs taşır)
tunnel.provisioned / tunnel.provision_retry / tunnel.stoppedHer 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=1 ayarlayı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