MCP网关服务

MCP网关服务通过SSE协议暴露多个MCP服务器,用于Poke.com平台。

  • by carterdea
  • Shell
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 carterdea/mcp-gateway

使用说明

MCP网关

模型上下文协议(MCP)网关,通过SSE为Poke.com公开多个MCP服务器。

部署选项

选项A:Docker桌面+Ngrok(本地服务器)

使用Docker MCP Gateway在Mac mini上运行,并通过Ngrok公开。

Poke.com → Ngrok → localhost:8080 → Docker MCP Gateway → MCP Servers
                                                          ├── GitHub (catalog)
                                                          ├── Playwright (catalog)
                                                          ├── Trello (custom Docker)
                                                          └── Harvest (custom Docker)

快速入门:

cd ~/Sites/mcp-gateway
./build-mcps.sh        # Build custom Docker images (first time)
./setup-secrets.sh     # Configure API keys
./start-all.sh         # Start gateway + ngrok

请求 URL :

https://carterdea-mcp.ngrok.pizza/sse

看 本地设置 在......下面

选项B:Fly.io(云)

使用mcp聚合器和Supergateway在Fly.io上部署。

Poke.com (MCP Client)
    ↓ SSE
Supergateway (stdio → SSE adapter)
    ↓ stdio
mcp-aggregator (combines MCPs)
    ↓ ↓ ↓
    Trello | Harvest | Shopify
        ↓      ↓        ↓
    REST APIs (external services)

SSE端点:

https://carterdea-mcp-gateway.fly.dev/sse

本地设置(Docker桌面)

先决条件

  • 带MCP工具包的Docker桌面
  • Ngrok CLI(经过身份验证)

1.构建自定义MCP映像

./build-mcps.sh

这将为不在Docker目录中的MCP构建Docker镜像:

  • mcp/trello:latest -Trello板卡管理
  • mcp/harvest:latest -收获时间跟踪

2.配置机密

创建 .env 使用您的API证书:

TRELLO_API_KEY=your_api_key
TRELLO_TOKEN=your_token
HARVEST_ACCOUNT_ID=your_account_id
HARVEST_ACCESS_TOKEN=your_access_token

# Gateway auth token (generate with: openssl rand -hex 32)
MCP_GATEWAY_AUTH_TOKEN=your_secure_token

然后运行:

./setup-secrets.sh

或手动:

docker mcp secret set trello.api_key
docker mcp secret set trello.token
docker mcp secret set harvest.account_id
docker mcp secret set harvest.access_token

3.启动网关

./start-gateway.sh

这将运行Docker MCP网关聚合:

  • github-official (来自Docker目录)
  • playwright (来自Docker目录)
  • docker://mcp/trello:latest (自定义图像)
  • docker://mcp/harvest:latest (自定义图像)

4.启动Ngrok(独立终端)

./start-ngrok.sh

这打开了一条隧道 https://carterdea-mcp.ngrok.pizza

5.连接Poke.com

  1. 首选https://poke.com/settings/connections/integrations/new
  2. 通过以下方式创建MCP集成:
    • 统一资源定位符: https://carterdea-mcp.ngrok.pizza/sse
    • 身份验证标头: Authorization: Bearer YOUR_MCP_GATEWAY_AUTH_TOKEN

6.开机自动启动(可选)

要在Mac mini启动时自动启动网关,请执行以下操作:

# Copy LaunchAgent to system location
cp com.carterdea.mcp-gateway.plist ~/Library/LaunchAgents/

# Load the agent (starts immediately)
launchctl load ~/Library/LaunchAgents/com.carterdea.mcp-gateway.plist

要停止和禁用:

launchctl unload ~/Library/LaunchAgents/com.carterdea.mcp-gateway.plist

查看日志:

tail -f /tmp/mcp-gateway.log
tail -f /tmp/mcp-gateway-error.log

Fly.io部署

当前配置

  • MCP服务器:Trello、Harvest、Shopify
  • 聚合器:mcp聚合器
  • 网关:超级网关
  • 运行时:Bun
  • 平台:Fly.io(网络成瘾地区)
  • 资源:1GB内存,1个共享vCPU

先决条件

  • Fly.io命令行界面
  • 包子 (用于本地测试)
  • MCP服务器凭据:
    • Trello API密钥+代币
    • Harvest账户ID+个人访问令牌
    • Shopify商店URL+管理员API令牌

设置

1.克隆存储库

git clone <repo-url>
cd mcp-gateway

2.配置MCP服务器凭据

特雷洛

获取您的凭据:

  • API密钥: https://trello.com/app-key
  • 代币:使用API密钥页中的授权URL

设置为飞行秘密:

fly secrets set \
  TRELLO_API_KEY="your_api_key" \
  TRELLO_TOKEN="your_token" \
  --app carterdea-mcp-gateway

收获

获取您的凭据:

  • 账户ID:您的Harvest帐户ID
  • 个人访问令牌:创建时间https://id.getharvest.com/developers

设置为飞行秘密:

fly secrets set \
  HARVEST_ACCOUNT_ID="your_account_id" \
  HARVEST_ACCESS_TOKEN="your_access_token" \
  --app carterdea-mcp-gateway

Shopify

获取您的凭据:

  • 店铺URL例如。, mystore.myshopify.com
  • 管理员API令牌:在Shopify管理员中创建自定义应用程序

设置为飞行秘密:

fly secrets set \
  SHOPIFY_SHOP_URL="mystore.myshopify.com" \
  SHOPIFY_ADMIN_API_TOKEN="shpat_..." \
  --app carterdea-mcp-gateway

所有秘密一次

fly secrets set \
  TRELLO_API_KEY="..." \
  TRELLO_TOKEN="..." \
  HARVEST_ACCOUNT_ID="..." \
  HARVEST_ACCESS_TOKEN="..." \
  SHOPIFY_SHOP_URL="mystore.myshopify.com" \
  SHOPIFY_ADMIN_API_TOKEN="shpat_..." \
  --app carterdea-mcp-gateway

为了地方发展,创造 .env:

TRELLO_API_KEY=your_api_key
TRELLO_TOKEN=your_token
HARVEST_ACCOUNT_ID=your_account_id
HARVEST_ACCESS_TOKEN=your_access_token
SHOPIFY_SHOP_URL=mystore.myshopify.com
SHOPIFY_ADMIN_API_TOKEN=shpat_...

3.部署到Fly.io

fly deploy

4.验证部署

fly status --app carterdea-mcp-gateway
fly logs --app carterdea-mcp-gateway

配置

mcp-config.json

MCP服务器配置在 mcp-config.json:

{
  "servers": {
    "trello": {
      "enabled": true,
      "command": "bunx",
      "args": ["-y", "@delorenj/mcp-server-trello"],
      "env": {
        "TRELLO_API_KEY": "${TRELLO_API_KEY}",
        "TRELLO_TOKEN": "${TRELLO_TOKEN}"
      }
    },
    "harvest": {
      "enabled": true,
      "command": "bunx",
      "args": ["-y", "@standardbeagle/harvest-mcp"],
      "env": {
        "HARVEST_ACCOUNT_ID": "${HARVEST_ACCOUNT_ID}",
        "HARVEST_ACCESS_TOKEN": "${HARVEST_ACCESS_TOKEN}"
      }
    },
    "shopify": {
      "enabled": true,
      "command": "bunx",
      "args": ["-y", "@ajackus/shopify-mcp-server"],
      "env": {
        "SHOPIFY_SHOP_URL": "${SHOPIFY_SHOP_URL}",
        "SHOPIFY_ADMIN_API_TOKEN": "${SHOPIFY_ADMIN_API_TOKEN}"
      }
    }
  }
}

要禁用MCP服务器,请设置 "enabled": false.

扩展

如果健康检查失败或服务器电源不足:

# Scale memory
fly scale memory 1024 --app carterdea-mcp-gateway

# Scale to 2 machines for redundancy
fly scale count 2 --app carterdea-mcp-gateway

机器规格

当前配置在 fly.toml:

  • 端口:8080
  • 内存:1GB RAM
  • CPU:1个共享vCPU
  • 自动启动:已启用
  • 自动停止:已禁用
  • 健康检查: /sse 每30秒结束一次(10秒超时,30秒宽限期)

未来MCP集成

计划(第2阶段)

  • [ ] GitHub MCP -存储库管理、问题、PR
  • [ ] 剧作家MCP -web测试的浏览器自动化

未来可能增加的内容

  • [ ] 石墨MCP -堆叠式PR集成(gt 服务器上的CLI)
  • [ ] 苹果提醒/笔记MCP -同步来自Apple生态系统的提醒和笔记

添加更多MCP

要添加更多MCP服务器:

  1. 将服务器配置添加到 mcp-config.json
  2. 将所需的环境变量设置为Fly secrets
  3. 重新部署: fly deploy
  4. 验证: fly logs --app carterdea-mcp-gateway

mcp聚合器会自动将所有启用的服务器组合到一个stdio流中。

成本

  • 当前:Fly.io上约10-15美元/月(1GB机器)
  • 估计有5个MCP:每月15-20美元(可能需要扩展到2GB)

故障排除

健康检查失败

# Check machine status
fly machine status <machine-id> --app carterdea-mcp-gateway

# Scale up memory if needed
fly scale memory 2048 --app carterdea-mcp-gateway

连接问题

# Restart machine
fly machine restart <machine-id> --app carterdea-mcp-gateway

# Check logs for errors
fly logs --app carterdea-mcp-gateway

身份验证错误

验证是否设置了凭据:

fly secrets list --app carterdea-mcp-gateway

直接测试证书:

特雷洛:

curl "https://api.trello.com/1/members/me/boards?key=YOUR_KEY&token=YOUR_TOKEN"

收获:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Harvest-Account-Id: YOUR_ACCOUNT_ID" \
  "https://api.harvestapp.com/v2/users/me"

Shopify:

curl -H "X-Shopify-Access-Token: YOUR_TOKEN" \
  "https://YOUR_SHOP.myshopify.com/admin/api/2024-01/shop.json"

mcp聚合器问题

如果mcp聚合器不适用于Bun运行时:

  1. 更新 Dockerfile 使用 node:18-alpine 基础镜像
  2. 改变 bun add 到 npm install
  3. 改变 bunx 到 npx 在 mcp-config.json
  4. 重新部署: fly deploy

本地测试

使用Bun在本地测试网关:

# Install dependencies
bun add -g @mcp/aggregator supergateway

# Set environment variables
export TRELLO_API_KEY="..."
export TRELLO_TOKEN="..."
export HARVEST_ACCOUNT_ID="..."
export HARVEST_ACCESS_TOKEN="..."
export SHOPIFY_SHOP_URL="..."
export SHOPIFY_ADMIN_API_TOKEN="..."
export MCP_CONFIG="./mcp-config.json"
export PORT=8080

# Start gateway
supergateway --port 8080 --stdio mcp-aggregator

测试SSE端点:

curl -N http://localhost:8080/sse

许可证

麻省理工学院