𧪠Official MCP Server for Debugg AI
ããŒã«ã«ð§ª Official MCP Server for Debugg AI ã«ã€ããŠ
Debugg AI å ¬åŒã® MCP ãµãŒããŒã¯ãAI ãšãŒãžã§ã³ãã«ãããã©ãŠã¶ãã¹ããæäŸããŸããURL ãŸã㯠localhost ãšæ€èšŒå 容ãæå®ãããšããšãŒãžã§ã³ããã¢ããªãæäœããååŠçµæãšã¹ã¯ãªãŒã³ã·ã§ãããè¿ããŸããèšå®ãæã㊠E2E ãã¹ããèªååãããããŒã åãã§ãã
äž»ãªæ©èœ
- 01check_app_in_browser ã«ãã AI ãã©ãŠã¶ãšãŒãžã§ã³ãã®ãã¹ã
- 02LLM ã䜿ããªã probe_page ã«ãããããããŒãžç¢ºèª
- 03Caddy ãã³ãã«ã«ãã localhost URL ã®èªåæ¥ç¶
- 04HARãã³ã³ãœãŒã«ãã°ãã¹ã¯ãªãŒã³ã·ã§ããã®ååŸ
- 05ãããžã§ã¯ããç°å¢ããã¹ãã¹ã€ãŒãã®ç®¡çããŒã«
掻çšã·ãŒã³
- 01ããŒã«ã«ã§åäœäžã®ã¢ããªã«å¯Ÿããåäžæ©èœã®ç¢ºèª
- 02ãã«ãªã¯ãšã¹ãããšã«è€æ°ã«ãŒãã CI ã§ç°¡æç¢ºèª
- 03ãã°ã€ã³ãããŒã®æ€èšŒãšäœ¿çšãããã¢ã«ãŠã³ãã®ç¢ºèª
MCP 察å¿
æ¬ãããžã§ã¯ã㯠MCP ãµãŒããŒãšããŠããã©ãŠã¶ãã¹ãããã³ãããžã§ã¯ããç°å¢ããã¹ãã¹ã€ãŒãã®ç®¡çãå«ã 8 ã€ã®ããŒã«ã MCP ã¯ã©ã€ã¢ã³ãã«å ¬éããŸããDEBUGGAI_API_KEY ãå¿ èŠã§ãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
npx -y @debugg-ai/debugg-ai-mcpDEBUGGAI_API_KEYã·ãŒã¯ã¬ããTEST_USERNAME_EMAILTEST_USER_PASSWORDã·ãŒã¯ã¬ããMCP_REQUEST_TIMEOUT_RESET_ON_PROGRESSDEBUGGAI_LOCAL_PORTDEBUGGAI_LOCAL_REPO_NAMEDEBUGGAI_LOCAL_BRANCH_NAMEDEBUGGAI_LOCAL_REPO_PATHDEBUGGAI_LOCAL_FILE_PATHããŒã«ã«ãµãŒããŒã«ã¯ãã·ã³äžã®å®è¡ç°å¢ïŒNode.js 18 以äžãªã©ïŒãå¿ èŠã§ããèšå®ãã¡ã€ã«ã®å Žæã¯ã¯ã©ã€ã¢ã³ãããšã«ç°ãªããŸãã
ããŒã«
8æ²èŒæã®ããŒã«äžèЧ · 3 é±éåã«æŽæ°
| ãã©ã¡ãŒã¿ãŒ | å | å¿ é | 説æ |
|---|---|---|---|
| description | string | ã¯ã | ãã¹ããŸãã¯è©äŸ¡ããå 容ãèªç¶èšèªã§èšè¿°ããŸãïŒäŸïŒ'ãã°ã€ã³ãã©ãŒã ã¯ç©ºæ¬ãæ€èšŒããŸããïŒ'ã'ããŒã ããŒãžã«ç§»åããŠããŒããŒã»ã¯ã·ã§ã³ãèªã¿èŸŒãŸããããšã確èª'ïŒã |
| url | string | ã¯ã | ç§»åå ã® URLãä»»æã®å ¬é URLïŒhttps://example.comïŒããŸã㯠localhostïŒããŒã«ã«éçºãµãŒããŒã® URL ãæå®ã§ããŸããlocalhost URL ã®å Žåãå®å šãªãã³ãã«ãèªåçã«äœæãããŸããéçºãµãŒããŒããã®ããŒãã§å®è¡ãããŠããããšã確èªããŠãã ããã |
| environmentId | string | ããã | ãã®ãã¹ãã§äœ¿çšããç¹å®ã®ç°å¢ã® UUIDãå©çšå¯èœãªç°å¢ã«ã€ããŠã¯ãäžèšã®ããŒã«ã®èª¬æãåç §ããŠãã ããã |
| credentialId | string | ããã | ãã°ã€ã³ã«äœ¿çšããç¹å®ã®èªèšŒæ å ±ã® UUIDãå©çšå¯èœãªèªèšŒæ å ±ã«ã€ããŠã¯ãäžèšã®ããŒã«ã®èª¬æãåç §ããŠãã ããã |
| credentialRole | string | ããã | 解決ãããç°å¢ããããŒã«å¥ã«èªèšŒæ å ±ãéžæããŸãïŒäŸïŒ'admin'ã'guest'ïŒã |
| username | string | ããã | 察象ã¢ããªã«å®åšããã¢ã«ãŠã³ãã®ã¡ãŒã«ã¢ãã¬ã¹ãèªèšŒæ å ±ãäœãåºãããæšæž¬ãããããªãã§ãã ãããäžèšã®å©çšå¯èœãªèªèšŒæ å ±ã䜿çšãããããŠãŒã¶ãŒã«ç¢ºèªããŠãã ããããã©ãŠã¶ãŒãšãŒãžã§ã³ãã¯ããããã°ã€ã³ãã©ãŒã ã«å ¥åããŸããå®è¡äžã®ãã¹ãŠã®ãã°ã€ã³ã§ãç°å¢ã®ããã©ã«ãèªèšŒæ å ±ããåªå ãããŸãã |
| password | string | ããã | äžèšã®ãŠãŒã¶ãŒåã«å¯Ÿå¿ããå®éã®ãã¹ã¯ãŒãã§ããæšæž¬ãããããã¬ãŒã¹ãã«ããŒã®ãã¹ã¯ãŒãã䜿çšãããããªãã§ãã ãããäžèšã®ãªã¹ãã«ããèªèšŒæ å ±ã䜿çšãããããŠãŒã¶ãŒã«ç¢ºèªããŠãã ããã |
| loginCredentials | array | ããã | ã¿ã¹ã¯ã®éäžã§ãã°ã€ã³ãã©ãŒã ã«ééããéã«ããšãŒãžã§ã³ãããµã€ã³ã€ã³ã§ããã¢ã«ãŠã³ãã§ããæåã®ãã°ã€ã³ã ãã§ã¯ãããŸããããã¹ã¯ãŒããèšå®ããåŸã«ãµã€ã³ã€ã³ç»é¢ã«æ»ãããèšå®ããã°ããã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ãããªã©ãéäžã§èªèšŒãããããŒã«äœ¿çšããŸãã`description` ã«èªèšŒæ å ±ãèšèŒããã ãã§ã¯äžååã§ããããã§æž¡ããšããšãŒãžã§ã³ãã¯ãã®å€ãæ£ç¢ºã«äœ¿çšããŸããç°å¢ã®ããã©ã«ãèªèšŒæ å ±ãäžæžãããŸãã |
| useEnvironmentCredentials | boolean | ããã | ããã©ã«ã㯠true ã§ããfalse ã«èšå®ãããšããšãŒãžã§ã³ããç°å¢ã«ä¿åãããèªèšŒæ å ±ãèªåå ¥åããã®ãçŠæ¢ããŸãããã®åŒã³åºãã§æå®ããã¢ã«ãŠã³ãïŒusername/passwordãcredentialIdãcredentialRoleãloginCredentialsããŸã㯠auth.usernameïŒã§ã®ã¿ãµã€ã³ã€ã³ãããã以å€ã§ã¯ãµã€ã³ã€ã³ããŸãããç¹å®ã®ã¢ã«ãŠã³ãã§ã®äœéšãæ€èšŒããå¿ èŠããããããã©ã«ãã®ãã¹ããŠãŒã¶ãŒãžã®æé»ã®ãã©ãŒã«ããã¯ã§çµæãç¡å¹ã«ãªãå Žåã«äœ¿çšããŠãã ããã |
| freshSession | boolean | ããã | ããã©ã«ã㯠false ã§ããtrue ã«èšå®ãããšãããã¯ãšã³ããã¢ã«ãŠã³ãããšã«ä¿æãããŠã©ãŒã ã»ãã·ã§ã³ãåå©çšãããå®éã«ãã°ã€ã³ããŸãããã°ã€ã³ãããŒèªäœã確èªããå Žåãä¿åãããã»ãã·ã§ã³ãå€ããšæãããå ŽåããŸãã¯ã¢ããªã§å¥ã®ãŠãŒã¶ãŒã«åãæ¿ããå¯äžã®æ¹æ³ããã°ã¢ãŠãã§ããå Žåã«äœ¿çšããŸãããã°ã€ã³ã 1 ååå¿ èŠã«ãªããŸããå®è¡åŸã«ã»ãã·ã§ã³ãåååŸããããã以éã®å®è¡ã¯åŒãç¶ãé«éã§ãã |
| repoName | string | ããã | GitHub ãªããžããªåïŒäŸïŒ'my-org/my-repo'ïŒãçŸåšã® Git ãªããžããªããèªåæ€åºãããŸããçŸåšã®ãããžã§ã¯ããšã¯å¥ã®ãããžã§ã¯ãã察象ã«å®è¡ããå Žåã«ã®ã¿æå®ããŠãã ããã |
| auth | object | ããã | ããã°ã€ã³åŸã«æ·±ãéå±€ãžç§»åããããã§ãã¯çšã®ä»»æã®èªèšŒåææ¡ä»¶ã§ããprecondition:'login' ãèšå®ãããšãæåã«èªèšŒããŠãã deepUrl ã«ç§»åããŸãããã°ã€ã³ç»é¢ã§ãšãŒãžã§ã³ããèªããµã€ã³ã€ã³ããããšãæåŸ ããã®ã§ã¯ãªãããã®èšå®ã䜿çšããŠãã ãããããã§ username/password ãæž¡ããšèªèšŒããã¢ã«ãŠã³ããåºå®ã§ããŸããçç¥ãããšç°å¢ã®ããã©ã«ãèªèšŒæ å ±ã䜿çšããŸãã |
| auth.environmentId | string | ããã | ãã°ã€ã³ã«äœ¿çšããèªèšŒæ å ±ãå±ããç°å¢ã® UUID ã§ããå©çšå¯èœãªç°å¢ã«ã€ããŠã¯ãäžèšã®ããŒã«ã®èª¬æãåç §ããŠãã ããã |
| auth.username | string | ããã | äºåãã°ã€ã³æ¡ä»¶ã§èªèšŒããã¢ã«ãŠã³ãã§ããç°å¢ã®ããã©ã«ãèªèšŒæ å ±ãäžæžãããŸãã |
| auth.password | string | ããã | auth.username ã®ãã¹ã¯ãŒãã§ãã |
| auth.precondition | enum | ããã | 'login' = è©äŸ¡åã«èªèšŒããŸãïŒ'none'ïŒããã©ã«ãïŒ= ãã°ã€ã³ã®äºåæ¡ä»¶ãèšå®ããŸãããlogin | none |
| auth.entryUrl | string | ããã | èªèšŒã«äœ¿çšãããã°ã€ã³ããŒãžã® URLïŒçç¥å¯ïŒã |
| auth.deepUrl | string | ããã | ãã°ã€ã³åŸã«ç§»åããŠè©äŸ¡ãã URLïŒçç¥å¯ãäŸïŒè©³çްèšå®ããŒãžïŒãçç¥ãããš `url` ã«ãã©ãŒã«ããã¯ããŸãã |
詳现
Debugg AI â MCP ãµãŒããŒ
Model Context Protocol ãä»ãã AI ã«ãããã©ãŠã¶ãŒãã¹ãã§ããä»»æã® URLïŒãŸã㯠localhostïŒãæå®ãããã¹ãå 容ã説æãããšãAI ãšãŒãžã§ã³ããã¢ããªããã©ãŠãºããã¹ã¯ãªãŒã³ã·ã§ãããšãšãã«åæ ŒïŒäžåæ Œãè¿ããŸãã
ã»ããã¢ãã
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 ã¯ãã«ãã§å¿
èŠã«ãªã£ãè€æ°ã®ãã£ã¬ã¯ããªïŒ
handlersãtoolsãtypesãconfigïŒã COPY ããŠããããããã«çŸåšã¯ååšããªã tunnels/
ãã£ã¬ã¯ããªãåç
§ãç¶ããŠããããããã以åã®æ®µéã§æ°èŠãã«ãã倱æããå¯èœæ§ããããŸãããã㯠Caddy ãšã¯ç¡é¢ä¿ã®ã以åããããäžåã§ããçŸåšå
¬éãããŠãã
quinnosha/debugg-ai-mcp ã€ã¡ãŒãžã¯ããããã«ãã Caddy äŸåé¢ä¿ã远å ãããåã®ãã®ã§ããDockerfile ãä¿®æ£ãããŠåãã«ãã»åå
¬éãããããå¥éçµã¿èŸŒãã ãã€ããªã CADDY_BIN ã«
æå®ãããŸã§ã¯ããã®ã€ã¡ãŒãžå
ã§ localhost URL ãæå®ã㊠check_app_in_browserïŒprobe_pageïŒtrigger_crawl ãåŒã³åºããšã
CaddyBinaryNotFoundError ã§å€±æããŸããå
¬é URL ãžã®åŒã³åºãããã©ãŠã¶ãŒä»¥å€ã®ããŒã«ãããã³
test_suite {action:"run"} ã«ã¯ããããã®å Žåã圱é¿ããŸããã
ããŒã«
ãã®ãµãŒããŒã¯ 8 åã®ããŒã«ãå
¬éããŸãã3 ã€ã® ãã©ãŠã¶ãŒããŒã«ãšã管ç察象ãšã³ãã£ãã£ããšã« 1 ã€ãã€çšæããã ã¢ã¯ã·ã§ã³ããŒã¹ã®ããŒã«ã§ããäž»ãªããŒã«ã¯ check_app_in_browserïŒå®å
šãª AI ãšãŒãžã§ã³ãïŒãš probe_pageïŒè»œéã§ LLM ã䜿çšããªãããŒãžãããŒãïŒã§ããæ®ãã® projectãenvironmentãtest_suiteãtest_caseãexecutions ã¯ããããã action å€å¥åïŒäŸïŒ{"action":"list"}ïŒãåãåããå®è¡ããæäœãéžæããŸããç Žå£ç㪠delete ã¢ã¯ã·ã§ã³ã«ã¯ç¢ºèªãå¿
èŠã§ãïŒå¯Ÿå¿ããŠããå Žåã¯ç¢ºèªãæ±ããããã³ããããã以å€ã®å Žå㯠confirm: trueïŒã
ãã©ãŠã¶ãŒ
check_app_in_browser
AI ãã©ãŠã¶ãŒãšãŒãžã§ã³ããã¢ããªã«å¯ŸããŠå®è¡ããŸãããšãŒãžã§ã³ãã¯ããŒãžãç§»åããŠæäœããã¹ã¯ãªãŒã³ã·ã§ãããšãšãã«çµæãå ±åããŸããlocalhost ã® URL ã¯ããããã°ãã³ãã«ãµãŒããŒãçµç±ããããèªåçã«ãã³ããªã³ã°ãããŸãã
| ãã©ã¡ãŒã¿ãŒ | å | 説æ |
|---|---|---|
description | string required | ãã¹ãå 容ïŒèªç¶èšèªïŒ |
url | string required | 察象 URL â http://localhost:3000 ã¯èªåçã«ãã³ããªã³ã°ãããŸã |
environmentId | string | ç¹å®ã®ç°å¢ã® UUID |
credentialId | string | ç¹å®ã®èªèšŒæ å ±ã® UUID |
credentialRole | string | ããŒã«ïŒäŸïŒadminãguestïŒã§èªèšŒæ
å ±ãéžæããŸã |
username | string | ãã°ã€ã³çšã®ãŠãŒã¶ãŒåïŒäžæçãªå€ã§ãä¿åãããŸããïŒ |
password | string | ãã°ã€ã³çšã®ãã¹ã¯ãŒãïŒäžæçãªå€ã§ãä¿åãããŸããïŒ |
loginCredentials | array | ã¿ã¹ã¯ã®éäžã§ãšãŒãžã§ã³ããã¢ã¯ã»ã¹ãããã°ã€ã³ã«äœ¿ãã¢ã«ãŠã³ã â [{username, password, label?}] |
useEnvironmentCredentials | boolean | ããã©ã«ã㯠true ã§ããfalse ã«ãããšãç°å¢ã«ä¿åãããèªèšŒæ
å ±ã®èªåå
¥åãçŠæ¢ããŸããã¢ã«ãŠã³ããæå®ããªãå Žåã¯ãäžåãã°ã€ã³ããŸãã |
freshSession | boolean | ããã©ã«ã㯠false ã§ããtrue ã«ãããšããã®ã¢ã«ãŠã³ãçšã«ä¿æãããŠãããŠã©ãŒã ã»ãã·ã§ã³ãåå©çšãããå®éã®ãã°ã€ã³ã匷å¶ããŸã |
auth | object | èªèšŒã®åææ¡ä»¶ â {precondition, entryUrl, deepUrl, environmentId, username, password} |
repoName | string | èªåæ€åºããã Git ãªããžããªåãäžæžãããŸãïŒäŸïŒmy-org/my-repoïŒ |
1 åã®åŒã³åºãã«ã€ããçŠç¹ãçµã£ããã§ãã¯ã 1 ã€å®è¡ããŸãããšãŒãžã§ã³ãã®å éšäºç®ã¯çŽ 25 ã¹ãããã§ããç¯å²ã®åºããã¹ãã¹ã€ãŒãã¯ãè€æ°åã®åŒã³åºãã«åããŠãã ããã
èªèšŒæ å ±ïŒèª¬ææã§ã¯ãªããã©ã¡ãŒã¿ãŒãšããŠæž¡ããŠãã ãã
description ã«ã¢ã«ãŠã³ãåãæžãã ãã§ã¯ããšãŒãžã§ã³ãã¯ãã®ã¢ã«ãŠã³ãã䜿çšããŸãããç°å¢ã«ä¿åãããèªèšŒæ
å ±ã«ãã©ãŒã«ããã¯ãããããã¢ããªã誀ã£ãã¢ã«ãŠã³ããæåŠãããšãã¢ããªã±ãŒã·ã§ã³ã®é害ã®ããã«èŠããŠããŸããŸãããã©ã¡ãŒã¿ãŒãšããŠæž¡ããå€ã¯ãæåã®ãã°ã€ã³ã ãã§ãªããå®è¡äžã®ãã¹ãŠã®ãã°ã€ã³ã§ç°å¢ã®ããã©ã«ãããåªå
ãããŸãã
username/passwordïŒãŸãã¯credentialId/credentialRoleïŒâ å®è¡æã«äœ¿çšããã¢ã«ãŠã³ãã§ããauth.username/auth.passwordâauth.precondition: "login"ã䜿ãå Žåãåææ¡ä»¶ã§ã®ãã°ã€ã³ã«äœ¿ãã¢ã«ãŠã³ããåºå®ããŸããloginCredentialsâ ã¿ã¹ã¯ã®éäžã§ãšãŒãžã§ã³ããå°éãããã°ã€ã³ãã©ãŒã ã§äœ¿ãã¢ã«ãŠã³ãã§ãããã¹ã¯ãŒããèšå®ãã â ãµã€ã³ã€ã³ç»é¢ã«æ»ããã â äœæããã°ããã®ã¢ã«ãŠã³ãã§ãã°ã€ã³ãã ãšãã£ããããŒã§ã¯ãåŒã³åºããåãããšãã©ãŠã¶ãŒã®ç¶æ ã倱ãããããããã®æ¹æ³ã䜿ããŸãã
ããã©ã«ãã®ãã¹ããŠãŒã¶ãŒãžã®ãµã€ã¬ã³ããªãã©ãŒã«ããã¯ã«ãã£ãŠãã§ãã¯ãç¡å¹ã«ãªãå Žåã¯ãuseEnvironmentCredentials: false ãèšå®ããŠãã ããã
ã¯ãã¹ãã¡ã€ã³ SSO ã®å ŽåïŒå®è¡äžãèªèšŒæ
å ±ãå
¥åãããã®ã¯ã¢ããªèªèº«ã®ãã¹ããšãã®ãµããã¡ã€ã³ã®ã¿ã§ããå¥ã®ãã¡ã€ã³ã«ãããµã€ã³ã€ã³ããŒãžã¯ offscope_host ãšããŠæåŠãããŸããID ãããã€ããŒã®ãã¹ãããç°å¢ã® authorizedCredentialHosts ã«è¿œå ããŠãã ããïŒenvironment ãåç
§ïŒã
ãã°ã€ã³ããŸã£ããäžèŠãªããŒãžããã§ãã¯ããå ŽåïŒuseEnvironmentCredentials: false ãæž¡ããã¢ã«ãŠã³ããæå®ããªãã§ãã ããããã®çµã¿åããã¯æåã©ããããã°ã€ã³ããªãããšããæå³ã§ããã°ã€ã³ãã©ãŒã ãæ¢ã代ããã«ãèªèšŒãå®å
šã«ã¹ãããããŸããå
¬éããŒãžãããŒã±ãã£ã³ã°ãµã€ããããã¥ã¡ã³ããèªèšŒåã®ããŒãžãªã©ã«äœ¿ããŸãããŸãããã¡ãã®ã»ããé«éã§ããããã©ã«ãïŒautoïŒã§ã¯ããšãŒãžã§ã³ãã¯ããŒãžäžã®ããã°ã€ã³ããªã³ã¯ããã©ã£ãŠããŒãžå€ã«ç§»åããäœããè©äŸ¡ããåã«ãç°å¢ã«ä¿åãããã¢ã«ãŠã³ãã§ãã°ã€ã³ã詊ã¿ãŸãã
ã»ãã·ã§ã³ã®åå©çšïŒãã§ãã¯çµæãããã°ã€ã³ãã©ãŒã ãªããã«ãªãçç±
å®è¡ã®ãã³ã«ãã°ã€ã³ããããã§ã¯ãããŸããããã°ã€ã³ãæ€èšŒããããšãããã¯ãšã³ãã¯ãã®ã¢ã«ãŠã³ãã®ã»ãã·ã§ã³ãååŸããŠåŸ©å
ããåãã¢ã«ãŠã³ãã§ã®æ¬¡åã®å®è¡æã«ãã°ã€ã³ãå®å
šã«çç¥ããŸãããã®ããããã§ãã¯çµæãæ£åœã« submitted: false ã§ãã°ã€ã³ãã©ãŒã ãªããšãªãããšããããŸãããã§ã«ãµã€ã³ã€ã³æžã¿ã ããã§ããã»ãã·ã§ã³ã埩å
ãããå®è¡ã¯ãlogins å
ã§ reason: "restored_session" ãšå ±åãããããããã©ãŒã ãæ¬åœã«èŠã€ãããªãã£ãå®è¡ãšåºå¥ã§ããŸãã
ã»ãã·ã§ã³ã¯ã¢ã«ãŠã³ãããšã«ç®¡çããããããå¥ã®ã¢ã«ãŠã³ããæå®ããŠããä»ã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³ãåå©çšãããããšã¯ãããŸãããåå©çšãåé¿ããæ¹æ³ã¯2ã€ãããŸãã
- 1åã®åŒã³åºãã«
freshSession: trueãæå®ããŸããä»åã¯å®éã«ãã°ã€ã³ããŠãããå床ã»ãã·ã§ã³ãååŸããŸãããã°ã€ã³ãããŒèªäœããã§ãã¯ããå Žåãä¿åæžã¿ã»ãã·ã§ã³ãå€ããšæãããå ŽåããŸãã¯ãã«ãœããåãæ¿ããææ®µããã°ã¢ãŠããããªãã¢ããªã®å Žåã«äœ¿çšããŠãã ããã environmentããŒã«ã§action: "clearSessions"ãæå®ããŸããä¿åæžã¿ã»ãã·ã§ã³ãç¡å¹åãã以éã®å®è¡ã§ãã°ã€ã³ããããã«ããŸããusername/credentialIdã§å¯Ÿè±¡ãçµã蟌ããŸãã察象ãæå®ããã«ã¯ãªã¢ããå Žåã¯ããã®ç°å¢ã®ãã¹ãŠã®ã¢ã«ãŠã³ããåèªèšŒãããããã確èªãå¿ èŠã§ãã
action: "sessions" ã䜿ããšãç°å¢ãçŸåšä¿æããŠããã»ãã·ã§ã³ãšããããããåå©çšããããã©ããã確èªã§ããŸãã
çµæã«ã¯å®éã«äœ¿çšãããã¢ã«ãŠã³ããå ±åãããããã誀ã£ãã¢ã«ãŠã³ãã䜿ãããå Žåããã¢ããªã®äžå ·åã®ããã«èŠããŠããŸãããšã¯ãããŸããã
"logins": [
{ "username": "[email protected]", "source": "task", "submitted": true, "authenticated": true },
{ "username": "[email protected]", "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": "[email protected]",
"used": ["[email protected]"]
}
source 㯠task | explicit | credential_idïŒæå®ããã¢ã«ãŠã³ãïŒãŸã㯠env | env_defaultïŒç°å¢ã«ä¿åãããã¢ã«ãŠã³ãïŒã§ããsubmitted ã true ã«ãªãã®ã¯ãèªèšŒæ
å ±ãå®éã«å
¥åãããŠéä¿¡ãããå Žåã®ã¿ã§ããreason ã«ã¯çºçããå
容ïŒäŸïŒoffscope_hostãrestored_sessionïŒã瀺ãããdetail ãããå Žåã¯ããã®å
容ã人ãèªãã圢ã§èª¬æããŸããoffscope_host ã«ããæåŠã®å Žåã¯ããã¹ãåãšãã®èªå¯æ¹æ³ãèšèŒãããŸããcredentialWarning ã¯ãã¢ã«ãŠã³ããæå®ããã«ãããããããå¥ã®ã¢ã«ãŠã³ãã«å¯Ÿå¿ããç°å¢ã®ããã©ã«ãã¢ã«ãŠã³ããå®éã«éä¿¡ãããå Žåã«ã®ã¿è¡šç€ºãããŸãããã°ã€ã³ãæåŠãããå Žåãã¹ããããããå Žåã¯è¡šç€ºãããŸãããæå®ããã¢ã«ãŠã³ãã解決ã§ãããå¥ã®ã¢ã«ãŠã³ããžã®çœ®ãæããå®è¡ãèŠéã£ãå Žåã¯ãloginError ã衚瀺ãããŸãã
æåããå®è¡ã§ã¯ãã¹ã¯ãªãŒã³ã·ã§ãããšãšãã« browserSession ãããã¯ãè¿ãããŸããããã«ã¯ãååŸãã HARïŒãããã¯ãŒã¯ãã¬ãŒã¹å
šäœïŒãšã³ã³ãœãŒã«ãã°ïŒãã¹ãŠã® JS ã³ã³ãœãŒã«ã¡ãã»ãŒãžïŒã®ãäºå眲åä»ã S3 URL ãå«ãŸããŸãããããã䜿ã£ãŠãåãã§ãã¯ãåäœãã¹ãã§ã¯æ€åºã§ããªãåååŸã«ãŒãããã€ãã¬ãŒã·ã§ã³ãšã©ãŒããã®ä»ã®å®è¡æã®åé¡ãæ€åºã§ããŸãã
"browserSession": {
"harUrl": "https://...session_18139.har?X-Amz-...",
"consoleLogUrl": "https://...session_18139_console.json?X-Amz-...",
"recordingUrl": "https://...session_18139_recording.webm?X-Amz-...",
"harStatus": "downloaded",
"consoleLogStatus": "downloaded",
"harRedactionStatus": "redacted",
"consoleLogRedactionStatus": "redacted"
}
URL ã¯æå¹æéã®çãäºå眲åä»ã S3 URL ã§ããæŽæ°ããã«ã¯ã芪å®è¡ã executions {action:"get", uuid} ã§åååŸããŠãã ãããharStatus / consoleLogStatus ã«ãã£ãŠã'downloaded'ïŒURL ããååŸå¯èœïŒã'not_available'ïŒããŒãžããäœãåºåãããªãã£ãïŒã'failed'ïŒååŸã«å€±æããïŒãåºå¥ã§ããŸããæ°ããå®è¡ã§ã¯ããšãŒãžã§ã³ãã®å®äºåŸã«ååŸããŒã¿ãéåæã§ã¢ããããŒãããããããURL ã null ã«ãªãããšããããããŸããã¹ããŒã¿ã¹ã 'downloaded' ã«ãªããŸã§ executions {action:"get", uuid: executionId} ãããŒãªã³ã°ããŠãã ãããAuthorization / Cookie / token/secret/api_key ããããŒã¯ãã¢ãŒãã£ãã¡ã¯ããä¿åãããåã«ãµãŒããŒåŽã§ãã¹ãã³ã°ãããŸãã
trigger_crawl
ãããžã§ã¯ãã®ãã¬ããžã°ã©ãã«ããŒã¿ã远å ããããããµãŒããŒåŽã®ãã©ãŠã¶ãŒãšãŒãžã§ã³ãã«ããã¯ããŒã«ãå®è¡ããŸããlocalhost ã® URL ã¯èªåçã«ãã³ããªã³ã°ãããŸããæåããåã蟌ã¿ã§ã¯ knowledgeGraph.skipped === false ãšãªãã{executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} ãè¿ãããŸããcrawlSummary ãš knowledgeGraph ã«å«ãŸããã®ã¯ãããã¯ãšã³ãã®ã¯ããŒã«ïŒã€ã³ããŒãããŒããå ±åããããŒã®ã¿ã§ããä»¶æ°ãå ±åãããŠããªãå Žåããã®é
ç®ã¯çç¥ããã0 ãè£ãããããšã¯ãããŸãããå®äºããã¯ããŒã«ã«ããbrowserSession ãããã¯ïŒäžèšãšåã圢åŒã® HAR ããã³ã³ã³ãœãŒã«ãã°ã® URLïŒãå«ãŸããŸãã
probe_page
LLMã䜿ããªã軜éãªäžæ¬ããŒãžãããŒãã§ãã 1ã20åã®URLãæž¡ããšãããããã®ããŒãžã«ç§»åããŠã³ã³ãã³ããèœã¡çããŸã§åŸ
æ©ããŸãïŒDOMã®å€åãäžå®æéæ¢ãŸããŸã§åŸ
æ©ããŸããäžéãããããããã¯ãŒã¯ãéãã«ãªãã®ãåŸ
ã€ããšã¯ãããŸããã皌åäžã®ã¢ããªã§ã¯ãããã¯ãŒã¯ã鿢ããªãããã§ãïŒããã®åŸãã¬ã³ããªã³ã°ãããç¶æ
ïŒã¹ã¯ãªãŒã³ã·ã§ãããããŒãžã®ã¡ã¿ããŒã¿ãæ§é åãããã³ã³ãœãŒã«ãšã©ãŒããããã¯ãŒã¯ã®æŠèŠïŒãè¿ããŸãããšãŒãžã§ã³ãã®ã«ãŒããLLMã®ã³ã¹ããã·ããªãªã®ã¢ãµãŒã·ã§ã³ããããŸãããcheck_app_in_browserã®60ã150ç§ã®ãšãŒãžã§ã³ãã«ãŒãã§ã¯å€§ãããããã/settingsãå£ããŠããªãããã®ç¢ºèªããªãã¡ã¯ã¿ãªã³ã°åŸã®è€æ°ã«ãŒãã®ã¹ã¢ãŒã¯ãã¹ããPRããšã®CIã¹ã€ãŒãããã°ãã皌å確èªã«äœ¿çšã§ããŸãã
| ãã©ã¡ãŒã¿ãŒ | å | 説æ |
|---|---|---|
targets | array å¿ é | 1ã20ä»¶ã®ãšã³ããªãŒïŒ[{url, waitForSelector?, waitForLoadState?, timeoutMs?}] |
targets[].url | string å¿ é | å ¬éURLãŸãã¯localhostïŒèªåã§ãã³ãã«æ¥ç¶ïŒ |
targets[].waitForLoadState | enum | 'domcontentloaded'ïŒããã©ã«ããå ããŠã³ã³ãã³ããèœã¡çããŸã§äžéä»ãã§åŸ
æ©ïŒïŒ'load'ïŒãµãŒãããŒãã£ã®åã蟌ã¿ã³ã³ãã³ããèªã¿èŸŒã¿å®äºãŸã§åŸ
æ©ïŒïŒ'networkidle'ïŒæå®ã§ããŸãããå®è¡ãããŸããã皌åäžã®ãµã€ãã§ã¯ãããã¯ãŒã¯ãã¢ã€ãã«ç¶æ
ã«ãªããªãããã§ãïŒ |
targets[].waitForSelector | string | ããŒãžé·ç§»åŸã«åŸ æ©ããä»»æã®CSSã»ã¬ã¯ã¿ãŒ |
targets[].timeoutMs | number | URLããšã®ã¿ã€ã ã¢ãŠãã1000ã30000ïŒããã©ã«ãã¯10000ïŒ |
includeHtml | boolean | åçµæã«çã®HTMLãå«ããŸãïŒããã©ã«ãã¯falseïŒ |
captureScreenshots | boolean | ã¿ãŒã²ããããšã«PNGã1æè¿ããŸãïŒããã©ã«ãã¯trueïŒ |
ãããå
ã®ãã¹ãŠã®ã¿ãŒã²ããã§1ã€ã®ã»ãã·ã§ã³ãã³ãã«ãå
±æããŸãããåãããŒãïŒãŸãã¯ãã¹ãŠå
¬éURLïŒã®ãããã§ã¯ãããã¯ãšã³ãã®å®è¡ã1åã ãå
±æããŸããåãããŒãäžã®5ã€ã®URLã1åã®åŒã³åºãã§åŠçããæ¹ããURLããšã«5å䞊åã§åŒã³åºããã倧å¹
ã«é«éã§ããè€æ°ã®ããŒã«ã«ããŒããæ··åšãããããã¯ãããŒãã°ã«ãŒãããšã«ããã¯ãšã³ããé çªã«å®è¡ããŸãïŒåŒã³åºãã¯1åã®ãŸãŸã§ãå
ã®é åºã§ããŒãžãããresults[]ãè¿ãããŸãããããã¯ãšã³ããšã®åŸåŸ©ã¯1åã§ã¯ãªãNåã«ãªããé
ããªããŸãããã ãæåŠã¯ãããŸããïŒãURLããšã®errorãã£ãŒã«ãã«ãããããã®å
ç¢æ§ãä¿ãããŸãã1ã€ã®ã¿ãŒã²ããã«å€±æããŠããã»ãã®ã¿ãŒã²ããã¯å€±æããŸããã
networkSummaryã®éçŽããŒã¯origin + pathnameã§ããåããšã³ããã€ã³ãã«ç¹°ãè¿ãã¢ã¯ã»ã¹ããåååŸã«ãŒãïŒ?n=0..4ïŒã¯ä»¶æ°ä»ãã®1ã€ã®ãšã³ããªãŒã«ãŸãšããããããã/api/pollãcount: 47ã§è¡šç€ºããããšããŠãŒã¶ãŒãåœåæ±ããŠãããç¡éåååŸã«ãŒãããç¹å®ããããã®ã·ã°ãã«ã«ãªããŸãã
ããã©ãŒãã³ã¹ã®ç®å®ïŒURL 1ä»¶ã§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"]ïŒããã¹ãåã®ã¿ãæå®ããŠãã ãããã¹ããŒã ããã¹ãããŒããã¯ã€ã«ãã«ãŒãã¯æå®ã§ããŸããïŒã¢ããªã®ãã¹ãã®ãµããã¡ã€ã³ã¯ãã§ã«å¯Ÿè±¡ç¯å²å
ã§ãïŒãupdate ã§ã¯ãªã¹ãã眮ãæããããŸãã[] ãæå®ãããšã¯ãªã¢ãããŸãããµãŒããŒã察å¿ããŠããå ŽåãgetïŒlist ã¯ãã®ãªã¹ããè¿ããŸããã¬ã¹ãã³ã¹ã«ã¯ä¿åããããªã¹ããå«ãŸããŸãããµãŒããŒããªã¹ããä¿åããªãã£ãå ŽåïŒå€ããµãŒããŒã¯ãã®ãã£ãŒã«ããç¡èŠããŸãïŒã¯ãæåãšããŠéç¥ãããã代ããã« authorizedCredentialHostsWarning: {requested, returned} ãè¿ãããŸãã
sessionsïŒclearSessions ã¯ããã°ã€ã³ãçç¥ããããã«ããã¯ãšã³ããåå©çšããèªèšŒæžã¿ã»ãã·ã§ã³ã管çããŸãïŒã»ãã·ã§ã³ã®åå©çšãåç
§ïŒãã»ãã·ã§ã³ã®å
容ã¯è¿ãããŸãã â ã»ãã·ã§ã³ Cookie ã¯ãã¢ã©ãŒèªèšŒæ
å ±ã§ãã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ãstateãerrorInfoïŒãšã¹ã¯ãªãŒã³ã·ã§ããïŒGIF ã®ææç© |
list | {status?, projectUuid?, page?, pageSize?} | ããŒãžããŒã·ã§ã³ãããæŠèŠ |
ããã¯ãšã³ãããã® 404 ã¯ã{error: 'NotFound', message, uuid} ãå«ã isError: true ãšããŠè¡šç€ºãããŸããèªèšŒæ
å ±ã¯åžžã«ãã¹ã¯ãŒããé€ããŠè¿ãããŸãã
ããŒãžããŒã·ã§ã³
ãã¹ãŠã® 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} | 1 ã€ã®ãããžã§ã¯ãã®è©³çŽ°å šäœ |
debugg-ai://environment/{uuid} | 1 ã€ã®ç°å¢ïŒèªèšŒæ å ±ã¯ã€ã³ã©ã€ã³ããã¹ã¯ãŒãã¯äŒãåïŒ |
debugg-ai://execution/{uuid} | 1 ã€ã®å®è¡ã®è©³çްïŒããŒãã®è©³çŽ°å šäœãšã¢ãŒãã£ãã¡ã¯ããžã®ãªã³ã¯ïŒ |
èªã¿åã㯠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 ãè¿ãããŸãã
| åé€ãããé ç® | 眮ãæã |
|---|---|
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 | æ§é åãã£ãŒã«ãã®ã¿ |
äžèЧã«ã€ããŠã¯ãCHANGELOG.md 6.0.0 ãåç §ããŠãã ããã
v3.0.0 ãžã®ç§»è¡ïŒã¢ã¯ã·ã§ã³ããŒã¹ã®ããŒã«ïŒ
v3 ã§ã¯ãåè©ããšã«åãããŠãã 20 åã®ããŒã«ãã8 åã®ã¢ã¯ã·ã§ã³ããŒã¹ã®ããŒã«ã«çµ±åãããŸãããæ§ããŒã« â æ°ãã tool {action}ïŒ
| åé€ãããé ç® | 眮ãæã |
|---|---|
search_projects | project {action:"get"} / project {action:"list"} |
create_project | project {action:"create"} |
update_projectãdelete_project | åé€ â DebuggAI Web ã¢ããªã䜿çšããŠãã ãã |
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 ãã©ã¡ãŒã¿ãŒ | åé€ â åžžã«ãããã¬ã¹ã§å®è¡ |
delete ã¢ã¯ã·ã§ã³ã«ã¯ã確èªïŒç¢ºèªããã³ããããŸã㯠confirm: trueïŒãå¿
èŠã«ãªããŸãããMCP ãåèµ·åãããšãã¯ã©ã€ã¢ã³ãã«æ°ããã€ã³ã¿ãŒãã§ãŒã¹ãåæ ãããŸãã
v1.x ããã®ç§»è¡ïŒv2.0.0 ã§ã®ç Žå£ç倿ŽïŒ
v2 ã§ã¯ã22 åã®ããŒã«æ§æã 11 åã«éçŽãããŸãããæ§ããŒã«ããæ°ããŒã«ãžã®å¯Ÿå¿é¢ä¿ïŒ
| åé€ãããããŒã« | 眮ãæã |
|---|---|
list_projects, get_project | search_projectsïŒuuid ã¢ãŒããŸãã¯ãã£ã«ã¿ãŒã¢ãŒãïŒ |
list_environments, get_environment | search_environments |
list_credentials, get_credential | search_environments â èªèšŒæ
å ±ã¯åç°å¢ã«ã€ã³ã©ã€ã³ã§å«ãŸããŸã |
create_credential | create_environment({credentials: [...]}) ã§ã·ãŒãããããupdate_environment({addCredentials: [...]}) |
update_credential | update_environment({updateCredentials: [{uuid, ...patch}]}) |
delete_credential | update_environment({removeCredentialIds: [uuid]}) |
list_teams, list_repos | create_project({teamName, repoName}) â ææ§ãã«å¯ŸåŠããåå解決 |
list_executions, get_execution | search_executions |
cancel_execution | åé€ â ããã¯ãšã³ãã®ã¹ãã³ããŠã³ã¯èªåã§è¡ãããŸã |
ã¬ã¹ãã³ã¹åœ¢åŒã®å€æŽïŒãªã¹ãã¬ã¹ãã³ã¹ã® count ãã£ãŒã«ãã¯åé€ãããŸãããpageInfo.totalCount ã䜿çšããŠãã ããã
èšå®
| ç°å¢å€æ° | å¿ é | çšé |
|---|---|---|
DEBUGGAI_API_KEY | ã¯ã | ããã¯ãšã³ã API ããŒãå¥åïŒDEBUGGAI_API_TOKENãDEBUGGAI_JWT_TOKENã |
DEBUGGAI_API_URL | ããã | ããã¯ãšã³ãã®ããŒã¹ URLãããã©ã«ã㯠https://api.debugg.ai ã§ãã |
DEBUGGAI_TOKEN_TYPE | ããã | tokenïŒããã©ã«ãïŒãŸã㯠bearerã |
DEBUGGAI_EVAL_TEMPLATE | ããã | check_app_in_browser ããã£ã¹ããããã App Evaluation ã¯ãŒã¯ãããŒã® ã¹ã©ãã° ãäžæžãããŸããããã©ã«ã㯠flow/e2es/app-eval ã§ãããã£ã¹ãããå
ããã®ã¹ã©ãã°ã«åºå®ããããšã§ãããã¯ãšã³ãã®ãã³ãã¬ãŒãåã倿ŽãããŠãåäœã«åœ±é¿ããŸããã |
LOG_LEVEL | ããã | error / warn / infoïŒããã©ã«ãïŒ/ debugã |
POSTHOG_API_KEY | ããã | åã蟌ã¿ãã¬ã¡ããªãããžã§ã¯ãããŒãäžæžãããŸãïŒäŸïŒãã©ã€ããŒããã©ãŒã¯ïŒã |
DEBUGGAI_TELEMETRY_DISABLED | ããã | ãã¬ã¡ããªãå®å
šã«ç¡å¹ã«ããã«ã¯ã1 / true / yes / on ãèšå®ããŸãã |
DEBUGGAI_API_KEY=your_api_key
ãªã¢ãŒãïŒHTTP ãã©ã³ã¹ããŒãïŒä»»æïŒ
ããã©ã«ãã§ã¯ããµãŒããŒã¯ stdioïŒããŒã«ã«ã® npxïŒã§éä¿¡ããŸãã代ããã«ãã¹ããŒãã¬ã¹ãª Streamable HTTP ãš OAuth ã䜿çšããããã¹ãåã®ãã«ããŠãŒã¶ãŒåããªã¢ãŒã MCP ãšããŠå®è¡ããããšãã§ããŸãã
DEBUGGAI_MCP_TRANSPORT=http PORT=3000 DEBUGGAI_TOKEN_TYPE=bearer npx -y @debugg-ai/debugg-ai-mcp@latest
ãã㯠OAuth ã® ãªãœãŒã¹ãµãŒããŒã§ãããã¹ãŠã® POST /mcp ãªã¯ãšã¹ãã«
Authorization: Bearer <token> ãå¿
èŠã§ããããŒã¯ã³ããªãããŸãã¯ç¡å¹ãªå Žåã¯ã
RFC 9728 ã¡ã¿ããŒã¿ãæã WWW-Authenticate ãå«ã 401 ãè¿ãããã¯ã©ã€ã¢ã³ãã¯
éç¥ãããèªå¯ãµãŒããŒã«å¯Ÿã㊠OAuth ãããŒãå®è¡ããŸãããã¢ã©ãŒã¯ãªã¯ãšã¹ãåäœã§é©çšããã
api.debugg.ai ãæ€èšŒããŸãã
| ãšã³ããã€ã³ã | çšé |
|---|---|
POST /mcp | MCP Streamable HTTPïŒãã¢ã©ãŒã§ä¿è·ïŒ |
GET /.well-known/oauth-protected-resource | RFC 9728 ã¡ã¿ããŒã¿ïŒèªå¯ãµãŒããŒã®æ€åºïŒ |
GET /health | ããŒããã©ã³ãµãŒïŒECS ã®ãã«ã¹ãã§ã㯠|
| ç°å¢å€æ° | ããã©ã«ã | çšé |
|---|---|---|
DEBUGGAI_MCP_TRANSPORT | stdio | ãªã¢ãŒããã©ã³ã¹ããŒãã䜿çšããã«ã¯ http ã«èšå®ããŸã |
PORT | 3000 | HTTP ã®ãªãã¹ã³ããŒã |
DEBUGGAI_MCP_PUBLIC_URL | https://mcp.debugg.ai | ãã®ãµãŒããŒã®ãããªãã¯ãªãœãŒã¹ URLïŒRFC 9728 ã® resourceïŒ |
DEBUGGAI_OAUTH_ISSUER | https://auth.debugg.ai | ã¯ã©ã€ã¢ã³ãã«éç¥ããèªå¯ãµãŒã㌠|
DEBUGGAI_TOKEN_TYPE | token | OAuth ããŒã¯ã³ã Authorization: Bearer ãšããŠè»¢éããã«ã¯ bearer ã«èšå®ããŸã |
stdio ã§ã€ã³ã¹ããŒã«ããå Žåããããã®èšå®ã¯äžèŠã§ãã
è€æ°ã¬ããªã«ã§ã®ãããã€ïŒããŒã«ã¢ãŠãåã«å¯åŠã倿ããŠãã ããïŒïŒ ãã³ãã«ã®ç¶æ
ïŒã»ãã·ã§ã³ãã³ãã«ã
ãã® Caddy ã€ã³ã¹ã¿ã³ã¹ãããã³ããŒãã«ãŒãã®ããã¯ïŒã¯ããã»ã¹å
ã«ããããã¢ã©ãŒããŒã¯ã³ã®ããã·ã¥ã䜿ã£ãŠåŒã³åºãå
ããšã«ç®¡çãããŸããããã»ã¹éã®é£æºã¯ãããŸãããéåžžã®
ã©ãŠã³ãããã³æ¹åŒã®ããŒããã©ã³ãµãŒã®èåŸã§è€æ°ã®ã¬ããªã«ãå®è¡ãããšãåãåŒã³åºãå
ããã®ãªã¯ãšã¹ããå¥ã
ã®ã¬ããªã«ã«æ¯ãåããããã»ãã·ã§ã³å
šäœã§ 1 ã€ã§ã¯ãªããã¢ã¯ã»ã¹ããã¬ããªã«ããšã« 1 ã€ã®ãã³ãã«ãäœæãããããšããããŸãïŒã¬ããªã«æ°ãäžéã§ããæ¢åã® 55 åéã®ã¢ã€ãã«æèªåã·ã£ããããŠã³ã«ãã£ãŠè§£æ¶ãããŸããåäžã®ããŒã«åŒã³åºãã¯åŠçäžãã£ãš 1 ã€ã®ã¬ããªã«ã§å®è¡ããããããã»ãã·ã§ã³ããŸããæŽåæ§ã®åé¡ã¯çºçããŸããïŒãè€æ°ã¬ããªã«ã® HTTP ãããã€ã§æå³ãããã»ãã·ã§ã³ããšã« 1 ã€ã®ãã³ãã«ããšããåäœãå®çŸããã«ã¯ãããŒããã©ã³ãµãŒã§ã»ãã·ã§ã³ã¢ãã£ããã£ã«ãŒãã£ã³ã°ãèšå®ããŠãã ããïŒgetSessionKey() ãå°åºãããã®ãšåãè奿
å ±ãã€ãŸãå®éã«ã¯åŒã³åºãå
ã® Authorization ãã¢ã©ãŒããŒã¯ã³ãããŒãšããã¹ãã£ãããŒæ¹åŒïŒã³ã³ã·ã¹ãã³ãããã·ã¥æ¹åŒïŒã詳ãã説æãšãæªèšå®ã®å Žåã«æ£çŽã«æ³å®ãããçž®éåäœã«ã€ããŠã¯ã
docs/local-tunnel-multiplexer-architecture-2026-07-31.md §2.1 ãåç
§ããŠãã ããã
ãã¬ã¡ããª
MCP ãµãŒããŒã§ã¯ããã©ã«ãã§ãã¬ã¡ããªãæå¹ã§ããæžã蟌ã¿å°çšã® PostHog ãããžã§ã¯ãããŒïŒphc_*ïŒãçµã¿èŸŒãŸããŠãããããŒã ã¯ã€ã³ã¹ããŒã«å
šäœã«ããããã£ãã·ã¥ãããçãããŒãªã³ã°ééããã³ãã«ã®ä¿¡é Œæ§ããã®ä»ã®éçšã¡ããªã¯ã¹ã確èªã§ããŸããåéãããã€ãã³ãã¯æ¬¡ã®ãšããã§ãã
| ã€ãã³ã | çºçæ |
|---|---|
tool.executed / tool.failed | ããŒã«åŒã³åºãããš |
workflow.executed | ãã©ãŠã¶ãŒãšãŒãžã§ã³ãã®å®è¡ããšïŒpollCountãdurationMsãfinalIntervalMs ãèšé²ïŒ |
tunnel.provisioned / tunnel.provision_retry / tunnel.stopped | ãã³ãã«ã®ã©ã€ããµã€ã¯ã«ã€ãã³ãããš |
template.lookup / project.lookup | ãã£ãã·ã¥ã®ãããïŒãã¹ããã£ãã·ã¥ãã¹æã®åŒã³åºãã§ã¯ durationMs ãèšé² |
ãã©ã€ãã·ãŒã«é¢ããæ¹éïŒ
- åºæ ID ã¯
SHA-256(api_key).slice(0, 16)ã§ããçã®ããŒãå人ãç¹å®ã§ããæ å ±ã¯äœ¿çšããŸããã - PostHog ã®èŠçŽäžã
phc_*ããŒã¯æžã蟌ã¿å°çšã§ããããœãŒã¹ã³ãŒãã«åã蟌ãã§ãå®å šã§ãã 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
ãã®ãªããžããªã«ã¯ãnode dist/index.jsïŒãã«ãæžã¿ã®ææ°ã®ããŒã«ã«ã³ãŒãïŒãåç
§ãããdebugg-ai-local ãšããååã®ãããžã§ã¯ãã¹ã³ãŒãã®ãµãŒããŒãç»é²ãã .mcp.json ãå«ãŸããŠããŸããããã¯ãClaude Code ã®äœæ¥ãã£ã¬ã¯ããªããã®ãªããžããªã®å Žåã«ã®ã¿æå¹ã«ãªããŸãã
ã»ãã®ãããžã§ã¯ãã§ã¯ãå
¬éãããŠãã npm ããã±ãŒãžã䜿çšãããŠãŒã¶ãŒã¹ã³ãŒãã® debugg-ai ç»é²ã䜿çšããŠãã ããã
npm run mcp:global # registers debugg-ai in ~/.claude.json to npx -y @debugg-ai/debugg-ai-mcp
ããã§ã³ãŒããç·šéããåŸãnpm run mcp:localïŒåãã«ãããã ãã®ã³ãã³ãïŒãå®è¡ãããšã次å debugg-ai-local ãèµ·åãããšãã«å€æŽãåæ ãããŸãã
ãªã³ã¯
ããã·ã¥ããŒã · ããã¥ã¡ã³ã · ã€ã·ã¥ãŒ · Discord
Apache-2.0 ã©ã€ã»ã³ã¹ © 2025 DebuggAI
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã