Find anything you own — a self-hosted home inventory with a REST API and an MCP server.
594
Try the demo · Install · Help · Discord
Ferret is a home inventory you run yourself. Your household's properties, rooms and boxes; the things in them with photos, receipts and manuals; warranties, maintenance and stock — all on your own server, shared with the people you live with. And when you need something, Ferret tells you where it is.
Add things fast, label boxes, find anything, keep receipts and warranties, schedule maintenance, track stock and the shopping list, remember what you lent, and print an insurance report. Claude can do all of it too, over MCP.
![]() Add things fast Snap a photo, scan a barcode, or photograph a whole room and pick what to keep. |
![]() Boxes and QR labels Print labels for boxes and shelves; scan one to see what's inside. |
![]() Find anything Search by name, place or meaning — or just ask, “where's the drill?” |
![]() Receipts and warranties Keep receipts and manuals with each thing, and hear before a warranty runs out. |
![]() Maintenance Filters, tune-ups and checks on a schedule, with reminders when they're due. |
![]() Stock and shopping Track what runs out and keep the shopping list in step. |
![]() Lending Remember who borrowed the saw, and since when. |
![]() Insurance report Everything you own and what it's worth, ready for a claim, plus recall checks. |
![]() API and MCP A REST API for scripts, and an MCP server so Claude can look things up and add them. |
curl -O https://raw.githubusercontent.com/ferret-project/ferret/main/compose.yaml
curl -o .env https://raw.githubusercontent.com/ferret-project/ferret/main/.env.example
# In .env: AUTH_SECRET and FILES_KEY (each: openssl rand -base64 32), and PUBLIC_URL
docker compose up -d
The image is on GitHub's registry
(ghcr.io/ferret-project/ferret) and Docker Hub
(ferretproject/ferret) — the same tags on both (latest, or a release like 2026.11.2), for x86-64 and 64-bit ARM.
Then open PUBLIC_URL; the first account made is the server admin. Keep a copy of FILES_KEY somewhere safe —
without it, uploaded files can't be read. Behind a reverse proxy, set TRUSTED_PROXIES to its address.
The help is built in at /docs: installing,
every setting,
AI, backups
and connecting Claude.
Ferret has an MCP server built in at /mcp, so Claude (or any MCP client) can use your inventory for you:
Make a key in Ferret (Household & settings → Claude & API → New key), then:
claude mcp add --transport http ferret https://ferret.example.com/mcp --header "Authorization: Bearer ferret_…"
Other clients that speak Streamable HTTP take the same address and header (X-API-Key: ferret_… works too):
{
"mcpServers": {
"ferret": {
"type": "http",
"url": "https://ferret.example.com/mcp",
"headers": { "Authorization": "Bearer ferret_…" }
}
}
}
Clients that only start a local program and talk to it over stdio (Docker's MCP Toolkit, desktop apps' config files)
can use the small bridge in contrib/mcp-bridge: it forwards each message to your Ferret with the
key. Ferret is also listed in the MCP Registry as
io.github.ferret-project/ferret.
What Claude can do (40 tools):
| Find | search by words and meaning, ask questions answered from receipts and manuals, items, places, history, recently deleted |
| Add and change | add items (also from a photo, or a whole room's photos), update, move, delete and restore; properties and rooms |
| Upkeep | maintenance by date or by use (odometer, engine hours), warranties and claims, service providers |
| Household | stock and the shopping list, lending, barcodes, collections, the insurance report and coverage check, what needs attention |
Safe by design. A key acts for one person in one household, can be read-only (Claude can look and ask, but the tools that change things aren't offered) and can expire; revoke it any time. Viewers' keys are always read-only. Deleted things wait 30 days in Recently deleted, and nothing a model suggests from a photo or document is applied until someone confirms it.
Requirements: Node 26+, pnpm 10 (npm install -g corepack && corepack enable).
cp .env.example .env # AUTH_SECRET and FILES_KEY, as above
pnpm install
pnpm dev # server on :8787, web app on :5173
pnpm test
pnpm typecheck
| Path | What |
|---|---|
apps/server | Hono API, Better Auth, Drizzle + SQLite; MCP server; adapters behind ports (src/ports.ts) |
apps/web | React 19 + Vite + Tailwind v4 + FlyonUI PWA |
apps/docs | The help (VitePress), served at /docs |
packages/shared | Zod schemas and helpers shared by the server and the web app |
MIT. Questions, ideas or something odd? Come say hi on Discord.

Content type
Image
Digest
sha256:439abc208…
Size
151.8 MB
Last updated
about 3 hours ago
docker pull ferretproject/ferret