MCP网关聚合服务

OpenSmelt是一个MCP网关,聚合多个后端MCP服务器为单一端点,提供100多种工具访问,适用于开发工具集成和自动化场景。

  • by agentmcmillan
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 agentmcmillan/OpenSmelt

使用说明

OpenSmelt

一个MCP网关,将多个后端MCP服务器聚合到一个端点中。连接一次,获取所有工具。

任何兼容MCP的客户端(Claude Code、Codex CLI、Gemini CLI、Cursor)都可以连接到一个URL,并通过命名空间后端访问100多种工具。

建筑

MCP Client (Claude Code, Codex CLI, etc.)
    |
    v
MCP Gateway :9000  ──  FastMCP create_proxy() aggregates all backends
    |
    ├── memento      Shared semantic memory (Node.js + pgvector)     [core]
    ├── tools        Fleet status, Signal messaging, shared config   [core]
    ├── docker       Docker management (supergateway wrapper)        [core]
    ├── rss          RSS feed reader (supergateway wrapper)          [core]
    ├── github       GitHub API tools (supergateway wrapper)         [profile: github]
    ├── ollama       Local LLM via Ollama (supergateway wrapper)     [profile: ollama]
    ├── ssh          SSH to fleet devices (supergateway wrapper)     [profile: ssh]
    ├── signal       Signal messaging (supergateway wrapper)         [profile: signal]
    └── cloudflare   Cloudflare API (supergateway wrapper)           [profile: cloudflare]

工具由后端命名(例如。, memento_remember, github_search_repositories, docker_list_containers).

先决条件

  • Docker 20.10+ 使用Docker Compose v2
  • 4GB内存 最低(如果运行Olama,建议使用8GB)
  • 10 GB磁盘 用于Docker镜像和数据量
  • A. GitHub个人访问令牌 如果你想要GitHub后端(创建一个)

快速开始

选项A:交互式设置(推荐)

git clone https://github.com/agentmcmillan/OpenSmelt.git
cd OpenSmelt
./setup.sh                    # generates .env, picks backends
docker compose up -d          # start services
./scripts/test-gateway.sh     # verify everything works

选项B:手动设置

git clone https://github.com/agentmcmillan/OpenSmelt.git
cd OpenSmelt

# Create .env from template
cp .env.example .env

# Generate secrets (paste into .env)
echo "MEMENTO_ACCESS_KEY=$(openssl rand -hex 32)"
echo "POSTGRES_PASSWORD=$(openssl rand -hex 32)"

# Edit .env:
#   - Set COMPOSE_PROFILES to enable backends (e.g., github,ollama,ssh)
#   - Fill in credentials for each enabled profile
#   - See .env.example for all options

# Start
docker compose up -d

# Verify
curl http://localhost:9000/health

选择后端

后端由Docker Compose控制 个人资料 通过 COMPOSE_PROFILES 在 .env:

配置文件 它支持什么 需要
github GitHub API工具 GITHUB_PERSONAL_ACCESS_TOKEN
ollama 本地LLM工具 Ollama在主机上运行
ssh SSH到舰队设备 SSH密钥 ssh-keys/
signal 信号消息 信号REST API+ AI_SIGNALS_PATH
cloudflare Cloudflare API CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID

无论配置文件如何,核心服务(memento、工具、docker、rss)始终会启动。

# Examples:
COMPOSE_PROFILES=github                     # core + GitHub only
COMPOSE_PROFILES=github,ollama,ssh          # core + GitHub + Ollama + SSH
COMPOSE_PROFILES=github,ollama,ssh,signal   # everything except Cloudflare

远程部署

要通过SSH部署到远程服务器:

DEPLOY_HOST=your-server-ip DEPLOY_USER=your-username ./deploy.sh

客户端配置

网关运行后,配置MCP客户端进行连接。

局域网接入

添加到您的MCP客户端配置中(例如。, ~/.claude.json, .mcp.json):

{
  "mcpServers": {
    "opensmelt": {
      "type": "http",
      "url": "http://YOUR_SERVER_IP:9000/mcp"
    }
  }
}

替换 YOUR_SERVER_IP 使用运行OpenSmelt的机器的IP或主机名。如果在本地运行,请使用 localhost.

通过Cloudflare进行远程访问

看 client-configs/gateway-remote.json 对于带有Cloudflare Access标头的模板。

环境变量

复制 .env.example 到 .env 并填写数值。这 setup.sh 脚本自动执行此操作。

必需

变量 描述
MEMENTO_ACCESS_KEY Memento MCP的授权密钥(生成: openssl rand -hex 32)
POSTGRES_PASSWORD PostgreSQL密码(生成: openssl rand -hex 32)

特定配置文件

变量 配置文件 描述
GITHUB_PERSONAL_ACCESS_TOKEN github GitHub PAT(创建一个)
SIGNAL_API_URL signal 信号REST API端点
SIGNAL_BOT_NUMBER signal 信号发送者电话号码
SIGNAL_RECIPIENT signal 默认信号接收者
AI_SIGNALS_PATH signal ai信号dist目录的路径
OLLAMA_HOST ollama Ollama端点(默认值: http://host.docker.internal:11434)
CLOUDFLARE_API_TOKEN cloudflare Cloudflare API代币
CLOUDFLARE_ACCOUNT_ID cloudflare Cloudflare帐户ID

可选的

变量 默认值 描述
COMPOSE_PROFILES (空) 要启用的后端配置文件的逗号分隔列表
TOOL_DISCOVERY true 启用BM25工具发现(见下文)
DOMAIN localhost Caddy反向代理的域名
GATEWAY_PORT 9000 网关侦听端口
SSH_KEYS_PATH ./ssh-keys SSH密钥目录的路径

工具发现

默认情况下,网关使用 BM25工具发现 以减少令牌使用。客户端看到的不是在connect上发送所有100多个工具定义(~18k个令牌),而是~12个工具(~2k个令牌):

工具 类型 用途
search_tools 综合 通过自然语言查询在所有工具中搜索BM25
call_tool 合成 按名称执行任何发现的工具
list_tool_categories 自定义 可用工具类别概述
7个固定要素 真实 memento_remember, memento_recall, tools_fleet_status等等。

AI如何使用它

1. list_tool_categories()          → "github: 26 tools", "ssh: 37 tools", ...
2. search_tools(query="create PR") → returns github_create_pull_request definition
3. call_tool(name="github_create_pull_request", arguments={...}) → executes it

禁用发现

集 TOOL_DISCOVERY=false 在 .env 直接公开所有工具(原始行为)。

后端

后端 工具 说明 启动
纪念品 11 带pgvector的语义记忆——记住、回忆、反映 核心(总是)
工具 9 车队监控、信号通知、共享配置 核心(始终)
码头工人 4 容器管理——列表、启动、停止、日志 核心(始终)
RSS 2 RSS提要阅读器 核心(始终)
GitHub 26 GitHub API-转发、问题、PR、搜索 个人资料: github
奥拉玛 13 本地LLMs——聊天、生成、建模 简介: ollama
安全外壳协议 37 SSH到机群设备--exec,文件传输 配置文件: ssh
信号 3 信号消息 配置文件: signal
云耀 变化 Cloudflare API 简介: cloudflare

添加自定义后端

  1. 在中创建一个Dockerfile mcp-wrappers/your-tool/Dockerfile 使用supergateway模式:
FROM node:22-slim
RUN npm i -g supergateway @your-org/your-mcp-server
EXPOSE 3000
CMD ["supergateway", "--stdio", "npx @your-org/your-mcp-server", \
     "--port", "3000", "--outputTransport", "streamableHttp", "--stateful", \
     "--healthEndpoint", "/health"]
  1. 将服务添加到 docker-compose.yml (如果可选,请使用配置文件)
  2. 将后端URL添加到 mcp-gateway/server.py 在 _build_mcp_config()
  3. 重建: docker compose up -d --build

健康检查

curl http://localhost:9000/health

返回每个后端状态的JSON。 "status": "ok" 指所有连接的后端; "degraded" 意味着一些设备处于离线状态,但网关正常工作。

mTLS(可选)

对于使用客户端证书的直接HTTPS访问:

./caddy/generate-certs.sh              # Create CA (first time only)
./caddy/provision-client.sh my-device "My Device"  # Generate client cert

然后在中取消注释mTLS块 caddy/Caddyfile 并设置您的域名。

故障排除

网关已启动,但某些后端无法访问: 网关仍然适用于连接的后端。检查 docker compose logs <service>.

Gateway在启动时挂起: create_proxy() 如果后端处于崩溃循环中期,则可以挂起。跑 docker compose ps 并重新启动任何不健康的服务。

rss mcp OOM: 内存限制设置为256M。不要降低到这个水平以下。

Ollama后端无法连接(Linux): host.docker.internal 仅适用于Docker桌面(macOS/Windows)。在Linux上,设置 OLLAMA_HOST 连接到主机的LAN IP(例如。, http://192.168.1.100:11434)确保奥利玛在听 0.0.0.0.

缺少目录: 跑 mkdir -p caddy/client-certs ssh-keys 或奔跑 ./setup.sh 这会自动创建它们。

项目结构

OpenSmelt/
  mcp-gateway/          FastMCP gateway proxy server
  fastmcp-tools/        Python tools server (fleet, Signal, config)
  memento-mcp/          Node.js shared memory server (pgvector)
  mcp-wrappers/         Supergateway Dockerfiles for stdio MCP servers
    github/ signal/ docker/ ollama/ cloudflare/ ssh/ rss/
  caddy/                Caddyfile + mTLS cert scripts
  client-configs/       MCP client JSON configs (copy into your client)
  scripts/              Test and utility scripts
  deploy.sh             Remote SSH deploy script
  setup.sh              Interactive first-time setup
  docker-compose.yml    Service orchestration
  .env.example          Environment variable template

许可证

麻省理工学院

贡献

看 贡献.md 有关提交PR、添加后端和运行测试的指南。