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 |
添加自定义后端
- 在中创建一个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"]- 将服务添加到
docker-compose.yml(如果可选,请使用配置文件) - 将后端URL添加到
mcp-gateway/server.py在_build_mcp_config() - 重建:
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 .
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、添加后端和运行测试的指南。
