ð Electron Debug MCP Server
ããŒã«ã«ð Electron Debug MCP Server ã«ã€ããŠ
Electron Debug MCPã¯ãå®è¡äžã®Electronã¢ããªãæ€æ»ã»ãããã°ããããã®ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãåãMCPãµãŒããŒã§ããChrome DevTools ProtocolãšNode inspectorã§æ¥ç¶ããç»é¢æ€æ»ãUIèªååãã©ã³ã¿ã€ã 蚺æãã¡ã€ã³ããã»ã¹ã®IPC芳枬ããŸãšããŠè¡ããŸãã
äž»ãªæ©èœ
- 01ãŠã£ã³ããŠãDOMãã¢ã¯ã»ã·ããªãã£ããªãŒã®æ€æ»
- 02UIæäœã®èªååãšçµææ€èšŒ
- 03ã³ã³ãœãŒã«ããããã¯ãŒã¯ãããã»ã¹ãã°ã®ååŸ
- 04ããã©ãŒãã³ã¹åæãšã¡ã¢ãªæ€æ»
- 05ã¡ã€ã³ããã»ã¹IPCã®èŠ³æž¬ãšåŒã³åºã
- 06Electronã»ãã¥ãªãã£èšå®ã®ç£æ»
掻çšã·ãŒã³
- 01Electronã®ã©ã³ã¿ã€ã äŸå€ã®èšºæ
- 02ãã¹ã¯ãããã®ã¯ãŒã¯ãããŒã®èªååãšæ€èšŒ
- 03ãããã¯ãŒã¯ãªã¯ãšã¹ã倱æã®èª¿æ»
- 04ã¢ããªã®æ§èœãšã»ãã¥ãªãã£ã®ç¢ºèª
MCP 察å¿
Electronã®ã©ã€ããµã€ã¯ã«ç®¡çãæ€æ»ãèªååããããã°ã蚺æããŒã«ãMCPã¯ã©ã€ã¢ã³ãã«å ¬éããŸããCDPã§ã¬ã³ãã©ãŒãŠã£ã³ããŠã«æ¥ç¶ããNode inspectorã§ã¡ã€ã³ããã»ã¹ãæ€æ»ã§ããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
Electron Debug MCP
AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ãæ¬ç©ã® Chrome DevTools Protocol ã®åãã
CursorãClaudeãèªåŸåãšãŒãžã§ã³ãã«ãElectron ãã¹ã¯ãããã¢ããªå
ãèŠãŠãæäœããå®è¡æã«æ·±ã調æ»ããåãäžããŸãã
ã¯ã€ãã¯ã¹ã¿ãŒã ⢠匷åãªæ©èœ ⢠ããŒã«äžèЧ ⢠掻çšäŸ ⢠ãªãœãŒã¹ãšããã³ãã â¢ å€æŽå±¥æŽ ⢠ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ð Electron Debug MCP ã䜿ãçç±
å€ãã® AI ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã¯ããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã®æ±ãã«èŠåŽããŸãããœãŒã¹ã³ãŒãã¯ç·šéã§ããŠããçµæã®ãŠã£ã³ããŠãèŠããããã¿ã³ãã¯ãªãã¯ããããã³ã³ãœãŒã«ãšã©ãŒãèªã¿åã£ããã衚é¢åããªãã¡ã€ã³ããã»ã¹ã®ã¯ã©ãã·ã¥ã蚺æãããã§ããŸããã
Electron Debug MCP ã¯ãChrome DevTools ProtocolïŒCDPïŒãšNode ã€ã³ã¹ãã¯ã¿ãŒãéããŠããšãŒãžã§ã³ãã Electron ã®å®è¡ç°å¢ã«çŽæ¥æ¥ç¶ããèŠèŠçãªæäœã察話ã蚺æãå®å šã«èªåŸããŠè¡ããããã«ããŸãã
flowchart LR
A["ð€ AI Agent (Cursor / Claude)"] <-->|"stdio JSON-RPC"| B["â¡ Electron Debug MCP"]
B <-->|"CDP (WebSocket)"| C["ðŒïž Renderer Windows\n(DOM · AXTree · Network · V8)"]
B <-->|"Node Inspector / V8"| D["âïž Main Process\n(IPC · WebContents · Windows · Fuses)"]
⚠匷åãªæ©èœ
ð¡ïž å®è¡æã»ãã¥ãªãã£ç£æ»
|
ð ç§å¯æ å ±ãæŒãããªãèªååèªèšŒæ
å ±ãæŒãããã«ããã°ã€ã³ã API ãã©ãŒã ã®å
¥åãèªååããŸãã |
ð§© èªåŸåã®è€åã¯ãŒã¯ãããŒé«ã¬ãã«ã®åäžã¿ãŒã³ã¯ãŒã¯ãããŒã«ãããã©ãŠã³ãããªãããåæžããŸãã
|
ð IPC ã®è©³çްãªå¯èŠ³æž¬æ§
|
ðºïž ãœãŒã¹ããã察å¿ã¹ã¿ãã¯ãã¬ãŒã¹
| ### â¡ ã¹ã ãŒãºãªãšãŒãžã§ã³ãæäœ - **`processId` ã¯ä»»æ**ïŒåäžã®ã¢ã¯ãã£ããªã¢ããªã»ãã·ã§ã³ãããå Žåãèªåçã«ãããããã©ã«ããšããŠäœ¿çšããŸãã - **ããŒã«ã®ã¢ãããŒã·ã§ã³**ïŒããŒã«ã¯æšæºã® MCP ãã³ãïŒ`readOnlyHint`ã`destructiveHint`ïŒã宣èšãããããã¯ã©ã€ã¢ã³ãã¯å®å šãªã¯ãšãªãèªåæ¿èªã§ããŸãã - **ã¢ãŒãã£ãã¡ã¯ããªãœãŒã¹**ïŒåºåãã¡ã€ã«ã¯ `electron://artifact/{id}` ãšããŠã€ã³ããã¯ã¹åãããŸãã |
â¡ ã¯ã€ãã¯ã¹ã¿ãŒã
1. MCP ã¯ã©ã€ã¢ã³ããèšå®ãã
ð Cursor ã®å ŽåïŒ~/.cursor/mcp.json ãŸã㯠.cursor/mcp.jsonïŒ
{
"mcpServers": {
"electron-debug": {
"command": "npx",
"args": ["-y", "electron-debug-mcp@latest"]
}
}
}
ð¬ Claude Desktop ã®å ŽåïŒclaude_desktop_config.jsonïŒ
{
"mcpServers": {
"electron-debug": {
"command": "npx",
"args": ["-y", "electron-debug-mcp@latest"]
}
}
}
ãã³ã
ããŒã«ã«ã§éçºããŠããŸããïŒ
npm run buildãå®è¡ãã"command": "node"ãš"args": ["/path/to/electron-mcp-server/build/index.js"]ãèšå®ããŠãã ããã
ð ïž ããŒã«äžèЧïŒ111 åïŒ
ãã¹ãŠã®ããŒã«ã§ processId ã¯ä»»æã§ããå®è¡äžã®ã¢ããªã 1 ã€ã ãã®å Žåãèªåçã«ã¢ã¯ãã£ããªããã»ã¹ãç¹å®ããŸãã
ð ã©ã€ããµã€ã¯ã«ãšæ¥ç¶ïŒ8 åïŒ
| ããŒã« | 説æ |
|---|---|
start_app | ãªã¢ãŒããããã°ããŒããæå®ã㊠Electron ã¢ããªãèµ·åããŸããinspectMain: true ãèšå®ãããšãã¡ã€ã³ããã»ã¹ã®ãããã°ãæå¹ã«ãªããŸãã |
stop_app | èµ·åããã¢ããªãçµäºããããæ¥ç¶äžã®ã»ãã·ã§ã³ãåæããŸãã |
attach | DevTools ããŒããŸã㯠WebSocket URL ã䜿çšããŠãå®è¡äžã® Electron ã¢ããªã«æ¥ç¶ããŸãã |
attach_by_pid | Electron OS PID ã®ã³ãã³ãã©ã€ã³ãã DevTools ããŒããæ€åºããŠæ¥ç¶ããŸãã |
find_apps | ãã¹ããã·ã³äžã§å®è¡äžã®ãã¹ãŠã® Electron ããã»ã¹ãåæããŸãã |
discover_apps | ããŒã«ã« TCP ããŒãïŒããã©ã«ãã§ã¯ 9222ïœ9322ïŒãã¹ãã£ã³ããŠã皌åäžã® CDP ãããã°ãšã³ããã€ã³ããæ€åºããŸãã |
find_installed_apps | OS ã®æšæºã¢ããªã±ãŒã·ã§ã³ãã£ã¬ã¯ããªãã¹ãã£ã³ããã€ã³ã¹ããŒã«æžã¿ã®ããã±ãŒãžåããã Electron ã¢ããªãæ€åºããŸãã |
list_apps | 皌åæéãPIDãã¿ãŒã²ããæ°ãšãšãã«ããã¹ãŠã®ã¢ã¯ãã£ããªã»ãã·ã§ã³ãšç®¡ç察象ã®ã»ãã·ã§ã³ãåæããŸãã |
ðïž è¡šç€ºãšèŠèŠçãªæ€æ»ïŒ8 åïŒ
| ããŒã« | 説æ |
|---|---|
vision | æšå¥šãããäžæ¬ã¹ãããã·ã§ããã§ãããã¥ãŒããŒãã®ã¹ã¯ãªãŒã³ã·ã§ãããããŒãžã® URLïŒã¿ã€ãã«ãã³ã³ãœãŒã«ãšã©ãŒããããã¯ãŒã¯é害ãååŸããŸããSet-of-Marks ã®èŠèŠãããžã衚瀺ãã markElements: true ã«å¯Ÿå¿ããŠããŸãã |
snapshot | å®å®ããèŠçŽ åç
§ïŒref: "e1"ïŒãããŒã«ãååãããã¯ãšã³ã ID ãå«ããå®å
šãªã»ãã³ãã£ãã¯ã¢ã¯ã»ã·ããªãã£ããªãŒïŒAccessibility.getFullAXTreeïŒã§ããmarkElements: true ã«å¯Ÿå¿ããŠããŸãã |
screenshot | ãã¥ãŒããŒãã PNG ãŸã㯠JPEG ã® Base64 ãã€ããŒããšããŠãã£ããã£ããŸãã |
save_screenshot | ã¹ã¯ãªãŒã³ã·ã§ããããã£ã¹ã¯ã«ä¿åããŸãïŒCSS ã»ã¬ã¯ã¿ãŒã«ããåãæãã«å¯Ÿå¿ïŒãã¢ãŒãã£ãã¡ã¯ããšããŠç»é²ããŸãã |
diff_screenshot | ããŒã¹ã©ã€ã³ã®ã¹ã¯ãªãŒã³ã·ã§ãããšæ¯èŒããŠãèŠèŠçãªãªã°ã¬ãã·ã§ã³ãæ€åºããŸãã |
start_screencast | ã©ã€ãã®ãã¥ãŒããŒããã¬ãŒã ãããµã€ãºå¶éã®ãããªã³ã°ãããã¡ã«ã¹ããªãŒãã³ã°ããŸãã |
stop_screencast | ã¹ã¯ãªãŒã³ãã£ã¹ãã忢ããå¿ èŠã«å¿ããŠæåŸã®ãã¬ãŒã ããã£ã¹ã¯ã«ä¿åããŸãã |
highlight | æ ç·ãšèæ¯ã®ãªãŒããŒã¬ã€ã䜿ã£ãŠããã¥ãŒããŒãå ã® DOM èŠçŽ ãèŠèŠçã«åŒ·èª¿è¡šç€ºããŸãã |
ð±ïž æäœãš UI ã®èªååïŒ13ïŒ
| ããŒã« | 説æ |
|---|---|
act_and_verify | è€åïŒ ã¢ã¯ã·ã§ã³ïŒclickãtypeãclick_axïŒãå®è¡ãããããã¯ãŒã¯ãã¢ã€ãã«ç¶æ
ã«ãªããŸã§åŸ
æ©ããŠã¢ãµãŒã·ã§ã³ãæ€èšŒããŸãã倱æããå Žåã¯ã¹ã¯ãªãŒã³ã·ã§ãããååŸããŸãã |
click | CSS ã® selector ãŸãã¯ã¢ã¯ã»ã·ããªãã£ã® refïŒäŸïŒãe1ãïŒã«äžèŽããèŠçŽ ã®äžå€®ãã¯ãªãã¯ããŸãã |
click_ax | ã¢ã¯ã»ã·ããªãã£åãšä»»æã®ããŒã«ã§èŠçŽ ãç¹å®ãã確å®ã«ã¯ãªãã¯ããŸãã |
type_text | ãã©ãŒã«ã¹ãããŠããèŠçŽ ãselectorããŸã㯠ref ã«ããã¹ããå
¥åããŸãã{{secret:VAR}} ã®è§£æ±ºãšç§å¿åã«å¯Ÿå¿ããŠããŸãã |
type_ax | ã¢ã¯ã»ã·ããªãã£åã§èŠçŽ ã«ãã©ãŒã«ã¹ããã·ãŒã¯ã¬ããçšãã¬ãŒã¹ãã«ããŒã«å¯Ÿå¿ããããã¹ããå ¥åããŸãã |
press_key | ããŒå ¥åãŸãã¯ããŒããŒãã·ã§ãŒãã«ããïŒEnterãEscapeãTabãç¢å°ããŒãCtrl+A ãªã©ïŒãéä¿¡ããŸãã |
hover | ã¯ãªãã¯ããã«ãCSS ã® selector ãŸã㯠ref ã®äžãžããŠã¹ãã€ã³ã¿ãŒãç§»åããŸãã |
scroll | å·®å座æšãæå®ããŠããŒãžãŸãã¯èŠçŽ ãã¹ã¯ããŒã«ããããselector ãŸã㯠ref ã衚瀺ç¯å²å
ã«ã¹ã¯ããŒã«ããŸãã |
drag | ãã€ãã£ã HTML5 ã® dataTransfer ãã€ããŒãã䜿çšããŠã2 ã€ã®ã»ã¬ã¯ã¿ãŒãŸã㯠ref éã§ãã©ãã°ïŒããããããŸãã |
select_option | <select> ããããããŠã³ãããå€ãŸãã¯ã©ãã«ã§éžæè¢ãéžæããŸãã |
set_file_input | <input type="file"> ã«ããã°ã©ã ã§ãã¡ã€ã«ãèšå®ããŸãã |
handle_dialog | JavaScript ã® alertãconfirmãprompt ãèªåçã«æ¿èªãŸãã¯éããŸãã |
open_deep_link | ã«ã¹ã¿ã ãããã³ã«ã®ãã£ãŒããªã³ã¯ïŒäŸïŒmyapp://actionïŒãã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããŸãã |
ð ããŒãžç¶æ ãšããã²ãŒã·ã§ã³ïŒ20ïŒ
| ããŒã« | 説æ |
|---|---|
fill_form | è€åïŒ ããã¹ããéžæè¢ããã§ãã¯ããã¯ã¹ãã©ãžãªãã¿ã³ããã¡ã€ã«ã«å¯Ÿå¿ããè€æ°ãã£ãŒã«ãã®ãã©ãŒã ãã¹ããŒãã«è§£æ±ºããŸãã{{secret:VAR}} ã®è§£æ±ºãèªåéä¿¡ãUI ã¢ãµãŒã·ã§ã³ã«ã察å¿ããŠããŸãã |
responsive_theme_matrix | è€åïŒ è€æ°ã®ããŒãïŒlightãdarkïŒãšãã¥ãŒããŒããæ€æ»ããããã¹ãã®ã¯ãªããã³ã°ã暪ã¹ã¯ããŒã«ããŒãæ€åºããŸãã |
repro_bundle | è€åïŒ èªå·±å®çµåã®ãã°åçŸãã³ãã«ïŒã¹ã¯ãªãŒã³ã·ã§ãããMHTML DOMãHAR ãªãã¬ã€ãã³ã³ãœãŒã«ãšã©ãŒããã°ããã«ã¹æ å ±ïŒãã¢ãŒãã£ãã¡ã¯ãã«ãŸãšããŸãã |
page_info | URLãã¿ã€ãã«ã寞æ³ãreadyStateããŠãŒã¶ãŒãšãŒãžã§ã³ããªã©ãããŒãžã®åºæ¬æ å ±ãååŸããŸãã |
navigate | èšå®å¯èœãªèªã¿èŸŒã¿ç¶æ ã®åŸ æ©ãæå®ããŠãã¢ã¯ãã£ããªããŒãžã¿ãŒã²ããã URL ã«ç§»åããŸãã |
reload | ã¢ã¯ãã£ããªããŒãžã¿ãŒã²ãããåèªã¿èŸŒã¿ããŸãïŒãã£ãã·ã¥ã®åé¿ã«å¯Ÿå¿ïŒã |
wait_for | CSS ã»ã¬ã¯ã¿ãŒãããŒãžã¿ã€ãã«ãURL ã®éšåæååããŸãã¯ã«ã¹ã¿ã JS åŒãåŸ æ©ããŸãã |
get_dom | ããŒãžã® HTML ããŒã¯ã¢ãããååŸããŸãïŒCSS ã»ã¬ã¯ã¿ãŒã§ã®ã«ãŒãæå®ãšãããŒã¯ã³ãä¿è·ãã maxLength ã«å¯Ÿå¿ïŒã |
query_selector | CSS ã¯ãšãªãè©äŸ¡ããäžèŽããèŠçŽ ã®å±æ§ãšããã¹ãã³ã³ãã³ãã調ã¹ãŸãã |
evaluate | ã¬ã³ãã©ãŒããŒãžã®ã³ã³ããã¹ãã§ä»»æã® JavaScript ãè©äŸ¡ããŸãã |
get_console_messages | ãããã¡ãªã³ã°ãããã³ã³ãœãŒã«ã¡ãã»ãŒãžãšäŸå€ãååŸããŸãïŒã¬ãã«ãšæ«å°Ÿã®ãã£ã«ã¿ãªã³ã°ã«å¯Ÿå¿ïŒã |
get_logs | ååŸããããã»ã¹ã®æšæºåºåãã°ãšæšæºãšã©ãŒãã°ãååŸããŸãã |
get_cookies | æå®ãã URL ãŸãã¯ãã¹ãŠã®ã¿ãŒã²ããã® Cookie ã調ã¹ãŸãã |
set_cookie | ãã¡ã€ã³ããã¹ãã»ãã¥ãªãã£ãã©ã°ãæå®ããŠãã©ãŠã¶ãŒã® Cookie ãèšå®ããŸãã |
delete_cookie | ååãæå®ããŠç¹å®ã® Cookie ãåé€ããŸãã |
get_storage | localStorage ãŸã㯠sessionStorage ããé
ç®ãèªã¿åããŸãã |
set_storage | localStorage ãŸã㯠sessionStorage ã«é
ç®ãæžã蟌ã¿ãŸãã |
assert_ui | ããŒãžã® URLãã¿ã€ãã«ãèŠçŽ ã®è¡šç€ºç¶æ ãããã¹ãã®äžèŽãã³ã³ãœãŒã«ãšã©ãŒããªãããšãæ€èšŒããŸãã |
save_storage_state | CookieãlocalStorageãsessionStorage ã Playwright äºæã® JSON ã¢ãŒãã£ãã¡ã¯ãïŒelectron://artifact/{id}ïŒã«ãšã¯ã¹ããŒãããŸãã |
load_storage_state | Cookie ãšãªãªãžã³ã®ã¹ãã¬ãŒãžç¶æ ãã©ã€ãã® Electron ã»ãã·ã§ã³ã«åŸ©å ããèªèšŒã®å³æãã€ãã¹ãšç¶æ ã®ãªãã¬ã€ãå¯èœã«ããŸãã |
ð ãããã¯ãŒã¯ãšããŠã³ããŒãïŒ12ïŒ
| ããŒã« | 説æ |
|---|---|
offline_resilience_check | è€åïŒ ãããã¯ãŒã¯ã®ã«ãªã¹ãšé害埩æ§ãç£æ»ãïŒãªãã©ã€ã³ãé«ã¬ã€ãã³ã·ãHTTP 500 ã®é害ãã·ãã¥ã¬ãŒãïŒãã¬ãžãªãšã³ã¹è©äŸ¡ïŒAïœFïŒãè¿ããŸãã |
network_failure_report | è€åïŒ å€±æãã HTTP ãªã¯ãšã¹ãïŒã¹ããŒã¿ã¹ ⥠400 ãŸãã¯ãããã¯ãŒã¯é害ïŒãåéããã¬ã¹ãã³ã¹ããã£ãã€ã³ã©ã€ã³åããŠããšã¯ã¹ããŒãããã HAR ã¢ãŒãã£ãã¡ã¯ããç»é²ããŸãã |
get_network_log | ãããã¡ãŒããã HTTP ãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ãååŸããŸããã¹ããŒã¿ã¹ã倱æãURL ãã¿ãŒã³ã«ãããã£ã«ã¿ãŒã«å¯Ÿå¿ããŠããŸãã |
get_response_body | å®äºãã requestId ã®çã®ã¬ã¹ãã³ã¹ããã£ïŒããã¹ããŸã㯠base64ïŒãååŸããŸãã |
export_har | ãããã¡ãŒããããããã¯ãŒã¯ãã©ãã£ãã¯ãå ¬åŒ HAR 1.2 ãã¡ã€ã«ã«ãšã¯ã¹ããŒãããã¢ãŒãã£ãã¡ã¯ããç»é²ããŸãã |
wait_network_idle | å®è¡äžã®ãããã¯ãŒã¯ãªã¯ãšã¹ãããŒãã«ãªãããããã¯ãŒã¯ã鿢ãããŸã§åŸ æ©ããŸãã |
network_stub | ãã¿ãŒã³ã«äžèŽãã HTTP ãªã¯ãšã¹ããã€ã³ã¿ãŒã»ããããã«ã¹ã¿ã ã¹ããŒã¿ã¹ãããããŒããŸãã¯ããã£ã§ã¢ãã¯ããŸãã |
clear_network_stubs | æå¹ãªãããã¯ãŒã¯ã€ã³ã¿ãŒã»ããã¹ã¿ãããã¹ãŠåé€ããŸãã |
block_urls | ã¯ã€ã«ãã«ãŒã URL ãã¿ãŒã³ã«äžèŽãããããã¯ãŒã¯ãªã¯ãšã¹ãããããã¯ããŸãã |
set_extra_headers | 以éã®ãã¹ãŠã®ãªã¯ãšã¹ãã«ã«ã¹ã¿ã HTTP ããããŒã远å ããŸãã |
emulate_network | ãªãã©ã€ã³ç¶æ ã远å ã®åŸåŸ©ã¬ã€ãã³ã·ãããŠã³ããŒãïŒã¢ããããŒãã®ã¹ã«ãŒãããäžéããšãã¥ã¬ãŒãããŸãã |
get_downloads | ãã¹ãŠã®ã»ãã·ã§ã³ã§ããŠã³ããŒããªã¹ããŒãæå¹ã«ããä¿åãã€ã¢ãã°ã衚瀺ããã«ããŠã³ããŒããããã¡ã€ã«ãååŸããŸãã |
ð ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããããã¬ãŒïŒ16ïŒ
| ããŒã« | 説æ |
|---|---|
perf_snapshot | è€åïŒ æäœãŸãã¯ãªããŒãäžã® CDP ãã¬ãŒã¹ãCPU ãããã¡ã€ãªã³ã°ãã³ãŒãã«ãã¬ããžã調æŽããéçŽãããããã©ãŒãã³ã¹ãã³ãã«ãšã¢ãŒãã£ãã¡ã¯ã URI ãè¿ããŸãã |
leak_check | è€åïŒ GC åŸã®å埩åŠçã§ãDOM ããŒããã€ãã³ããªã¹ããŒãããã¥ã¡ã³ããããŒãã®å¢å ãæž¬å®ããã¡ã¢ãªãªãŒã¯ãæ€åºããŸãã |
get_performance_metrics | ã¬ã³ãã©ãŒã®ããã©ãŒãã³ã¹ã«ãŠã³ã¿ãŒïŒJS ããŒãã®äœ¿çšéïŒåèšãDOM ããŒãæ°ãã¬ã€ã¢ãŠãæ°ãªã©ïŒãååŸããŸãã |
perf_audit | LCPãCLSããã€ã³ãã¿ã€ãã³ã°ãç£æ»ã®åé¡ãåæãã軜éãªããã©ãŒãã³ã¹ç£æ»ã§ãã |
get_audit_issues | ãããã¡ãŒããã Chromium ã®ã»ãã¥ãªãã£ãæ··åšã³ã³ãã³ããéæšå¥šã«é¢ããç£æ»ã®åé¡ãååŸããŸãã |
start_tracing / stop_tracing | PerfettoïŒDevTools ã® JSON ã¿ã€ã ã©ã€ã³ãã¬ãŒã¹ãèšé²ãããšã¯ã¹ããŒãããŸãã |
start_cpu_profile / stop_cpu_profile | V8 ã® .cpuprofile ãã¡ã€ã«ãèšé²ãããšã¯ã¹ããŒãããŸãã |
heap_snapshot | V8 ããŒãå šäœã®ã¹ãããã·ã§ãããã¡ã€ã«ã¢ãŒãã£ãã¡ã¯ããååŸããŸãã |
start_coverage / stop_coverage | JavaScript ãš CSS ã®ã³ãŒãã«ãã¬ããžã远跡ããæªäœ¿çšã³ãŒãã®å²åãå ±åããŸãã |
resolve_stack | ã¹ã¿ãã¯ãã¬ãŒã ããœãŒã¹ã¹ããããã«å¯Ÿå¿ä»ããŸããv3 ãœãŒã¹ããããèªåçã«ãã³ãŒãããŸãã |
set_breakpoint / remove_breakpoint | ã¹ã¯ãªãã URL ãšè¡çªå·ãæå®ããŠãJavaScript ã®ãã¬ãŒã¯ãã€ã³ããèšå®ãŸãã¯è§£é€ããŸãã |
pause / resume | Debugger ãã¡ã€ã³çµç±ã§ãV8 ã® JavaScript å®è¡ãäžæåæ¢ãŸãã¯åéããŸãã |
ð¡ïž ã¡ã€ã³ããã»ã¹ããã€ãã£ãã¢ãã¯ãã¡ãã¥ãŒãã»ãã¥ãªãã£ïŒ23ïŒ
| ããŒã« | 説æ |
|---|---|
ipc_fuzz_and_verify | è€åïŒ å¢çå€ãæ»æçšãã€ããŒãïŒnullã__proto__ããã¹ãã©ããŒãµã«ãé倧ãªãããã¡ãŒïŒã䜿ã£ãŠã¢ã¯ãã£ããªãã³ãã©ãŒã調æ»ããIPC ã®ã»ãã¥ãªãã£ãšã¯ã©ãã·ã¥èæ§ã匷åãããã¡ã¶ãŒã§ãã |
mock_electron_api | ä»»æã® Electron ãã€ãã£ãã¢ãžã¥ãŒã«ïŒdialogãshellãappãclipboardãautoUpdaterïŒãã€ã³ã¿ãŒã»ããããã«ã¹ã¿ã ã®æ»ãå€ãŸãã¯éåæå®è£
ã§ã¢ãã¯ããŸãã |
get_mock_calls | ã¢ãã¯ãã Electron API ã®åŒã³åºãå±¥æŽãåŒæ°ã®ã·ã°ããã£ãã¿ã€ã ã¹ã¿ã³ãã確èªããŸãã |
restore_electron_mocks | å ã® Electron ãã€ãã£ãå®è£ ã埩å ããã¢ãã¯åŒã³åºãã®èšé²ãåé€ããŸãã |
get_application_menu | ããŒã«ãã©ãã«ãæå¹ïŒãã§ãã¯ç¶æ
ãã¢ã¯ã»ã©ã¬ãŒã¿ãŒã®ã·ã§ãŒãã«ãããå«ãããã€ãã£ãã® Menu.getApplicationMenu() ããªãŒã確èªããŸãã |
click_menu_item | ãã¹ïŒ"File > Save"ïŒãããŒã«ããŸã㯠ID ãæå®ããŠããã€ãã£ãã®ã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒé
ç®ã§ .click() ãããã°ã©ã ããå®è¡ããŸãã |
trigger_shortcut | Electron ã¢ããªã±ãŒã·ã§ã³ã®ãã€ãã£ããªã°ããŒãã«ã¢ã¯ã»ã©ã¬ãŒã¿ãŒïŒglobalShortcutïŒã確èªããŠå®è¡ããŸãã |
get_process_health | ããã»ã¹ã®çµäºãã¯ã©ãã·ã¥ïŒrender-process-goneïŒããŠã£ã³ããŠã®ãã³ã°ïŒunresponsiveïŒãã¡ã¢ãª RSSïŒããŒããstderr ãã°ãç£èŠãããŠã©ããããã°ã§ãã |
electron_security_audit | webPreferencesãã³ã³ããã¹ãåé¢ããµã³ãããã¯ã¹åããŠã£ã³ããŠãã³ãã©ãŒãããã²ãŒã·ã§ã³ã¬ãŒãããã€ããªãã¥ãŒãºãå æ¬çã«ã»ãã¥ãªãã£ç£æ»ããŸãã |
ipc_invoke | ã¡ã€ã³ããã»ã¹ã® IPC ãã³ãã©ãŒãã£ãã«ãçŽæ¥åŒã³åºãããåŒæ°ãæå®ã㊠IPC ã€ãã³ããçºè¡ããŸãã |
ipc_schema_inference | IPC ãã£ãã«ã®å¥çŽãšãã€ããŒãåãæšæž¬ããTypeScript å®çŸ©ãèªåçæããŸãã |
ipc_tap / get_ipc_log | ã¡ã€ã³ããã»ã¹ã® IPC ã«ããã¯ããã¬ã³ãã©ãŒãšã¡ã€ã³ããã»ã¹éã®éä¿¡ãèšé²ããŸãã |
evaluate_main | Electron ã®ã¡ã€ã³ïŒNode ã³ã³ããã¹ãå
ã§ JavaScript ãè©äŸ¡ããŸãïŒinspectMain ãå¿
èŠã§ãïŒã |
main_state | Electron ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ïŒéããŠãããŠã£ã³ããŠãã¡ããªã¯ã¹ãããŒãžã§ã³ãã·ã¹ãã ãã¹ïŒã確èªããŸãã |
webcontents_topology | BrowserWindow ãš webContents ID ããããããã® CDP ã¿ãŒã²ããã«å¯Ÿå¿ä»ããŸãã |
focus_window | æå®ãã BrowserWindow ã衚瀺ããåé¢ã«ç§»åããŸãã |
set_window_bounds | Electron ã® BrowserWindow ãç§»åãŸãã¯ãµã€ãºå€æŽããŸãã |
set_permission | æš©éïŒéç¥ãã¡ãã£ã¢ãäœçœ®æ å ±ãªã©ïŒãããã°ã©ã ããèš±å¯ãŸãã¯æåŠããŸãã |
get_clipboard / set_clipboard | OS ã®ã¯ãªããããŒãäžã®ããã¹ããšç»åããŒã¿ãèªã¿åãããæžã蟌ã¿ãŸãã |
print_pdf | ããŒãžã PDF ããã¥ã¡ã³ãã®ææç©ãšããŠã¬ã³ããªã³ã°ããŸãã |
capture_mhtml | ããŒãžã® DOMãã¹ã¿ã€ã«ã·ãŒããç»åã MHTML ã¢ãŒã«ã€ãã®ææç©ãšããŠä¿åããŸãã |
𩺠ã¡ã¿ããŒã¿ãšèšºæïŒ11ïŒ
| ããŒã« | 説æ |
|---|---|
run_script | è€åïŒ ãã³ãã¬ãŒãïŒ{{vars}}ã{{steps[id].result}}ïŒãæ¡ä»¶åå²ïŒifïŒãã¹ãããã®å詊è¡ãã¢ãµãŒã·ã§ã³ã倱ææã®èšºæãPlaywright ã³ãŒãçæã«å¯Ÿå¿ãããµãŒããŒãµã€ãã®ã¯ãŒã¯ãããŒãšã³ãžã³ã§ãã |
triage | è€åïŒ ããŒãžã®ç¶æ ãã³ã³ãœãŒã«ãšã©ãŒããããã¯ãŒã¯é害ãç£æ»ã®åé¡ããã°ã®æ«å°Ÿã解決æžã¿ã®äŸå€ã¹ã¿ãã¯ãéçŽããäžåºŠã«èšºæããŸãã |
doctor | ç°å¢ã®ç¶æ ãš NodeïŒElectron ãã€ããªã確èªããäžæããŒãã®ãã€ã³ãããã¹ãããŸãã |
diagnose | ãã¹ãŠã®ã¢ã¯ãã£ããªã»ãã·ã§ã³ãã¿ãŒã²ããæ°ããããã¡ãŒãµã€ãºã®ãã«ã¹ãã§ãã¯ãå®è¡ããŸãã |
clear_buffers | ãããã¡ãŒã«èç©ãããã³ã³ãœãŒã«ã¡ãã»ãŒãžããããã¯ãŒã¯ãªã¯ãšã¹ãããã°ãIPC ãšã³ããªãŒããªã»ããããŸãã |
list_targets | ãã¹ãŠã® CDP ã¿ãŒã²ããïŒããŒãžãã¯ãŒã«ãŒãiframeãNodeïŒãåæããŸãã |
emulate | ãã¥ãŒããŒãããŠãŒã¶ãŒãšãŒãžã§ã³ããäœçœ®æ å ±ãããã€ã¹ã®ã¹ã±ãŒã«ãã¡ã¯ã¿ãŒãã«ã©ãŒã¹ããŒã ãäžæžãããŸãã |
virtual_clock | 決å®è«çãªã¿ã€ããŒãšã¢ãã¡ãŒã·ã§ã³ããã¹ããããããä»®æ³æéã忢ãŸãã¯é²ããŸãã |
set_console_live | ã©ã€ãã®ã³ã³ãœãŒã«ã¡ãã»ãŒãžãšãã°ã MCP éç¥ãšããŠçŽæ¥ã¹ããªãŒãã³ã°ããŸãã |
cdp_command | çã® CDP ãšã¹ã±ãŒããããïŒã«ã¹ã¿ã ãã©ã¡ãŒã¿ãŒãæå®ããŠä»»æã® Domain.method ãå®è¡ããŸãã |
ðŠ ãªãœãŒã¹ãšããã³ãã
ð¡ æšæº MCP ãªãœãŒã¹
æšæº MCP ãªãœãŒã¹ãéããŠããªã¢ã«ã¿ã€ã ã®ç¶æ ãšãšã¯ã¹ããŒããããææç©ãçŽæ¥å ¬éããŸãã
electron://serverâ ãµãŒããŒã®ã¹ããŒã¿ã¹ãããŒãžã§ã³ããã¹ãç°å¢ãelectron://infoâ ã¢ã¯ãã£ããªããã»ã¹ IDãã¿ãŒã²ããã®å èš³ãæè¿ã®ãšã©ãŒæ°ãelectron://targetsâ æ¥ç¶äžã®ãã¹ãŠã®ããã»ã¹ã«ããããã©ã€ã CDP ã¿ãŒã²ãããelectron://artifactsâ ãšã¯ã¹ããŒãããããã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ããããã¬ãŒã¹ãããŒãã¹ãããã·ã§ãããHAR ã®ã€ã³ããã¯ã¹ãelectron://artifact/{id}â ID ãæå®ããŠããšã¯ã¹ããŒããããææç©ãååŸããŸããelectron://process/{id}·electron://logs/{id}·electron://console/{id}·electron://cdp/{proc}/{target}
ð¬ çµã¿èŸŒã¿ MCP ããã³ãã
ã¯ã³ã¯ãªãã¯ã§åŒã³åºããã察話åãããã°ã¬ã·ãã§ãã
debug_blank_windowâ çœç»é¢ãŸãã¯ç©ºçœã®ã¬ã³ãã©ãŒãäœç³»çã«èšºæããŸããfind_renderer_exceptionâ æªåŠçã®äŸå€ãç¹å®ããç£æ»ã調æ»ããŠããœãŒã¹ã¹ã¿ãã¯ã解決ããŸããui_smoke_checkâ ãšã³ãããŒãšã³ãã® UI æ€èšŒïŒåŸ æ©ãæäœãã¢ãµãŒã·ã§ã³ãè¡ããŸããattach_and_screenshotâ ããŒã«ã«ã¢ããªãæ€åºããŠã¢ã¿ããããç»é¢ã®ç¶æ ããã£ããã£ããŸããvision_then_actâ èŠèŠåªå ã®ãšãŒãžã§ã³ãã«ãŒãïŒç¢ºèªããã»ãã³ãã£ãã¯ã¿ãŒã²ãããç¹å®ããŠãæäœããæ€èšŒããŸããax_then_assertâ ã¢ã¯ã»ã·ããªãã£åªå ã®æäœã«ãŒãïŒã¢ã¯ã»ã·ãã«ãªååã§ç¹å®ããç¶æ ãã¢ãµãŒãããŸãã
ð ãšãŒãžã§ã³ãã¬ã·ã
1. èŠèŠ â æäœ â æ€èšŒã«ãŒã
// Step 1: Look at the screen and check for errors
{ "name": "vision", "arguments": {} }
// Step 2: Act and verify in a single turn (captures failure screenshot if assertion fails)
{
"name": "act_and_verify",
"arguments": {
"action": { "type": "click_ax", "name": "Sign In" },
"assertion": { "textIncludes": "Welcome back" }
}
}
2. èªååãã©ãŒã ã§ã®ã·ãŒã¯ã¬ããã®ãã¹ãã³ã°
{
"name": "type_text",
"arguments": {
"selector": "#api-key",
"text": "{{secret:MY_APP_API_KEY}}"
}
}
ã¡ã¢
process.env.MY_APP_API_KEYã解決ããCDP çµç±ã§æ¿å ¥ããŠãtyped: "[REDACTED]"ãè¿ããŸãããã®åŸã®ãã¹ãŠã®ãã°ãã³ã³ãœãŒã«ã€ãã³ããHAR ãã¡ã€ã«ããã·ãŒã¯ã¬ãããèªåçã«ãµãã¿ã€ãºããŸãã
3. èªåã»ãã¥ãªãã£ç£æ»
{ "name": "electron_security_audit", "arguments": {} }
webPreferences ãš Electron ãã€ããªã®ãã¥ãŒãºã«ã€ããŠããã§ãã¯ãªã¹ãã®ã¹ã³ã¢ïŒ0ïœ100ïŒãã¬ã¿ãŒã°ã¬ãŒãïŒAïœFïŒãå®è¡å¯èœãªä¿®æ£ã¬ã€ãã³ã¹ãè¿ããŸãã
4. IPC ã³ã³ãã©ã¯ãã®æšè«
// 1. Arm tap -> 2. Run app interactions -> 3. Infer TypeScript contracts
{ "name": "ipc_schema_inference", "arguments": {} }
å®è¡æã®éä¿¡ã芳枬ããããªããŒã API çšã®ããã«äœ¿ãã TypeScript å®çŸ©ãçŽæ¥çæããŸãã
5. ãã«ãã¹ãããã¯ãŒã¯ãããŒãšã³ãžã³ãš Playwright CodegenïŒrun_scriptïŒ
倿°ã®è£éãæ¡ä»¶åå²ããªãã©ã€ãã¢ãµãŒã·ã§ã³ãã§ãã¯ãã³ãŒãçæã䜿çšããŠãè€éãªè€æ°ã¢ã¯ã·ã§ã³ã®èªååã 1 åã® MCP ã©ãŠã³ãããªããã§ãµãŒããŒåŽããå®è¡ããŸãã
{
"name": "run_script",
"arguments": {
"vars": {
"targetWorkspace": "workspace-alpha",
"expectedItems": 3
},
"steps": [
{
"id": "authenticate",
"tool": "type_text",
"args": {
"selector": "input#token",
"text": "{{secret:APP_API_TOKEN}}"
},
"expect": { "status": "success" }
},
{
"id": "switch_workspace",
"tool": "click",
"args": { "selector": "button.workspace-switch" },
"retry": { "retries": 3, "delayMs": 250 }
},
{
"id": "check_banner",
"tool": "eval_js",
"args": { "expression": "Boolean(document.querySelector('.promo-modal'))" }
},
{
"id": "dismiss_banner",
"if": "{{steps.check_banner.result.value}} == true",
"tool": "click",
"args": { "selector": ".promo-modal .close-btn" }
},
{
"id": "verify_workspace_state",
"tool": "eval_js",
"args": {
"expression": "({ active: document.querySelector('#current-ws').textContent.trim(), count: document.querySelectorAll('.item').length })"
},
"expect": {
"js": "result.value.active === 'workspace-alpha' && result.value.count >= 3"
}
}
],
"exportAs": "playwright"
}
}
æ©èœãšãªãã·ã§ã³
| æ©èœ | æ§æ / ãªãã·ã§ã³ | ç®ç |
|---|---|---|
| 倿°ãšã³ã³ããã¹ã | {{vars.key}} | ã¹ã¯ãªããã® vars ãªããžã§ã¯ãå
ã®å€ããããªããã£ãåïŒæååãæ°å€ãããŒã«å€ããªããžã§ã¯ãïŒãä¿æãããŸãŸåç
§ããŸãã |
| ã¹ãããã®äŸåé¢ä¿ | {{steps.id.result.path}} | å è¡ããã¹ãããã§èšç®ãããåºåãIDãããŒã¯ã³ããåŸç¶ã®ããŒã«åŒæ°ã«çŽæ¥æž¡ããŸãã |
| ç°å¢å€æ°ãšã·ãŒã¯ã¬ãã | {{env.KEY}} · {{secret:KEY}} | ããã»ã¹ç°å¢å€æ°ãæ¿å
¥ããŸããã·ãŒã¯ã¬ããã¯ãã°ãã³ã³ãœãŒã«ã€ãã³ããåºåå
ã§èªåçã« [REDACTED] ãšããŠãã¹ãã³ã°ãããŸãã |
| æ¡ä»¶åå² | if: "{{steps.check.result.open}} == true" | æ¡ä»¶ã true ãšè©äŸ¡ãããªãéããã¹ãããã®å®è¡ãã¹ãããããŸãïŒ==ã!=ã<ã>ã&&ã` |
| æåŸ å€ã®ã¢ãµãŒã·ã§ã³ | expect: { contains, equals, status, js } | ã¹ãããã®çµæãæ€èšŒããŸããã«ã¹ã¿ã ã® js åŒã¯ result ã«å¯ŸããŠè©äŸ¡ãããã¢ããªã®äžå€æ¡ä»¶ãæ€èšŒããŸãã |
| èªåãªãã©ã€ | retry: { retries: 3, delayMs: 250 } | äžå®å®ãªæäœãææ°ããã¯ãªãã§èªåçã«å詊è¡ããŠããã倱æãšããŠæ±ããŸãã |
| 倱ææã®èšºæ | èªå | ã¹ãããã倱æãããšããã¥ãŒããŒãã®ã¹ã¯ãªãŒã³ã·ã§ããææç©ïŒelectron://artifact/{id}ïŒãã³ã³ãœãŒã«ãšã©ãŒããããã¯ãŒã¯ãšã©ãŒããã£ããã£ããŸãã |
| Playwright Codegen | exportAs: "playwright" | å®è¡ããæé ãåæ ãããåäœã§å®è¡å¯èœãª Playwright _electron ãã¹ãã¹ã¯ãªããïŒ.spec.tsïŒãçæããŸãã |
çæããã Playwright Codegen ã®åºåã衚瀺
import { test, expect, _electron as electron } from "@playwright/test";
test("executed script workflow", async () => {
const electronApp = await electron.launch({ args: ["."] });
const window = await electronApp.firstWindow();
// Step: authenticate
await window.locator("input#token").fill(process.env.APP_API_TOKEN || "");
// Step: switch_workspace
await window.locator("button.workspace-switch").click();
// Step: dismiss_banner
await window.locator(".promo-modal .close-btn").click();
// Step: verify_workspace_state
const evalResult = await window.evaluate("({ active: document.querySelector('#current-ws').textContent.trim(), count: document.querySelectorAll('.item').length })");
expect(evalResult).toBeDefined();
await electronApp.close();
});
6. Ref ãã±ãŒã¿ãŒãš Set-of-Marks ã«ããèŠèŠããã³ãã
ã³ã³ãã¯ã㪠refïŒe1ãe2ïŒã§ã¢ã¯ã»ã·ããªãã£ã¿ãŒã²ããã調ã¹ãå£ãããã CSS ã»ã¬ã¯ã¿ãŒã䜿ããã«æäœããŸãã
// 1. Take snapshot with Set-of-Marks badges in the screenshot
{ "name": "vision", "arguments": { "markElements": true } }
// 2. Click directly by ref token
{ "name": "click", "arguments": { "ref": "e3" } }
// 3. Type text into ref
{ "name": "type_text", "arguments": { "ref": "e4", "text": "Hello Desktop!" } }
7. ãã€ãã£ã Electron API ã®ã¢ãã¯ïŒãã€ã¢ãã°ãShellãã¯ãªããããŒãïŒ
èªåãã¹ãã®å®è¡äžã«ãOS ã®ãã¡ã€ã«ãã€ã¢ãã°ãå€éš URL ã®ãªãŒãã³ããŸãã¯æŽæ°ç¢ºèªããã€ãã¹ããŸãïŒ
// 1. Mock dialog.showOpenDialog to return test fixtures
{
"name": "mock_electron_api",
"arguments": {
"module": "dialog",
"method": "showOpenDialog",
"returns": { "canceled": false, "filePaths": ["/fixtures/document.pdf"] }
}
}
// 2. Mock shell.openExternal
{
"name": "mock_electron_api",
"arguments": {
"module": "shell",
"method": "openExternal",
"returns": true
}
}
// 3. Inspect tracked invocations
{ "name": "get_mock_calls", "arguments": { "module": "shell", "method": "openExternal" } }
// 4. Restore original implementation
{ "name": "restore_electron_mocks", "arguments": { "module": "shell", "method": "openExternal" } }
8. ãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒãšã¢ã¯ã»ã©ã¬ãŒã¿ãŒã®ããªã¬ãŒ
ãã€ãã£ã OS ã¡ãã¥ãŒãšã°ããŒãã«ããŒããŒãã·ã§ãŒãã«ãããèªååããŸãïŒ
// 1. Inspect the full native menu tree
{ "name": "get_application_menu", "arguments": {} }
// 2. Click menu item by path or role
{ "name": "click_menu_item", "arguments": { "path": "File > Save" } }
// 3. Dispatch an Electron accelerator directly
{ "name": "trigger_shortcut", "arguments": { "accelerator": "CommandOrControl+Shift+P" } }
9. ããã»ã¹ã®ãã«ã¹ãŠã©ããããã°ãšã¯ã©ãã·ã¥èšºæ
{ "name": "get_process_health", "arguments": {} }
ãªã¢ã«ã¿ã€ã ã®ã¹ããŒã¿ã¹ïŒ"healthy"ã"unresponsive"ããŸã㯠"crashed"ïŒãè¿ããOOM ã«ããçµäºãåããã»ã¹ã®é害ããŠã£ã³ããŠã®ãã³ã°ãã¡ã¢ãªææšã远跡ããŸãã
10. ã¹ãã¬ãŒãžç¶æ ã®ã¹ãããã·ã§ãããšèªèšŒã®åç
ã»ãã·ã§ã³ç¶æ å šäœïŒcookiesãlocalStorageãsessionStorageïŒã Playwright äºæã®ã¹ãã¬ãŒãžç¶æ ã¢ãŒãã£ãã¡ã¯ãã«ä¿åãããã¹ãéã§ãã°ã€ã³ãããŒãç¹°ãè¿ããã«æžãããã«ããŸãïŒ
// 1. Export storage state to an artifact
{ "name": "save_storage_state", "arguments": {} }
// 2. Restore state into any new Electron session
{
"name": "load_storage_state",
"arguments": {
"state": { "cookies": [...], "origins": [...] }
}
}
11. ã¯ã³ã·ã§ããã®ãã°åçŸãã³ãã«ãš Issue çæïŒrepro_bundleïŒ
ãã¥ãŒããŒãã®ã¹ã¯ãªãŒã³ã·ã§ãããå®å šãª MHTML DOM ã¢ãŒã«ã€ããHAR ãããã¯ãŒã¯ãªãã¬ã€ããœãŒã¹ãããä»ãã³ã³ãœãŒã«ãšã©ãŒãstderr ã®æ«å°Ÿããã«ã¹ã¡ããªã¯ã¹ãGitHub ã«ãã®ãŸãŸäœ¿ãã Markdown ã® Issue ã¬ããŒããå«ããå®å šãªèªå·±å®çµåã® zip ã¢ãŒã«ã€ãã 1 åã®ã¿ãŒã³ã§ããã±ãŒãžåããŸãïŒ
{
"name": "repro_bundle",
"arguments": {
"notes": "Regression on checkout flow after OAuth upgrade"
}
}
artifactUri: "electron://artifact/..."ãä¿åå
ãã¹ãGitHub ã® Issue ãŸã㯠Jira ã«ãã®ãŸãŸè²Œãä»ããããå®å
šãª Markdown ã®æŠèŠãè¿ããŸãã
12. ã¹ããŒããªè€æ°ãã£ãŒã«ã察å¿ã®ã¢ã¯ã»ã·ãã«ãªã·ãŒã¯ã¬ãããã©ãŒã ãœã«ããŒïŒfill_formïŒ
ããŒãšå€ã®èŸæžããŸãã¯æ§é åããããã£ãŒã«ã仿§ããã1 åã®ããŒã«åŒã³åºãã§è€æ°å ¥åãã©ãŒã å šäœã«å ¥åããŸãïŒ
{
"name": "fill_form",
"arguments": {
"fields": {
"Username or Email": "[email protected]",
"Password": "{{secret:APP_PASSWORD}}",
"Environment": "Staging",
"Remember Me": true
},
"submit": true,
"expect": {
"textIncludes": "Welcome back"
}
}
}
ã¢ã¯ã»ã·ããªãã£ããªãŒã®ã©ãã«ãARIA 屿§ããã¬ãŒã¹ãã«ããŒããŸãã¯åç
§ïŒe1ïŒã䜿ã£ãŠãã£ãŒã«ãã解決ããã·ãŒã¯ã¬ãããå®å
šã«åŠçããããããããŠã³ã®éžæè¢ãéžæãããã§ãã¯ããã¯ã¹ãåãæ¿ããéä¿¡ãã¿ã³ãã¯ãªãã¯ããŠãéä¿¡åŸã® UI ã¢ãµãŒã·ã§ã³ãæ€èšŒããŸãã
13. ãããã¯ãŒã¯é害ãšã¬ãžãªãšã³ã¹ã®ã¹ã³ã¢ã«ãŒãïŒoffline_resilience_checkïŒ
æäœäžã«çŸå®äžçã®ãããã¯ãŒã¯é害æ¡ä»¶ïŒãªãã©ã€ã³ãé å»¶ãHTTP 500ïŒãã·ãã¥ã¬ãŒãããã¢ããªã®ãã«ã¹ç¶æ ãšãšã©ãŒã®æ¥å¢ãç£èŠããŠããããã¯ãŒã¯ã埩æ§ãããšã°ãŒã¯ãã£ãåãã®ã¬ãžãªãšã³ã¹è©äŸ¡ïŒAïœFïŒãç®åºããŸãïŒ
{
"name": "offline_resilience_check",
"arguments": {
"faultType": "offline",
"durationMs": 1500,
"action": { "type": "click", "selector": "#save-btn" }
}
}
14. ã¬ã¹ãã³ã·ãããŒããšãã¥ãŒããŒãã®ãããªãã¯ã¹ã¹ã€ãŒãïŒresponsive_theme_matrixïŒ
ã«ã©ãŒã¹ããŒã ïŒlightãdarkïŒããã¥ãŒããŒããµã€ãºã«å¿ããã¬ã€ã¢ãŠãã®é©å¿ãç£æ»ããæ°Žå¹³ã¹ã¯ããŒã«ããŒã®ã¯ã¿åºãïŒscrollWidth > innerWidthïŒãæ€åºããŸãïŒ
{
"name": "responsive_theme_matrix",
"arguments": {
"themes": ["light", "dark"],
"viewports": [
{ "width": 800, "height": 600, "name": "compact" },
{ "width": 1280, "height": 800, "name": "desktop" }
]
}
}
15. IPC ã»ãã¥ãªãã£ãšã¯ã©ãã·ã¥èæ§åŒ·åã®ãã¡ã¶ãŒïŒipc_fuzz_and_verifyïŒ
æªæã®ãããã€ããŒããäžæ£ãªãã€ããŒãïŒnullããããã¿ã€ãæ±æããã¹ãã©ããŒãµã«ãé倧ãªãããã¡ãŒïŒã«å¯Ÿããã¬ã³ãã©ãŒããã¡ã€ã³ãžã® IPC éä¿¡ã匷åããããã»ã¹ãã¯ã©ãã·ã¥ã«èããããããšãæ€èšŒããŸãïŒ
{
"name": "ipc_fuzz_and_verify",
"arguments": {
"iterations": 6
}
}
ð 倿Žå±¥æŽãšãªãªãŒã¹
| ããŒãžã§ã³ | ãªãªãŒã¹ã®äž»ãªå 容 | ãã¹ãã¹ã€ãŒã |
|---|---|---|
| v1.15.0 | è€åçãªãã¯ãŒæ©èœãšã¬ãžãªãšã³ã¹ã¯ãŒã¯ãããŒïŒã¯ã³ã·ã§ããã®ãã°åçŸãã³ãã«ïŒrepro_bundleïŒãã¹ããŒããªã¢ã¯ã»ã·ãã«ãã€ã·ãŒã¯ã¬ãã察å¿ã®ãã©ãŒã å
¥åïŒfill_formïŒããããã¯ãŒã¯é害æã®ã¬ãžãªãšã³ã¹ã¹ã³ã¢ã«ãŒãïŒoffline_resilience_checkïŒãã¬ã¹ãã³ã·ãããŒãã®äžæ¬æ€èšŒïŒresponsive_theme_matrixïŒãIPC ã»ãã¥ãªãã£ãã¡ã¶ãŒïŒipc_fuzz_and_verifyïŒãäŸåé¢ä¿ãŒãã®çŽç²ãª Node 補 PKZip ãžã§ãã¬ãŒã¿ãŒã111 åã®ããŒã«ã | ãŠããã 140 ä»¶ · ã¹ã¢ãŒã¯ 111 ä»¶ |
| v1.14.0 | åç
§ãã±ãŒã¿ãŒãš Set-of-MarksïŒref: "e1"ãmarkElements: trueïŒãElectron ãã€ãã£ã API ã®ã¢ãã¯ïŒmock_electron_apiãget_mock_callsãrestore_electron_mocksïŒããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒãã©ã€ããŒïŒget_application_menuãclick_menu_itemãtrigger_shortcutïŒãããã»ã¹ãã«ã¹ãŠã©ããããã°ïŒget_process_healthïŒãã¹ãã¬ãŒãžç¶æ
ã®ä¿åãšèªã¿èŸŒã¿ïŒsave_storage_stateãload_storage_stateïŒã106 åã®ããŒã«ã | ãŠããã 135 ä»¶ · ã¹ã¢ãŒã¯ 106 ä»¶ |
| v1.13.0 | ãµãŒããŒãµã€ãã®ã¯ãŒã¯ãããŒãšã³ãžã³ãšã³ãŒãçæïŒã³ã³ããã¹ã倿°ãæ¡ä»¶åå²ãæåŸ
å€ã¢ãµãŒã·ã§ã³ããªãã©ã€ã倱æèšºæãPlaywright ãã¹ãã³ãŒãçæã«å¯Ÿå¿ãã run_scriptïŒã97 åã®ããŒã«ã | ãŠããã 130 ä»¶ · ã¹ã¢ãŒã¯ 97 ä»¶ |
| v1.12.0 | ã©ã³ã¿ã€ã ã»ãã¥ãªãã£ç£æ»ïŒelectron_security_auditïŒãã·ãŒã¯ã¬ããã®æŒãããé²ãç§å¿åïŒ{{secret:VAR}}ïŒãIPC ã¹ããŒãæšè«ïŒipc_schema_inferenceïŒãã¡ã¢ãªãªãŒã¯æ€åºïŒleak_checkïŒããœãŒã¹ãããïŒresolve_stackïŒãè€åã¯ãŒã¯ãããŒïŒact_and_verifyãtriageãnetwork_failure_reportãperf_snapshotïŒã96 åã®ããŒã«ã | ãŠããã 125 ä»¶ · ã¹ã¢ãŒã¯ 96 ä»¶ |
| v1.11.0 | ããŒã«ã¢ãããŒã·ã§ã³ïŒreadOnlyHintãdestructiveHintïŒãprocessId ã®çç¥å¯èœåãã¢ãŒãã£ãã¡ã¯ãã·ã¹ãã ïŒelectron://artifactsïŒããããã¯ãŒã¯ãã°ã®ãã£ã«ã¿ãªã³ã°ãDOM ã¬ãŒããllms.txtã88 åã®ããŒã«ã | ãŠããã 120 ä»¶ · ã¹ã¢ãŒã¯ 88 ä»¶ |
ãã³ã
éå»ã®ãªãªãŒã¹ããŒããAPI ç§»è¡ã«é¢ããæ³šæäºé ãäŸåé¢ä¿ã®æŽæ°ã¯ãã¹ãŠã
CHANGELOG.mdã§ç®¡çããŠããŸãã
𧯠ãã©ãã«ã·ã¥ãŒãã£ã³ã°
| çç¶ | 解決ç |
|---|---|
Electron failed to install correctly | npm run ensure-electron ãå®è¡ããŠããã©ãããã©ãŒã çšãã€ããªã確èªããããŠã³ããŒãããŸãã |
Process not found | åäžã®ã¢ããªããããã°ããå Žå㯠processId ãçç¥ããŠãã ããããµãŒããŒãèªåçã«è§£æ±ºããŸãã |
node build/index.js ã§ã¿ãŒããã«ãå¿çããªããªã | æ£åžžãªåäœã§ãããµãŒããŒã¯ stdio JSON-RPC çµç±ã§éä¿¡ããŸããMCP ã¯ã©ã€ã¢ã³ãããèµ·åããŠãã ããã |
| ã¡ã€ã³ããã»ã¹ã®ããŒã«ã倱æãã | Node ã€ã³ã¹ãã¯ã¿ãŒããŒããéããããinspectMain: true ãæå®ããŠã¢ããªãèµ·åããŠãã ããã |
| Windows ã§ããŒãã䜿çšäžïŒWSAEACCES ãçºçãã | ãµãŒããŒã¯ Hyper-V/WSL ãšã®ç«¶åãé¿ãããããåçã«ããŒãã調æ»ãããã€ã³ãå¯èœãªãšãã§ã¡ã©ã«ããŒããéžæããŸãã |
ð éçºãšæ€èšŒ
npm test # Run build, 140 unit tests, and full 111-tool smoke suite
npm run doctor # Verify environment health and port binding
npm run sync:readme # Automatically synchronize badge counts with registered tools
ð ã©ã€ã»ã³ã¹
ISC © Electron Debug MCP ã³ã³ããªãã¥ãŒã¿ãŒ
Electron ã®å éšãèŠãŠæäœããå¿ èŠãããèªåŸåãšãŒãžã§ã³ãã®ããã«æ§ç¯ãããŠããŸãã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã