前言¶
DeepSeek Harness (DSH) 采用插件化架构,本地开发的 MCP Server 通常运行在开发者机器上,而远程 Agent(如运行在云端或其他网络环境)无法直接访问。直接暴露本地端口存在安全风险,且配置繁琐。
dsh-mcp-tunnel 插件通过构建一个 Docker Compose 栈(包含 mcp-proxy 和 cloudflared),为本地 MCP Server 建立一条出站隧道。它将本地服务映射为公网可访问的 HTTPS URL,并将配置片段输出到 dsh-mcp-client,实现远程 Agent 对本地工具的无缝调用。
插件定位¶
- 名称: dsh-mcp-tunnel
- 类型: DSH 插件(联网工具)
- 维护者: 988hj7tczd-oss
- 许可证: MIT
核心功能¶
该插件主要提供以下能力:
1. 栈生成:自动生成 Docker Compose 栈,包含 mcp-proxy(鉴权与转发)和 cloudflared(出站隧道)。
2. 安全隧道:仅建立出站连接,公网无入站端口。宿主机仅绑定 127.0.0.1 回环端口。
3. 证书管理:自动生成并管理自签 CA 和服务端证书。
4. CLI 工具:提供 create、status、stop 三个命令管理隧道生命周期。
5. 配置辅助:生成待确认的 mcp-client 配置片段,不自动修改宿主 Profile。
安装¶
作为 Bundle 安装到你的 DSH Profile:
cd <你的 DSH profile>
pnpm add ./dsh-mcp-tunnel
使用方法¶
通过 CLI 工具 mcp_tunnel_create 启动隧道。
mcp_tunnel_create name=<name> serverDir=<dir> provider=cloudflare-quick
参数说明:
* name: 隧道名称,同时作为 Compose 项目名和 mcp-client 的 serverName。
* serverDir: MCP Server 目录,优先读取 .mcp.json 中的 url 字段作为上游。
* provider: 隧道提供商,默认使用 cloudflare-quick(免账号),生产环境需自建鉴权层。
* token: 访问令牌,默认自动生成并写入 .env(权限 0600)。
* deployDir: 部署目录,默认 ~/.dsh/mcp-tunnels/<name>。
执行后会自动:
1. 检查 Docker 环境。
2. 启动容器栈。
3. 获取并输出公网 URL。
4. 生成配置片段文件。
mcp-client 配置¶
插件不会自动修改你的 Profile 配置。它会在部署目录生成 mcp-client.pending.yml 文件,你需要手动将其内容添加到 cordis.patch.yml 中。
配置片段示例:
- insert:
- id: mcp-<serverName>
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: <name>
transport: streamable-http
url: <https://xxx.trycloudflare.com>
headers:
Authorization: 'Bearer <token>'
toolCallTimeoutMs: 60000
failOnStartupError: false
注意事项¶
- 前置依赖:在开发形态下,项目依赖相邻的
dsh-src目录(通过link:引用),需检出并执行pnpm install && pnpm run build。 - Stdio 限制:插件未内置将
command型 stdio MCP Server 转换为 HTTP 的桥接。如果 Server 是 stdio 类型,需先将其转为 HTTP 端点。 - 安全模型:
- 默认提供的 Cloudflare Quick Tunnel 仅适合测试,生产流量必须自行添加鉴权层(如 Bearer Token)。
- 所有敏感信息(如 Token)存储在部署目录的
.env文件中(权限 0600),不进入 Docker Compose 文件。
- 容器依赖:容器间的健康检查依赖
service_started事件,而非镜像自带的探针。
结语¶
dsh-mcp-tunnel 提供了一种低风险的本地服务暴露方案,通过 Docker 栈隔离了复杂的网络配置。配合 dsh-mcp-client,开发者可以方便地将本地工具能力开放给远程智能体使用。