Skip to main content
Glama
luisriverag

homebox-mcp

by luisriverag

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 instance

Every 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/homebox instance that exposes the /api/v1/entities API. The archived hay-kot/homebox API is not supported.

  • A dedicated Homebox account for the MCP server. Its Homebox permissions still apply in addition to this server's READONLY setting.

  • 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

stdio (default)

node /absolute/path/to/dist/index.js

The client is on another host or in another container

http

http://<server>:8765/mcp

Docker Compose deployment

http (set by the image)

The published port and MCP_HTTP_PATH

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 build

Keep 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

HOMEBOX_URL

yes

Base URL of your Homebox instance, with no /api suffix, e.g. http://homebox:7745

HOMEBOX_USERNAME / HOMEBOX_PASSWORD

yes

Login for a Homebox account the agent uses. Create a dedicated user rather than reusing your own.

READONLY

yes

Y — only read/lookup tools are registered, every create/update/delete tool is left out entirely. N — full read & write access.

MCP_TRANSPORT

no

stdio (default) or http — see "Running as an HTTP service".

MCP_HTTP_HOST / MCP_HTTP_PORT / MCP_HTTP_PATH

no

Only used when MCP_TRANSPORT=http. Defaults: 0.0.0.0, 8765, /mcp.

MCP_AUTH_TOKEN

no

Only used when MCP_TRANSPORT=http — required in practice; see "Running as an HTTP service".

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.js

By 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.js

This 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.

  1. Run this server with MCP_TRANSPORT=http and a MCP_AUTH_TOKEN set (see "Running as an HTTP service" above, or "Docker" below).

  2. 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=123456789

    HOMEBOX_MCP_URL/HOMEBOX_MCP_AUTH_TOKEN must match what this server is actually serving (MCP_HTTP_HOST/PORT/PATH/MCP_AUTH_TOKEN above) — 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 --build

docker-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-mcp

Activity 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_tree use /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 isLocation flag)

  • 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:

  1. Call tags_list and 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.

  2. Call items_list with the original text in q and the IDs of all relevant tags in relatedTagIds. For example, a search for “motorbike” can include the ID of a tag named Motorcycle.

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 to N exposes all write tools, including permanent deletion, account deletion, member removal, and inventory-wide bulk actions.

  • Set a long, randomly generated MCP_AUTH_TOKEN for 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 .env or docker-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

  1. Run npm run build and confirm dist/index.js exists.

  2. Use an absolute script path in stdio client configuration.

  3. Check the MCP client's own logs for process startup errors.

  4. Run node dist/index.js from 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 entities and tags API 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 key specifically 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 appends Did 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 (see src/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 build

Type 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 tools
assets_get_by_idassets_get_by_idB

Look up an item by its short numeric asset ID (as printed on asset labels/QR codes).

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYesAsset ID, e.g. "000-001"

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox item UUID
attachmentIdYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox item UUID

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search string
pageNo
labelsNoFilter by label IDs
pageSizeNo
locationsNoFilter by location IDs
parentIdsNoFilter by parent item IDs

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox item UUID

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox item UUID

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox label UUID

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHomebox location UUID

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterChildrenNoOnly return top-level locations

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
withItemsNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesData to encode, e.g. a Homebox item URL

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 25 tool updatesv0.1.0
    • First observedassets_get_by_id
    • First observedcurrency_list
    • First observedgroup_get
    • First observedgroup_statistics
    • First observedgroup_statistics_labels
    • First observedgroup_statistics_locations
    • First observedgroup_statistics_purchase_price
    • First observeditems_attachment_get
    • First observeditems_export
    • First observeditems_field_values
    • First observeditems_fields
    • First observeditems_get
    • First observeditems_list
    • First observeditems_maintenance_list
    • First observeditems_path
    • First observedlabels_get
    • First observedlabels_list
    • First observedlocations_get
    • First observedlocations_list
    • First observedlocations_tree
    • First observednotifiers_list
    • First observedqrcode_generate
    • First observedreporting_bill_of_materials
    • First observedstatus_get
    • First observedusers_self_get

TDQS

B3.3/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count3/5

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.

Completeness2/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for managing Homebox inventory via AI assistants, enabling item management, location organization, and label categorization.
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage inventory items, locations, and labels in a self-hosted Homebox instance using natural language, with support for flexible URL configurations.
    21
    4
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with a Homebox inventory system to search, create, update, and manage items, locations, and labels.
    -
  • F
    license
    C
    quality
    D
    maintenance
    An MCP server that exposes Homebox inventory management as tools for AI agents, enabling search, add, update, delete products, locations, tags, and maintenance entries.
    17
    2
    -

Latest Blog Posts

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