VS Code MCP server for AI coding agents — terminals, diagnostics, multi-window, zero dependencies
Pylon provides 11 well-named terminal and code-analysis tools with comprehensive descriptions (avg 250+ chars). All tools have input schemas with typed parameters. Naming follows verb_noun convention (terminal_run, get_diagnostics, rename_symbol). Descriptions are detailed and include prerequisites, timeouts, and session_id guidance. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages. Parameter descriptions are strong but lack explicit constraints (e.g., timeout_ms has no min/max bounds). No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Missing pagination guidance for potentially large results (get_references, get_document_symbols).
Get VS Code diagnostics (errors, warnings, hints) from all open files or a specific file. Returns TypeScript errors, ESLint warnings, and any other diagnostics from installed language extensions. Useful after editing files to check for problems without running a build. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Get the symbol outline of a file (functions, classes, methods, variables, exports) without reading the entire file. Massive token savings when exploring codebases. Returns a hierarchical list of symbols with name, kind, and line range. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Find all references (usages) of a symbol across the entire workspace. Critical for safe refactoring — understand blast radius before making changes. Returns a list of file locations where the symbol is used. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Rename a symbol across the entire workspace using VS Code LSP. Updates all references including imports, re-exports, and type annotations. Use get_references first to understand impact, then rename. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Output schemas not documented. LLMs cannot predict response structure for any tool, forcing them to guess at field names and types. This violates pattern:tool and increases hallucination risk.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools like terminal_run, terminal_send_text, rename_symbol, and terminal_clear_buffer have clear risk levels but are not marked. Agents cannot reason about safety without explicit hints.
Numeric parameters lack explicit bounds. timeout_ms, lines, and character parameters have no min/max constraints documented. LLMs may pass absurd values (timeout_ms=999999999, lines=1000000) causing timeouts or memory exhaustion.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Clear the output buffer for a terminal (start fresh). Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
List open VS Code terminals. Without session_id lists terminals across ALL sessions tagged by session name. With session_id lists terminals in that session only. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
CALL THIS FIRST before using any other terminal tools. Lists all connected VSCode windows with their session IDs (= workspace folder name). Identify your session by matching the workspace folder name visible in your current context, then remember that session_id and pass it to all subsequent terminal tool calls.
Read raw buffered output from a terminal (no exit code, includes user-typed command output too). For commands started via terminal_run(wait=false), prefer terminal_wait to retrieve output + exit code. Use terminal_read_output for tailing long-running processes (dev servers, watchers) where you just want a snapshot of what has been printed. Buffer is populated from the moment the extension started. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Execute a shell command in a VS Code terminal and capture output. Requires shell integration. Blocks until the command finishes or timeout_ms elapses (default 300000 = 5 min). Output streams live via progress notifications while blocking. On timeout, the command keeps running and the response ends with '[STILL RUNNING — ...]' — call terminal_wait to resume. For commands expected to exceed ~30s (builds, installs, long tests), prefer wait=false + progressive terminal_wait calls starting at timeout_ms=10000 then 30000. Between waits you can read partial output, send input with terminal_send_text, or abort with '\x03'. If the target terminal is busy (Pylon- OR user-typed command still running), this call refuses with an error naming the active command. Pick a different terminal or call terminal_wait first. Returns final output with '[exit code: N]' on success. Note: on very short timeouts (<3s), the first return may show "(no output yet)" due to shell-integration chunk delivery lag; call terminal_wait to retrieve the actual output. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Send text/input to a terminal WITHOUT capturing output. Works on busy terminals — this is how you answer prompts in a running command or abort it (send '\x03' for Ctrl+C, '\x04' for Ctrl+D). Use terminal_wait afterward to retrieve the result of the interrupted command. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
Wait for the current (or most recent) execution in a terminal to finish, and return its output and exit code. Blocks up to timeout_ms (default 300000). On timeout, returns output accumulated during this wait with '[STILL RUNNING — ...]' — call again to continue waiting, or send '\x03' via terminal_send_text to abort. Use this to retrieve results after terminal_run(wait=false), to progressively check on a long-running command, or to wait for a user-typed command in a shared terminal. If the terminal has no active execution but one finished within the last 60s, returns that cached result. Otherwise errors. Always include session_id (obtained from terminal_list_sessions) to target the correct VSCode window.
No pagination guidance for potentially large results. get_references and get_document_symbols may return hundreds of items, but no limit, offset, or cursor parameters are documented. Large results blow context windows.
Error handling lacks recovery guidance. No tool description explains what to do on failure (e.g., 'If terminal is busy, try terminal_wait first'). Agents receive errors but no actionable next steps.