交换机
用Go编写的统一MCP服务器,聚合了多个集成 (GitHub、Datadog、Linear、Sentry、Slack、Metabase)位于单个MCP端点后面, 具有易于配置的web UI。
安装
自制(macOS/Linux)
brew install daltoniam/tap/switchboard大铲(Windows)
scoop bucket add daltoniam https://github.com/daltoniam/scoop-bucket
scoop install switchboardDebian/Ubuntu(.deb)
# Download the latest .deb from GitHub releases
curl -LO "https://github.com/daltoniam/switchboard/releases/latest/download/switchboard_$(curl -s https://api.github.com/repos/daltoniam/switchboard/releases/latest | grep tag_name | cut -d '"' -f4 | tr -d v)_linux_amd64.deb"
sudo dpkg -i switchboard_*.debFedora/RHEL(.rpm)
# Download the latest .rpm from GitHub releases
curl -LO "https://github.com/daltoniam/switchboard/releases/latest/download/switchboard_$(curl -s https://api.github.com/repos/daltoniam/switchboard/releases/latest | grep tag_name | cut -d '"' -f4 | tr -d v)_linux_amd64.rpm"
sudo rpm -i switchboard_*.rpmArch Linux(AUR)
yay -S switchboard-binAlpine Linux(.apk)
# Download the latest .apk from GitHub releases
curl -LO "https://github.com/daltoniam/switchboard/releases/latest/download/switchboard_$(curl -s https://api.github.com/repos/daltoniam/switchboard/releases/latest | grep tag_name | cut -d '"' -f4 | tr -d v)_linux_amd64.apk"
sudo apk add --allow-untrusted switchboard_*.apk去安装
go install github.com/daltoniam/switchboard/cmd/server@latest下载二进制文件
macOS、Linux和Windows的预构建二进制文件(amd64/arm64)可在 这 页面。
建筑
┌─────────────┐ stdio / SSE ┌──────────────────────┐
│ AI Client │ ◄──────────────────► │ Unified MCP Server │
│ (Cursor, etc)│ │ │
└─────────────┘ │ ┌─────────────────┐ │
│ │ Tool Router │ │
┌──────────────────┐ │ └────────┬────────┘ │
│ Web UI (3847) │◄─ HTTP ─►│ │ │
│ config/creds │ │ ┌────────▼────────┐ │
└──────────────────┘ │ │ Adapters │ │
│ │ ├─ GitHub │ │
│ │ ├─ Datadog │ │
│ │ ├─ Linear │ │
│ │ ├─ Sentry │ │
│ │ ├─ Slack │ │
│ │ └─ Metabase │ │
│ └─────────────────┘ │
└──────────────────────┘上下文优化
API的响应很大。当LLM需要大约10个字段来决定下一步要做什么时,单个GitHub问题会包含大约100个字段(嵌套用户、权限、节点ID、化身URL)。每页乘以30个问题,列表调用可能会消耗150KB的上下文,以获取模型永远不会使用的信息。
交换机自动解决了这个问题。集成声明 压实规范 描述哪些字段对每个工具都很重要。服务器每次都会删除其他所有内容 execute 在响应到达LLM之前。
默认情况下,列表和搜索响应是紧凑的。当LLM识别特定项目并调用单个项目时 get 工具,它会得到完整的响应以进行深入挖掘。
快速开始
# Run (default — HTTP server with MCP + web UI on port 3847)
switchboard
# Custom port
switchboard --port 8080
# Stdio mode (for Cursor/Claude Desktop)
switchboard --stdio
# Check version
switchboard --version
# Open config UI
open http://localhost:3847配置
Config住在 ~/.config/switchboard/config.jsonweb UI是一个 这个文件上的便利层——您也可以手动编辑它。
{
"integrations": {
"github": {
"enabled": true,
"credentials": {
"token": "ghp_..."
}
},
"datadog": {
"enabled": true,
"credentials": {
"api_key": "...",
"app_key": "..."
}
}
}
}环境变量
Switchboard会自动从shell中读取环境变量(fish、zsh、bash等),并将其叠加在JSON配置之上。如果设置了env var,则它优先于中的相应值 config.json.ev来源的值永远不会写回磁盘。
与通过env-vars提供的凭据的任何集成都将自动启用,而无需在web UI中切换。
| 集成 | 凭证 | 环境变量 |
|---|---|---|
| GitHub | token | GITHUB_TOKEN |
| 数据狗 | api_key | DD_API_KEY |
| 数据狗 | app_key | DD_APP_KEY |
| 数据狗 | site | DD_SITE |
| 线性 | api_key | LINEAR_API_KEY |
| 哨兵 | auth_token | SENTRY_AUTH_TOKEN |
| 哨兵 | organization | SENTRY_ORG (可选-API自动检测) |
| 松弛 | token | SLACK_TOKEN |
| 松弛 | cookie | SLACK_COOKIE |
| 代谢酶 | api_key | METABASE_API_KEY |
| 代谢酶 | url | METABASE_URL |
| AWS | access_key_id | AWS_ACCESS_KEY_ID |
| AWS | secret_access_key | AWS_SECRET_ACCESS_KEY |
| AWS | session_token | AWS_SESSION_TOKEN |
| AWS | region | AWS_REGION |
| PostHog | api_key | POSTHOG_API_KEY |
| PostHog | project_id | POSTHOG_PROJECT_ID |
| PostHog | base_url | POSTHOG_URL |
| Postgres | connection_string | DATABASE_URL |
| Postgres | host | PGHOST |
| Postgres | port | PGPORT |
| Postgres | user | PGUSER |
| Postgres | password | PGPASSWORD |
| Postgres | database | PGDATABASE |
| Postgres | sslmode | PGSSLMODE |
| 吉拉 | email | JIRA_EMAIL |
| 吉拉 | api_token | JIRA_API_TOKEN |
| 吉拉 | domain | JIRA_DOMAIN |
| Readarr | api_key | READARR_API_KEY |
| Readarr | base_url | READARR_URL |
| 数字海洋 | api_token | DIGITALOCEAN_TOKEN |
| 条纹 | api_key | STRIPE_API_KEY |
| 条纹 | account | STRIPE_ACCOUNT (可选-- Stripe-Account Connect的标题) |
| 条纹 | base_url | STRIPE_BASE_URL (可选-覆盖API端点,例如stripe-mack) |
OAuth设置
一些集成通过web UI支持OAuth流 http://localhost:3847。这是为不使用简单API密钥的集成获取令牌的最简单方法。
| 集成 | 身份验证方法 | 设置 |
|---|---|---|
| GitHub | OAuth设备流 | Web UI→ GitHub→ 设置,或设置 GITHUB_TOKEN |
| 线性 | OAuth(PKCE) | Web用户界面→ 线性→ 设置,或设置 LINEAR_API_KEY |
| Sentry | OAuth设备流 | Web UI→ 哨兵→ 设置,或设置 SENTRY_AUTH_TOKEN |
| Slack | 会话令牌 | Web UI→ Slack→ 设置(从Chrome自动提取),或设置 SLACK_TOKEN |
| datadog | neneneba API+应用程序密钥 | 集 DD_API_KEY 和 DD_APP_KEY env变量或在web UI中输入 |
| AWS | IAM凭据 | 设置 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY env变量,或使用默认凭据链 |
| 元数据库 | API密钥 | 集 METABASE_API_KEY 和 METABASE_URL env变量或在web UI中输入 |
| PostHog | 个人API密钥 | 集 POSTHOG_API_KEY env-var或在web UI中输入 |
| Postgres | 连接字符串 | 设置 DATABASE_URL env-var或在web UI中输入 |
添加到Cursor/Claude桌面
添加到MCP客户端配置中:
{
"mcpServers": {
"switchboard": {
"command": "switchboard",
"args": []
}
}
}从源代码构建
git clone https://github.com/daltoniam/switchboard.git
cd switchboard
go build -o switchboard ./cmd/server发展
安装 空气 对于开发过程中的实时重新加载:
go install github.com/air-verse/air@latest安装Playwright Chromium驱动程序(可选-启用基于浏览器的集成):
go run github.com/playwright-community/playwright-go/cmd/playwright install chromium然后运行live-reload:
air