homebox-mcp
This server is an MCP server that lets AI clients query and inspect a Homebox inventory; the supplied schema is a read-only snapshot, while the README notes write tools can be enabled when READONLY=N.
Items: list/search items, get item details, breadcrumb path, custom-field names/values, export inventory as CSV, get attachment metadata, and list maintenance entries.
Locations: list locations, get the nested location tree, and view a single location with its items.
Labels/tags: list all labels and get a label’s details including tagged items.
Notifiers: list configured notification targets.
Users/group: get the current user profile, group settings, overall statistics, statistics by label, by location, and purchase-price-over-time.
Misc: get server status/version, list supported currencies, look up an item by asset ID, generate QR codes, and export a bill-of-materials CSV report.
Per the README, if READONLY=N the server would also register write tools for creating/updating/deleting items, locations, tags, notifiers, maintenance entries, attachments, users, group members, and more—though those tools are not present in the provided schema.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@homebox-mcpWhat items are in the living room?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
homebox-mcp
An MCP server for a self-hosted
Homebox inventory instance — specifically the
actively-maintained sysadminsmedia/homebox
fork's current API (entities/tags), not the older, archived hay-kot/homebox
API (items/labels/locations) that most existing docs and search results
still describe. It covers every read and write endpoint: items,
locations, tags, notifiers, maintenance entries, attachments, users, group
settings/members/invitations, statistics, bulk actions, QR codes, and CSV
import/export.
This is a plain MCP server with no bundled chat front end — point any
MCP-capable client at it: Claude Desktop, Claude Code, or a bot like
ocabra_telegram, which
uses this server's tools to give natural-language, tool-calling access to
your inventory over Telegram. Defaults to stdio (a client spawns this
process directly); set MCP_TRANSPORT=http to serve MCP over Streamable
HTTP as an always-on service instead, for a client on a different
host/container — see "Running as an HTTP service" below.
Contents
Related MCP server: Homebox MCP Server
How it fits together
┌───────────────────────┐
│ src/tools/*.ts │
│ one definition per │
│ Homebox endpoint │
└───────────┬────────────┘
▼
┌───────────────────────┐
│ src/mcp/server.ts │
│ MCP server (stdio or │
│ Streamable HTTP) │
└───────────┬────────────┘
▼
┌───────────────────────┐
│ src/homebox/client.ts │
│ login, token refresh, │
│ generic REST calls │
└───────────┬────────────┘
▼
your Homebox instanceEvery tool is defined once, in src/tools/, as
{ name, description, write, zod-shape, handler }, and registered with the
MCP server in src/mcp/server.ts.
For request lifecycles, authentication boundaries, and extension points, see the architecture guide.
Prerequisites
A current
sysadminsmedia/homeboxinstance that exposes the/api/v1/entitiesAPI. The archivedhay-kot/homeboxAPI is not supported.A dedicated Homebox account for the MCP server. Its Homebox permissions still apply in addition to this server's
READONLYsetting.Node.js 22 and npm for a source install, or Docker with Docker Compose for the container install.
An MCP client. Running this process in a terminal does not provide a chat interface.
Choose a transport
Situation | Transport | What the client connects to |
The MCP client can spawn a local process |
|
|
The client is on another host or in another container |
|
|
Docker Compose deployment |
| The published port and |
Use stdio when possible: it needs no listening port or MCP bearer token. Use
HTTP when the process boundary makes stdio unavailable, and set
MCP_AUTH_TOKEN before exposing the listener.
Setup
git clone <repository-url> homebox_mcp
cd homebox_mcp
cp .env.example .env
# set HOMEBOX_URL, HOMEBOX_USERNAME, and HOMEBOX_PASSWORD in .env
npm ci
npm run buildKeep READONLY=Y for the first connection. After confirming the client can
list and retrieve inventory, change it to N only if write operations are
required, then restart the server.
Environment variables (.env)
Variable | Required | Description |
| yes | Base URL of your Homebox instance, with no |
| yes | Login for a Homebox account the agent uses. Create a dedicated user rather than reusing your own. |
| yes |
|
| no |
|
| no | Only used when |
| no | Only used when |
READONLY is enforced at the tool-registration layer: when READONLY=Y,
write tools (items_create, items_delete, locations_update, …) are
never registered with the MCP server, so a connected client — or a model
driving it — cannot call them regardless of what it's asked to do. Toggle
it in .env and restart the server to change modes.
Who is allowed to talk to this server at all (e.g. which Telegram user)
is not this server's concern — that's the client's decision (whatever
spawns it over stdio, or whatever holds MCP_AUTH_TOKEN over HTTP).
See ocabra_telegram's HOMEBOX_ADMIN_TELEGRAM_ID.
Running
npm run build
node dist/index.jsBy default the process speaks MCP over stdio, meant to be spawned by a
client rather than run standalone. Set MCP_TRANSPORT=http (see
.env.example) to run it as an always-on HTTP service instead.
The startup message is written to stderr so it does not corrupt the MCP protocol on stdout. In stdio mode, seeing the process wait without printing a prompt is expected: it is waiting for an MCP client to send protocol messages.
Running as an HTTP service
MCP_TRANSPORT=http MCP_AUTH_TOKEN=$(openssl rand -hex 32) node dist/index.jsThis is the mode to use whenever the client (e.g. ocabra_telegram)
doesn't run on the same host — a stdio-piped subprocess can't cross that
boundary the way plain HTTP does. MCP_HTTP_HOST (default 0.0.0.0),
MCP_HTTP_PORT (default 8765), and MCP_HTTP_PATH (default /mcp)
control the listener; MCP_AUTH_TOKEN gates every request behind a
matching Authorization: Bearer <token> header (constant-time compared)
— set it unless you've deliberately decided the network path here is
trusted on its own, since an unset token on a reachable port lets anyone
who can reach it drive every tool this server exposes (Homebox reads, and
writes unless READONLY=Y). The HTTP transport is stateful: an
initialize request creates one McpServer/transport pair for that
client session, keyed by the Mcp-Session-Id the transport assigns and
the client echoes back on every subsequent request, and it's torn down
when the client sends DELETE or the connection closes. A client that
reuses one session across many sequential tool calls (the normal case —
e.g. ocabra_telegram's tool-calling loop) needs this: an earlier
per-request design, with a fresh pair for every single request, could tear
a transport down while an adjacent request in the same session still had
an SSE response in flight, which surfaced to MCP clients as the official
SDK's own "SSE stream ended without a response" even though this server
had already sent a complete, successful reply.
Tool-call responses are also sent as a single complete JSON body rather
than an SSE stream (enableJsonResponse: true). Every tool call here is
one request producing one response, so there's nothing to gain from a
long-lived stream — and streaming has a real cost: the reference MCP
client only resumes an interrupted SSE response when the stream carried a
resumable event ID (which needs an eventStore, not configured here), and
otherwise gives up immediately with "SSE stream ended without a response"
even on a response this server had already completed successfully. Larger
responses (base64-encoded photos and other attachments in particular)
spend longer as an open stream and were disproportionately exposed to
that gap; a single JSON body removes the "cut off partway through" window
entirely.
On successful startup, stderr includes the listener address, number of registered tools, readonly mode, and whether HTTP authentication is enabled:
homebox-mcp: MCP server ready over HTTP on 0.0.0.0:8765/mcp (65 tools, READONLY=N, auth=on)The /mcp route is an MCP endpoint, not a conventional browser page or
health-check URL. GET /mcp intentionally returns 405; connect with an MCP
Streamable HTTP client using POST instead. A 401 response means the bearer
token is absent or does not exactly match MCP_AUTH_TOKEN.
Client configuration
Claude Desktop / Claude Code
{
"mcpServers": {
"homebox": {
"command": "node",
"args": ["/absolute/path/to/homebox_mcp/dist/index.js"],
"env": {
"HOMEBOX_URL": "http://localhost:7745",
"HOMEBOX_USERNAME": "agent@example.com",
"HOMEBOX_PASSWORD": "change-me",
"READONLY": "Y"
}
}
}
}The path in args must be absolute because GUI clients often start with a
different working directory. Restart the MCP client after changing its
configuration or rebuilding the server. Environment variables configured in
the client take precedence over relying on a project-local .env whose
location may not be the client's working directory.
ocabra_telegram
ocabra_telegram's bot.py drives this server with OpenAI-style
tool-calling against its Ocabra backend, over MCP's Streamable HTTP
transport (the official mcp Python SDK client) — not a spawned
subprocess, so this server can run on the same host, a different host on
your LAN, or its own container.
Run this server with
MCP_TRANSPORT=httpand aMCP_AUTH_TOKENset (see "Running as an HTTP service" above, or "Docker" below).In
ocabra_telegram's.env:HOMEBOX_MCP_ENABLED=true HOMEBOX_MCP_URL=http://homebox-mcp-host:8765/mcp HOMEBOX_MCP_AUTH_TOKEN=same-token-as-MCP_AUTH_TOKEN-above HOMEBOX_ADMIN_TELEGRAM_ID=123456789HOMEBOX_MCP_URL/HOMEBOX_MCP_AUTH_TOKENmust match what this server is actually serving (MCP_HTTP_HOST/PORT/PATH/MCP_AUTH_TOKENabove) — the exact same secret goes on both sides.
See that repo's README, "Homebox Integration", for the full list.
Docker
cp .env.example .env # fill in HOMEBOX_URL/USERNAME/PASSWORD, MCP_AUTH_TOKEN, ...
cp docker-compose.yml.sample docker-compose.yml
docker compose up -d --builddocker-compose.yml is gitignored (like .env) precisely so a later
git pull never clobbers anything you change in it — edit your own copy
freely; docker-compose.yml.sample is the tracked template to re-diff
against if this project changes it.
The image runs this server with MCP_TRANSPORT=http and restart: always, publishing port 8765 (see docker-compose.yml to change it or
bind to a specific interface).
Follow startup, MCP request, tool-call, authentication, Homebox API, and error logs with:
docker compose logs -f homebox-mcpActivity log lines include an ISO timestamp and useful request status and duration fields. Tool arguments, request bodies, passwords, and tokens are not logged. Logs are written to stderr so they cannot interfere with MCP's stdio protocol.
Inside Compose, HOMEBOX_URL=http://homebox:7745 works only when a service
named homebox is reachable on a shared Docker network. If Homebox runs on
the Docker host or elsewhere, set HOMEBOX_URL to an address that is
reachable from the container, not necessarily the address used by your
browser.
Tool coverage
65 MCP tools, covering Homebox's current /v1/entities + /v1/tags API:
Items — list/search, get, create, update, patch, delete, breadcrumb path, custom fields, CSV import/export, attachments (add/download/update/ delete, plus external/link attachments), multilingual alternate-name and inventory-tag search, maintenance log (list/create/ update/delete, plus an all-items maintenance query)
Locations — list, tree, get, create, update, delete. Homebox has no separate "locations" resource anymore — a location is an entity whose entity type has
isLocation: true;locations_list/locations_treeuse/v1/entities/tree, which is still location-scoped.Tags — list, get, create, update, delete (called "Labels" in the archived Homebox API)
Entity types — list (the built-in "Item"/"Location" types plus any custom templates, and their
isLocationflag)Notifiers — list, create, update, delete, test
Users — get/update/delete self, change password, register (via group invitation)
Group — get/update settings, invitations (list/create/delete), members (list/remove), statistics (overall, by tag, by location, purchase price over time)
Bulk actions — ensure asset IDs, ensure import refs, set primary photos, zero item time fields, create missing thumbnails
Misc — server status, currency list, asset-ID lookup, QR code generation, bill-of-materials report
See src/tools/*.ts for the exact input schema of each tool.
For a complete, browsable list of tool names and access levels, see the
tool reference.
items_attachment_get returns attachment bytes directly in the MCP response:
photos use MCP image content so capable clients can display them, while PDFs
and other documents use embedded MCP resource content. Use the attachment IDs
included in an items_get response to request a particular file.
Homebox's download endpoint sometimes serves a photo as generic
application/octet-stream even though the attachment's own metadata records
an image/* MIME type. Since MCP clients only render a native image
content block when the type starts with image/, items_get (with
includeAttachments), items_photo_get, and items_attachment_get all
restore the attachment's declared image MIME type on the binary they return
before it reaches resultToContent, so a photo still displays as an image
instead of silently falling back to an embedded resource block.
For the common “show/send me a photo” workflow, call items_photo_get with the
item ID. It selects the primary photo (or the first photo if none is primary)
and returns the bytes as native MCP image content without requiring the caller
to inspect attachment metadata or provide an attachment ID. Clients should
forward/render that native image block directly; they must not replace it with
a Markdown attachment: URL, since those host-local references do not work
across chat bridges such as Telegram.
For a single-call alternative, pass includeAttachments to items_get with
photos, documents, or all. The response retains the item's JSON details
and appends each selected attachment as native MCP content. Omit the option to
avoid downloading attachment bytes.
Tool names use a <resource>_<operation> convention such as items_list,
items_get, and items_create. Write tools are also prefixed with [write]
in their MCP descriptions. With READONLY=Y, write tools are omitted from
tool discovery entirely rather than being exposed and rejected later.
Finding items by meaning and tags
Homebox's free-text entity search does not reliably find an item merely because it has a semantically related tag. For complete natural-language searches, use this two-step flow:
Call
tags_listand compare the available tag names with the user's intent. This is semantic discovery performed by the MCP client, so it works with inventory-specific vocabulary rather than a fixed synonym table.Call
items_listwith the original text inqand the IDs of all relevant tags inrelatedTagIds. For example, a search for “motorbike” can include the ID of a tag namedMotorcycle.
items_list runs each related tag as an additional search and unions those
results with all text/alternate-name results. This is intentionally different
from tags, which is a strict filter applied to text searches. Use
relatedTagIds to broaden recall; use tags when the user explicitly asks to
limit results to particular tags. If only tag names are available, pass them in
tagNames and the server will resolve them first.
The response includes searchTerms, matchedTags, and searchedTagIds so an
MCP client can explain which expansions and tags contributed to the results.
Duplicate entities found through multiple routes are returned only once.
For fields that Homebox's normal text endpoint does not index, items_list
also offers an opt-in deepSearch. It can search every scalar item value or
apply structured filters to fields such as purchaseFrom, purchasePrice,
sale and warranty values, dotted paths, and named custom fields. Deep search
reads every candidate item's complete details, so reserve it for queries that
cannot be answered by the faster normal text and tag search. Numeric comparison
operators also work with ISO dates, includeArchived expands the scan to
archived items, and the result's scanned count reports its scope.
Security checklist
Before enabling write tools or exposing the HTTP transport, verify all of the following:
Use a dedicated Homebox account and grant it only the permissions the client needs.
Start with
READONLY=Y. Changing it toNexposes all write tools, including permanent deletion, account deletion, member removal, and inventory-wide bulk actions.Set a long, randomly generated
MCP_AUTH_TOKENfor HTTP mode. Do not reuse the Homebox password as this token.Restrict the published port with a firewall, private network, VPN, or a specific Docker bind address. The bearer token protects requests, but does not encrypt traffic; use a trusted network or a TLS-terminating reverse proxy when requests cross an untrusted network.
Do not commit
.envordocker-compose.yml; both are ignored so local credentials and deployment-specific settings stay out of version control.Treat logs and tool results as potentially sensitive because inventory names, values, attachments, and user details may be returned to the MCP client.
Potential improvements
See docs/IDEAS.md for a prioritized list of possible testing,
operability, security, packaging, and tool-UX improvements. The document is a
roadmap, not a commitment that every idea will be implemented.
A note on Homebox API versions
Homebox's original repo (hay-kot/homebox) was archived; active development
continues at sysadminsmedia/homebox, which reorganized the API somewhere
around mid-2025: items and locations merged into a single generic
entities resource (distinguished by an entityTypeId, with locations
being entities whose type has isLocation: true), and labels was renamed
to tags. If you're running an old, unmaintained fork still on the
items/locations/labels API, this version of homebox_mcp will not work
against it — every call will 404. Check what your instance actually serves
with curl http://<your-homebox>/api/v1/status (always works, no auth) and
curl http://<your-homebox>/api/v1/entities vs .../api/v1/items (with a
valid Bearer token) to see which one responds instead of 404.
Troubleshooting
The client shows no Homebox tools
Run
npm run buildand confirmdist/index.jsexists.Use an absolute script path in stdio client configuration.
Check the MCP client's own logs for process startup errors.
Run
node dist/index.jsfrom the project directory to surface invalid environment values. Stop it with Ctrl+C after the startup message appears.
Homebox returns 401
This is authentication between this server and Homebox, not HTTP transport
authentication. Confirm HOMEBOX_USERNAME and HOMEBOX_PASSWORD, verify the
account can sign in to the same instance, and ensure HOMEBOX_URL points to
that instance. The server refreshes an expired Homebox token automatically and
retries one failed request.
The MCP endpoint returns 401
Send Authorization: Bearer <token> where <token> exactly matches
MCP_AUTH_TOKEN. This token protects access to MCP; it is separate from the
Homebox login and should not be set to the Homebox password.
Requests return 404
For Homebox API calls, confirm the instance uses the current
entitiesandtagsAPI described in A note on Homebox API versions.For MCP requests, confirm the client URL path matches
MCP_HTTP_PATH(default/mcp).A
404/400 invalid route keyspecifically on/v1/entities/<id>...from a tool call (items_get,items_photo_get,items_attachment_get, ...) is usually the model mistyping or fabricating a UUID it retyped from memory across several tool calls instead of reusing one verbatim. The client detects this, fuzzy-matches the bad id against the real entity list, and appendsDid you mean "<id>" ("<name>")?to the error when a close match exists, so the model self-corrects on its next call instead of retrying blindly (seesrc/homebox/similarity.ts). If the error instead says no close match was found, it's likely a genuinely wrong/deleted id rather than a typo.
Write tools are missing
This is expected when READONLY=Y. Set READONLY=N and restart the process
only after reviewing the credentials and network access available to the MCP
client.
Development
npm ci
npm run dev # run src/index.ts in watch mode
npm run typecheck # validate TypeScript without emitting dist/
npm run build # compile the production JavaScript into dist/If the compiler reports that it cannot find declarations for a dependency
(for example, TS7016 for express), restore the complete lockfile-defined
dependency tree before building:
npm ci
npm run buildType declarations are development dependencies, so an install created with
--omit=dev is suitable for running dist/, but not for compiling the
TypeScript sources.
There is currently no automated test suite. Before submitting a change, run
both npm run typecheck and npm run build. Tool implementations live in
src/tools/; the shared Homebox HTTP client lives in src/homebox/client.ts,
and transport registration lives in src/mcp/server.ts.
See CONTRIBUTING.md for the repository layout, tool
definition conventions, validation checklist, and guidance for keeping the
tool reference synchronized.
Available Tools
25 toolsassets_get_by_idassets_get_by_idB
Look up an item by its short numeric asset ID (as printed on asset labels/QR codes).
| Name | Required | Description | Default |
|---|---|---|---|
| assetId | Yes | Asset ID, e.g. "000-001" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. 'Look up' implies a read operation, but the description does not mention whether the item is returned, what a missing ID does, or any permissions or side effects. This is a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler or repeated schema details. It front-loads the action and resource, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no annotations and no output schema, the description is mostly adequate: it tells the agent what to pass and where the ID comes from. However, it does not explain the return format or error behavior, which the absence of an output schema makes more important.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the assetId field. The description adds meaning by clarifying that the ID is 'short numeric' and that it appears on labels/QR codes, which helps the agent recognize the correct input source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Look up') and the target ('an item by its short numeric asset ID'), plus the source context ('asset labels/QR codes'). It does not explicitly contrast with the similar sibling items_get, so it falls just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'as printed on asset labels/QR codes' gives useful context for when the short numeric ID is available. However, there is no explicit guidance about when not to use this tool or when to prefer siblings like items_get or items_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
currency_listcurrency_listA
List the currencies Homebox supports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The word 'List' implies a read-only, side-effect-free operation, which offers basic transparency. However, it does not disclose what the returned list contains (e.g., codes, symbols, names) or any other behavioral details. This is minimally sufficient but lacks rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word earns its place, and the structure immediately communicates both the action and the resource. There is no unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema list tool, this description is nearly complete: it tells the agent exactly what to expect (a list of supported currencies). The only minor gap is that it does not specify the format or structure of the returned list, but this is not critical for such a simple operation. The complexity is low, so the description is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The baseline for 0 parameters is 4, and the description correctly reflects the fact that no input is needed. No compensation is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('currencies Homebox supports'). Among the sibling tools, which all target other resource types (items, locations, labels, users), this is unambiguous and clearly distinct. There is no tautology or vagueness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage whenever the agent needs the set of supported currencies, but it does not explicitly state when to use it vs alternatives or mention any exclusions. Given that no sibling targets currencies, this is acceptable but still relies on inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_getgroup_getA
Get the current Homebox group's settings (name, currency, etc).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It indicates a read operation via 'Get', but does not describe the return format, whether any implicit defaults apply, or what 'etc' may include. This is acceptable for a simple no-parameter getter but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant wording. It front-loads the action and resource immediately and includes examples only where they add clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only settings getter, the description is largely complete: it names the scope and gives representative output fields. The only minor gap is the open-ended 'etc', which leaves the exact response shape slightly unspecified, but this is not critical for a no-input tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema already covers this. The description enhances understanding by naming some of the returned settings (name, currency, etc.), which gives the agent useful context about what the tool returns without needing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and clearly identifies the resource: 'the current Homebox group's settings'. It even names example fields (name, currency), which distinguishes it from sibling tools that operate on items, locations, labels, and other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when the agent needs the current group's settings, but it does not explicitly state when to choose this over alternatives or provide exclusion criteria. The narrow resource scope makes the intended use fairly clear, yet there is no direct guidance about sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_statisticsgroup_statisticsA
Get high-level inventory statistics for the group (total items, total value, etc).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the responsibility for behavioral disclosure. It accurately indicates a read-only summary operation and hints at return content, but it does not describe the exact response structure, currency handling, or behavior on empty groups. This is adequate for a simple getter but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no filler. It front-loads the verb and resource, and the parenthetical examples directly clarify what kind of statistics are returned without adding unnecessary length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, invocation is completely clear with no input guidance needed. The return value is partially described with examples, but the open-ended 'etc' and absence of an output schema leave the full set of statistics unspecified. Still, the description is sufficiently complete for someone to understand what the tool offers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema description coverage is trivially 100%, so parameter documentation is not needed. The description adds no parameter details because there are none to document, matching the baseline for parameter-less tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a clear resource ('high-level inventory statistics for the group'), and concrete examples ('total items, total value'). The 'high-level' qualifier also helps distinguish this tool from sibling statistics tools like group_statistics_labels, group_statistics_locations, and group_statistics_purchase_price.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the summary-level statistics tool, but it does not explicitly state when to use it versus the sibling group_statistics_* alternatives. There is no direct guidance about when to prefer this tool for aggregate data or when to use a more specific breakdown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_statistics_labelsgroup_statistics_labelsA
Get item-count statistics broken down by label.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. 'Get item-count statistics' indicates a read operation and reveals the output is counts grouped by label, but it does not mention return structure, handling of zero-count labels, or access requirements. The behavior is mostly clear but not richly detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that conveys the purpose and the grouping dimension without any filler. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity: no parameters and no output schema. The description sufficiently conveys the core result (item counts per label), which is likely enough for an agent to call and interpret the tool. It lacks explicit return-structure details, but those are largely inferable from 'item-count statistics broken down by label'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters and schema coverage is 100%, so there is no parameter information missing. The baseline for zero-parameter tools is 4, and the description does not need to add parameter-level details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('item-count statistics broken down by label'), clearly defining what the tool does. It also distinguishes this tool from siblings like group_statistics_locations and group_statistics_purchase_price by specifying the label grouping dimension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'broken down by label' implies the tool is for label-level item count analysis, but there is no explicit guidance about when to choose this tool over related group_statistics variants. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_statistics_locationsgroup_statistics_locationsA
Get item-count statistics broken down by location.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It states the core behavior—returning item-count statistics grouped by location—but does not disclose output shape, how locations are identified, or whether any prerequisites exist. This is a reasonable but not deeply transparent description for a zero-parameter read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that immediately states the operation and grouping criterion. It contains no filler, repeats no schema information, and front-loads the core meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter statistics tool, the description covers the essential invocation context. It lacks an explicit statement of the return format and does not clarify whether 'location' refers to the location tree, but these are minor for a tool with such low invocation complexity and no required inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description has no parameter-specific burden. The baseline of 4 applies because there are zero parameters and thus no semantic gaps to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb-resource pair, 'Get item-count statistics', and specifies the breakdown dimension 'by location'. This distinguishes it from sibling tools like group_statistics_labels and group_statistics_purchase_price, which clearly share the stats family but target different dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to choose this tool over siblings. It neither mentions alternatives nor provides selection context, leaving the agent to infer usage solely from the name and the generic 'by location' phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_statistics_purchase_pricegroup_statistics_purchase_priceC
Get total purchase price statistics over time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Get' implies a read operation, but the description does not clarify whether this is a safe read, what time range or grouping is applied, how results are aggregated, or what the response contains. This is minimal behavior information, not sufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, which is concise. However, it is also underspecified: the phrase 'over time' is vague and the sentence must carry all of the behavioral and usage context that is otherwise absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, no annotations, and no usage guidance, so the description needs to be more informative than it is. An agent knows this returns purchase-price statistics over time, but not what the statistics look like, what period they cover, or how they relate to the sibling statistics tools. This is incomplete for confident tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the schema already fully specifies the inputs. The description does not need to add parameter details because there are none, matching the baseline of 4 for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('total purchase price statistics over time'), so an agent can tell this is a read operation for purchase-price statistics. However, it does not explicitly differentiate itself from the sibling tools group_statistics, group_statistics_labels, or group_statistics_locations beyond the purchase-price qualifier, so it is clear but not strongly distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling group_statistics variants or other item/location tools. The description gives no context about what kind of request or workflow would call for this tool, so the agent is left to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_attachment_getitems_attachment_getB
Get metadata for a single item attachment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox item UUID | |
| attachmentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'Get metadata' correctly implies a read-only operation and clarifies that attachment content is not returned, but it does not describe response shape, error behavior, or any other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is eight words with no filler, and the core operation is front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with only two UUID parameters, so the description covers the basic invocation. However, with no output schema and no annotations, it omits what metadata fields are returned and provides no error or availability context, leaving a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: 'id' is documented as a Homebox item UUID, but 'attachmentId' has no schema description and the tool description does not clarify it. The phrase 'single item attachment' hints that one parameter identifies the item and the other identifies the attachment, but the mapping is left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('metadata for a single item attachment'), clearly distinguishing this from sibling tools like items_get and items_list by attachment scope. It does not explicitly contrast with sibling names, so it stops short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool instead of alternatives such as items_get or items_path. There are no exclusions, prerequisites, or contextual cues beyond the self-evident 'get metadata' use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_exportitems_exportA
Export the full inventory as a CSV string.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden; it clearly states the operation returns the full inventory as a CSV string, which covers the main behavior. It does not explicitly confirm that no mutation occurs or mention payload-size caveats, but 'export' plus a no-parameter signature makes the read-only intent reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight sentence with no filler, and it front-loads the verb, resource, and output format. Every word earns its place for a parameterless tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool without an output schema, stating both the resource ('full inventory') and the return shape ('CSV string') gives an agent enough to invoke it correctly. It could be more complete by naming a preferred alternative or exactly which fields the CSV includes, but the core contract is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and 100% coverage, so there are no parameter semantics for the description to clarify. The zero-parameter baseline of 4 applies, and the description correctly emphasizes the output rather than arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Export'), a clear resource ('the full inventory'), and a concrete output format ('CSV string'), so the tool's function is immediately identifiable. This phrasing also sets it apart from list/detail siblings like items_list and items_get, which do not describe CSV-format bulk export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to choose this tool over alternatives, and no sibling is mentioned for comparison. The intended use case is only implied by the name and description, leaving the agent to infer that items_export is for bulk CSV output while items_list/items_get handle item retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_fieldsitems_fieldsA
List the distinct custom field names used across all items.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It clarifies that results are distinct and scoped to all items, but it does not mention return format, ordering, permissions, or pagination. For a simple zero-parameter read operation, this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. Every word contributes meaning, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description communicates the essential result: a list of distinct custom field names. It could be more complete by explicitly stating the return type (e.g., array of strings), but the current wording is sufficient for an agent to infer the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are inherently straightforward. The description adds no parameter-specific detail because none is needed; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a specific resource ('distinct custom field names'), and a clear scope ('across all items'). It is easily distinguished from sibling tools like items_list or items_field_values, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. Because sibling tools like items_field_values are closely related, the description would benefit from an explicit statement such as 'use this to discover field names, use items_field_values to retrieve values.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_field_valuesitems_field_valuesB
List the distinct values used for a given custom field name.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly signals a read-only listing operation and mentions 'distinct values,' but adds no context about authentication, error behavior, pagination, or what happens when the field does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It states the action, the resource, and the key parameter concept efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is close to adequate: it communicates the purpose and parameter meaning. However, there is no output schema and no annotation coverage, and the description does not clarify the items context, result format, or behavior for a missing field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines 'field' as a string with no description, and schema description coverage is 0%. The description adds the key meaning that the parameter is a custom field name, which is helpful, but it does not explain requiredness, accepted formats, or behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies a clear resource: distinct values for a given custom field name. It is reasonably distinguishable from siblings like items_fields, though it does not explicitly name or contrast any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as items_fields or items_list. There are no exclusions, prerequisites, or context to help an agent choose among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_getitems_getA
Get full details of a single item by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox item UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does convey a read-only fetch via 'Get'. However, it does not expand on what 'full details' includes, nor on failure behavior (e.g., 404), potential auth requirements, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence with no filler; every word adds meaning. 'Get full details of a single item by ID' is maximally concise for its purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-id read, this is mostly adequate, but with no output schema or annotations, the agent is left guessing what 'full details' contains and how errors are signaled. A bit more specificity would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the 'id' parameter already well documented as a Homebox item UUID. The description's 'by ID' adds no additional semantic information about the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Get') and resource ('full details of a single item') with a clear selection key ('by ID'). It differentiates from siblings such as items_list or items_path, which serve different resources or scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the proper use case—retrieve one item's details when you have its UUID—but does not explicitly state when not to use it or mention alternatives such as items_list for lists of items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_listitems_listC
List/search items in the Homebox inventory. Supports free-text search and filtering by label, location, or parent item.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search string | |
| page | No | ||
| labels | No | Filter by label IDs | |
| pageSize | No | ||
| locations | No | Filter by location IDs | |
| parentIds | No | Filter by parent item IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It only indicates a list/search operation and does not disclose pagination behavior, default result scope, sorting, response shape, or whether any filters combine as AND/OR. Full transparency is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary purpose is front-loaded, and the feature summary is compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no annotations, and no output schema, this description is incomplete. It does not explain pagination behavior, what happens when no filters are supplied, the default ordering, or how it relates to items_get and other item-focused tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description maps q to free-text search and labels/locations/parentIds to filters, which loosely reinforces the schema's own descriptions. However, it adds little new meaning and does not clarify pagination semantics for page/pageSize, though those param names and schema constraints are reasonably self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('List/search') and resource ('items in the Homebox inventory'), and names the supported filter dimensions. The plural/list framing distinguishes it from a single-item getter like items_get, though it does not explicitly name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use this when you need to list or search items, but it provides no explicit guidance on when to prefer it over siblings such as items_get or when not to use it. No exclusions or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_maintenance_listitems_maintenance_listA
List maintenance log entries for an item.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox item UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'List' implies a read-only operation, and 'for an item' scopes the result. Yet it does not mention ordering, pagination, response shape, or any side effects. For a simple list tool this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to the meaning, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one required parameter, no output schema, no annotations. The description tells the agent what the tool does and what input is needed, but it does not specify the returned fields or any list behavior such as ordering or limits. This is acceptable for the low complexity but leaves some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'id' parameter described as 'Homebox item UUID.' The description's 'for an item' reinforces that the parameter refers to the item, but it adds no additional semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List maintenance log entries for an item.' This clearly distinguishes it from siblings like items_list (list items) and items_get (get item). The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need maintenance log entries for a specific item. However, it does not provide explicit guidance on prerequisites, such as the item needing to exist, or compare against alternatives. There is no obvious sibling for maintenance logs, so the lack of exclusion is acceptable but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
items_pathitems_pathA
Get the breadcrumb path (ancestor locations) of an item.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox item UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It correctly signals a read operation and the returned concept, but omits output shape, ordering (root-to-leaf vs. leaf-to-root), and whether the item's own location is included. These details matter because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, defining the operation, resource, and meaning in one pass. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool, this is minimally adequate, but without an output schema it should clarify the return representation (e.g., array of location names/IDs, ordering, inclusion of current location). The absence of these details leaves ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single id parameter as a Homebox item UUID, and the description adds only the context that the path belongs to an item. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Get'), resource ('breadcrumb path'), and clarifies the meaning as ancestor locations. This distinguishes it from sibling tools like items_get and locations_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is provided, and no sibling alternatives are referenced. The intended usage is only implied by the phrase 'of an item' rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
labels_getlabels_getA
Get details of a single label, including items tagged with it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox label UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It does convey that the response includes the label's details plus its tagged items, which is useful output-scope information. However, it does not mention error behavior, authorization requirements, or whether the operation is strictly read-only, though 'get' strongly implies a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence that front-loads the core action and includes the most important additional detail (tagged items). There is no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and fully documented schema, so the description need not be lengthy. However, there is no output schema, and the description does not enumerate what 'details' means beyond tagged items, leaving some ambiguity about the exact response shape. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single parameter 'id' is already described as 'Homebox label UUID' with a pattern. The tool description adds no further semantic meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('get') and resource ('single label'), and adds a distinctive scope detail: 'including items tagged with it.' This clearly differentiates it from siblings like labels_list, which lists many labels, and other get tools in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied by the phrase 'single label,' which suggests calling this tool when a specific label ID is available. However, there is no explicit guidance about when to choose this over labels_list or other list/get alternatives, so the agent must infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
labels_listlabels_listA
List all labels/tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only says 'List all labels/tags' and gives no details about return format, pagination, ordering, authentication, or absence of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'List all labels/tags.' is a single front-loaded sentence with no filler. Every word contributes to describing the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description is nearly complete: the agent knows the action and the object. It would be stronger with an explicit note about the return shape, but the absence of input parameters and annotations makes the description sufficient for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics for the description to clarify. With no parameters, the baseline is 4, and the description does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all labels/tags.' It clearly identifies what the tool does, but it doesn't explicitly differentiate from sibling labels_get or other list tools, relying on the tool name and 'all' to imply the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need the complete set of labels/tags. There is no explicit guidance about when to prefer labels_get for a single label or how this relates to sibling list tools such as items_list and locations_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locations_getlocations_getB
Get details of a single location, including items stored in it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Homebox location UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses that the response includes location details and its stored items, and 'Get' implies a read-only operation. It does not mention authentication, error behavior, or how items are represented, but for a simple getter this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence states the action, the target resource, and a key return component with no redundancy. Every word earns its place, and the important detail about items is included without extra fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter getter with no output schema, the description gives the essential information: what it returns and the scope of the request. It lacks details on error cases or permissions, but those are minor for a tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the only parameter ('id' with description 'Homebox location UUID'). The description adds no additional parameter meaning, so the baseline of 3 applies per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('a single location'), and the phrase 'single' distinguishes it from location-list tools. The added note about including items stored in the location clarifies scope. It does not explicitly name sibling alternatives, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a caller needs details for one location, but it provides no explicit when-to-use guidance or exclusions versus siblings like items_get or locations_list. There are no prerequisites or alternative routing clues, so the guidance is effectively absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locations_listlocations_listB
List all storage locations.
| Name | Required | Description | Default |
|---|---|---|---|
| filterChildren | No | Only return top-level locations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the core action. It does not mention read-only behavior, pagination, or the effect of the filterChildren parameter, which is a meaningful behavioral trait for choosing and invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. It is appropriately concise for a simple list operation, though it sacrifices some informational depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low complexity with one optional parameter and no output schema, so the basic description is minimally viable. However, it leaves clear gaps: no mention of the filterChildren behavior in the description itself and no differentiation from sibling location tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the only parameter (filterChildren) with a clear description, giving 100% schema coverage. The description adds no additional parameter semantics, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('storage locations'), making the basic purpose obvious. However, it does not differentiate from sibling tools like locations_tree or locations_get, so it lacks the sibling distinction needed for a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as locations_tree or locations_get. The description is purely declarative and offers no contextual selection criteria, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locations_treelocations_treeA
Get the full nested tree of locations (and optionally items within them).
| Name | Required | Description | Default |
|---|---|---|---|
| withItems | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It clearly states that the operation retrieves a nested tree and can include items, which are useful behavioral facts. However, it does not disclose defaults, potential size/performance implications, response structure, or any read-only guarantees, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence with no wasted words. The primary action and resource are front-loaded, and the optional-items behavior is compactly appended in parentheses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional boolean and no output schema, the description covers the essential invocation semantics: what is returned (full nested tree) and the parameter's effect (optional items). More detail on return shape or limits would help, but the simplicity of the tool keeps the gap small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, withItems, and the schema offrs no descriptive coverage. The description's parenthetical '(and optionally items within them)' effectively explains the parameter's purpose, which is enough for a simple boolean flag. It does not state the default value, but this is minor for a single optional parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), resource ('locations'), and output shape ('full nested tree'), and clarifies that items can optionally be included. The phrase 'full nested tree' differentiates it from flat list or single-location tools, though it does not name sibling tools explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving a hierarchical view of locations rather than a flat list, but it offers no explicit when-to-use guidance, no alternatives, and no exclusions. The optional-items parenthetical hints at one use case but does not explain when to prefer this over locations_list or locations_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notifiers_listnotifiers_listA
List configured notifiers (e.g. Shoutrrr/Apprise notification URLs for maintenance reminders).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is a read-only listing and tells us the data will be notification URLs, but it does not mention output structure, ordering, pagination, or any potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action and resource, followed by a brief illustrative example. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param list tool with no output schema, the description gives enough to select and call it: it names the resource and gives a concrete example of the data. A more explicit statement of the return format would be nice, but it is not a significant gap given the tool's triviality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so there is no parameter detail to explain. The baseline of 4 for zero-param tools applies, and the description adds no conflicting or extra parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List configured notifiers', and adds an explanatory example (Shoutrrr/Apprise notification URLs) that both clarifies the domain and distinguishes it from all sibling tools, none of which involve notifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its usage through the maintenance-reminder context and the type of data returned. It does not explicitly name alternatives or exclusions, but since no sibling tool overlaps with notifier listing, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qrcode_generateqrcode_generateA
Generate a QR code image encoding the given data. Returns base64-encoded JPEG bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Data to encode, e.g. a Homebox item URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It clearly states the output format: 'Returns base64-encoded JPEG bytes,' which is a meaningful behavioral detail. It does not disclose potential length limits or error cases, but for a pure generation tool these are minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core purpose, and the second specifies the return format. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description is largely complete: it specifies input and output format. It does not detail the exact response envelope or any special handling of base64 data, but this is a minor omission for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input parameter is already well-documented with 'Data to encode, e.g. a Homebox item URL.' The tool description adds no additional parameter semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Generate a QR code image encoding the given data.' It clearly distinguishes this tool from all siblings, none of which relate to QR code generation. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit alternatives exist among the siblings, so exclusionary guidance is unnecessary. The description implies when to use the tool: whenever a QR code image is needed. However, it does not explicitly state a usage context, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reporting_bill_of_materialsreporting_bill_of_materialsA
Export a full bill-of-materials report of the inventory as a CSV string.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool returns a CSV string and covers the full inventory, but it does not explicitly state whether the operation is read-only or mention any side effects or limits. 'Export/report' implies non-mutating behavior, which tempers the gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the action and output format with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description states both what the tool does and what it returns. It could mention CSV columns or encoding, but those are secondary details for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the empty schema already provides complete coverage. The description adds no parameter details, but none are necessary; the zero-parameter baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Export'), a clear resource ('bill-of-materials report of the inventory'), and an explicit output format ('CSV string'). It reads clearly but does not explicitly differentiate itself from sibling tools like items_export, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when a full inventory BOM report as CSV is needed. However, there is no explicit when-to-use or when-not-to-use guidance versus sibling export/list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
status_getstatus_getA
Get the Homebox server status/version/health info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. It signals a read-only operation through 'Get' and names the returned data categories, but it does not mention authentication requirements, response shape, or any side effects. For a simple status/health endpoint, this is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It efficiently states the action, the resource, and the scope of the returned information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter interface and the description's mention of status, version, and health info, an agent can correctly invoke the tool with no ambiguity. The lack of an output schema or additional annotation is not critical for such a simple no-argument status endpoint, though a richer description would be marginally stronger.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters, so the input schema already fully covers the call surface. The description adds no parameter-specific meaning, but none is needed; the 0-parameter baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb ('Get') and a unique resource ('Homebox server status/version/health info'), which distinguishes it from sibling tools that operate on items, locations, labels, or users. It goes beyond the tool name by specifying the server-level scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving server-level status/version/health information, but it does not explicitly state when to use it over alternatives or list exclusions. Since no sibling appears to serve a similar purpose and the tool has no parameters, the implied usage is reasonably clear, though not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_self_getusers_self_getA
Get the profile of the currently authenticated Homebox user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It clearly indicates a read-only profile fetch, but it does not disclose return format, authentication failure behavior, or whether any profile fields are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It efficiently states the resource and its scoping to the current user.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read of the authenticated user's profile, the description provides sufficient context. It could explicitly state that authentication is required or describe the return object, but the low complexity and clear noun 'profile' make the tool reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter ambiguity for the description to resolve. The baseline of 4 applies because nothing further is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names the exact resource ('profile of the currently authenticated Homebox user'). This clearly distinguishes it from sibling resource-specific getters like items_get or locations_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'currently authenticated' implies this tool is for the caller's own profile, but there is no explicit when-to-use guidance or mention of alternatives. Since no sibling tool targets the current user's profile, the implied usage is reasonable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
25 tool updates
v0.1.0- First observed
assets_get_by_id - First observed
currency_list - First observed
group_get - First observed
group_statistics - First observed
group_statistics_labels - First observed
group_statistics_locations - First observed
group_statistics_purchase_price - First observed
items_attachment_get - First observed
items_export - First observed
items_field_values - First observed
items_fields - First observed
items_get - First observed
items_list - First observed
items_maintenance_list - First observed
items_path - First observed
labels_get - First observed
labels_list - First observed
locations_get - First observed
locations_list - First observed
locations_tree - First observed
notifiers_list - First observed
qrcode_generate - First observed
reporting_bill_of_materials - First observed
status_get - First observed
users_self_get
TDQS
Most tools are clearly separated by resource and action, such as items_, locations_, labels_, and group_statistics_ prefixes. A few pairs could be confused—items_list vsocations_get both surface items in locations, and items_export vs reporting_bill_of_materials both produce CSV exports—but descriptions generally disambiguate them well.
The naming is mostly snake_case with resource-first prefixes, which gives a predictable feel. However, action ordering is inconsistent: items_fields and items_attachment_get are noun_y action, assets_get_by_id uses plural asset, qrcode_generate reverses the verb_noun convention, and reporting_bill_of_materials doesn't match the resource prefix pattern.
At 25 tools, this is on the heavy end of the spectrum. Many tools are granular read-only endpoints such as multiple group_statistics_* variants, which makes the set feel broad but not bloated; still, it is more than typically needed for a focused MCP server and could have been consolidated.
The read/query/reporting surface is comprehensive: search, get, paths, fields, statistics, exports, QR codes, and status all exist. However, there are no create, update, or delete operations for items, locations, labels, attachments, or maintenance entries, which is a significant gap for an inventory management domain and will cause dead ends for agents trying to modify data.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for managing Homebox inventory via AI assistants, enabling item management, location organization, and label categorization.4MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage inventory items, locations, and labels in a self-hosted Homebox instance using natural language, with support for flexible URL configurations.214MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with a Homebox inventory system to search, create, update, and manage items, locations, and labels.-
- FlicenseCqualityDmaintenanceAn MCP server that exposes Homebox inventory management as tools for AI agents, enabling search, add, update, delete products, locations, tags, and maintenance entries.172-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/luisriverag/homebox_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server