homebox-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOMEBOX_URL | Yes | Base URL of your Homebox instance (no trailing slash). | |
| HOMEBOX_TOKEN | Yes | Homebox API key (hb_…). | |
| HOMEBOX_LABEL_DIR | No | Where generate_label / qrcode save output. Default: current working directory. | |
| HOMEBOX_ALIAS_FIELD | No | Name of one custom field to treat as a stable item identifier. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_itemsA | Search inventory items by name/keyword and/or by tag names (AND of both when both given — e.g. everything tagged "power-tool"). Returns items (not locations) with their immediate location, assetId, and the alias custom field (if $HOMEBOX_ALIAS_FIELD is configured). Use get_item for full detail on one result. |
| get_itemA | Get full detail for one item by assetId (e.g. 000-028), alias custom field, or name (fuzzy fallback: first keyword match). Includes location path, serial, model, purchase, warranty, custom fields, tags, and attachments. |
| list_locationsA | Return the full location tree as an indented outline. |
| location_contentsA | List what is in a location (e.g. a tote or shelf), by location name. Returns the items directly in that location plus any sub-locations (their
names only — not their contents). Set |
| list_tagsA | List all tag (label) names. Set |
| warranties_expiringA | List items whose warranty expires in a date window, or items with a lifetime warranty.
|
| create_itemA | Create an inventory item and enrich it in one call.
|
| attach_documentA | Attach a document to an item OR a location. |
| list_attachmentsA | List an item's (or location's) attachments with their ids — the handle
needed by get_attachment / rename_attachment / delete_attachment.
|
| get_attachmentA | Download one attachment (see list_attachments for ids) to a local path,
so its content — e.g. an attached manual or receipt — can be read.
|
| rename_attachmentA | Update an attachment's title, type (manual/attachment/warranty/receipt/ photo), or primary flag (see list_attachments for ids). Only the args you pass change; the rest is re-sent as-is. |
| import_csvA | Bulk-create items and locations from a Homebox CSV (multipart import). This is the bulk creator for the photo-intake pipeline — one request imports everything, avoiding ~4 API calls per item. Recognized columns: HB.name, HB.location (path e.g. "Garage/Loft" — AUTO-CREATES the hierarchy), HB.tags (must already exist; see list_tags), HB.quantity, HB.serial_number, HB.model_number, HB.manufacturer, HB.notes, HB.purchase_price, HB.purchase_from, HB.purchase_time, HB.warranty_expires, HB.field. (custom fields). A location-only row (HB.location set, contents described elsewhere) creates just the location. After import, call finalize_photos if you attached photos. Returns the count of data rows submitted. |
| create_locationA | Create a LOCATION entity (e.g. a new tote/bin/shelf) to bootstrap a
new storage spot. |
| set_locationA | Edit a LOCATION's metadata (find it by current name or /-path): rename,
|
| set_warrantyA | Set warranty info on an existing item (assetId / alias field / exact name).
|
| set_fieldsA | Create or update custom fields on an existing item (assetId / alias field / exact name).
|
| set_identityA | Set manufacturer/model/serial on an existing item (assetId / alias field / exact name). Only the args you pass change; other fields are preserved. Use when a nameplate/label photo reveals a serial number or a model-number correction after the item was created. |
| move_itemA | Move an item into a location or into another item (assetId / alias field / exact name).
|
| set_itemA | General item editor (assetId / alias field / exact name): rename, edit description/notes/quantity, purchase info, insured/archived flags, and custom fields in one call. Only the args you pass are changed. Quantity-only changes go via a partial
PATCH; anything else uses a full-body PUT that preserves the rest of the
item (the 0.26 PUT-clears gotcha). |
| mark_soldA | Record that an item was sold (assetId / alias field / exact name):
price, buyer, YYYY-MM-DD date, notes — only the args you pass are set.
|
| duplicate_itemA | Duplicate an existing item (assetId / alias field / exact name), e.g.
"I bought a second one". |
| set_tagsA | Add, remove, or replace tags on an existing item (assetId / alias field / exact name).
|
| set_tagA | Create or edit a tag's own metadata — NOT what's tagged on an item (see
set_tags for that). Matches |
| delete_itemA | PERMANENTLY delete an item (assetId / alias field / exact name),
including its attachments. |
| delete_locationA | PERMANENTLY delete a location (name or /-separated path). |
| delete_tagA | PERMANENTLY delete a tag itself (it is removed from every tagged item;
the items survive). |
| delete_attachmentA | PERMANENTLY delete one attachment from an item or location (see
list_attachments for ids). |
| generate_labelA | Save a printable Homebox label PNG (QR + readable name) for a location
or item, e.g. to stick on a tote/bin. |
| qrcodeA | Save a raw QR-code JPEG encoding arbitrary |
| field_indexA | Return {field_value: assetId} for every entity that has the named
custom field — a one-pass index for DEDUPE before a bulk import (q does
not index custom fields, so this scans every entity). |
| finalize_photosA | Finalize after a bulk photo attach: ensure every entity with photos has a primary image, then generate any missing thumbnails. (Wraps the set-primary-photos and create-missing-thumbnails actions, which are always run as a pair.) |
| barcode_lookupA | Look up a UPC/EAN barcode → name/manufacturer/model (optional path for boxed goods). Thin wrapper over GET /products/search-from-barcode. |
| log_maintenanceA | Add a maintenance-log entry to an item (assetId / alias field / exact
name) — e.g. "changed the mower oil today" (completed_date) or "sharpen
blades in spring" (scheduled_date). Dates are YYYY-MM-DD; |
| list_maintenanceA | List maintenance entries — for one item (assetId / alias field / name)
or, with no identifier, across the whole inventory ("what maintenance is
due?"). |
| set_maintenanceA | Edit a maintenance entry (see list_maintenance for ids) — e.g. mark a scheduled entry completed by setting completed_date. Only the args you pass change; the rest of the entry is re-sent as-is (the update is a full PUT). |
| delete_maintenanceA | PERMANENTLY delete one maintenance entry (see list_maintenance for
ids). |
| inventory_statsA | Inventory statistics — the cheap way to answer "what's my inventory
worth?" without scanning items. |
| export_csvA | Export the whole inventory as a Homebox CSV (the complement of
import_csv; also a quick backup). Saves to |
| list_custom_fieldsA | Discover the custom-field schema actually in use: with no arg, all
custom-field NAMES across the inventory; with |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
The item-editing family overlaps substantially: set_item explicitly handles custom fields too, duplicating set_fields, and set_identity/set_warranty/set_tags/move_item/mark_sold all edit the same item with subtle boundaries. set_tag vs set_tags is also easily confused despite the explicit cross-reference. Descriptions steer an agent toward the right tool, but the boundaries are not crisp.
The dominant convention is verb_noun (set_location, delete_attachment, import_csv, list_maintenance), used consistently across most entities. A handful of noun-first outliers (field_index, barcode_lookup, warranties_expiring, qrcode, inventory_stats, location_contents) and singular/plural wobble (set_tag vs set_tags, get_attachment vs list_attachments) are minor deviations that don't hurt readability.
39 tools is heavy for an inventory server, well beyond the 15-tool sweet spot. The broad domain (items, locations, tags, attachments, maintenance, labels, CSV, stats) justifies many tools, but several granular item setters (set_fields, set_identity, set_warranty) could be folded into set_item, and utility tools like qrcode/finalize_photos inflate the surface.
Near-complete CRUD/lifecycle coverage exists for items (create/get/set/delete/duplicate/move/sold), locations, tags, attachments, and maintenance, plus CSV import/export, label generation, stats, and custom-field discovery. Minor gaps remain: no way to delete a custom-field definition, no plain list_items (only search_items), and no user management.