read_fileLABSCO SUMMARY
One workspace root, one patch primitive, and a fixed tool catalog — the boundary does not move.
apply_patch being the sole way to change a file means edits are staged, baseline-checked and atomic across files, so a half-applied change is not a state you can end up in. And because permission modes change command policy rather than the tool list, the model always sees the same catalog — no profile switching that quietly alters what it thinks it can do. On Linux the confinement is kernel-enforced; elsewhere use the Docker image for genuinely untrusted work.
What it is
A model-neutral coding runtime served over MCP: file reading and search, structured multi-file patches, command execution, interactive sessions and git, confined to a single workspace root.
What you get
- Files and search — read_file, list_dir, list_files, search_text, view_image, and apply_patch as the only file-mutation primitive: staged, baseline-checked, atomic across files, with rollback
- Execution — exec_command under a real PTY, write_stdin to feed a running REPL or debugger across turns, read_output to page long output, kill_command to clean up, and request_permissions
- Git — git_status, git_diff, git_log, git_show and git_blame
- Runtime — server_info and check_exec_environment
- 18 tools in a fixed catalog; permission modes change command policy, never which tools the model sees
- Three modes: safe by default, where network-looking commands, shell expansion, inline scripts and destructive commands need explicit permission; trusted for local development; dangerous for isolated containers only
- AGENTS.md and CLAUDE.md at the root load automatically and come back in the initialize instructions
- A Docker image, and a remote path with bearer tokens or OAuth 2.1 with PKCE for driving your workstation from elsewhere
Requirements
Python 3.11 or above from PyPI; the npm package is a thin launcher that starts it through uv or pipx. Run uvx coding-tools-mcp --stdio --workspace with your repo path, or npx for the Node toolchain; drop --stdio and it speaks Streamable HTTP on http://127.0.0.1:8765/mcp. Absolute paths, .. traversal and symlink escapes are rejected. On Linux, Landlock adds kernel-level filesystem confinement; other platforms get a warning instead.
Setup effort
One command — uvx coding-tools-mcp --stdio --workspace <YOUR_WORKSPACE>
USE CASES
Making the chat app you already pay for edit code
One config block and it can read, patch, test and review a real repository.
Running the test suite and fixing the first failure
Execute the command, read the paged output, then apply the patch across whatever files it touches.
Keeping a debugger alive across turns
Start it under a PTY and feed it input as the conversation continues, instead of restarting each time.
Reviewing what changed before you commit
Read status, diff and blame from the same session that made the edits.
18 tools
Listed in project docs. Your client may show a different list.
list_dirlist_filessearch_textapply_patchview_imageexec_commandwrite_stdinread_outputkill_commandrequest_permissionsgit_statusgit_diffgit_loggit_showgit_blameserver_infocheck_exec_environmentBEFORE YOU INSTALL
What to know first
Tools you get
18 tools named in the project's documentation.
Requires
uvx on PATH
Where it runs
All 9 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
uvx coding-tools-mcp --stdio --workspace <YOUR_WORKSPACE>MCP Clients
Claude Desktop, Claude Code, Cursor, Windsurf, Gemini CLI
{
"mcpServers": {
"coding-tools": {
"command": "uvx",
"args": [
"coding-tools-mcp",
"--stdio",
"--workspace",
"<YOUR_WORKSPACE>"
]
}
}
}Codex
[mcp_servers.coding_tools]
command = "uvx"
args = ["coding-tools-mcp", "--stdio", "--workspace", "<YOUR_WORKSPACE>"]VS Code
{
"servers": {
"coding-tools": {
"command": "uvx",
"args": [
"coding-tools-mcp",
"--stdio",
"--workspace",
"<YOUR_WORKSPACE>"
]
}
}
}Cline — HTTP
Start the server over HTTP first: run the install command without --stdio — uvx coding-tools-mcp --workspace <YOUR_WORKSPACE> — and leave it running. It listens on http://127.0.0.1:8765/mcp.
{
"mcpServers": {
"coding-tools-mcp": {
"type": "streamableHttp",
"url": "http://127.0.0.1:8765/mcp"
}
}
}Continue — HTTP
Start the server over HTTP first: run the install command without --stdio — uvx coding-tools-mcp --workspace <YOUR_WORKSPACE> — and leave it running. It listens on http://127.0.0.1:8765/mcp.
{
"mcpServers": {
"coding-tools-mcp": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}