mcpField
G
Govee

Govee

本地服务
github.com/evefromwayback其他019 周前更新

关于 Govee

Govee 是用于发现和控制 Govee 灯具、插座及家电的 MCP 服务和命令行工具,可按设备名称操作。它优先通过局域网控制可连接的灯具,并在需要时使用云端 API。

主要功能

  1. 01局域网优先,云端回退
  2. 02按名称发现设备
  3. 03控制电源、亮度、颜色和色温
  4. 04读取设备状态并应用场景
  5. 05批量控制设备组
  6. 06限制云端请求频率

适用场景

  1. 01无需云端连接,在本地控制灯具
  2. 02通过云端 API 管理插座和家电
  3. 03为一组设备应用设置或场景

MCP 相关

向 MCP 客户端提供 Govee 设备发现、状态读取、控制、场景和设备组操作工具。支持局域网与云端传输,并优先为可连接的灯具选择局域网。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"evefromwayback-govee": {
"command": "uvx",
"args": [
"govee-mcp"
],
"env": {
"GOVEE_API_KEY": "<GOVEE_API_KEY>"
}
}
}
}
启动命令uvx govee-mcp
需要配置的环境变量
GOVEE_API_KEY密钥Govee Developer API key (Govee Home app: Profile > About Us > Apply for API Key). Needed for cloud control and non-LAN devices; LAN-only works without it.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypigovee-mcp0.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

govee-mcp

一款 LAN 优先、云端备用的 Govee 智能设备模型上下文协议(MCP)服务。让 AI Agent 或任何 MCP 客户端连接到你的 Govee 灯具、插座和家电,并按名称控制它们。

它专为在家庭网络中运行而构建。灯具优先通过本地 LAN 控制(速度快、无需联网、没有速率限制);对于插座、家电以及任何无法通过 LAN 访问的设备,则回退到 Govee 云 API。

状态与初衷

这是一个 v0 版本,能在我自己的网络中正常工作。我分享它的初衷是:“这是一个能在我的家庭网络中与 Agent 配合使用的工具,拿去用吧,按你的需要改造,并根据情况加强安全性。”它不是受支持的产品。欢迎提交问题和拉取请求,但请将它视为一个起点,而不是一个完成的成品。

它能做什么(v0)

  • 发现你的设备(云账户列表加 LAN 扫描),并通过易记名称寻址。
  • 控制电源、亮度、RGB 颜色和白光色温。
  • 读取设备当前状态(电源、亮度、颜色)。
  • 列出并应用动态场景(预设效果),按设备实时获取(仅限云端)。
  • 将设备分组,让一条命令(开/关、颜色、场景、状态)应用于组内所有设备。
  • LAN 功能可用的灯具优先通过 LAN 控制,其他设备则回退到云端。
  • 通过客户端保护机制,遵守 Govee 公布的云端限制(每分钟 100 次请求,每天 10000 次)。

它暂时还不能做什么(“加强安全性”清单)

  • 蓝牙温湿度传感器(例如 H5075)。这些设备通过 BLE 读取,而非云端或 LAN API;这是最值得优先实现的功能。
  • 分段颜色、音乐模式和 DIY 效果。当前支持场景;这些是云端剩余的功能。
  • 实时推送状态(Govee 的 AWS IoT 通道)。

这些功能是刻意留待后续扩展的。

对比

现有的 Govee MCP 服务都比较简单:一个仅支持云端,只能控制一个硬编码设备,并提供三个工具;另一个仅支持 LAN,且只能控制灯具。这个服务支持多设备发现、自动选择两种传输方式、读取设备状态,以及处理云端速率限制。

要求

  • Python 3.10 或更高版本。
  • 用于云端控制的 Govee API 密钥(可选,但插座、家电和非 LAN 设备需要此密钥)。在 Govee Home 应用中获取:依次进入 Profile、About Us、Apply for API Key。
  • 若要使用 LAN 控制:在 Govee Home 应用中为每台设备启用 “LAN Control”,并确保网络允许 UDP 端口 4001、4002 和 4003 通信。

安装

从源代码安装:

git clone https://github.com/evefromwayback/govee-mcp.git
cd govee-mcp
pip install -e .

这会安装一个 govee-mcp 命令。若要在不安装的情况下运行:

PYTHONPATH=src python3 -m govee_mcp

配置

将 .env.example 复制为 .env,并填写所需内容;也可以在 MCP 客户端配置中设置这些变量。

变量默认值用途
GOVEE_API_KEY(none)云 API 密钥。没有此密钥时,服务仅运行 LAN 控制。
GOVEE_PREFER_LANtrue设备可通过两种方式访问时,优先使用 LAN 而非云端。
GOVEE_LAN_ENABLEDtrue启用 LAN 传输。
GOVEE_CLOUD_ENABLEDtrue启用云端传输(还需要 API 密钥)。
GOVEE_LAN_SCAN_IPS(none)以逗号分隔的设备 IP 地址;组播不稳定时可直接扫描这些地址。
GOVEE_LAN_DISCOVERY_TIMEOUT2等待 LAN 发现响应的秒数。
GOVEE_REQUEST_TIMEOUT10云端 HTTP 请求超时秒数。
GOVEE_DEVICE_CACHE_TTL86400重新发现设备前缓存设备列表的秒数。运行 govee refresh 可提前更新。
GOVEE_CACHE_ENABLEDtrue将设备列表缓存到磁盘,让大多数命令跳过发现过程。
GOVEE_CACHE_PATH~/.cache/govee-mcp/devices.json磁盘设备缓存的写入位置。

命令行用法

服务器附带一个小型 CLI,并使用相同的引擎,因此在配置 MCP 客户端之前,这是确认一切正常的最快方式。先运行 doctor。

govee doctor                   # check key, cloud, and LAN connectivity
govee devices                  # list devices (instant, from cache)
govee refresh                  # re-scan devices and show current state
govee state                    # full current state for every device
govee state "Desk Lamp"        # full current state for one device
govee on "Desk Lamp"
govee off "Desk Lamp"
govee brightness "Desk Lamp" 40
govee color "Desk Lamp" 255 0 0
govee temp "Desk Lamp" 4000
govee scenes "Desk Lamp"       # list this device's scenes
govee scene "Desk Lamp" "Sunrise"
govee groups                   # list device groups
govee group "Living Room" "Bulb 1" "Bulb 2"   # create or replace a group
govee ungroup "Living Room"    # delete a group

运行 govee help,或不带参数直接运行 govee,即可查看命令参考。doctor 会报告密钥是否已加载、云账户中有多少设备,以及有多少设备通过 LAN 响应,并提示缺少的内容。如果 govee 不在 PATH 中,请改用 python3 -m govee_mcp.cli ...。

控制命令中的任何设备名称也可以是组名。使用 govee group "Living Room" "Bulb 1" "Bulb 2" 定义一个组,然后运行 govee on "Living Room"、govee color "Living Room" 255 0 0 或 govee state "Living Room",即可对组中的所有设备应用操作。组存储在 ~/.config/govee-mcp/groups.json 中(可通过 GOVEE_GROUPS_PATH 覆盖)。

govee devices 会立即返回:它列出缓存中的设备,不会进行实时调用。govee refresh 会重新扫描设备,然后打印所有设备的实时状态。govee state(无论是否带名称)始终执行实时读取。

连接 MCP 客户端

Claude Desktop(claude_desktop_config.json),已安装的命令:

{
  "mcpServers": {
    "govee": {
      "command": "govee-mcp",
      "env": { "GOVEE_API_KEY": "your-key-here" }
    }
  }
}

从源代码运行:

{
  "mcpServers": {
    "govee": {
      "command": "python3",
      "args": ["-m", "govee_mcp"],
      "env": {
        "GOVEE_API_KEY": "your-key-here",
        "PYTHONPATH": "/absolute/path/to/govee-mcp/src"
      }
    }
  }
}

与 Hermes Agent 搭配使用

Hermes Agent 内置 MCP 客户端,因此可直接接入此服务器。将它添加到 Hermes 目录后,按名称安装:

hermes mcp install govee

如需手动配置,请将它添加到 Hermes 配置中的 mcp_servers 下,并将 GOVEE_API_KEY 放入 Hermes 的 .env 文件中(服务器进程会继承该变量):

mcp_servers:
  govee:
    command: govee-mcp

如果启动 PATH 中没有 govee-mcp,请使用其绝对路径或 python3 -m govee_mcp。随附 Hermes 目录清单 hermes/manifest.yaml。

工具

  • list_devices():发现的设备及其名称、支持的操作和传输方式。请先调用此工具。
  • list_groups():设备组及其成员。
  • create_group(name, devices):创建或替换一个组。
  • delete_group(name):删除一个组。
  • get_device_state(name):当前电源、亮度和颜色。
  • refresh():重新扫描设备并返回所有设备的实时状态。
  • set_power(name, on):开启或关闭。
  • set_brightness(name, level):0 到 100。
  • set_color(name, red, green, blue):每个通道为 0 到 255。
  • set_color_temp(name, kelvin):约为 2000(暖色)到 9000(冷色)。
  • list_scenes(name):设备支持的动态场景(预设效果)。
  • set_scene(name, scene):按名称应用场景。请先调用 list_scenes 获取有效名称。

每个控制工具的 name 都可以是单个设备名或组名(参见 list_groups);对组执行操作会将操作应用于其所有成员。

场景(即“模式”:日出、极光等)仅支持云端,并且因设备而异,因此需要 API 密钥;场景会从每台设备实时获取,而不是硬编码。其他操作可通过两种传输方式执行。每个控制工具都会返回结构化结果。只有工具返回 ok=true 时,变更才算成功;工具描述会要求模型在未成功调用的情况下,不得声称变更已经发生。

传输方式的选择机制

每次执行操作时,注册表都会选择一种传输方式:

  1. 如果在 LAN 上发现了设备,则对于其支持的灯具操作,优先使用 LAN 控制(本地且不计量)。
  2. 否则使用云 API。插座、家电以及不支持 LAN 控制的设备必须使用此方式。

设置 GOVEE_PREFER_LAN=false 可始终使用云端;设置 GOVEE_LAN_ENABLED=false 或 GOVEE_CLOUD_ENABLED=false 可完全禁用相应的传输方式。

API 条款及何时需要密钥

Govee 的云端 Developer API 免费提供,但据 Govee 说明,仅限非商业用途。你不得将其用于营利目的,也不得向任何人收取基于它构建的实现的费用。此限制适用于云服务,并约束密钥的提供方,而非此代码。个人在家使用以及免费分享此项目都没有问题。请勿在未与 Govee 商定商业条款的情况下,使用免费密钥构建付费产品。请参阅 Govee 的 API 服务条款:https://app-h5.govee.com/common/api-service-item

你并非总是需要密钥:

  • LAN 模式无需密钥,也不会联系 Govee 的服务器。如果你只有灯具,请在每台灯具上启用 LAN Control,并使用 GOVEE_CLOUD_ENABLED=false 运行。
  • 通过密钥,服务才能连接 Govee 未通过 LAN 暴露的设备(插座、家电),在灯具无法通过 LAN 连接时提供备用方案,并从你的账户获取易读名称和功能信息。仅靠 LAN 发现只能返回 MAC、IP 和型号。

安全说明,以及采用 vendoring 而非克隆

  • 此服务不会将任何第三方设备库作为运行时依赖。这里根据 Govee 的公开协议文档,重新实现了 Govee LAN 和云端协议。唯一的运行时依赖是官方 MCP SDK(MIT)。这使供应链攻击面极小:你运行的只有自己的代码和一个广为人知的 SDK。
  • 如果之后要通过现有 Govee 库扩展此项目(例如支持蓝牙传感器),优先选择 vendoring 一份固定版本且经过检查的副本,而不是在运行时依赖它。Vendoring 意味着你可以准确了解运行的代码,代码不会在你不知情的情况下发生变化,而且你可以精简到所需内容。代价是你需要负责更新。只 vendoring 采用宽松许可证的代码,因为 vendoring copyleft 代码会导致此项目改用相应许可证。
  • 你的 API 密钥从环境变量读取,绝不会被记录到日志中。请勿提交你的 .env。
  • LAN 控制在本地网络上使用未经身份验证的 UDP,这是 Govee LAN API 的工作方式。请将 IoT 设备放在可信或隔离的网络中。
  • 不收集遥测数据。此服务只与你的设备通信,并在使用时调用 Govee 的 API。

测试

pip install -e ".[test]"
pytest

测试会模拟云端 HTTP 层,并通过 UDP 运行本地的 Govee 设备模拟器,因此无需 API 密钥或真实硬件。

许可证和致谢

MIT。请参阅 LICENSE。

这些协议根据 Govee 公开的 LAN 指南和 Developer API v2 文档实现。感谢率先探索这片领域的开源项目(govee2mqtt 和 govee-led-wez、homebridge-govee,以及 Govee BLE 传感器项目)。没有复制它们的代码;它们仅作为参考来源,在此致谢。

路线图

  • v1:读取蓝牙传感器数据(温度和湿度)、设置分段颜色、音乐模式,以及可选的实时状态。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。