
PetKit
io.github.dirkjanfaberv0.3.0Updated Oct 2, 2026
Unofficial MCP server for PetKit smart feeders: status, feeding history and schedule control.
Overview
Unofficial MCP server for PetKit Fresh Element Solo smart feeders, letting an assistant read feeder status and feeding history and control feeding schedules.
- What it does
- Connects to the PetKit cloud API and exposes tools for the Fresh Element Solo feeder (device type D4). list_feeders returns live state such as food, battery and desiccant status, lock, light and sound settings, today's feed totals and the day's scheduled meals. feed_now dispenses food immediately in fixed portion sizes, update_feeder_setting changes numeric settings such as child lock or shortage alarm, and skip_scheduled_feed and restore_scheduled_feed skip or undo one of today's scheduled meals without touching the recurring plan.
- When to use it
- Use it when you want an assistant to check a PetKit feeder's status and feeding history or to dispense food and adjust today's feeding schedule from a chat client. It suits owners of a Fresh Element Solo who accept an unofficial, community-built integration.
- Requirements
- Runs locally as an npm package (npx mcp-server-petkit) over stdio, or in HTTP mode with --http or MCP_TRANSPORT=http. Needs a PetKit account: PETKIT_EMAIL, PETKIT_PASSWORD, PETKIT_REGION, and optionally PETKIT_TIMEZONE. HTTP mode additionally needs MCP_PUBLIC_URL and MCP_OWNER_PASSWORD, with optional MCP_HOST, MCP_PORT and MCP_STATE_FILE. A Docker image is published for amd64 and arm64.
Installation
In SourceWeft
- Open PetKit in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
mcp-server-petkit
MCP (Model Context Protocol) server for the PetKit cloud API. Exposes feeder status and control for the Fresh Element Solo (device type D4) as MCP tools.
Disclaimer: This project is not affiliated with, endorsed by, or in any way associated with PetKit. It is an independent, community-developed integration created by a happy user of their hardware and software. PetKit and Fresh Element Solo are trademarks of their respective owner. Use of this package is at your own risk. The underlying API is unofficial and reverse-engineered by the community - it may change or break without notice.
Tools
Feed amounts
The D4 only accepts these five portion sizes: 10, 20, 30, 40, 50.
Feed totals are per device, not per cat
list_feeders also returns feedPlanToday: today's scheduled meals from the feeder's weekly plan (d4/device_detail's multiFeedItem), each with its readable time, the feedTime (seconds since midnight) that skip_scheduled_feed takes, the portion amount in feed_now's units, and the meal name.
list_feeders' fedToday/fedTodayScheduled/fedTodayExtra/fedTodayPlanned/dispensesToday/feedTimesToday fields reflect what each physical feeder dispensed - PetKit has no way to attribute a dispense to a specific cat. If your cats share or steal from each other's bowls, these numbers won't tell you what any one cat actually ate.
Common setting keys
Other numeric keys the device reports via list_feeders may also work but are unconfirmed.
Configuration
Set the following environment variables before starting the server:
Note: PetKit account passwords are capped at 6-14 characters. A longer password fails login with a generic "incorrect username or password" error indistinguishable from an actually-wrong one - if login fails unexpectedly, check that first.
Usage with Claude Desktop
Add to your claude_desktop_config.json:
Remote use: claude.ai connector (HTTP + OAuth)
To use the server from claude.ai and the Claude mobile apps, run it in HTTP mode on an
always-on machine and add it as a custom connector. claude.ai connects from the
internet, so the server needs a public https:// URL - a Cloudflare Tunnel or
Tailscale Funnel gives you one without opening ports on your router.
HTTP mode is single-user: when you connect Claude, the server shows a page asking for your owner passphrase. Anyone who knows it can authorize a client, and anyone with a token can dispense food or change the feeding plan - pick a strong one.
plus the PETKIT_* variables from Configuration.
Docker (e.g. on a Raspberry Pi)
Each release publishes ghcr.io/dirkjanfaber/mcp-server-petkit for amd64 and arm64,
tagged with the version and latest. With a Cloudflare Tunnel alongside it, no port
needs publishing: create a tunnel in the Cloudflare dashboard, point its public
hostname at http://petkit-mcp:3000, and put its token in .env next to the PetKit
and MCP_* settings:
Update with docker compose pull && docker compose up -d. To build the image yourself
instead, replace image: with build: https://github.com/dirkjanfaber/mcp-server-petkit.git.
The server trusts one proxy hop (X-Forwarded-For from cloudflared) for rate limiting.
Don't also publish its port directly to the internet.
Connecting Claude
In claude.ai: Settings → Connectors → Add custom connector, with URL
https://<your public host>/mcp. Claude registers itself, opens the passphrase page,
and once you allow it, the tools show up in claude.ai and the mobile apps.
PetKit allows one session per account. The server's login signs the PetKit app out (and vice versa); it re-logs in on its own when that happens, but expect the app to ask you to log in again whenever the server restarts or its session lapses. Running the stdio server, Node-RED's PetKit nodes, or a second HTTP instance on the same account makes them take turns signing each other out.
References
- Actively maintained reference client (Python) - https://github.com/Jezza34000/py-petkit-api - source of the confirmed-working client fingerprint and current endpoint constants
- Sibling Node-RED package with fuller protocol notes -
node-red-contrib-petkit'sCLAUDE.md
Source: README.md at commit 7c806aa
Tools
0Version history
1- v0.3.0LatestOct 2, 2026

