MCP テキストエディターサーバー
標準化されたAPIを通じて行指向のテキストファイル編集機能を提供するモデルコンテキストプロトコル(MCP)サーバー。効率的な部分ファイルアクセスによりトークン使用量を最小限に抑え、LLMツール向けに最適化されています。
Claude.app ユーザー向けクイックスタート
このエディターを Claude.app で使用するには、プロンプトに次の構成を追加します。
code ~/Library/Application\ Support/Claude/claude_desktop_config.json{
"mcpServers": {
"text-editor": {
"command": "uvx",
"args": [
"mcp-text-editor"
]
}
}
}またはdockerの場合:
{
"mcpServers": {
"text-editor": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--mount",
"type=bind,src=/some/path/src,dst=/some/path/dst",
"mcp/text-editor"
]
}
}
}Related MCP server: Serena MCP Server
概要
MCPテキストエディターサーバーは、クライアントサーバーアーキテクチャにおいて、安全かつ効率的な行ベースのテキストファイル操作を可能にするように設計されています。モデルコンテキストプロトコル(Model Context Protocol)を実装し、堅牢な競合検出と解決により、信頼性の高いファイル編集を実現します。行指向のアプローチは、共同編集ツール、自動テキスト処理システム、複数のプロセスがテキストファイルを安全に変更する必要があるシナリオなど、同期ファイルアクセスを必要とするアプリケーションに最適です。部分ファイルアクセス機能は、ファイルの必要な部分のみを読み込むことでトークン消費量を削減できるため、LLMベースのツールにとって特に有用です。
主なメリット
行ベースの編集操作
行範囲指定によるトークン効率の良い部分ファイルアクセス
LLMツール統合に最適化
ハッシュベースの検証による安全な同時編集
アトミックなマルチファイル操作
カスタムエラータイプによる堅牢なエラー処理
包括的なエンコーディング サポート (utf-8、shift_jis、latin1 など)
特徴
行指向のテキストファイルの編集と読み取り
LLM アプリケーションでのトークンの使用を最小限に抑えるスマートな部分ファイル アクセス
行範囲指定でテキストファイルの内容を取得する
1 回の操作で複数のファイルから複数の範囲を読み取る
行番号シフトを正しく処理する行ベースのパッチ適用
競合検出機能を使用してテキストファイルの内容を編集する
柔軟な文字エンコードのサポート (utf-8、shift_jis、latin1 など)
複数のファイル操作のサポート
ハッシュベースの検証による同時編集の適切な処理
大容量ファイルのメモリ効率の高い処理
要件
Python 3.11以上
POSIX準拠のオペレーティングシステム(Linux、macOSなど)またはWindows
テキストファイル操作に十分なディスク容量
読み取り/書き込み操作のファイルシステム権限
Python 3.11以降をインストールする
pyenv install 3.11.6
pyenv local 3.11.6uv(推奨)またはpipをインストールする
curl -LsSf https://astral.sh/uv/install.sh | sh仮想環境を作成し、依存関係をインストールする
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"要件
Python 3.13以上
POSIX準拠のオペレーティングシステム(Linux、macOSなど)またはWindows
読み取り/書き込み操作のファイルシステム権限
インストール
uvx経由で実行
uvx mcp-text-editorSmithery経由でインストール
Smithery経由で Claude Desktop のテキスト エディター サーバーを自動的にインストールするには:
npx -y @smithery/cli install mcp-text-editor --client claude手動インストール
Python 3.13以降をインストールする
pyenv install 3.13.0
pyenv local 3.13.0Dockerのインストール
docker build --network=host -t mcp/text-editor .uv(推奨)またはpipをインストールする
curl -LsSf https://astral.sh/uv/install.sh | sh仮想環境を作成し、依存関係をインストールする
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"使用法
サーバーを起動します。
python -m mcp_text_editordocker でサーバーを起動します。
docker run -i --rm --mount "type=bind,src=/some/path/src,dst=/some/path/dst" mcp/text-editor検査官と:
npx @modelcontextprotocol/inspector docker run -i --rm --mount "type=bind,src=/some/path/src,dst=/some/path/dst" mcp/text-editorMCPツール
サーバーはテキスト ファイルの操作用にいくつかのツールを提供します。
テキストファイルの内容を取得する
行範囲を指定して 1 つ以上のテキスト ファイルの内容を取得します。
単一範囲リクエスト:
{
"file_path": "path/to/file.txt",
"line_start": 1,
"line_end": 10,
"encoding": "utf-8" // Optional, defaults to utf-8
}複数の範囲のリクエスト:
{
"files": [
{
"file_path": "file1.txt",
"ranges": [
{"start": 1, "end": 10},
{"start": 20, "end": 30}
],
"encoding": "shift_jis" // Optional, defaults to utf-8
},
{
"file_path": "file2.txt",
"ranges": [
{"start": 5, "end": 15}
]
}
]
}パラメータ:
file_path: テキストファイルへのパスline_start/start: 開始行番号(1から始まる)line_end/end: 終了行番号(含む、ファイルの終わりの場合は null)encoding: ファイルのエンコーディング(デフォルト: "utf-8")。テキストファイルのエンコーディングを指定します(例: "shift_jis"、"latin1")。
単一範囲応答:
{
"contents": "File contents",
"line_start": 1,
"line_end": 10,
"hash": "sha256-hash-of-contents",
"file_lines": 50,
"file_size": 1024
}複数の範囲の応答:
{
"file1.txt": [
{
"content": "Lines 1-10 content",
"start": 1,
"end": 10,
"hash": "sha256-hash-1",
"total_lines": 50,
"content_size": 512
},
{
"content": "Lines 20-30 content",
"start": 20,
"end": 30,
"hash": "sha256-hash-2",
"total_lines": 50,
"content_size": 512
}
],
"file2.txt": [
{
"content": "Lines 5-15 content",
"start": 5,
"end": 15,
"hash": "sha256-hash-3",
"total_lines": 30,
"content_size": 256
}
]
}パッチテキストファイルの内容
堅牢なエラー処理と競合検出機能を備え、テキストファイルにパッチを適用します。1回の操作で複数のファイルを編集できます。
リクエスト形式:
{
"files": [
{
"file_path": "file1.txt",
"hash": "sha256-hash-from-get-contents",
"encoding": "utf-8", // Optional, defaults to utf-8
"patches": [
{
"start": 5,
"end": 8,
"range_hash": "sha256-hash-of-content-being-replaced",
"contents": "New content for lines 5-8\n"
},
{
"start": 15,
"end": null, // null means end of file
"range_hash": "sha256-hash-of-content-being-replaced",
"contents": "Content to append\n"
}
]
}
]
}重要な注意事項:
編集する前に、必ず get_text_file_contents を使用して現在のハッシュと range_hash を取得してください。
行番号のシフトを正しく処理するために、パッチは下から上に適用されます。
同じファイル内でパッチが重複してはならない
行番号は1から始まります
end: nullファイルの末尾にコンテンツを追加するために使用できます。ファイルのエンコーディングは、get_text_file_contents で使用されるエンコーディングと一致する必要があります。
成功レスポンス:
{
"file1.txt": {
"result": "ok",
"hash": "sha256-hash-of-new-contents"
}
}ヒント付きのエラー応答:
{
"file1.txt": {
"result": "error",
"reason": "Content hash mismatch",
"suggestion": "get", // Suggests using get_text_file_contents
"hint": "Please run get_text_file_contents first to get current content and hashes"
}
}"result": "error",
"reason": "Content hash mismatch - file was modified",
"hash": "current-hash",
"content": "Current file content"} }
### Common Usage Pattern
1. Get current content and hash:
```python
contents = await get_text_file_contents({
"files": [
{
"file_path": "file.txt",
"ranges": [{"start": 1, "end": null}] # Read entire file
}
]
})ファイルの内容を編集します:
result = await edit_text_file_contents({
"files": [
{
"path": "file.txt",
"hash": contents["file.txt"][0]["hash"],
"encoding": "utf-8", # Optional, defaults to "utf-8"
"patches": [
{
"line_start": 5,
"line_end": 8,
"contents": "New content\n"
}
]
}
]
})競合の処理:
if result["file.txt"]["result"] == "error":
if "hash mismatch" in result["file.txt"]["reason"]:
# File was modified by another process
# Get new content and retry
passエラー処理
サーバーはさまざまなエラーケースを処理します。
ファイルが見つかりません
権限エラー
ハッシュの不一致(同時編集検出)
無効なパッチ範囲
重なり合うパッチ
エンコードエラー(指定されたエンコードでファイルをデコードできない場合)
行番号が範囲外です
セキュリティに関する考慮事項
ファイルパス検証: サーバーはディレクトリトラバーサル攻撃を防ぐためにすべてのファイルパスを検証します。
アクセス制御: 許可されたディレクトリへのアクセスを制限するために、適切なファイルシステム権限を設定する必要があります。
ハッシュ検証: すべてのファイルの変更は、競合状態を防ぐために SHA-256 ハッシュを使用して検証されます。
入力サニタイズ: すべてのユーザー入力は適切にサニタイズされ、検証されます
エラー処理: エラーメッセージでは機密情報が公開されません
トラブルシューティング
よくある問題
許可が拒否されました
ファイルとディレクトリの権限を確認する
サーバープロセスに必要な読み取り/書き込みアクセス権があることを確認する
ハッシュの不一致と範囲ハッシュエラー
ファイルは別のプロセスによって変更されました
置き換えられるコンテンツが変更されました
get_text_file_contentsを実行して最新のハッシュを取得します
エンコーディングの問題
ファイルのエンコーディングが指定されたエンコーディングと一致することを確認する
新しいファイルにはutf-8を使用する
ファイル内のBOMマーカーを確認する
接続の問題
サーバーが稼働しておりアクセス可能であることを確認する
ネットワーク構成とファイアウォールの設定を確認する
パフォーマンスの問題
大きなファイルの場合は、行範囲を狭くすることを検討してください
システムリソース(メモリ、ディスク容量)を監視する
ファイルの種類に応じて適切なエンコードを使用する
発達
設定
リポジトリをクローンする
Python仮想環境を作成してアクティブ化する
開発依存関係をインストールします:
uv pip install -e ".[dev]"テストを実行する:
make all
コード品質ツール
糸くずの出るラフ
コードフォーマット用の黒
インポートソート用のisort
型チェックのためのmypy
テストカバレッジ用のpytest-cov
テスト
テストはtestsディレクトリにあり、pytest で実行できます。
# Run all tests
pytest
# Run tests with coverage report
pytest --cov=mcp_text_editor --cov-report=term-missing
# Run specific test file
pytest tests/test_text_editor.py -v現在のテスト範囲: 90%
プロジェクト構造
mcp-text-editor/
├── mcp_text_editor/
│ ├── __init__.py
│ ├── __main__.py # Entry point
│ ├── models.py # Data models
│ ├── server.py # MCP Server implementation
│ ├── service.py # Core service logic
│ └── text_editor.py # Text editor functionality
├── tests/ # Test files
└── pyproject.toml # Project configurationライセンス
マサチューセッツ工科大学
貢献
リポジトリをフォークする
機能ブランチを作成する
変更を加える
テストとコード品質チェックを実行する
プルリクエストを送信する
入力ヒント
このプロジェクトでは、コードベース全体でPythonの型ヒントを使用しています。貢献する場合には、必ずこれを維持するようにしてください。
エラー処理
すべてのエラーケースは適切に処理され、意味のあるエラーメッセージが返される必要があります。無効な入力やファイル操作によってサーバーがクラッシュすることは決してあってはなりません。
テスト
新機能には適切なテストを含める必要があります。現在のテスト範囲を維持または改善するよう努めてください。
コードスタイル
すべてのコードはBlackでフォーマットされ、Ruffリンティングに合格する必要があります。インポート時のソートはisortで処理する必要があります。