dev-link-mcp
Turn the AI you already use, whether ChatGPT, Grok, Claude Code, Codex, Cursor or VS Code, into a coding agent for one folder on your machine, sandboxed and logged on a live dashboard.
What. dev-link is an MCP server that runs on your machine and gives your AI a complete development environment for one project folder: 78 tools that read and edit files, search code, run commands, keep dev servers running, build, lint and test, navigate code, call HTTP APIs, query SQLite, JSON and CSV, take checkpoints, keep a task list and drive a headless browser, plus Docker when you turn it on. Tools lists every one.
Why. Web chats such as ChatGPT and Grok can add a custom MCP server, and so can every coding agent and editor, including Claude Code, Codex CLI, Cursor and VS Code. dev-link gives any of them the same development environment, with no API key and no extra model bill. The folder is sandboxed, and every call is logged on a dashboard you can watch.
How. Start a server for the folder, then paste its URL into your client as a remote MCP server. Any client that gains MCP support later works the same way.
Quick start
curl -fsSL https://raw.githubusercontent.com/ajeetkharel/dev-link-mcp/main/scripts/install.sh | sh
cd your-project && dev-link start . --tunnel # prints the URL to give your client
Copy the public MCP URL from the output and add it to your AI client as a custom (remote) MCP
server with no authentication. What you will see shows the output, and
Add it to your client says where to paste it.
Using a client on this machine (Claude Code, Codex, Cursor, VS Code)? Drop --tunnel.
The install script installs uv, dev-link, Chromium for the browser tools and cloudflared, and on Linux the bubblewrap sandbox, git and ripgrep through your package manager, so it asks for sudo. To install by hand instead, see Requirements.
Why
The model stays in your client. dev-link talks to no model and needs no API key, so the plan you already pay for does the work. dev-link uses only standard MCP over Streamable HTTP, with the token in the URL or in a bearer header, so it works with any client that can add a remote MCP server that way.
dev-link adds what a chat window or an editor lacks: your files, a shell and a browser.
You expose one folder, not your machine. On Linux every command runs in a bubblewrap sandbox where that folder is writable, system tools are read-only, and your home, SSH keys and other projects are not there.
Every tool call is saved with its arguments and result to an audit log outside the folder. The dashboard shows the calls as they happen, along with running processes, the agent's task list and the workspace files.
The agent gets a development environment, not just file access. It can run any command, install packages, start a dev server and wait for its port, click through the app in a headless browser, and take checkpoints it can diff and restore.
What you will see
dev-link start . --tunnel prints this (the token and hostname are random on every start):
dev-link started for /home/you/your-project
MCP URL : http://127.0.0.1:8765/mcp/<token>
dashboard : http://127.0.0.1:8765/ui/<token>/
public MCP URL: https://<random>.trycloudflare.com/mcp/<token>
public dash: https://<random>.trycloudflare.com/ui/<token>/
PID : 371145
logs : /home/you/.local/state/dev-link-mcp/your-project-<id>/server.log
The token in these URLs is new on every start; anyone with the URL can use the server.
The public URL is reachable from the internet: anyone with it can run commands here.
- Give your client the
public MCP URL.dev-link url .prints the same line on its own, which is handy for$(...)in a command. - Without
--tunnelthere are no public lines. Clients on your machine use theMCP URL. - Watch the agent work by opening the
dashboardURL from your own machine. Keep thepublic dashline to yourself. - Check or stop the server with
dev-link status .anddev-link stop .. A restart gives a new URL, so add the server to your client again.
Add it to your client
| Client | Run start |
Where to paste the URL |
|---|---|---|
| ChatGPT | with --tunnel |
chatgpt.com/plugins, plus button, Add custom MCP server, No authentication |
| Grok | with --tunnel |
grok.com/connectors, New Connector, Custom |
| Claude Code, Codex CLI, Cursor, VS Code | without --tunnel |
the commands and files below |
| Any other MCP client | --tunnel for web, none for local |
its "add remote MCP server" setting |
Web chats are covered step by step in docs/clients/web.md, and docs/clients covers every client, fixed URLs, bearer auth and how to check the connection.
Claude Code
claude mcp add --transport http dev-link "$(dev-link url DIR)"
After a restart, run claude mcp remove dev-link and add it again.
Codex CLI
codex mcp add dev-link --url "$(dev-link url DIR)"
Codex waits 60 s for a tool call by default, less than dev-link's command timeout, so raise it in
~/.codex/config.toml:
[mcp_servers.dev-link]
url = "http://127.0.0.1:8765/mcp/<token>"
tool_timeout_sec = 600
Cursor
~/.cursor/mcp.json (all projects) or .cursor/mcp.json in the project root:
{
"mcpServers": {
"dev-link": { "url": "http://127.0.0.1:8765/mcp/<token>" }
}
}
VS Code
.vscode/mcp.json in the workspace, or your user mcp.json:
{
"servers": {
"dev-link": { "type": "http", "url": "http://127.0.0.1:8765/mcp/<token>" }
}
}
Requirements
The install script sets all of this up. By hand:
sudo apt install bubblewrap git ripgrep # or dnf, pacman, zypper, brew
uv tool install --python 3.13 'dev-link-mcp[all] @ git+https://github.com/ajeetkharel/dev-link-mcp'
dev-link install-browser # Chromium for the browser tools
- bubblewrap (Linux): the sandbox.
dev-link startrefuses to run without it, unless you pass--no-sandbox, which gives the agent your full user access. Ubuntu 23.10 and later block the user namespaces bubblewrap needs; see the AppArmor note. - git and ripgrep: used by the tools (
sudo apt install git ripgrep). - cloudflared: only for
--tunnel. See Install cloudflared. - macOS (experimental): runs only with
--no-sandbox. With--tunnelas well, anyone with the public URL gets your full user access.
dev-link doctor checks each of these and says how to fix what is missing.
Tools
78 tools in 13 groups. Every group is on by default except docker (--enable docker). The code
and browser groups need the [code] and [browser] extras; [all] installs both.
| Group | For | Tools |
|---|---|---|
system |
workspace and server info | server_status, workspace_info |
files |
read, write, edit, move and delete files | read_file, read_many_files, write_file, edit_file, multi_edit, apply_patch, list_dir, tree, file_info, make_dir, copy_path, move_path, delete_path |
search |
find files, grep, search and replace (ripgrep) | find_files, grep, replace_in_files |
shell |
run commands and code snippets | run_command, run_code |
processes |
dev servers and watchers in the background | start_process, list_processes, process_output, process_input, wait_for_process, stop_process |
code |
outlines, definitions and references (tree-sitter) | code_outline, code_stats, find_symbol, find_references |
project |
detect the stack; install, build, lint, format, test | project_detect, install_deps, run_build, run_lint, run_format, run_tests |
http |
HTTP requests, fetch pages, downloads | http_request, fetch_url, download_file |
data |
SQLite, jq and CSV | sqlite_query, sqlite_schema, json_query, csv_preview |
checkpoints |
snapshot, diff and restore the workspace | checkpoint_create, checkpoint_list, checkpoint_diff, checkpoint_restore |
tasks |
a persistent task list and notes | task_add, task_list, task_update, note_write, note_read, note_list, note_delete |
browser |
a headless Chromium (Playwright) | browser_open, browser_navigate, browser_snapshot, browser_screenshot, browser_click, browser_type, browser_press, browser_select, browser_wait, browser_eval, browser_console, browser_network, browser_set_viewport, browser_list_pages, browser_close |
docker |
containers and compose, limited to the workspace | docker_run, docker_exec, docker_ps, docker_logs, docker_stop, docker_rm, docker_build, docker_images, compose |
A group whose extra is missing is reported as not installed. Git, package managers and any
other CLI run through run_command, as in your own terminal. Every tool and its parameters are
listed in docs/tools.md.
Security
The MCP URL contains a random token that changes on every start. Anyone with the URL can run
commands in the folder, so treat it like a password. On Linux, commands run in a bubblewrap
sandbox that sees the folder, read-only system paths and toolchains, and a private home. The
network is on by default, so the agent can reach the internet, your LAN and services on
localhost; --no-network turns it off. --no-sandbox gives the agent your full user access,
and the docker group is root-equivalent when you enable it. Details are in
docs/security.md;
report vulnerabilities as described in
SECURITY.md.
Platforms
| Platform | Support |
|---|---|
| Linux | Supported. Commands run in a bubblewrap sandbox. |
| macOS | Experimental. Only with --no-sandbox, which gives the agent your full user access. Not tested in CI yet, and wait_for_process may not see a dev server's port. |
| Windows | Not supported. |
Documentation
- Configuration: config files, environment variables and every setting.
- Tools: every tool with its parameters.
- Clients: web (ChatGPT, Grok) and local (Claude Code, Codex CLI, Cursor, VS Code).
- Architecture: how a tool call flows and where state lives.
- Security: what the sandbox holds back and what it does not.
- Extending: tool groups from other packages.
dev-link --help lists every command.
Contributing
See CONTRIBUTING.md.
License
MIT License. See LICENSE.
Metadata
Release files for dev-link-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dev_link_mcp-0.1.0.tar.gz | 217.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dev_link_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 468.7 kB
Release files / dev_link_mcp-0.1.0.tar.gz
| Download URL | dev_link_mcp-0.1.0.tar.gz |
|---|---|
| Size | 217.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4823cc98673a9ca6689dc909a7b21daeb32ef0a735883d7283ec2eadf3bf57b7
|
|
BLAKE2b-256 checksum How to use checksums |
b8c8192d2ea8acd12da279aeeb70bc5482542bbe7880533703786002628a5ce7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency logRelease files / dev_link_mcp-0.1.0-py3-none-any.whl
| Download URL | dev_link_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 251.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cb5460c5bed94a34dde24661d38bdfe1f41e0522c22ff1a949a93d03fbdc12a5
|
|
BLAKE2b-256 checksum How to use checksums |
349c5d7c090f09f8ec86a5254a6e7fe3601167f5c496171925a7a64a4c8830da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.
Transparency log