Homebox home inventory: search, intake, warranties, attachments, locations, tags, QR labels
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server over the
Homebox REST API, so an MCP client like Claude can
work with your home inventory in plain language: "where is my impact driver",
"what's in Tote B-3", "which warranties expire this year", "add this drill β
here's a photo of the receipt and the model number". It answers questions,
performs intake (create an item, attach the manual/receipt, tag and file it),
manages attachments, and prints QR labels for totes and shelves β no
hand-rolled curl.
You need a running Homebox instance (0.26+, see Requirements) and an API key from Profile β API Keys in the Homebox web UI.
--scope user makes it available from any project. uvx fetches and runs the
published package in an ephemeral environment β nothing to install first.
Add to your client's MCP config (e.g. claude_desktop_config.json):
The module carries PEP 723 inline
dependencies, so it also runs standalone with uv run --script β uv resolves
mcp, httpx, pillow, and pillow-heif into an ephemeral venv on first run.
Instead of env vars, drop credentials in a .env file next to the module:
Then register the absolute path to the module (or to server.py, a
compatibility shim kept for older registrations):
The server reads config from the environment, falling back to the sibling
.env (resolved relative to the script, so the absolute-path invocation still
finds it). The credential never enters the MCP config β it stays in the
gitignored .env.
/items, /locations, /labels) and are rejected on the first tool call
with a clear error rather than failing cryptically.hb_).uv, or any Python β₯ 3.10 environment
where you install homebox-mcp yourself.All configuration is via environment variables (or the sibling .env for the
clone workflow):
| Variable | Required | Purpose |
|---|---|---|
HOMEBOX_URL | yes | Base URL of your Homebox instance (no trailing slash). |
HOMEBOX_TOKEN | yes | Homebox API key (hb_β¦). |
HOMEBOX_ALIAS_FIELD | no | Name of one custom field to treat as a stable item identifier β items can be resolved by it, summaries surface it, and field_index defaults to it. Unset = resolve by assetId/name only. See Conventions. |
HOMEBOX_LABEL_DIR | no | Where generate_label / qrcode save output. Default: current working directory. |
~39 tools. Reads accept a fuzzy identifier (assetId, alias field, exact
name, then first keyword match). Write tools require an exact identifier
(assetId, alias field, or exact name) β a typo or an ambiguous match is refused
rather than mutating the wrong item. Locations are referenced by name or
/-separated path (e.g. Garage/Shelf 1) to disambiguate duplicate names.
| Tool | Purpose |
|---|---|
search_items(query?, tags?, limit=20) | Search items by keyword and/or tag names (AND of both); returns each with assetId, location, and the alias field. |
get_item(identifier) | Full detail for one item: location path, identity, purchase, warranty, custom fields, tags, attachments. |
list_locations() | The full location tree as an indented outline. |
location_contents(location, recursive=False) | Items directly in a location plus its sub-location names; recursive=True walks the whole subtree and returns every nested item with its full location path. |
list_tags(detail=False) | All tag (label) names; detail=True returns full objects (description, color, icon, parent tag). |
warranties_expiring(before?, after?, lifetime=False) | Items whose warranty expires in afterβ¦before (after defaults to today, excluding already-expired); lifetime=True lists lifetime-warranty items. |
| Tool | Purpose |
|---|---|
create_item(name, location?, quantity=1, manufacturer?, model?, serial?, purchase_price?, purchase_date?, purchase_from?, warranty_expires?, notes?, fields?, tags?) | Create and enrich an item in one call. fields is a dict typed by JSON value (stringβtext, numberβnumber [integer-coerced], boolβboolean); tags must already exist. Returns the new assetId. |
import_csv(csv_text) | Bulk-create items and locations from a Homebox CSV in one multipart request. HB.location auto-creates the path hierarchy; recognizes HB.name, HB.tags, HB.quantity, HB.serial_number, HB.model_number, HB.manufacturer, HB.notes, HB.purchase_*, HB.warranty_expires, HB.field.<name>. |
create_location(name, parent?, description?) | Create a location (tote/bin/shelf) to bootstrap a new storage spot; description doubles as a contents manifest. |
barcode_lookup(code) | UPC/EAN β name/manufacturer/model (optional, for boxed goods). |
duplicate_item(identifier, copy_attachments=False, copy_custom_fields=True, copy_maintenance=False, prefix="Copy of ") | Duplicate an item ("I bought a second one"). Copied custom fields include the alias field verbatim β give the copy its own value after. |
All write tools resolve by exact identifier and preserve everything you don't touch (a full-body PUT that echoes the rest of the item back β see gotchas).
| Tool | Purpose |
|---|---|
set_item(identifier, new_name?, description?, notes?, quantity?, purchase_price?, purchase_date?, purchase_from?, insured?, archived?, fields?) | General item editor: rename, notes, quantity, purchase info, insured/archived flags, custom fields. Quantity-only edits use a partial PATCH. |
move_item(identifier, location) | Move an item to another location (partial PATCH β nothing else changes). |
set_warranty(identifier, expires?, lifetime?, details?) | Set warranty end date, lifetime flag, and terms summary. |
set_identity(identifier, manufacturer?, model_number?, serial_number?) | Set manufacturer / model / serial (e.g. after a nameplate photo reveals them). |
set_fields(identifier, fields) | Create or overwrite custom fields (upsert; typed by JSON value type). |
set_tags(identifier, tags, mode="add") | Add / remove / replace tags on an item; unknown tag names are auto-created (partial PATCH). |
set_tag(name, new_name?, description?, color?, icon?, parent?, clear_parent=False) | Edit a tag's own metadata (rename, color, icon, parent tag for grouping) β not what's tagged on an item. Creates the tag if new. |
set_location(location, new_name?, parent?, clear_parent?, description?, notes?, tags?, tags_mode?, entity_type?, asset_id?, fields?) | General location editor: rename, move (or clear_parent to root), tags, notes, entity type, assetId, custom fields. |
mark_sold(identifier, sold_price?, sold_to?, sold_date?, sold_notes?, clear=False) | Record a sale (price/buyer/date/notes) or clear=True to un-sell; pair with set_item(archived=True) to retire the item. |
| Tool | Purpose |
|---|---|
log_maintenance(identifier, name, description?, completed_date?, scheduled_date?, cost?) | Add an entry β "changed the mower oil today" (completed) or "sharpen blades in spring" (scheduled). |
list_maintenance(identifier?, status="both") | Entries for one item, or across the whole inventory ("what maintenance is due?"); status = scheduled / completed / both. |
set_maintenance(entry_id, ...) | Edit an entry β e.g. mark a scheduled one completed by setting completed_date. |
delete_maintenance(entry_id, confirm) | Delete one entry (confirm = its exact name). |
| Tool | Purpose |
|---|---|
inventory_stats(by="totals", start?, end?) | Totals (counts, total value, warranty count), value by location or tag, or purchase-price over time β the cheap way to answer "what's my inventory worth?". |
export_csv(save_to?) | Export the whole inventory as a Homebox CSV (complement of import_csv; quick backup). |
list_custom_fields(field?) | Discover the custom-field schema in use: all field names, or every distinct value of one field. |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/homebox-mcp)<a href="https://allmcps.com/mcp/homebox-mcp"><img src="https://allmcps.com/api/badge/homebox-mcp?style=directory" alt="Homebox MCP on AllMCPs" /></a>