Skip to main content
Glama
user-ic

vscode-editor-mcp

by user-ic
README.md
# VS Code Editor MCP

A VS Code extension that exposes the editor's active file and selection(s) to CLI-based LLM coding agents — such as [OpenCode](https://github.com/sst/opencode) and [Crush](https://github.com/crush-trace/crush) — through a [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server.

## Why

CLI coding agents run outside the editor and have no direct way to know what you're looking at in VS Code. This extension bridges that gap: it continuously publishes the active editor's file path, language, and selection(s) to a shared state file, and an MCP server exposes that state through the `get_selection` tool. Any MCP-compatible CLI client can connect to the server and incorporate the current editor context into its prompts, so the agent sees the same file and selection you do without you having to copy-paste paths or line ranges.

## How it works

The extension and the MCP server run in separate processes and communicate through a shared JSON file (`vscode-editor-mcp-state.json`) in the OS temp directory:

1. **Extension** (`src/extension.ts`) — runs inside VS Code, listens to editor events (active editor change, selection change), and writes the current state to the shared JSON file.
2. **MCP server** (`src/server.ts`) — a standalone stdio process that reads the JSON file and exposes the `get_selection` tool to MCP clients.

## Provided tool

### `get_selection`

Returns the name and path of the file open in VS Code's active editor along with the line range(s) of the current selection(s). Line and character numbers are 1-based.

## Prerequisites

- [Node.js](https://nodejs.org/) ≥ 20
- [VS Code](https://code.visualstudio.com/) ≥ 1.100.0
- The `code` CLI on your PATH (or specify another with `-CodeCommand`)

## Install

### Windows (PowerShell)

```powershell
./install.ps1
```

The script installs dependencies, builds the TypeScript, packages a `.vsix`, and installs it into VS Code. Use `-NoInstall` to skip installing into VS Code, or `-CodeCommand` to target a different editor CLI (e.g. `code-insiders`, `codium`).

### Manual

```bash
npm install
npm run build
npx @vscode/vsce package --allow-missing-repository
code --install-extension vscode-editor-mcp-0.1.0.vsix
```

## Configure an MCP client

Point your MCP client at the packaged server. The server binary is `out/server.js` (also exposed as the `vscode-editor-mcp-server` bin entry).

Example client configuration (stdio transport):

```json
{
  "mcpServers": {
    "vscode-editor-mcp": {
      "command": "node",
      "args": ["C:/source/vscode_mcp/out/server.js"]
    }
  }
}
```

Reload VS Code after installing so the extension starts writing editor state.

## Commands

- **VS Code Editor MCP: Show Current Editor State** — prints the active file name and selection count. Useful for verifying the extension is running.

## Build

```bash
npm run build      # compile to out/
npm run watch      # recompile on change
```

## License

MIT

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of overlap or confusion. get_selection has a clearly distinct purpose.

Naming Consistency5/5

The single tool follows the clear verb_noun pattern (get_selection), and since there are no other tools, there are no inconsistencies.

Tool Count2/5

A single tool is far too few for an editor MCP, which would normally require operations like opening files, editing text, or managing tabs. This feels severely under-scoped.

Completeness1/5

The tool surface is severely incomplete: it only reads the current selection and provides no way to modify files or interact with the editor in other ways, making most editor workflows impossible.

Maintenance

ActivitySlowing
ResponsivenessNo issues