Skip to main content
Glama
abnersajr
by abnersajr
README.md
# MCP ReadEdit

[![npm version](https://img.shields.io/npm/v/mcp-readedit.svg)](https://www.npmjs.com/package/mcp-readedit)
[![CI](https://github.com/abnersajr/mcp-readedit/actions/workflows/ci.yml/badge.svg)](https://github.com/abnersajr/mcp-readedit/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

## Why?

Every time an AI coding assistant edits a file, it normally needs **two tool calls**: one to **Read** the file, then one to **Edit** it. Refactoring across 5 files? That's 10 calls. Refactoring across 20? That's 40 calls — each one burning tokens on JSON overhead, waiting for round-trips, and filling up context.

**MCP ReadEdit** collapses those pairs into single calls. Read+Edit in one shot. Batch edits across many files in one call. The result: **80–95% fewer tool calls**, faster completions, and significantly lower token usage.

**Combine Read+Edit into single tool calls — 80-95% fewer tool calls for multi-file refactoring.**

An [MCP](https://modelcontextprotocol.io) server that gives any AI coding assistant batch file operations. Instead of separate Read → Edit calls per file, do it all in one shot.

## Requirements

- **Node.js 20+** (recommended: latest LTS)

## Quick Start

No install needed — run directly with npx:

```bash
npx mcp-readedit
```

Or install globally for faster startup:

```bash
npm install -g mcp-readedit
```

Then add it to your MCP client (see [Client Setup](#client-setup) below).

## Client Setup

### Claude Desktop

Add to `~/.claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "readedit": {
      "command": "npx",
      "args": ["mcp-readedit"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add readedit -- npx mcp-readedit
```

### Cursor

Add to `.cursor/mcp.json` in your project:

```json
{
  "mcpServers": {
    "readedit": {
      "command": "npx",
      "args": ["mcp-readedit"]
    }
  }
}
```

### Windsurf

Go to **Settings → MCP Servers** and add:

```json
{
  "readedit": {
    "command": "npx",
    "args": ["mcp-readedit"]
    }
}
```

### Cline (VS Code Extension)

In Cline settings, add to MCP Servers:

```json
{
  "readedit": {
    "command": "npx",
    "args": ["mcp-readedit"]
  }
}
```

### Continue

Add to `.continue/config.yaml`:

```yaml
mcpServers:
  - name: readedit
    command: npx
    args:
      - mcp-readedit
```

### Zed

Add to your Zed `settings.json`:

```json
{
  "context_servers": {
    "readedit": {
      "command": "npx",
      "args": ["mcp-readedit"]
    }
  }
}
```

## Tools

| Tool | What it does |
|------|-------------|
| `read_edit` | Read a file, optionally edit it — 1 call instead of 2 |
| `multi_edit` | Edit multiple files at once |
| `multi_read_edit` | Read + optionally edit multiple files — the powerhouse |
| `get_gain` | Show your token savings statistics |

### `read_edit` — Single file read + optional edit

Read a file and optionally replace text in one call. Returns file content.

```json
{
  "file_path": "/absolute/path/to/file.ts",
  "old_string": "text to replace",
  "new_string": "replacement text"
}
```

Options: `use_regex` (boolean), `replace_all` (boolean), `offset` (line number), `limit` (line count). Omit `old_string`/`new_string` to just read.

### `multi_edit` — Edit multiple files

Batch edits across files in a single call. Use when you already have the file contents.

```json
{
  "edits": [
    { "file_path": "/path/a.ts", "old_string": "foo", "new_string": "bar" },
    { "file_path": "/path/b.ts", "old_string": "baz", "new_string": "qux", "replace_all": true }
  ]
}
```

### `multi_read_edit` — Read + edit multiple files

The most powerful tool. Read and optionally edit any number of files in one call.

```json
{
  "operations": [
    { "file_path": "/path/a.ts" },
    { "file_path": "/path/b.ts", "old_string": "old", "new_string": "new" },
    { "file_path": "/path/c.ts", "old_string": "\\d+", "new_string": "0", "use_regex": true }
  ]
}
```

Options: `include_content` (boolean, default false) and `include_original` (boolean, default false) control what's returned.

### `get_gain` — Token savings stats

```json
{ "breakdown": "summary" }
```

Breakdown types: `summary` (default), `daily`, `recent`, `all`.

## Before / After

Refactoring a feature across 9 files:

**Without MCP ReadEdit** — 52 tool calls:
```
Read file1 → Edit file1 → Read file2 → Edit file2 → ... → Read file9 → Edit file9
28 Edit + 19 Read + 5 Write = 52 calls
```

**With MCP ReadEdit** — 4 tool calls:
```
multi_read_edit (files 1-3) → multi_read_edit (files 4-6) → multi_read_edit (files 7-9) → multi_edit (final batch)
```

**Result: 48 calls saved (~9,600 tokens)**

## How Gain Tracking Works

Each tool call is recorded to a local SQLite database. The tracker calculates what it *would have* taken with standard Read+Edit calls:

- `read_edit` with edit: 2 standard calls → 1 optimized call
- `multi_edit` (N files): 2N standard calls → 1 optimized call
- `multi_read_edit` (N files): 2N standard calls → 1 optimized call

Token savings are estimated at ~200 tokens per avoided call (JSON overhead, tool result wrapping). The database auto-creates on first use.

## CLI Usage

If installed globally (`npm install -g mcp-readedit`), the `readedit` command gives terminal access to gain stats:

```bash
readedit gain                  # Summary
readedit gain --daily          # Day-by-day breakdown
readedit gain --recent 20      # Last 20 operations
readedit gain --all            # All breakdowns
readedit gain --format json    # JSON export
readedit gain --reset          # Reset statistics
```

Works with npx too: `npx mcp-readedit` starts the server, `readedit gain` runs the CLI.

## AGENTS.md / CLAUDE.md Integration

Add these instructions to your project's `CLAUDE.md`, `AGENTS.md`, or `.cursorrules` to make your AI coding assistant automatically use ReadEdit tools:

```markdown
## File Operations — MCP ReadEdit

When reading or editing files, ALWAYS prefer MCP ReadEdit tools over separate Read + Edit calls.

### Tool Selection
- **multi_read_edit**: Read and/or edit multiple files (most common — use for any multi-file task)
- **multi_edit**: Edit multiple files when you already have their contents
- **read_edit**: Single file read-only or read+edit
- **get_gain**: Check token savings statistics

### Rules
1. NEVER use separate Read then Edit calls when ReadEdit tools are available
2. Batch file operations: group related files into a single multi_read_edit call
3. Use `use_regex: true` for pattern-based replacements
4. Read-only operations in multi_read_edit always return file content — no need to separately read files first
5. When refactoring across multiple files, plan all edits first, then execute in one multi_read_edit call
```

For global usage (all projects), add to `~/.claude/AGENTS.md` instead.

## Contributing

```bash
git clone https://github.com/abnersajr/mcp-readedit.git
cd mcp-readedit
npm install
npm test
```

Issues and PRs welcome at [github.com/abnersajr/mcp-readedit](https://github.com/abnersajr/mcp-readedit).

## License

MIT

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: multi_edit for editing multiple files (no reading), multi_read_edit for reading and optionally editing multiple files, and read_edit for single-file read+edit. No overlap.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case: multi_edit, multi_read_edit, read_edit. The naming clearly communicates the function (edit vs read_edit) and scope (multi vs single).

Tool Count4/5

With only 3 tools, the set is minimal but well-scoped for the server's focused purpose of reading and editing files. It's slightly on the low end but still reasonable.

Completeness5/5

The tool set covers all expected operations: reading, editing, single-file, multi-file, and combined read+edit. No obvious gaps for the stated domain of file editing.

Maintenance

ActivityInactive
ResponsivenessNo issues