{"name":"io.github.dgahagan/homebox-mcp","slug":"dgahagan-homebox-mcp","title":null,"description":"Homebox home inventory: search, intake, warranties, attachments, locations, tags, QR labels","url":"https://mcp.market/server/dgahagan-homebox-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":36,"stars":6,"forks":2,"downloads_week":325,"last_push_at":"2026-09-18T18:23:08.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/dgahagan/homebox-mcp","website":null,"version":"1.1.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"homebox-mcp","version":"1.1.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Base URL of your Homebox instance (>= 0.26), e.g. https://homebox.example.com","isRequired":true,"format":"string","name":"HOMEBOX_URL"},{"description":"Homebox API key (Profile -> API Keys, starts with hb_)","isRequired":true,"format":"string","isSecret":true,"name":"HOMEBOX_TOKEN"},{"description":"Optional: name of one custom field treated as a stable item identifier for lookups","format":"string","name":"HOMEBOX_ALIAS_FIELD"},{"description":"Optional: directory where label/QR PNGs are saved (default: current directory)","format":"string","name":"HOMEBOX_LABEL_DIR"}]}],"tools":[{"name":"attach_document","description":"Attach a document to an item OR a location. `source` is a local file path or an http(s) URL (downloaded then uploaded). `doc_type` is e.g. manual, attachment, warranty, receipt, photo. `identifier` is assetId/alias/name for an item, or a location name/path (tried as a fallback if no item matches). Set `primary=True` to make a photo the entity's primary image — e.g. a \"this is the spot\" wayfinding","write_action":false,"price_micros":0,"input_schema":null},{"name":"barcode_lookup","description":"Look up a UPC/EAN barcode → name/manufacturer/model (optional path for boxed goods). Thin wrapper over GET /products/search-from-barcode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_item","description":"Create an inventory item and enrich it in one call.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_location","description":"Create a LOCATION entity (e.g. a new tote/bin/shelf) to bootstrap a new storage spot. `parent` is an existing location name or /-separated path (optional); `description` is optional free text, e.g. a contents summary (≤1000 chars). Returns the new location id. For deep paths, prefer import_csv's HB.location auto-create.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_attachment","description":"PERMANENTLY delete one attachment from an item or location (see list_attachments for ids). `confirm` must equal the attachment's exact title.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_item","description":"PERMANENTLY delete an item (assetId / alias field / exact name), including its attachments. `confirm` must equal the item's exact name. There is no undo.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_location","description":"PERMANENTLY delete a location (name or /-separated path). `confirm` must equal the location's exact name. A location that still contains items or sub-locations is refused unless `confirm_nonempty=True` — sub-locations are deleted with it, and its items are ORPHANED to the top level (not deleted). There is no undo.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_maintenance","description":"PERMANENTLY delete one maintenance entry (see list_maintenance for ids). `confirm` must equal the entry's exact name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_tag","description":"PERMANENTLY delete a tag itself (it is removed from every tagged item; the items survive). `confirm` must equal the tag's exact name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"duplicate_item","description":"Duplicate an existing item (assetId / alias field / exact name), e.g. \"I bought a second one\". `prefix` is prepended to the new item's name. Copies custom fields by default; attachments and maintenance log only on request. NOTE: copied custom fields include the alias field verbatim — if you use one, give the copy its own value via set_fields right after. Returns the new item's id and assetId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_csv","description":"Export the whole inventory as a Homebox CSV (the complement of import_csv; also a quick backup). Saves to `save_to` (file path or directory; default: homebox-export.csv in the current directory) and returns the path and row count.","write_action":false,"price_micros":0,"input_schema":null},{"name":"field_index","description":"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). `field_name` defaults to $HOMEBOX_ALIAS_FIELD. assetId may be empty for un-asset'd rows. Deliberately uncapped: a truncated dedupe index causes duplicates, so expect a large result on a large inventory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"finalize_photos","description":"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.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_label","description":"Save a printable Homebox label PNG (QR + readable name) for a location or item, e.g. to stick on a tote/bin. `kind` is \"location\", \"item\", or \"asset\". For location/item, `identifier` is a name or slug (resolved to an id); for asset it's the assetId (e.g. 000-028). Saves to `out_dir` (default: $HOMEBOX_LABEL_DIR, else the current directory). Returns the saved file path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_attachment","description":"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. `save_to` is a directory (keeps a name based on the title) or a full file path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_item","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_csv","description":"Bulk-create items and locations from a Homebox CSV (multipart import).","write_action":false,"price_micros":0,"input_schema":null},{"name":"inventory_stats","description":"Inventory statistics — the cheap way to answer \"what's my inventory worth?\" without scanning items. `by` is: totals — counts (items/locations/tags/users), total purchase price, items with warranty; locations — total value per location; tags — total value per tag; purchase-price — value over time (optional YYYY-MM-DD start/end).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_attachments","description":"List an item's (or location's) attachments with their ids — the handle needed by get_attachment / rename_attachment / delete_attachment. `identifier` is assetId / alias field / name, or a location name/path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_custom_fields","description":"Discover the custom-field schema actually in use: with no arg, all custom-field NAMES across the inventory; with `field`, the distinct VALUES of that field ({\"total\", \"values\"}, capped at `limit`). Useful before set_fields/field_index on an unfamiliar instance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_locations","description":"Return the full location tree as an indented outline.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_maintenance","description":"List maintenance entries — for one item (assetId / alias field / name) or, with no identifier, across the whole inventory (\"what maintenance is due?\"). `status` is \"scheduled\" (upcoming), \"completed\", or \"both\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tags","description":"List all tag (label) names. Set `detail=True` to instead return full tag objects (name, description, color, icon, parent tag name) for auditing tag setup — pair with set_tag to edit any of these.","write_action":false,"price_micros":0,"input_schema":null},{"name":"location_contents","description":"List what is in a location (e.g. a tote or shelf), by location name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_maintenance","description":"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; `cost` is a number. Returns the new entry's id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_sold","description":"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. `clear=True` instead erases all four sold fields (un-sells the item). Other fields are preserved. Pair with set_item(archived=True) if the item should also leave active inventory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_item","description":"Move an item to another location (assetId / alias field / exact name).","write_action":false,"price_micros":0,"input_schema":null},{"name":"qrcode","description":"Save a raw QR-code JPEG encoding arbitrary `data` (e.g. a deep link). For tote labels prefer generate_label (adds the readable name). Saves to `out_dir` (default: $HOMEBOX_LABEL_DIR, else the current directory). Returns the saved file path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"rename_attachment","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_items","description":"Search inventory items by name/keyword and/or by tag names (AND of both when both given — e.g. everything tagged \"power-tool\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_fields","description":"Create or update custom fields on an existing item (assetId / alias field / exact name).","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_identity","description":"Set manufacturer/model/serial on an existing item (assetId / alias field / exact name).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_item","description":"General item editor (assetId / alias field / exact name): rename, edit description/notes/quantity, purchase info, insured/archived flags, and custom fields in one call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_location","description":"Edit a LOCATION's metadata (find it by current name or /-path): rename, `description` (e.g. a contents manifest), notes, tags, custom fields (values typed by JSON type). Only the args you pass change; other fields are preserved. `parent` moves it under another location; `clear_parent=True` moves it to the root. `entity_type` (e.g. \"Item\") converts a mis-created entity — rare. `asset_id` overrides","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_maintenance","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_tag","description":"Create or edit a tag's own metadata — NOT what's tagged on an item (see set_tags for that). Matches `name` case-insensitively against list_tags; creates the tag if it doesn't exist yet. Only the args you pass are changed. `parent` nests this tag under another (existing) tag name, for grouping related tags in the Homebox UI (e.g. several condition-* tags under a \"condition\" parent); pass `clear_par","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_tags","description":"Add, remove, or replace tags on an existing item (assetId / alias field / exact name).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_warranty","description":"Set warranty info on an existing item (assetId / alias field / exact name).","write_action":false,"price_micros":0,"input_schema":null},{"name":"warranties_expiring","description":"List items whose warranty expires in a date window, or items with a lifetime warranty.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-19T19:47:53.363Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:47:53.287Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"homebox-mcp","version":"1.1.0","found":true,"weeklyDownloads":325,"dependencyCount":4,"publishedAt":"2026-09-16T02:46:01.172317Z","repositoryUrl":"https://github.com/dgahagan/homebox-mcp"}],"repo":{"found":true,"owner":"dgahagan","repo":"homebox-mcp","archived":false,"pushedAt":"2026-09-18T18:23:08Z","stars":6,"forks":2,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/2027443?v=4","ownerCreatedAt":"2012-07-23T14:02:20Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/2027443?v=4&s=128","source":"registry"},"presence":{"stars":6,"forks":2,"downloadsWeek":325,"license":"MIT","lastPushAt":"2026-09-18T18:23:08.000Z","score":36}}}},"grade_history":[],"reviews":[]}