electron-mcp
Provides tools for debugging and controlling an Electron application, including lifecycle management, window automation, console and network log capture, IPC logging, and main-process state inspection via Chrome DevTools Protocol and Node inspector.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@electron-mcplaunch my Electron app via npm and list its windows"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@iamvinitk/electron-mcp
MCP server for interacting with and debugging an Electron app. Spawns (or attaches to) an Electron process with the Chrome DevTools Protocol on the renderer and the Node inspector on the main process, then exposes ~20 tools for driving / inspecting both sides.
Works with any Electron or Electron Forge project.
Install
Run it on demand with npx (no install needed):
npx -y @iamvinitk/electron-mcp…or install the electron-mcp binary globally:
npm i -g @iamvinitk/electron-mcp
electron-mcpRelated MCP server: electron-mcp-server
Use it from an MCP client
The server speaks MCP over stdio — point any MCP client at it. For a
typical mcpServers config:
{
"mcpServers": {
"electron": {
"command": "npx",
"args": ["-y", "@iamvinitk/electron-mcp"]
}
}
}(To run from a local clone instead, npm install && npm run build, then
point your client's command/args at node /path/to/build/index.js.)
Tools
Lifecycle
Tool | Purpose |
| Spawn via |
| Spawn the |
| Register an already-running Electron instance. |
| Close CDP clients, kill spawned process, drop the session. |
| Snapshot every active session (pid, ports, status, uptime). |
| Zero-cost sanity check that the Node inspector is reachable. |
Window automation
Tool | Purpose |
| Enumerate renderer CDP targets. Skips |
| Run JS in the renderer via |
| Page-navigate the renderer. |
| Capture a PNG/JPEG via |
Logs & network
Tool | Purpose |
| Read captured stdout/stderr from the spawned process. |
| Read renderer |
| Read renderer fetch/XHR activity (e.g. the app's API calls). |
| Wipe one or more ring buffers — useful before recording. |
IPC
Tool | Purpose |
|
|
| Call any preload-exposed IPC method directly. |
| Inject a proxy that captures every IPC call the renderer makes. |
| Drain + read the captured IPC events. |
Main-process state
Tool | Purpose |
|
|
| Path-traversal-guarded read under |
Resources
URI | Purpose |
| JSON list of every tracked session. |
| Detailed snapshot of one session (windows, recent logs, buffer sizes). |
Typical debug flow
1. launch_via_npm → id=electron-abcd1234
2. list_windows id=... → pick the target id
3. evaluate id=... expr=… → probe renderer state
4. invoke_electron_api → test an IPC handler
5. get_main_logs / get_console_messages / get_network_requests
6. stop_app → tear downHow it works
Launch modes.
launch_appinvokes theelectronbinary with--remote-debugging-port=<N> --inspect=<N+?> <appPath>.launch_via_npmwrapsnpm run <script>and smuggles--inspect-electronthrough forge's flag plumbing (double--separators), because forge only exposes main-process inspection that way.Two debug channels. Electron renderers are Chromium pages, so they speak CDP on
--remote-debugging-port. The main process is Node, which speaks the (near-identical) Node inspector protocol on--inspect. Both usechrome-remote-interface; we keep per-session client caches so repeated tool calls don't reconnect.Log capture. Main-process stdout/stderr flow into a ring buffer on spawn. Renderer console, exceptions, and network events flow into separate ring buffers via CDP event subscribers set up the first time each target's client opens.
enable_ipc_logginginstalls aProxyoverwindow.electronAPIso every IPC call the renderer makes (regardless of origin) is observable; re-injected onPage.frameNavigated.Stdin stays open. Electron-forge's
startcommand interprets an EOF on its stdin as "the user left the interactive REPL" and shuts down the child Electron. We hold stdin open (never write to it) so forge keeps running as long as we want.
Limitations
Packaged builds. If the app's Electron Forge config disables the
EnableNodeCliInspectArgumentsfuse, that blocks--inspectat the fuse layer in packaged builds. Window automation and renderer-side tools still work against a packaged build if you pass--remote-debugging-port, but main-process tools (get_app_paths,read_user_data_file) need a non-fused dev build.Single-process model. One MCP server → any number of tracked sessions. Sessions don't persist across MCP restarts; restart the MCP server to refresh.
macOS stdin quirk. Some terminal emulators (rare) block SIGINT delivery through
npm's stdin pipe. Ifstop_appleaves a zombie forge process,pkill -f electron-forgeis the backup.
Development
npm run watch # tsc --watch
npm run typecheck # tsc --noEmitThere are no unit tests in this package. Verification is end-to-end against a running Electron app.
Available Tools
20 toolsattach_appAttach to a running Electron appA
Register an already-running Electron instance as a debug session. The caller started the app with --remote-debugging-port=<debugPort> and optionally --inspect=<inspectPort>; this tool just probes those ports and stores them so the rest of the MCP can drive the app. Stopping the session with stop_app will NOT kill the underlying process — the caller owns its lifecycle.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name for the session. | |
| debugPort | Yes | CDP port the Electron renderers are listening on. | |
| inspectPort | No | Node inspector port the main process exposed via --inspect. Omit if main-process debugging isn't needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the key behavioral fact that stopping the session does not kill the process. However, without annotations, it could also mention error handling or side effects like port probing failure. Still, the description effectively conveys lifecycle ownership.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, efficient and without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers prerequisites, behavior, and lifecycle. It could mention what the tool returns or how sessions are referenced later, but overall adequate for a registration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters (100% coverage) with clear explanations. The description adds no additional semantic value beyond restating the port roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it registers an already-running Electron instance as a debug session, distinguishing it from launch_app and stop_app. Verb 'register' and resource 'debug session' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains the prerequisite (app started with specific flags) and that the tool only probes ports, not starts the app. Also clarifies that stop_app doesn't kill the process, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_logsClear one or more log buffersA
Wipe session ring buffers — useful to set a zero point before driving an action. Omit kinds to clear everything.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| kinds | No | Buffers to clear. Default: all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It correctly indicates a destructive action ('wipe') but does not disclose side effects, reversibility, or required permissions. Acceptable for a low-complexity tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. Action is front-loaded ('Wipe...'). Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema), the description covers purpose, usage hint, and default behavior. Could mention that cleared data is irrecoverable, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions. The description adds the important default behavior ('Omit `kinds` to clear everything'), which is not in the schema and helps the agent understand invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Wipe session ring buffers') and resource, and explicitly distinguishes the tool from sibling read-only tools like 'get_main_logs' by framing it as a reset action ('set a zero point').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('useful to set a zero point before driving an action') and a clear default behavior note ('Omit `kinds` to clear everything'). Lacks explicit when-not-to-use or alternatives, but context implies it's for clearing vs. reading logs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_ipc_loggingEnable IPC call logging in a rendererA
Inject a proxy over window.electronAPI that logs every method call (including those triggered by user actions) into the session's IPC ring buffer. Idempotent — safe to call multiple times; the installer no-ops if the proxy is already in place. Auto-reinstalls after Page.frameNavigated.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| target | No | Target id (default: first page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers idempotency (no-op if proxy exists) and lifecycle (auto-reinstall on frame navigated). Missing a note on potential performance impact or whether it overwrites an existing manual proxy, but the key behaviors are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences, each serving a distinct purpose: action, idempotency, and lifecycle. No wasted words, and the most critical info (what it does) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that enables logging with no output schema, the description covers the essential aspects. It explains what it does, its safety (idempotent), and automatic reinstallation. It does not need to detail return values since there is no output schema. Slightly missing is how to stop logging or the format of logged data, but those are likely in sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema provides. It does not explain the purpose of 'id' or 'target' or their relationship to the operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool injects a proxy over window.electronAPI to log all method calls into the IPC ring buffer. The verb 'inject' and resource 'window.electronAPI' are specific, and the scope (including user-triggered calls) adds precision. It naturally distinguishes from siblings like get_ipc_log (which reads logs) and clear_logs (which clears them).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool is idempotent and safe to call multiple times, and that it auto-reinstalls after page navigation. However, it does not explicitly state when to use this tool versus alternatives (e.g., 'call before get_ipc_log' or 'use this to start capturing log events'). The guidance is implied but lacks explicit comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluateEvaluate JS in a rendererA
Run expression in the target renderer's main JS world via CDP Runtime.evaluate and return the result by value. Equivalent to typing the expression in the renderer's DevTools console. Use this for DOM inspection (document.title), state reads (localStorage.getItem('theme')), and any automation beyond what the click/type convenience tools cover.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| target | No | Target id from `list_windows`. Default: first page. | |
| expression | Yes | JavaScript expression to evaluate. Wrap statements in an IIFE: `(() => { ... })()`. | |
| awaitPromise | No | Await the promise result (default true). | |
| returnByValue | No | Return the value by JSON-serialising it (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It reveals the CDP mechanism, equivalence to the DevTools console, the need for IIFE for statements, and the return-by-value behavior. It does not cover potential side effects or error scenarios, but provides adequate behavioral context for typical use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence defines the action and mechanism, the second provides usage examples and scope. No redundant information, and it is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of an output schema, the description explains the return behavior (by value) and gives practical examples. It does not detail the result structure or error handling, but for an advanced tool, the provided context is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds value beyond the schema by providing example expressions (document.title, localStorage.getItem) and the IIFE note for statements, which enhances understanding of the expression parameter. This pushes the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a JavaScript expression in the target renderer's main JS world via CDP Runtime.evaluate and returns the result by value. It provides specific examples (DOM inspection, state reads) and distinguishes it from sibling convenience tools like click/type, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear use cases (DOM inspection, state reads, automation beyond click/type). While it does not explicitly list when not to use or name alternative sibling tools, the context and examples effectively guide the agent on appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_app_pathsRead Electron app paths + flagsA
Returns app.getPath(...) for the main paths (userData, temp, logs, downloads, documents, home), plus app.getAppPath(), app.isPackaged, process.resourcesPath, process.execPath, process.versions.electron. Requires the main-process Node inspector to be attached — if not, re-launch with a non-zero inspectPort.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the inspector requirement, which is a key behavioral constraint. It also lists all returned values, providing good transparency for a read-only operation. No hidden side effects are mentioned, but none are expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, efficiently structured: first sentence enumerates outputs, second states prerequisite. No filler, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains what the tool returns and the prerequisite for successful execution. No output schema exists, but the listed items sufficiently cover expected results. Low complexity with a single parameter makes this complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the one parameter ('id'). The description does not add additional meaning beyond 'Session id.' from the schema. Baseline of 3 is appropriate given full schema coverage, but no extra clarity is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns Electron app paths and flags, listing specific paths and properties. It unambiguously distinguishes itself from sibling tools like 'get_console_messages' or 'get_ipc_log' by focusing on file system paths and app metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use (to retrieve app paths) and includes a critical prerequisite (inspector must be attached). It doesn't explicitly state when not to use or offer alternatives, but the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_messagesRead renderer console messagesA
Returns console.* output and unhandled exceptions from the renderer, captured via CDP Runtime. Use level to filter (e.g. error to see regressions without the React dev-mode info spam).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| grep | No | Regex (JS syntax) against each message text. | |
| level | No | Filter by console level. | |
| limit | No | Cap result count (newest first). | |
| since | No | Only messages with ts > this epoch-ms value. | |
| target | No | Only messages from this target id (default: all targets). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It reveals the source mechanism (CDP Runtime) and the type of data returned (console.* and exceptions). However, it lacks information about potential side effects, authorization requirements, or rate limits, which are important for safe tool invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core purpose and adding a practical usage hint. Every sentence contributes information without redundancy or fluff, making it highly efficient for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description should ideally indicate the return format or structure of the console messages. It does not mention whether the returned data includes message text, timestamp, source, etc. While the schema parameters imply some output context, the description itself is incomplete for an agent to understand the full tool behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters with descriptions, achieving 100% coverage. The description adds marginal value by mentioning the 'level' filter in context, but does not provide additional semantics beyond what the schema already conveys. Thus, it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description explicitly state it returns console.* output and unhandled exceptions from the renderer, captured via CDP Runtime. This clearly distinguishes it from sibling tools like get_main_logs or get_network_requests by specifying the source (renderer) and content type (console messages and exceptions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage example with the 'level' parameter to filter errors, which implies when to use the tool. However, it does not explicitly state when not to use it or suggest alternative tools for different logging needs, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ipc_logRead captured IPC call logA
Drain any pending renderer-side IPC events into the session buffer and return the matching entries. Requires enable_ipc_logging to have been called first. Each entry has the method name, JSON-serialised args/result, and duration in ms.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| limit | No | Cap result count (newest first). | |
| since | No | Only events with ts > this epoch-ms value. | |
| method | No | Filter by method name (exact match). | |
| target | No | Only events from this target. If omitted, drains and returns events from every tracked target. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the draining behavior and the content of returned entries, but lacks details on side effects (e.g., whether the buffer is cleared) and performance implications. With no annotations, more behavioral disclosure would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences; the first covers action and prerequisite, the second describes entry structure. No redundancy or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisite and entry fields, but lacks information on result ordering (e.g., newest first), default behavior when limit/since omitted, and pagination. Given five parameters and no output schema, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds minimal value beyond the schema's parameter descriptions. It provides context about the return value but does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool drains pending IPC events and returns matching entries, specifying the verb and resource precisely. It distinguishes from sibling tools like get_console_messages and get_main_logs by focusing on IPC logs and requiring enable_ipc_logging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions a prerequisite ('Requires enable_ipc_logging to have been called first'), providing clear context for when to use the tool. However, it does not discuss alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_main_logsRead main-process stdout/stderrA
Returns the spawned process's captured log lines (stdout + stderr interleaved in order of receipt). These typically include the app's main-process startup lines and any backend/proxy output it prints when running packaged.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| grep | No | Regex (JS syntax) matched against each line's text. Use `^\[API\]` to see only bundled-API output, for example. | |
| lines | No | Last N lines. Default: all buffered (up to 5000). | |
| since | No | Only lines with ts > this epoch-millisecond value. | |
| stream | No | Filter by stream (default: both). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral transparency. It discloses that logs are interleaved in order of receipt, supports stream filtering, and has a default buffer limit (up to 5000 lines). Side effects are not mentioned, but likely none exist. It does not discuss rate limits or data persistence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and contains no extraneous text. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, 100% schema coverage, no output schema, and no annotations, the description is fairly complete. It explains the content and ordering of logs, and mentions the buffer limit. It could be improved by clarifying session association (id parameter) or behavior when no logs exist, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some context about interleaving and default line count, but does not enhance individual parameter meanings beyond what the schema already provides. No per-parameter elaboration is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns captured log lines (stdout+stderr interleaved) for a spawned process, and specifies typical content like main-process startup lines and backend/proxy output. This distinguishes it from siblings like get_ipc_log or get_console_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning what the logs typically contain, but it does not explicitly state when to use this tool versus alternatives like get_ipc_log or clear_logs. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_requestsRead renderer network activityA
Returns captured CDP Network events (request / response / finished / failed). For a page load, multiple entries will share the same requestId — join them on that field to see the full request lifecycle. Default filter omits static assets so only XHR/fetch-style calls (e.g. API requests) surface; pass resourceType to override.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| kind | No | Only this CDP lifecycle stage. | |
| limit | No | Cap result count (newest first). | |
| since | No | Only events with ts > this epoch-ms value. | |
| status | No | Only responses with this HTTP status. Implies kind=response. | |
| target | No | Only from this target. | |
| urlContains | No | Substring the URL must contain. E.g. try `/api/` to see only backend API calls. | |
| resourceType | No | Only events with this CDP `Network.ResourceType` (e.g. `XHR`, `Fetch`, `Document`). | |
| includeStatic | No | If true, keep static assets (Document/Stylesheet/Image/Font/Media/Script). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that multiple entries share requestId and must be joined, and explains the default filter behavior. This gives good insight into how the data is structured and filtered. It could be more explicit about whether the returned list is a snapshot or live, but overall it's transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. It front-loads the core purpose, then adds key behavioral info. Every sentence serves a purpose, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters and no output schema, the description covers the essential data lifecycle (joining requestId) and default filtering. It does not explain output structure, but that is acceptable without an output schema. It provides enough context for an agent to use the tool effectively, except possibly for edge cases like pagination or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema: it explains the default filter and how to override it with resourceType, gives an example for urlContains, and clarifies the relationship of events via requestId. This extra context helps the agent understand parameter interplay.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns CDP Network events (request/response/finished/failed) and explains the relationship between entries via requestId. It is specific about the resource (network events) and the action (returns). Among sibling tools, this is the only one retrieving network activity, making its purpose distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful usage context: default filter omits static assets, so only XHR/fetch calls surface, and you can override with resourceType. It implies when to use (for API requests) but does not explicitly state when not to use or compare to alternatives. However, given the sibling list, this tool is the only network-related one, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoke_electron_apiCall `window.electronAPI.<method>(...args)`A
Invoke any method exposed by the preload bridge. Returns the method's result (awaited if it's a promise). Use to test IPC handlers directly, e.g. invoke_electron_api({ method: 'dbCheckConnectivity' }) or invoke_electron_api({ method: 'getConfig', args: ['theme'] }).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| args | No | Positional args. Must be JSON-serialisable. | |
| method | Yes | Method name on `window.electronAPI`. | |
| target | No | Target id (default: first page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes that the result is awaited if it's a promise, but does not disclose potential side effects or destructiveness. Since annotations are absent, the description could be more transparent about risks associated with invoking arbitrary methods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with an inline example. Every sentence is informative and front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately describes input and return behavior. Could mention error handling or security considerations, but for a testing tool it is sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by giving specific method name examples and noting that args must be JSON-serialisable, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it invokes any method on window.electronAPI and includes concrete examples like dbCheckConnectivity and getConfig. Distinguishes from sibling evaluate by focusing on pre-exposed bridge methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use to test IPC handlers directly', providing a clear use case. However, it does not mention when not to use it or how it compares to alternatives like evaluate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_appLaunch Electron app (direct binary)A
Spawn an Electron application via the electron binary with --remote-debugging-port and --inspect flags set so the MCP can drive the renderer and main process. Use launch_via_npm instead for electron-forge projects; this tool is for apps that don't need the forge dev-server (or for packaged test builds).
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment variables overlaid on the MCP process env. | |
| name | No | Display name for the session (defaults to appPath's basename). | |
| appPath | Yes | Path to the Electron app. May be absolute or relative to the MCP process's cwd. Points at the folder that contains `package.json` in dev, or an unpackaged .app/.exe bundle in test. | |
| debugPort | No | CDP port for renderers (default: auto-pick in 9222-9999). | |
| inspectPort | No | Node inspector port for the main process (default: auto-pick). | |
| electronArgs | No | Extra args passed to Electron after the app path. | |
| waitTimeoutMs | No | How long to wait for both debug ports to become live (default 30000). | |
| electronBinary | No | Override the Electron executable (defaults to the project-local `node_modules/.bin/electron`, falling back to `electron` on PATH). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. It discloses the flags set (`--remote-debugging-port`, `--inspect`), default port ranges, and wait timeout. However, it lacks details on error behavior (e.g., if ports fail) or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and flags, then the alternative tool mention. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description should cover what the tool returns. It does not mention return values or session handling, leaving a gap in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The tool description adds no additional parameter meaning beyond what's already in the schema, meeting the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it spawns an Electron app with specific debugging flags. It distinguishes from sibling 'launch_via_npm' by specifying the use case (apps not needing forge dev-server or packaged test builds).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use 'launch_via_npm' instead (electron-forge projects) and when this tool is appropriate (apps without forge dev-server or packaged test builds).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_via_npmLaunch Electron app via `npm run`A
Spawn an Electron application by running an npm script (typically start in an electron-forge project). Forwards --inspect-electron through forge and --remote-debugging-port / --inspect through to Electron. Use this for an electron-forge workspace (e.g. apps/electron) where forge's dev server needs to come up first.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Directory to run `npm` in. Must contain package.json. | |
| env | No | Environment variables overlaid on the MCP process env. | |
| name | No | Display name for the session. | |
| debugPort | No | CDP port for renderers (default: auto-pick 9222-9999). | |
| workspace | No | npm --workspace target (e.g. `@scope/electron`). Omit when `cwd` already points at the workspace itself. | |
| scriptName | No | npm script name (default: `start`). | |
| inspectPort | No | Node inspector port for main process (default: auto-pick). | |
| waitTimeoutMs | No | Startup timeout in ms (default 60000). Electron-forge dev start is slower than a direct binary launch because it rebuilds the renderer first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses flag forwarding behavior and slower startup due to rebuild. However, it omits key traits like process lifecycle (background, needs stop_app), return behavior, and error handling. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three sentences covering primary action, forwarding behavior, and usage context. No redundant words, main idea front-loaded. Excellent structure for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, the description explains the primary use case and key behaviors. However, it lacks details on session management, return value, and post-conditions, which are important given the tool's complexity and sibling tools like 'stop_app'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The tool description adds context by explaining forwarding of specific flags and the slower startup reason in waitTimeoutMs. While helpful, it does not significantly enhance meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool spawns an Electron app via npm script, specifies typical script ('start') and project type (electron-forge). It distinguishes from siblings by noting this is for forge workspaces where dev server must come up first. Purpose is highly specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this for an electron-forge workspace...' indicating when to use this tool. It mentions cwd must contain package.json and that forge rebuilds renderer, guiding usage. However, it does not explicitly state when NOT to use it (e.g., for direct binary launch).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsList debug sessionsA
Return a snapshot of every tracked session (launched + attached), with pid, ports, status, uptime, and tracked window count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It clearly states it returns a snapshot, implying a read-only operation, but could mention if there are any side effects or performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 18 words, front-loaded with the action and result. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description is complete. It covers what is returned and the scope (all tracked sessions including launched and attached).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Description adds value by specifying the exact fields returned (pid, ports, status, uptime, tracked window count).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies verb 'Return' and resource 'snapshot of every tracked session (launched + attached)' with explicit fields. Distinguishes well from sibling tools like launch_app and attach_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for getting a summary of all sessions, but no explicit when-to-use or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_electron_api_methodsList `window.electronAPI.*` methodsA
Return the names of every method exposed on window.electronAPI in the chosen renderer. Useful to discover IPC channels before calling invoke_electron_api, or to verify a preload change actually exposed a new method.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| target | No | Target id (default: first page). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the operation is a read-only listing (returns names), which is implicitly non-destructive, but does not explicitly mention safety, permissions, or side effects. The description is adequate for a simple listing but lacks explicit transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The critical information is front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no output schema, the description adequately explains what is returned (method names) and the role of the 'target' parameter (chosen renderer). It is complete enough for an AI agent to understand usage, though it could be slightly more explicit about the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds no extra meaning beyond the schema; it only explains the purpose of the return value. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool returns method names on window.electronAPI. It uses a specific verb and resource, and distinguishes itself from sibling tools like invoke_electron_api by mentioning discovery before invocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear scenarios: discovering IPC channels before calling invoke_electron_api and verifying preload changes. It implies when to use this tool over alternatives, but does not list explicit exclusions or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windowsList CDP targets (BrowserWindows, webviews, workers)A
Enumerate every CDP target exposed by the session's renderer debug port. type: "page" entries correspond to BrowserWindows; pass their id to evaluate, navigate, or screenshot. Service/shared workers are included for completeness.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| includeWorkers | No | If true, include service_worker / shared_worker / other targets. Default false — only pages and webviews. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It correctly indicates this is a read-only listing operation and explains that workers are included. However, it does not mention potential error conditions, session requirements, or limits on the number of targets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise: two sentences that front-load the purpose, provide a critical output interpretation hint, and mention workers. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two parameters and no output schema, the description completes the picture by explaining output types and downstream usage. It could mention pagination or error cases but is adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions. The description adds semantic value beyond the schema by explaining how to interpret results (type field mapping to BrowserWindows) and how to use output ids for other tools. This enriches the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enumerates CDP targets from a session's debug port, distinguishes between 'page' types (BrowserWindows) and workers, and provides actionable guidance (passing ids to evaluate/navigate/screenshot). This differentiates it from sibling tools like 'list_apps' and action tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells when to use this tool (to list targets before using evaluate/navigate/screenshot) but does not explicitly state when not to use it or compare with alternatives. No explicit usage boundaries or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_inspectorSanity check main inspector for a sessionA
Open the Node inspector on the session's main process and evaluate process.pid. Returns the pid on success; use this when get_app_paths times out to isolate whether the inspector is the problem.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses that it opens the inspector and evaluates process.pid, returning the pid on success. However, it does not mention side effects (e.g., whether the inspector remains open), error scenarios, or authorization needs, making it adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and then provides usage context. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is mostly complete for a simple ping-like tool. It explains the action, return value, and a usage condition. However, it lacks details on potential errors or whether the inspector is closed afterwards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a single parameter 'id' described as 'Session id.' The description does not add any additional meaning or context beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens the Node inspector on the session's main process and evaluates process.pid, returning the pid. It is specific, uses a verb+resource structure, and differentiates from siblings by mentioning a specific use case (when get_app_paths times out).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool when get_app_paths times out to isolate if the inspector is the problem. This provides clear context and a conditional usage guide, though it does not mention when not to use or list alternatives beyond the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_user_data_fileRead a file under the app's userData dirA
Safely read a file relative to the session's app.getPath('userData') (e.g. config.json, api-logs/api.log). Path-traversal protected: paths are resolved against userData and rejected if they escape it. Returns the text content (up to the size cap) along with the resolved absolute path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| relPath | Yes | Path relative to `userData`, e.g. `config.json` or `api-logs/2026-05-08.log`. | |
| maxBytes | No | Read cap in bytes (default 1 MB). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses path-traversal protection, size cap, and return fields. However, it does not mention error behavior (e.g., file not found) or encoding, leaving gaps in behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states purpose and location; the second covers protections and return. Perfectly front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return (text content and resolved path). It covers safety and size limits. It lacks error handling details, but for a simple read tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear param descriptions. The description adds value by giving examples of relPath values (config.json, api-logs/...) and explaining the maxBytes default. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'read' and resource 'file under userData', with examples like 'config.json'. It clearly distinguishes from sibling tools because no other tool reads files from userData.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. There is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotCapture a screenshot of a rendererA
Grab a PNG (or JPEG) of the target renderer via Page.captureScreenshot. Returns base64. Large payloads — encode sparingly and prefer fullPage: false (the default) for quick-look snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id. | |
| format | No | Image format (default: png). | |
| target | No | Target id from `list_windows`. | |
| quality | No | JPEG quality 0-100 (ignored for png). | |
| fullPage | No | Capture beyond viewport via full-page mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses use of 'Page.captureScreenshot' and that it returns base64, hinting at payload size. However, it lacks details on permissions, side effects, or whether it is read-only. Some behavioral context is given but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences. First sentence states core action and method, second provides key tip. No unnecessary words. Perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains return format (base64) and hints at full-page mode, but does not cover all parameters or expected output beyond base64. Given no output schema and moderate parameter count, it leaves some gaps for an agent to infer, but is minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by noting that 'fullPage: false' is the default and preferred for quick-look, which goes beyond schema descriptions. It also mentions base64 return, aiding parameter comprehension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it captures a screenshot of a target renderer using specific verb 'Grab' and resource 'screenshot of a renderer'. It uniquely identifies the tool among siblings like 'list_windows' and 'evaluate'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical guidance: prefer 'fullPage: false' for quick-look snapshots due to large payloads. This helps the agent decide when to use the default mode, though it does not explicitly exclude alternatives or state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_appStop a debug sessionA
Close every CDP client tied to the session and, if the MCP launched the app, kill the underlying process. A no-op for already-stopped sessions, so safe to call unconditionally in cleanup flows.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session id from `launch_app`/`list_apps`. | |
| keepSession | No | If true, don't delete the session record — its logs remain readable via `get_main_logs`/etc. Defaults false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It transparently states behavior (close clients, kill process if launched by MCP, no-op if already stopped). It does not cover all possible side effects but provides sufficient detail for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences. It front-loads the essential action and includes a usage hint without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, the description is reasonably complete. It covers the main behavior and safety. However, it does not specify the return value, which could be useful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description is not required to add parameter details. The description does not elaborate on the parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: closing CDP clients and killing the process. It specifies the resource (debug session) and distinguishes it from sibling tools like launch_app and list_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: unconditional cleanup flows, and notes it is a no-op for already-stopped sessions. However, it does not explicitly mention when not to use or contrast with alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v0.1.0- First observed
attach_app - First observed
clear_logs - First observed
enable_ipc_logging - First observed
evaluate - First observed
get_app_paths - First observed
get_console_messages - First observed
get_ipc_log - First observed
get_main_logs - First observed
get_network_requests - First observed
invoke_electron_api - First observed
launch_app - First observed
launch_via_npm - First observed
list_apps - First observed
list_electron_api_methods - First observed
list_windows - First observed
navigate - First observed
ping_inspector - First observed
read_user_data_file - First observed
screenshot - First observed
stop_app
TDQS
Each tool targets a distinct aspect of Electron debugging (launching, attaching, logging, inspection, etc.), with clear boundaries even among similar logging tools. No two tools appear to overlap in purpose.
All tool names use lowercase snake_case with a consistent verb_noun pattern (e.g., list_windows, get_app_paths, launch_app). There is no mixing of conventions, making the set predictable.
20 tools is on the higher side, but each tool serves a specific need for a complex domain. Some tools like clear_logs and get_main_logs could arguably be combined, but the count is still reasonable.
The tools cover the full lifecycle of debugging an Electron app: launch/attach, inspect (renderer and main process), capture logs (console, IPC, network), navigate, screenshot, and stop. No obvious gaps for common tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server to assist with JxBrowser development.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
The official Planning Center MCP server for interacting with your ministry's data.
MCP server for understanding Javascript internals from ECMAScript specification.
Related MCP Servers
- AlicenseBqualityBmaintenanceA Model Context Protocol server that provides comprehensive Electron application automation, debugging, and observability capabilities through Chrome DevTools Protocol integration.425371MIT
- AlicenseNot gradedqualityBmaintenanceEnables Electron app automation via Chrome DevTools Protocol (CDP), allowing MCP clients like Cursor or Claude Desktop to interact with Electron apps.4MIT
- AlicenseNot gradedqualityCmaintenanceEmbedded MCP server for Electron apps that exposes BrowserWindow surfaces and lets MCP clients drive renderers through Chrome DevTools Protocol.16MIT
- AlicenseBqualityDmaintenanceElectron debugging MCP server for both renderer (via Chrome DevTools Protocol) and main process (via V8 Inspector Protocol), enabling automation, debugging, and network capture.3114MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/iamvinitk/electron-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server