SwitchBot MCP服务器(Go)
   
日语版在这里
A. 模型上下文协议(MCP) 使Claude Desktop能够控制SwitchBot设备的服务器。
特性
- 183工具:完整覆盖SwitchBot API v1.1
- 动态工具生成:根据YAML规范自动生成工具
- 自动工具名称消毒:Auto符合MCP命名约定(转换括号等)
- 自动更新:启动/生成时自动下载最新的API规范
- HMAC-SHA256身份验证:SwitchBot API身份验证的自动处理
- 本地/k8s支持:运行二进制、Docker容器或Kubernetes部署
需求
- 转到1.23+(用于当地发展)
- Docker(用于容器执行)
- Kubernetes(用于生产部署)
- SwitchBot API令牌和机密
正在获取SwitchBot API凭据
- 访问 SwitchBot官方网站
- 在应用程序中,转到个人资料→ 设置→ 点击“应用程序版本”10次以启用开发者模式
- 获取您的“令牌”并将其另存为
SWITCHBOT_TOKEN和SWITCHBOT_SECRET
有关详细信息,请参阅 SwitchBot API文档.
本地开发
1.设置环境变量
cp .env.example .env
# Edit .env file to set your token and secret2.构建和运行
# Build
make build
# Run
export SWITCHBOT_TOKEN='your_token'
export SWITCHBOT_SECRET='your_secret'
./mcp-switchbot或者,如果您在中设置了环境变量 .env 文件:
source .env
./mcp-switchbot3.测试
# Get list of tools
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
SWITCHBOT_TOKEN=xxx SWITCHBOT_SECRET=yyy ./mcp-switchbot使用Docker运行
构建
make docker-build跑
# Set environment variables and run
export SWITCHBOT_TOKEN='your_token'
export SWITCHBOT_SECRET='your_secret'
make docker-run或者,使用docker compose:
# Set environment variables in .env file first
docker-compose upKubernetes部署
1.创建秘密
kubectl create secret generic switchbot-keys \
--from-literal=token='YOUR_TOKEN' \
--from-literal=secret='YOUR_SECRET'2.构建和推送图像
# Build image
docker build -t your-registry/mcp-switchbot:latest .
# Push to registry
docker push your-registry/mcp-switchbot:latest3.编辑k8s.yaml
更新 image: 领域 k8s.yaml 使用您的注册表URL。
4.部署
kubectl apply -f k8s.yaml5.配置克劳德桌面
~/.config/claude/claude_desktop_config.json (Linux/Mac)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"switchbot": {
"command": "kubectl",
"args": [
"exec",
"-i",
"deployment/mcp-switchbot",
"--",
"/app/mcp-switchbot"
]
}
}
}与Claude桌面的本地连接
要在没有Kubernetes的情况下直接使用本地二进制文件:
{
"mcpServers": {
"switchbot": {
"command": "/path/to/mcp-switchbot",
"env": {
"SWITCHBOT_TOKEN": "your_token",
"SWITCHBOT_SECRET": "your_secret"
}
}
}
}可用工具
此MCP服务器提供183个工具。主要类别:
- 设备状态:
getXxxStatus(获取每个设备的当前状态) - 设备控制:
Xxx_turnOn/turnOff(电源开/关) - 参数设置:
Xxx_setBrightness,Xxx_setColorTemperature等等。 - 场景执行:
executeScene(执行已注册的场景)
有关工具的完整列表,请参阅 mcp-server.yaml.
自动更新YAML规范
如果满足以下条件,服务器会自动下载最新版本 mcp-server.yaml 启动时不存在。
通过环境变量进行控制
MCP_YAML_URL:下载YAML规范的URL(默认:官方SwitchBot存储库)MCP_FORCE_UPDATE:设置为true每次启动时强制下载最新版本
# Force download latest version on startup
MCP_FORCE_UPDATE=true ./mcp-switchbot手动YAML更新
make update-yaml发展
CI/CD管道
该项目包括使用GitHub Actions的自动化CI/CD管道:
- 持续集成:对每个pull请求运行lint、构建、测试和安全扫描
- 自动释放:推送标签时自动生成多平台二进制文件和Docker镜像
- 依赖关系更新:Dependabot每周检查依赖关系
在本地运行CI检查:
make ci # Lint + Build + Test检查工具数量
make count-tools更新依赖关系
make deps贡献
对于贡献者,请参阅 贡献.md.
建筑
┌─────────────────┐
│ Claude Desktop │
└────────┬────────┘
│ stdio (JSON-RPC)
│
┌────────▼────────┐
│ MCP Server │
│ (Go) │
│ │
│ - YAML Parser │
│ - Tool Gen │
│ - HMAC Auth │
└────────┬────────┘
│ HTTPS
│
┌────────▼────────┐
│ SwitchBot API │
│ v1.1 │
└─────────────────┘关键组件
- YAML解析器:从加载工具定义
mcp-server.yaml - 动态工具生成:在运行时生成183个工具
- HMAC-SHA256身份验证:为每个请求生成签名
- HTTP客户端:处理对SwitchBot API的请求
故障排除
Claude Desktop显示“失败”
- 检查调试日志:
tail -f /tmp/mcp-switchbot-debug.log- 手动测试:
cd /Users/spm/Documents/workspace/myspace/mcp-switchbot-go
./test-mcp.sh- 验证环境变量:
确保 SWITCHBOT_TOKEN 和 SWITCHBOT_SECRET 在Claude Desktop配置文件中正确设置
- 检查克劳德桌面日志:
- 雨衣: ~/Library/Logs/Claude/ - 窗户: %APPDATA%\Claude\logs\
错误:“SWITCHBOT_TOKEN和SWITCHBOT_SCRET环境变量是必需的”
未设置环境变量。将以下内容添加到您的Claude Desktop配置文件中(claude_desktop_config.json):
{
"mcpServers": {
"switchbot": {
"command": "/path/to/mcp-switchbot",
"env": {
"SWITCHBOT_TOKEN": "your_token_here",
"SWITCHBOT_SECRET": "your_secret_here"
}
}
}
}错误:“读取mcp服务器.yaml失败”
mcp-server.yaml 找不到文件。尝试:
- 通过环境变量显式指定路径:
"env": {
"SWITCHBOT_TOKEN": "xxx",
"SWITCHBOT_SECRET": "yyy",
"MCP_YAML_PATH": "/Users/spm/Documents/workspace/myspace/mcp-switchbot-go/mcp-server.yaml"
}- 手动下载:
make update-yamlDocker stdin不工作
添加 -i 标记为 docker run:
docker run -i --rm -e SWITCHBOT_TOKEN=xxx -e SWITCHBOT_SECRET=yyy mcp-switchbot:latest许可证
该项目在MIT许可证下发布。
相关链接
来源:
