在锁定的ngrok端点上暴露克劳德代码(MCP)
此回购包含 expose-claude-mcp.sh,一个交互式脚本,它:
- 开始 克劳德代码 作为一个 MCP stdio服务器 (
claude mcp serve) - 连接它 可流式传输的HTTP 随着 超级通道 (因此远程代理可以通过HTTP调用它)
- 规定/更新 ngrok云端点 通过 ngrok REST API
- 应用a 交通政策 这只允许 Anthropic的出境IP (运行时自动获取)
- 运行一个 ngrok内部终点 代理并将流量安全转发到本地MCP
你会得到一个 公共MCP URL 您可以粘贴到远程代理SDK/Claude配置中。
______________________________________________________________________
它是如何工作的(高级)
Claude Code (local) supergateway ngrok ngrok Cloud Endpoint
┌───────────────────┐ stdio → Streamable HTTP ┌─────────────┐ (Traffic Policy: restrict-ips
│ claude mcp serve │ ──────────────────────────▶ │ http://:PORT│ ───▶ + forward-internal) ──▶ PUBLIC_URL/mcp
└───────────────────┘ └─────────────┘ ↑
forwards to
INTERNAL_BINDING_URL
(handled by local ngrok agent)- 超级通道 暴露您的本地MCP 超文本传输协议 (推荐运输;比苏格兰和南方能源公司更稳健)。
- 云端点 强制执行 源IP分配 (人工出站IP)并转发给您
内部端点 (INTERNAL_BINDING_URL)当地的朝鲜特工正在监听。
- 您的远程代理呼叫 公共MCP URL;只允许IP到达您的计算机。
______________________________________________________________________
先决条件
- 操作系统: Linux/macOS(在Ubuntu上测试)
- 已安装的工具:
- claude (克劳德代码CLI) - node & npx - ngrok - curl & jq
快速安装(Ubuntu)
sudo apt-get update
sudo apt-get install -y curl jq
# Node & npm (choose your preferred method)
# ngrok: download & install from ngrok docs, then:
# ngrok config add-authtoken
# Claude Code CLI: install per Anthropic docs so `claude` is in PATH______________________________________________________________________
你需要的变量(以及在哪里获取它们)
剧本奏效了 交互式地 并能 持续 你对a的回答 .env 无头运行文件。
必需
| 变量 | 它是什么 | 从哪里得到它 |
|---|---|---|
NGROK_API_KEY | REST API密钥 适用于ngrok Cloud(用于创建/更新云端点) | ngrok仪表板→ API |
NGROK_AUTHTOKEN | 代理身份令牌 对于本地ngrok流程 | ngrok仪表板→ 您的身份验证令牌 |
NGROK_RESERVED_DOMAIN | The 公有领域 对于您的云端点(例如。 my-mcp.ngrok.app) | ngrok仪表板→ 保留域(创建一个) |
你需要一个支持的ngrok计划 保留域 和 云端点.
推荐
| 变量 | 它是什么 | 建议值 |
|---|---|---|
INTERNAL_BINDING_URL | The 内部端点域 本地ngrok代理绑定到(匹配策略的 forward-internal 目标) | 例如。 https://mcp-local.internal (或您喜欢的其他内部主机) |
脚本将启动本地ngrok代理 --url ${INTERNAL_BINDING_URL} 以便云端点可以转发到它。可选(提供合理的默认值)
| 变量 | 它是什么 | 默认值 |
|---|---|---|
MCP_PORT | 流式HTTP的本地端口 | 8000 |
MCP_PATH | MCP端点的URL路径 | /mcp |
CLAUDE_CMD | 运行Claude MCP stdio服务器的命令 | claude mcp serve |
SUPERGATEWAY_EXTRA | 超级通道的额外标志 | *(空)* |
AUTO_FETCH_IPS | 自动获取Anthropic出站IP(1/0) | 1 (是) |
ANTHROPIC_IPS_OVERRIDE | 逗号分隔的CIDR,如果不自动获取,则允许列表 | *(空)* |
NO_START_NGROK | 跳过启动本地ngrok代理(1/0) | 0 (启动它) |
______________________________________________________________________
首轮(互动)——坚持 .env
- 使脚本可执行:
chmod +x expose-claude-mcp.sh- 以交互方式运行 和 保存您的答案:
./expose-claude-mcp.sh --save-env .env.mcp- 系统将提示您:
- NGROK_API_KEY - NGROK_AUTHTOKEN - NGROK_RESERVED_DOMAIN (例如。, my-mcp.ngrok.app) - INTERNAL_BINDING_URL (例如。, https://mcp-local.internal) - 本地端口/路径和其他选项(默认值很好) - 是否自动获取Anthropic出站IP(推荐= 是)
- 脚本:
- 使用流量策略创建/更新云端点:
- 限制ips (allowlist Anthropic出站IP) - 向前内部 到 INTERNAL_BINDING_URL
- 开始 超级通道 以及(可选) 韩国当地代理商
- 打印您的 公共MCP URL 并编写一个可粘贴的配置代码段
______________________________________________________________________
后续跑步(无头/CI)
使用已保存的 .env 要非交互式运行:
./expose-claude-mcp.sh --non-interactive --env-file .env.mcp --yes这将:
- 从以下位置读取变量
.env.mcp - 跳过提示
- 重用保留域和策略
- 自动打开网桥和代理
______________________________________________________________________
输出和使用方法
当它直播时,脚本会打印出以下内容:
Public MCP URL : https://my-mcp.ngrok.app/mcp
Internal bind : https://mcp-local.internal -> http://127.0.0.1:8000/mcp
Endpoint ID : ep_123...
Snippet : .mcp-expose-logs/mcpServers.json将MCP URL粘贴到您的远程代理SDK/Claude配置中:
{
"mcpServers": {
"claude-code-local": {
"type": "http",
"url": "https://my-mcp.ngrok.app/mcp"
}
}
}______________________________________________________________________
安全说明
- 云端点 交通政策 异殖主义者 人工出站IP (在运行时获取)。如果列表更改,请重新运行脚本进行刷新。
- 要使用自己的IP进行测试,请设置:
- AUTO_FETCH_IPS=0 - ANTHROPIC_IPS_OVERRIDE="YOUR.IP.ADDR.ESS/32,"
- 保持你的
.env.mcp安全。它包含凭据。
- 更喜欢 超文本传输安全协议 无处不在(默认情况下,脚本和ngrok都会这样做)。
______________________________________________________________________
故障排除
- 端点创建/更新失败
检查您的ngrok计划支持 云端点 和 保留域.验证 NGROK_API_KEY 范围。看 .mcp-expose-logs/ngrok-agent.log.
- 超级通道无法启动
确保 claude CLI已安装并打开 PATH.检查 .mcp-expose-logs/supergateway.log.试着跑步 claude mcp serve 在单独的shell中手动完成一次,以完成任何首次运行设置。
- 403/阻止访问
IP allowlist正在工作。确认电话来自 人工出站IP 或暂时扩大满列表(请参阅安全说明)。
- 端口已在使用中
设置不同 MCP_PORT 然后重新运行。
- 想要自己的身份验证标头
该脚本侧重于IP分配。如果您还想要基于标头的身份验证,请在转发之前添加一个检查标头的额外操作来扩展流量策略。
______________________________________________________________________
清理
- 按
Ctrl+C在脚本终端中停止(它捕获并停止子进程)。 - 若要完全删除云端点,请在ngrok仪表板中或通过API将其删除。
______________________________________________________________________
常见问题解答
Q: 我是否需要云端点和本地代理? A. 对。云端点(公共)执行策略并转发到您的 内部端点 (本地代理绑定的URL)。此模式使您的本地服务保持私有并经过过滤。
Q: 我可以跳过自动获取Anthropic IP吗? A. 对。集 AUTO_FETCH_IPS=0 并提供逗号分隔 ANTHROPIC_IPS_OVERRIDE 列表(CIDR)。裸IPv4将标准化为 /32.
Q: 我可以使用SSE而不是HTTP吗? A. 该脚本使用Streamable HTTP(推荐)。如果必须使用SSE,请相应地调整超级网关标志和客户端配置。
______________________________________________________________________
你可能想要的一条线
首次运行(交互式)并保存配置
./expose-claude-mcp.sh --save-env .env.mcp无头跑步(CI)
./expose-claude-mcp.sh --non-interactive --env-file .env.mcp --yes手动IP覆盖示例
AUTO_FETCH_IPS=0 \
ANTHROPIC_IPS_OVERRIDE="34.162.46.92/32,34.162.102.82/32" \
./expose-claude-mcp.sh --non-interactive --env-file .env.mcp --yes______________________________________________________________________
就是这样!
如果你想要一个 systemd服务 引导时自动启动网桥的单元,或写入以下命令的变体 公共MCP URL 在你的代理读取的文件中——说出这个词,我们会把它们添加进去。
