A VS Code extension that runs a local Model Context Protocol (MCP) server for your workspace, exposing files, terminal, Git, and tools to MCP clients like Claude Desktop.
This VSCode extension-based MCP server exposes 41 tools for IDE integration (file editing, git, debugging, terminal, code analysis). Tool names follow verb_noun patterns consistently and are action-oriented (e.g., get_open_in_editor_file_text, replace_selected_text, execute_terminal_command). Descriptions are present for all tools and generally adequate (120-350 chars), explaining WHAT the tool does and WHEN to use it. However, parameter descriptions are sparse or missing entirely in most tools, and output schemas are never explicitly documented in the source code provided. The server handles destructive operations (file rewrites, branch switching, git commits) but lacks explicit confirmation patterns and error guidance for recovery. Input schemas use proper JSON Schema with type definitions and enums where appropriate (e.g., encoding: ['utf-8'], refactorType). The tool registration in toolManager.ts shows explicit class instantiation, confirming all tools are properly registered. However, critical gaps include: (1) no documented output schemas, (2) missing parameter descriptions (especially for position/range parameters and complex inputs), (3) no error classification or recovery guidance in descriptions, (4) no mention of timeout handling for terminal/git operations, and (5) no idempotency guarantees. The server provides broad IDE coverage but lacks production-grade polish in parameter and output documentation.
Append text content to the end of a specified file.
Commit staged changes to the repository.
Create a new branch in the repository.
Create a new file at the specified path in the project directory and populate it with content. Returns an error if project directory cannot be determined.
Executes an action by its ID in VSCode IDE editor. Requires an actionId parameter containing the ID of the action to execute. Returns one of two possible responses: - "ok" if the action was successfully executed - "action not found" if the action with the specified ID was not found Note: This tool doesn't wait for the action to complete.
Execute an OS-specific command (Windows CMD, Unix shell, etc.).
Execute a command in the integrated terminal and return the output.
Output schemas not documented. No tool provides explicit documentation of what fields are returned, their types, or structure. LLMs cannot plan downstream calls or extract data reliably from unstructured responses.
Missing parameter descriptions for position/range parameters. Tools like replace_file_content_at_position accept line, character, endLine, endCharacter but provide no explanation of 0-indexing vs 1-indexing, inclusive vs exclusive bounds, or validation rules.
No error recovery guidance. Destructive operations (rewrite_file_content, replace_current_file_text, commit_changes, switch_branch) lack guidance on failure modes and recovery paths. LLMs cannot determine whether to retry, ask the user, or escalate.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 70 | 2025-06-18+ | v2 |
Find commits in the repository by message substring.
Search for files in the project by name substring. Returns matching file paths.
Find all reference locations of a symbol.
Get information about the current branch and available branches.
Get detailed information about a specific commit.
Retrieves a list of all line breakpoints currently set in the project. Use this tool to get information about existing debugger breakpoints. Returns a JSON-formatted list of breakpoints, where each entry contains: - path: The absolute file path where the breakpoint is set - line: The line number (1-based) where the breakpoint is located Returns an empty list ([]) if no breakpoints are set. Note: Only includes line breakpoints, not other breakpoint types (e.g., method breakpoints)
Get the diff for a specific file between commits or between working directory and HEAD.
Get the commit history for a specific file.
Get the text content of a file using its path relative to the project root. Returns an error if the file does not exist or is outside the project scope.
Retrieves the absolute path of the currently active file in the VSCode IDE editor. Use this tool to get the file location for tasks requiring file path information. Returns an empty string if no file is currently open.
Retrieves the complete text content of the currently active file in the VSCode IDE editor. Use this tool to access and analyze the file's contents for tasks such as code review, content inspection, or text processing. Returns empty string if no file is currently open.
Retrieves the status of all running progress indicators in VSCode IDE editor. Returns a JSON array of objects containing progress information: - text: The progress text/description - fraction: The progress ratio (0.0 to 1.0) - indeterminate: Whether the progress is indeterminate Returns an empty array if no progress indicators are running.
Get the list of project dependencies.
Get the list of project modules or packages.
Get the current version control system (VCS) status of the project.
Returns a list of run configurations for the current project. Use this tool to query the list of available run configurations in current project. Then you shall to call "run_configuration" tool if you find anything relevant. Returns JSON list of run configuration names. Empty list if no run configurations found.
Get all symbols defined in the file (functions, classes, variables, etc.).
Get information about the current terminal environment (shell type, platform, etc.).
Lists all available actions in VSCode IDE editor. Returns a JSON array of objects containing action information: - id: The action ID - text: The action presentation text Use this tool to discover available actions for execution with execute_action_by_id.
List all files and directories in the specified project folder. Returns an array of entry information.
Opens the specified file in the VSCode IDE editor.
Pull changes from the remote repository.
Perform code refactoring at a specific location. Supports rename, extract function, extract variable, and other operations.
Replaces the entire content of the currently active file in the VSCode IDE with specified new text. Use this tool when you need to completely overwrite the current file's content. Requires a text parameter containing the new content. Returns one of three possible responses: - "ok" if the file content was successfully replaced - "no file open" if no editor is active - "unknown error" if the operation fails
Replace text at a specific position in a file (by line and character offset).
Replaces the currently selected text in the active editor with specified new text. Use this tool to modify code or content by replacing the user's text selection. Requires a text parameter containing the replacement content. Returns one of three possible responses: - "ok" if the text was successfully replaced - "no text selected" if no text is selected or no editor is open - "unknown error" if the operation fails
Find and replace all occurrences of specified text in a file.
Replace the entire content of a specified project file with new text. This completely overwrites the file with the provided content.
Run a command in the background without waiting for completion.
Run a specific run configuration in the current project. Use this tool to run a run configuration that you have found from "get_run_configurations" tool. Returns one of two possible responses: - "ok" if the run configuration was successfully executed - "error <error message>" if the run configuration was not found or failed to execute
Search for text content across multiple files in the project. Returns matching files and locations.
Switch to a different branch in the repository.
Toggles a debugger breakpoint at the specified line in a project file. Requires two parameters: - pathInProject: The relative path to the file within the project - line: The line number where to toggle the breakpoint. The line number is starts at 1 for the first line. Returns one of two possible responses: - "ok" if the breakpoint was successfully toggled - "can't find project dir" if the project directory cannot be determined Note: Automatically navigates to the breakpoint location in the editor
Wait for a specified duration (in milliseconds).
No timeout or timeout handling documented for long-running operations. Tools like execute_terminal_command, run_command_on_background, and pull_changes may hang indefinitely. No guidance on expected latency or recovery if the operation stalls.
No idempotency guarantees. Tools like commit_changes, create_branch, and create_new_file_with_text do not state whether repeated calls with identical inputs produce the same result or cause side effects (duplicate commits, error on branch exists, overwrite file).
Insufficient parameter validation constraints. Tools accept free-form strings for enum-like parameters (e.g., refactorType could be 'rename', 'extract_function', 'extract_variable' but no enum is defined). LLMs may hallucinate invalid values.
Dangerous default behavior for execute_terminal_command and execute_os_specific_command. No parameter to limit execution scope, no dry-run option, and no clear distinction between safe read operations and arbitrary command execution that could modify the system.
Sparse descriptions for some tools. Tools like execute_terminal_command, pull_changes, and execute_os_specific_command have descriptions under 100 chars, insufficient for LLM selection reasoning. Baseline for adequate description: 50-200 chars minimum, ideally including WHEN to use and WHY it differs from similar tools.
No distinction between read-only and write operations in tool metadata. Some tools (list_files_in_folder, get_symbols_in_file) are marked READ_ONLY but others lack explicit risk classification. LLMs cannot distinguish safe discovery calls from destructive operations without reading full descriptions.