Back to MCP directory
publicPublicdnsLocal runtime

code-remote

Code Remote是一个MCP协议工具,允许AI助手通过云端服务器中继,在您的本地机器上安全地执行Shell命令、读写文件和浏览文件系统,实现远程控制。

article

README

🚀 Code Remote

Code Remote 允许你通过任何支持 MCP 的 AI 客户端,在你的设备上执行命令。它将 MCP(模型上下文协议)与你的本地设备相连接,使 AI 助手能够运行 shell 命令、读写文件以及浏览你的文件系统,你可以通过手机或任何网页浏览器来完成这些操作。

🚀 快速开始

你可以选择以下部署方式:

选项 A:使用 ngrok 进行本地部署(最简单)

使用 ngrok 进行 HTTPS 隧道,在本地运行所有服务,无需进行云端部署。

# 终端 1:启动服务器
export AUTH_TOKEN=$(openssl rand -hex 32)
echo "AUTH_TOKEN=$AUTH_TOKEN" > .env
docker-compose up -d

# 终端 2:启动 ngrok 隧道
ngrok http 8080
# 记录 https://xxx.ngrok-free.app 这个 URL

# 终端 3:启动代理(本地连接)
cd agent
uv venv && uv pip install -r requirements.txt
source .venv/bin/activate
export AUTH_TOKEN=$(cat ../.env | cut -d= -f2)
export RELAY_URL=ws://localhost:8080/ws/agent
python agent.py

添加到你的 MCP 客户端:

  • URLhttps://xxx.ngrok-free.app/sse(你的 ngrok URL)

注意:免费的 ngrok 层级会提供一个随机的 URL,重启后会改变。付费计划提供稳定的子域名。

选项 B:Docker + 反向代理(自托管)

在你自己的基础设施上,使用合适的域名运行服务器。

# 1. 生成认证令牌
export AUTH_TOKEN=$(openssl rand -hex 32)
echo "AUTH_TOKEN=$AUTH_TOKEN" > .env

# 2. 启动服务器
docker-compose up -d

# 3. 设置 HTTPS(见下面的 HTTPS 设置部分)

选项 C:Fly.io(托管)

部署到 Fly.io 以实现自动 HTTPS 和全球可用性。

cd server

# 编辑 fly.toml 并设置你的应用名称
# 更改:app = "YOUR-APP-NAME"
# 为:app = "yourname-code-remote"

fly launch --name YOUR-APP-NAME --region dfw --no-deploy
fly volumes create code_remote_data --size 1 --region dfw
fly secrets set AUTH_TOKEN=$(openssl rand -hex 32)
fly deploy

你的 URL 将会是:

  • MCP 端点https://YOUR-APP-NAME.fly.dev/sse
  • WebSocketwss://YOUR-APP-NAME.fly.dev/ws/agent

安装代理(选项 B 和 C)

原生代理(直接在你的设备上运行):

cd agent
./setup.sh
# 输入你的中继 URL(例如,wss://your-server.example.com/ws/agent)
# 输入你的认证令牌
./run.sh

沙盒代理(在 Docker 容器中运行):

# 使用容器化代理运行完整堆栈
docker-compose --profile full up -d

沙盒代理以非 root 用户身份在隔离的 Linux 环境中运行,包含常见的开发工具(git、curl、vim、ripgrep 等)。文件访问限制在容器内的 /home/agent/workspace

连接你的 AI 客户端

添加到你的 MCP 客户端设置:

  • URLhttps://your-server.example.com/sse

对于 Claude.ai:设置 > 连接器 > MCP

✨ 主要特性

  • 可通过任何 MCP 兼容的 AI 客户端,在本地设备上执行命令。
  • 支持多种部署方式,包括本地部署、自托管部署和托管部署。
  • 提供沙盒代理模式,增强安全性。
  • 支持 Tailscale 集成,进一步提高安全性。

📦 安装指南

前提条件

  • uv - 快速 Python 包管理器(代理所需)
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • Python 3.10+ - 用于运行代理
  • Docker - 用于自托管服务器部署(选项 A 和 B)
  • Fly.io CLI - 用于托管部署(仅选项 C)

💻 使用示例

基础用法

你可以在 MCP 客户端中调用以下工具: | 工具 | 描述 | |------|-------------| | run_shell_command | 执行任何 shell 命令 | | read_file | 读取文件内容 | | write_file | 将内容写入文件 | | list_directory | 列出目录内容 | | check_agent_status | 验证代理是否已连接 |

📚 详细文档

🔧 技术细节

架构

云/自托管设置

+----------------+          +-------------------+          +----------------+
|                |   SSE    |                   |    WS    |                |
|   AI Client    |<-------->|  Server (Cloud)   |<-------->|     Agent      |
|   (MCP)        |   MCP    |                   |  Relay   |   (Daemon)     |
+----------------+          +-------------------+          +----------------+

使用 ngrok 的本地设置(所有服务在一台设备上)

+----------------+          +-------------------+          +---------------------------+
|                |  HTTPS   |                   |          |      Your Machine         |
|   AI Client    |--------->|   ngrok tunnel    |--------->| +-------+     +-------+   |
|   (MCP)        |          |                   |          | |Server |<--->| Agent |   |
+----------------+          +-------------------+          | +-------+     +-------+   |
                                                           +---------------------------+

数据流

  1. 你与 AI 助手(Claude.ai 等)进行聊天。
  2. AI 调用 MCP 工具(run_shell_command、read_file 等)。
  3. 服务器将命令排队,并通过 WebSocket 将其发送给连接的代理。
  4. 代理在你的设备上执行命令并返回结果。
  5. 结果通过 SSE 流回 AI。

HTTPS 设置

MCP 客户端通常需要 HTTPS。如果你使用 Docker 进行自托管,你需要一个反向代理。以下是一个使用 Caddy 的简单示例:

# 安装 Caddy (https://caddyserver.com/docs/install)
# 创建 Caddyfile:
cat > Caddyfile << 'EOF'
your-domain.com {
    reverse_proxy localhost:8080
}
EOF

# 运行 Caddy(通过 Let's Encrypt 自动配置 TLS)
caddy run

其他选项:

  • nginx:使用 certbot 获取 Let's Encrypt 证书
  • Traefik:内置 ACME 支持,用于自动 TLS
  • Cloudflare Tunnel:免费选项,为你处理 TLS

安全性

  • 所有组件之间采用基于令牌的认证。
  • 代理将文件访问限制在主目录、/tmp、/var/tmp。
  • 所有流量通过 HTTPS/WSS 加密。
  • 命令记录到 SQLite 以进行审计跟踪。
  • 沙盒模式:在 Docker 容器中运行代理以实现完全隔离。
  • Tailscale 集成:将代理连接限制在你的私有 Tailscale 网络。

Tailscale 设置(推荐)

为了增加安全性,你可以配置服务器仅接受来自你的 Tailscale 网络的代理连接。这确保即使你的 AUTH_TOKEN 被泄露,只有你的 Tailnet 上的设备才能作为代理连接。

1. 生成一个 Tailscale 认证密钥: 前往 https://login.tailscale.com/admin/settings/keys 并创建一个新的认证密钥:

  • 勾选“可重复使用”(以便服务器在重启后可以重新连接)
  • 可选地勾选“临时”
  • 注意:密钥最长 90 天后过期

2. 将认证密钥设置为 Fly.io 机密

fly secrets set TAILSCALE_AUTHKEY=tskey-auth-xxxxx -a YOUR-APP-NAME

3. 部署服务器

cd server
fly deploy

4. 配置代理通过 Tailscale 连接: 部署后,在 Fly.io 日志中找到你的服务器的 Tailscale IP:

fly logs -a YOUR-APP-NAME | grep "peerapi: serving"
# 查找:peerapi: serving on http://100.x.x.x:xxxxx

更新你的代理的 .env

RELAY_URL=ws://100.x.x.x:8080/ws/agent

禁用 Tailscale 要求

要允许来自任何 IP 的代理连接(安全性较低):

fly secrets set REQUIRE_PRIVATE_NETWORK=false -a YOUR-APP-NAME

📄 许可证

本项目采用 GNU Affero General Public License v3.0(AGPL - 3.0)许可。请参阅 LICENSE

作者

Drew Cain (@groksrc)

项目结构

code-remote/
├── docker-compose.yml   # 自托管部署
├── .env.example         # 环境模板
│
├── server/              # 服务器(Docker 或 Fly.io)
│   ├── server.py        # 组合的 MCP + 中继服务器
│   ├── start.sh         # 启动脚本(Tailscale + 服务器)
│   ├── Dockerfile
│   ├── fly.toml         # Fly.io 配置(更改应用名称)
│   └── requirements.txt
│
├── agent/               # 代理(原生或容器化)
│   ├── agent.py         # WebSocket 客户端守护进程
│   ├── Dockerfile       # 沙盒 Linux 代理
│   ├── requirements.txt
│   ├── setup.sh         # 设置脚本(提示输入 URL)
│   ├── run.sh           # 运行脚本(带日志轮转)
│   ├── logs/            # 代理日志(自动轮转)
│   └── com.code.remote-agent.plist
│
└── docs/                # 文档
    ├── SETUP.md
    ├── DEPLOYMENT.md
    └── ARCHITECTURE.md
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client