mcp-vsdiff
README.md
# mcp-vsdiff
An MCP server that exposes VS Code's advanced diff algorithm as a tool.
## What it does
Provides a single MCP tool, `compute_diff`, that computes a highly accurate unified diff between two strings using the same algorithm VS Code uses internally. Features include:
- **Move detection** — identifies blocks of code that were moved, not just deleted/inserted
- **Unified diff output** — standard `@@`-style hunks with 3 lines of context
- **Move annotations** — deleted lines show `{moved to block #N}` and inserted lines show `{moved from block #N}`
- **Summary footer** — total insertions, deletions, and moved blocks at the end
## Usage
### Install
```bash
npm install
```
### Run
```bash
npm start
```
The server communicates over stdio and is compatible with any MCP client.
### Tool: `compute_diff`
| Parameter | Type | Required | Description |
|---|---|---|---|
| `originalText` | string | ✅ | The original text |
| `modifiedText` | string | ✅ | The modified text |
| `ignoreTrimWhitespace` | boolean | | Ignore leading/trailing whitespace differences per line (default: `true`) |
| `includeMetrics` | boolean | | Append a JSON metrics block to the response (default: `true`) |
| `verboseMetrics` | boolean | | Add per-hunk breakdown to the metrics block (default: `false`) |
| `metricsOnly` | boolean | | Return only the metrics block, no diff text — useful for large files (default: `false`) |
| `maxDiffLines` | number | | Truncate the diff text if it exceeds this number of lines (default: `500`). Set to `0` to disable. |
| `skipDiffLines` | number | | Number of diff text lines to skip from the beginning. Combine with `maxDiffLines` to paginate through very large diffs (default: `0`). |
### Metrics fields
| Field | Description |
|---|---|
| `hunkCount` | Number of separate change regions (lower = easier to review) |
| `changedLines` | Real insertions + real deletions, excluding moved lines |
| `realInsertions` | Lines added, excluding moved lines |
| `realDeletions` | Lines removed, excluding moved lines |
| `movedBlocks` | Number of detected move operations |
| `movedLines` | Total lines involved in moves |
| `hitTimeout` | Whether the diff computation hit the 5 s time limit |
> **`ignoreTrimWhitespace` gotcha:** with the default `true`, a line whose only change is indentation (e.g. code moved into a deeper `if` block) will appear as **unchanged context**, making the diff look cleaner than a plain `git diff` would. Set to `false` if indentation changes need to be visible.
### MCP config example
```json
{
"mcpServers": {
"vsdiff": {
"command": "node",
"args": ["/path/to/mcp-diff/index.js"]
}
}
}
```
## Dependencies
- [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) — MCP server framework
- [`vscode-diff`](https://www.npmjs.com/package/vscode-diff) — VS Code's diff algorithm, extracted as a standalone package
TDQS
A4.1/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no risk of confusion between tools. The single tool has a clear and distinct purpose.
Naming Consistency5/5
The tool name 'compute_diff' follows a consistent verb_noun pattern, which is clear and predictable.
Tool Count4/5
The server has only one tool, which is slightly thin for typical MCP servers but is well-scoped for its focused purpose of computing diffs.
Completeness5/5
The tool fully covers the domain of diff computation with advanced features like move detection and a human-readable summary, leaving no obvious gaps.
Maintenance
ActivityMaintained
ResponsivenessSyncing