mcpField
P
PetKit

PetKit

本地服务
github.com/dirkjanfaber其他13 天前更新

关于 PetKit

PetKit 是面向 Fresh Element Solo 智能喂食器的非官方 MCP 服务,供用户查看设备状态并管理喂食。它提供设备级喂食记录,并支持立即出粮和调整喂食计划。

主要功能

  1. 01查看喂食器状态与设置
  2. 02检查当天喂食记录
  3. 03立即出粮
  4. 04更改喂食器数值设置
  5. 05跳过或恢复计划喂食

适用场景

  1. 01检查喂食器的食物与电池状态
  2. 02查看设备已完成的喂食记录
  3. 03远程投放指定份量的食物
  4. 04跳过或恢复当天的一餐

MCP 相关

将 PetKit 云 API 操作作为 MCP 工具提供。支持 stdio 和 HTTP 连接,也可通过 OAuth 配置供远程 Claude 客户端使用。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"dirkjanfaber-mcp-server-petkit": {
"command": "npx",
"args": [
"-y",
"mcp-server-petkit"
],
"env": {
"PETKIT_EMAIL": "<PETKIT_EMAIL>",
"PETKIT_PASSWORD": "<PETKIT_PASSWORD>",
"PETKIT_REGION": "<PETKIT_REGION>",
"PETKIT_TIMEZONE": "<PETKIT_TIMEZONE>"
}
}
}
}
启动命令npx -y mcp-server-petkit
需要配置的环境变量
PETKIT_EMAILEmail address of your PetKit account
PETKIT_PASSWORD密钥Password of your PetKit account
PETKIT_REGIONRegion name exactly as shown in the PetKit app (e.g. "Netherlands", "United States")
PETKIT_TIMEZONEIANA timezone (e.g. "Europe/Amsterdam"); defaults to the host's timezone

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

安装包
npmmcp-server-petkit0.4.0

工具

5

收录的工具列表 · 更新于 3 天前

此工具无需参数。

详细介绍

mcp-server-petkit

CI

适用于 PetKit 云 API 的 MCP(Model Context Protocol)服务。将 Fresh Element Solo(设备类型 D4)的喂食器状态和控制功能作为 MCP 工具开放。

免责声明: 本项目与 PetKit 无关,也未获其认可或以任何方式与其关联。这是由一位硬件和软件用户开发的独立社区集成项目。PetKit 和 Fresh Element Solo 是其各自所有者的商标。使用本软件包的风险由您自行承担。底层 API 并非官方 API,由社区通过逆向工程实现;它可能随时变更或失效,恕不另行通知。

工具

工具描述
list_feeders列出所有 Fresh Element Solo 喂食器及其实时状态(食物、电池、干燥剂状态,锁定、灯光、声音设置,以及今日喂食总量)
feed_now立即投放食物
update_feeder_setting更改数值设置(儿童锁、指示灯、投放提示音、缺粮警报等)
skip_scheduled_feed跳过今天的一次计划喂食(d4/removeDailyFeed),不影响重复计划
restore_scheduled_feed撤销今天的一次跳过操作(d4/restoreDailyFeed)
喂食量

D4 仅接受以下五种份量:10、20、30、40、50。

喂食总量按设备统计,而非按猫统计

list_feeders 还会返回 feedPlanToday:喂食器每周计划中的今日计划喂食(来自 d4/device_detail 的 multiFeedItem),每项包含易读的 time、skip_scheduled_feed 所需的 feedTime(自午夜起的秒数)、以 feed_now 所用单位表示的份量 amount,以及餐次名称 name。

list_feeders 还会返回 dispenseLogToday(来自 d4/dailyFeeds):今天已完成的所有投放记录,按时间从早到晚排列。dispensedAt 是投放在您所在时区实际发生的时间(dispensedAtUtc 为 UTC),而 feederClock 是喂食器自身时钟显示的时间;如果该时钟不准确,二者就会不同。clockOffsetMinutes 根据最近一次投放汇总时钟偏差,并四舍五入到 15 分钟。例如,喂食器未切换到冬令时、每餐都提前一小时投放时,该值为 60;当天首次投放之前则为 null。PetKit 没有可直接读取喂食器时钟的接口。给喂食器断电再通电后,它会同步到新时间。

list_feeders 的 fedToday/fedTodayScheduled/fedTodayExtra/fedTodayPlanned/dispensesToday/feedTimesToday 字段反映每台实体喂食器投放的食物量——PetKit 无法将投放记录归属到特定的猫。如果您的猫共用彼此的食盆,或会偷吃彼此的食物,这些数字就无法说明某只猫实际吃了多少。

常见设置键
键含义
manualLock儿童锁(0/1)
lightMode指示灯
feedSound投放提示音(0/1)
foodWarn缺粮警报(0/1)

设备通过 list_feeders 报告的其他数值键也可能有效,但尚未确认。

配置

启动服务前,请设置以下环境变量:

export PETKIT_EMAIL="[email protected]"
export PETKIT_PASSWORD="yourpassword"
export PETKIT_REGION="Netherlands"   # must match the exact region name shown in the PetKit app
export PETKIT_TIMEZONE="Europe/Amsterdam"   # optional, defaults to the host's own timezone

注意: PetKit 账户密码长度限制为 6-14 个字符。密码过长会导致登录失败,并显示通用的“用户名或密码错误”提示,无法与密码确实错误的情况区分。如果登录意外失败,请先检查密码长度。

在 Claude Desktop 中使用

将以下内容添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "petkit": {
      "command": "npx",
      "args": ["mcp-server-petkit"],
      "env": {
        "PETKIT_EMAIL": "[email protected]",
        "PETKIT_PASSWORD": "yourpassword",
        "PETKIT_REGION": "Netherlands"
      }
    }
  }
}

远程使用:claude.ai 连接器(HTTP + OAuth)

如需从 claude.ai 和 Claude 移动应用使用该服务,请在一台始终开机的设备上以 HTTP 模式运行,并将其添加为自定义连接器。claude.ai 从互联网连接,因此服务需要一个公开的 https:// URL。Cloudflare Tunnel 或 Tailscale Funnel 可以提供这样的 URL,无需在路由器上开放端口(见下文)。

HTTP 模式为单用户模式:连接 Claude 时,服务会显示一个页面,要求输入你的所有者密码短语。知道密码短语的人都可以授权客户端,而持有令牌的人都可以投放食物或更改喂食计划——请选择一个足够强的密码短语。

npx mcp-server-petkit --http   # or MCP_TRANSPORT=http
变量默认值
MCP_PUBLIC_URL(必填)claude.ai 访问该服务所用的 https:// URL
MCP_OWNER_PASSWORD(必填)用于授权 Claude 的密码短语,至少 12 个字符
MCP_HOST127.0.0.1监听的接口;Docker 镜像会设置为 0.0.0.0
MCP_PORT3000
MCP_STATE_FILE~/.mcp-server-petkit/oauth-state.json已注册的客户端和刷新令牌哈希,以便 Claude 在重启后保持连接

以及 配置 中的 PETKIT_* 变量。

Docker(例如,在 Raspberry Pi 上)

每个版本都会发布适用于 amd64、arm64 和 arm/v7(32 位 Raspberry Pi OS)的 ghcr.io/dirkjanfaber/mcp-server-petkit,并以版本号和 latest 标记。将 PetKit 和 MCP_* 设置放入 compose 文件旁的 .env 文件中(chmod 600 .env),并通过以下两种方式之一为服务提供公开 URL。

ZeroTier 或普通 Tailscale 等私有覆盖网络本身并不足够:claude.ai 从 Anthropic 的服务器连接,而不是从你的设备连接。

选项 1:Cloudflare Tunnel(需要在 Cloudflare 上拥有域名)

将 Cloudflare Tunnel 与服务一起运行,无需发布任何端口:在 Cloudflare 控制面板中,前往 Zero Trust → Networks → Tunnels,创建一个 Cloudflared 隧道,并将其公共主机名指向 http://petkit-mcp:3000(服务类型为 HTTP)。将隧道令牌放入 .env,变量名为 TUNNEL_TOKEN:

# docker-compose.yml
services:
  petkit-mcp:
    image: ghcr.io/dirkjanfaber/mcp-server-petkit:latest   # or pin a version, e.g. :0.3.0
    restart: unless-stopped
    env_file: .env   # PETKIT_*, MCP_PUBLIC_URL, MCP_OWNER_PASSWORD
    volumes:
      - petkit-data:/data
  cloudflared:
    image: cloudflare/cloudflared:latest
    command: tunnel run
    restart: unless-stopped
    environment:
      TUNNEL_TOKEN: ${TUNNEL_TOKEN}
volumes:
  petkit-data:

不要在主机名前启用 Cloudflare Access:claude.ai 无法通过其登录页面,而所有者密码短语已经为服务提供保护。

选项 2:Tailscale Funnel(无需域名)

Tailscale Funnel 会为 Pi 提供一个公开的 https://<machine>.<tailnet>.ts.net URL。它可以与 ZeroTier 或其他 VPN 一起正常运行。

  1. 在 Pi 上安装 Tailscale 并登录: curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up

  2. 在 Tailscale 管理控制台中,启用 MagicDNS 和 HTTPS Certificates(位于 DNS 下),并允许该设备使用 Funnel。如果尚未允许,tailscale funnel 会提供启用链接。

  3. 仅在环回接口上发布服务端口,这样 Funnel 就是唯一的访问途径:

    # docker-compose.yml
    services:
      petkit-mcp:
        image: ghcr.io/dirkjanfaber/mcp-server-petkit:latest
        restart: unless-stopped
        env_file: .env   # PETKIT_*, MCP_PUBLIC_URL, MCP_OWNER_PASSWORD
        ports:
          - "127.0.0.1:3000:3000"
        volumes:
          - petkit-data:/data
    volumes:
      petkit-data:
    
  4. 启动 Funnel。此设置会在重启后保留: sudo tailscale funnel --bg 3000。tailscale funnel status 会显示公开 URL。将其放入 .env,变量名为 MCP_PUBLIC_URL,然后运行 docker compose up -d。

URL 中包含设备名称,因此如果想使用更好看的名称,请先重命名设备。之后更改 URL 时,需要更新 MCP_PUBLIC_URL 并重新连接 Claude。

两种方式均适用

连接 Claude 前,请检查公开 URL:

curl https://<your public host>/.well-known/oauth-authorization-server

它应返回 JSON,且其中的 issuer 与 MCP_PUBLIC_URL 一致。刚启用的 Funnel 可能需要一分钟才能开始响应。

使用 docker compose pull && docker compose up -d 更新。如果要自行构建镜像,请将 image: 替换为 build: https://github.com/dirkjanfaber/mcp-server-petkit.git。

该服务会信任一个代理跳数(来自前置隧道的 X-Forwarded-For),用于速率限制。不要同时将服务端口直接发布到互联网。

连接 Claude

在 claude.ai 中:Settings → Connectors → Add custom connector,URL 为 https://<your public host>/mcp。Claude 会自行注册,打开密码短语页面; 你允许连接后,工具便会显示在 claude.ai 和移动应用中。

**PetKit 每个账户仅允许一个会话。**服务端登录会让 PetKit 应用退出登录 (反之亦然);发生这种情况时,服务端会自动重新登录,但每当服务端重启或 会话失效时,都可能需要你重新登录应用。在同一账户下运行 stdio 服务、 Node-RED 的 PetKit 节点或第二个 HTTP 实例,会导致它们轮流让彼此退出登录。

参考资料

评论

支持 Markdown

第一次接触 MCP?

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

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