Claude代码MCP服务

通过ngrok端点安全暴露Claude代码MCP服务,支持远程代理通过HTTP调用。

  • by deskomor
  • Shell
  • 本地部署
  • 更新于
在 GitHub 查看 deskomor/expose-claude-mcp

使用说明

在锁定的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 <YOUR_NGROK_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

  1. 使脚本可执行:
chmod +x expose-claude-mcp.sh
  1. 以交互方式运行 和 保存您的答案:
./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,<anthropic cidrs...>"
  • 保持你的 .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 在你的代理读取的文件中——说出这个词,我们会把它们添加进去。