hortusfox-mcp
This MCP server exposes the complete HortusFox REST API as tools, enabling AI assistants to manage a self-hosted plant management system across 7 domains:
Plants: Get details, add, update, or remove plants; list with filtering/pagination/sorting; free-text search; manage custom attributes; update main photo; manage gallery photos; add, edit, remove, or fetch plant log/journal entries.
Locations: List all locations (with optional plant counts/lists) and get details of a specific location.
Tasks: Fetch tasks (including completed ones), add with optional due dates, recurrence, and plant associations, edit (including toggling completion), and remove.
Inventory: Fetch full inventory, add new items, edit existing items, increment/decrement item amounts, and remove items.
Calendar: Fetch entries within a date range, add entries with start/end dates and optional class, edit, and remove.
Chat: Fetch recent workspace chat messages and post new messages as a bot.
Backup: Export backup archives for selected data categories (locations, plants, gallery, tasks, inventory, calendar) and import previously staged backup data.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hortusfox-mcplist all plants in the living room"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HortusFox MCP Server
A Model Context Protocol (MCP) stdio server for
HortusFox, the self-hosted plant
management system. It exposes the complete HortusFox REST API (/api/*) as MCP tools so
AI assistants can read and manage your plants, locations, tasks, inventory, calendar,
chat and backups.
Written in TypeScript for Node.js, using the official
@modelcontextprotocol/sdk.
Features
Every endpoint of the HortusFox ApiController is covered — 38 tools across 7 domains:
Domain | Tools |
Plants (18) | get, add, update, remove, list, search; custom attributes add/edit/remove; main photo update; gallery list/add/edit/remove; log add/edit/remove/fetch |
Locations (2) | list, get info |
Tasks (4) | fetch, add, edit, remove |
Inventory (6) | fetch, add, edit, increment, decrement, remove |
Calendar (4) | fetch, add, edit, remove |
Chat (2) | fetch, post message |
Backup (2) | export, import |
Related MCP server: MCP Enterprise Architecture Practice 01
Prerequisites
Node.js 18+ (uses the built-in
fetch).A running HortusFox instance.
A HortusFox API key. In HortusFox, go to Admin → API and create a key.
Installation
npm install
npm run buildThis produces the runnable server at dist/index.js.
Configuration
The server is configured entirely through environment variables:
Variable | Required | Description |
| ✅ | Base URL of your HortusFox instance, e.g. |
| ✅ | API key created in the HortusFox admin panel |
| ❌ | Request timeout in milliseconds (default |
See .env.example.
Usage
Run directly
HORTUSFOX_URL=https://garden.example.com \
HORTUSFOX_API_TOKEN=your-token \
node dist/index.jsThe server speaks MCP over stdio. Diagnostic messages are written to stderr; the
JSON-RPC protocol uses stdout.
Run with npx
Once published to npm, the server can be run without a local checkout:
HORTUSFOX_URL=https://garden.example.com \
HORTUSFOX_API_TOKEN=your-token \
npx @tomfrenzel/hortusfox-mcpRegister with an MCP client
Add the server to your client's MCP configuration. The recommended way is via
npx:
{
"mcpServers": {
"hortusfox": {
"command": "npx",
"args": ["-y", "@tomfrenzel/hortusfox-mcp"],
"env": {
"HORTUSFOX_URL": "https://garden.example.com",
"HORTUSFOX_API_TOKEN": "your-token"
}
}
}
}Alternatively, point at a local build:
{
"mcpServers": {
"hortusfox": {
"command": "node",
"args": ["/absolute/path/to/hortusfox-mcp/dist/index.js"],
"env": {
"HORTUSFOX_URL": "https://garden.example.com",
"HORTUSFOX_API_TOKEN": "your-token"
}
}
}
}If installed globally (npm install -g .), you can use the hortusfox-mcp binary
instead of node dist/index.js.
Tool reference
All tools are prefixed with hortusfox_. Each returns the raw HortusFox JSON response
(pretty-printed). Errors (network failures, auth rejection, or API error codes) are
returned as MCP tool errors with a descriptive message.
Plants
Tool | Endpoint | Key arguments |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Photos: the API-based photo tools support external image URLs (
external: truewith aphotoURL). Direct binary file uploads are not exposed over the token API.
Locations
Tool | Endpoint | Key arguments |
|
|
|
|
|
|
Tasks
Tool | Endpoint | Key arguments |
|
|
|
|
|
|
|
|
|
|
|
|
Inventory
Tool | Endpoint | Key arguments |
|
| – |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Calendar
Tool | Endpoint | Key arguments |
|
|
|
|
|
|
|
|
|
|
|
|
Chat
Tool | Endpoint | Key arguments |
|
|
|
|
|
|
Backup
Tool | Endpoint | Key arguments |
|
|
|
|
| same category flags |
Development
npm run dev # tsc --watch
npm run typecheck # type-check without emitting
npm run build # compile to dist/A dev container config is provided in
.devcontainer/ for a ready-to-use Node.js + TypeScript
environment.
Releasing
Releases are published to npm automatically by the
Release GitHub Actions workflow whenever a
v* tag is pushed. The workflow type-checks, builds, verifies the tag matches
the package.json version, and publishes with
npm provenance.
To cut a release:
npm version patch # or minor / major — bumps package.json and creates a tag
git push --follow-tagsThis requires an NPM_TOKEN secret to be configured in the repository settings.
How it works
The Asatru framework behind HortusFox merges POST body, query string and JSON body into a
single request argument bag, and the API authenticates via a token parameter. This
server therefore sends each request as an application/x-www-form-urlencoded POST
(including the token and all parameters), which works uniformly for every route and avoids
URL-length limits for larger text fields. Requests are retried up to 3 times on transient
network/timeout failures; deterministic API and auth errors are surfaced immediately.
License
MIT — see LICENSE.
Available Tools
38 toolshortusfox_add_calendar_entryAdd calendar entryB
Add a calendar entry with a name, start date and optional end date and class. Returns the new item ID. Endpoint: /api/calendar/add.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Entry name/title. | |
| class | No | Optional calendar class identifier. | |
| date_from | Yes | Start date (YYYY-MM-DD). | |
| date_till | No | End date (YYYY-MM-DD). Defaults to the day after date_from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states that a new entry is created and an ID is returned, but lacks details on side effects (e.g., does it overwrite existing entries? What about validation errors?). Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the purpose and key parameters. The inclusion of the endpoint ('/api/calendar/add') is extraneous for AI agent decision-making, but the description is otherwise concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description mentions the return value (new item ID), which is helpful. However, for a mutation tool, it lacks details on error states (e.g., date validation) and does not clarify time handling (only dates specified). Adequate for a simple create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description echoes the key parameters but adds little new meaning beyond the schema. The mention of 'optional end date and class' matches the schema but does not provide extra constraints or usage nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and resource 'calendar entry', specifying key parameters (name, start date, optional end date, class) and the return value (new item ID). It effectively distinguishes from sibling tools like hortusfox_add_task or hortusfox_add_inventory_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as hortusfox_edit_calendar_entry for editing. The purpose is clear, but an agent would benefit from knowing that this tool is for creating new entries and not for updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_chat_messagePost chat messageB
Post a message to the workspace chat (sent via the API/bot identity). Endpoint: /api/chat/message/add.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The chat message text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The note about 'sent via the API/bot identity' provides some behavioral context, but it lacks details on side effects, authentication requirements, rate limits, or visibility. With no annotations, more disclosure is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences with no redundant information. Every part is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (single parameter, no output schema), the description is adequate but lacks details on response behavior and integration context. Could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the parameter description is already clear. The tool description does not add meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool posts a message to workspace chat via the API/bot identity. It is specific and distinguishes from fetch operations, though it does not explicitly differentiate from sibling add tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like hortusfox_fetch_chat. No context on prerequisites, exclusions, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_inventory_itemAdd inventory itemB
Add a new inventory item. Returns the new item ID. Endpoint: /api/inventory/add.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Item name. | |
| tags | No | Optional comma-separated tags. | |
| group | No | Optional inventory group ID. | |
| photo | No | Optional photo URL. | |
| amount | No | Optional current amount/quantity. | |
| location | No | Optional location ID for the item. | |
| description | No | Optional item description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only mentions return of new item ID and endpoint. Lacks disclosure of side effects, auth needs, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient single-sentence description including endpoint. Slightly redundant endpoint info but overall concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple add operation; covers purpose and return value. However, lacks details on validation, duplicates, or errors given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so description adds no extra parameter meaning beyond what schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a new inventory item') and the resource. It distinguishes from sibling tools that add other entities like plants or tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_plantAdd plantB
Create a new plant with a name and a location ID. Returns the new plant ID. Endpoint: /api/plants/add.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the plant. | |
| location | Yes | ID of the location the plant belongs to (see hortusfox_list_locations). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the action and return value, omitting details like side effects, error handling, permissions, or constraints (e.g., duplicate name).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the action and output. It is concise and efficient, though the endpoint info is optional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description covers the basic purpose and output. However, it lacks completeness on failure cases or validation, and no annotations exist to supplement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds no new parameter meaning beyond restating the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new plant, lists required inputs (name and location ID), and specifies the return value (new plant ID). This is specific and distinguishable from sibling tools like hortusfox_add_plant_attribute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to create a plant) but does not explicitly differentiate from alternatives like hortusfox_update_plant or hortusfox_remove_plant. The schema hints at using hortusfox_list_locations for location IDs, but no explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_plant_attributeAdd custom plant attributeB
Add a custom attribute to a plant. Endpoint: /api/plants/attributes/add.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Attribute label/name. | |
| plant | Yes | The plant ID. | |
| content | Yes | Attribute value/content. | |
| datatype | Yes | Attribute data type (e.g. text, number, date, boolean) as defined in HortusFox. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'Add' and the endpoint, with no mention of side effects, permissions, or whether duplicates are handled. This is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) and to the point, with no unnecessary words. However, the endpoint detail is somewhat redundant, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description lacks context on return values, validation, or usage examples. For a tool with 4 required parameters, more guidance is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all 4 parameters. The description adds no extra meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a custom attribute to a plant', specifying the verb and resource. The sibling tools include 'hortusfox_edit_plant_attribute' for editing, which distinguishes it as an add operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives like 'hortusfox_edit_plant_attribute'. It only mentions the endpoint, which is not helpful for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_plant_gallery_photoAdd plant gallery photoB
Add a photo to a plant gallery. Set external=true and provide a photo URL to add an external image. Endpoint: /api/plants/gallery/add.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional label/caption for the photo. | |
| photo | No | External photo URL (required when external=true). | |
| plant | Yes | The plant ID. | |
| external | No | If true, add an external photo URL (provide `photo`). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose side effects, authentication needs, or behavior on invalid plant. Only mentions endpoint, not behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with 4 parameters; description covers key usage but lacks details on return values (no output schema), handling of internal photos, and error scenarios. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage). Description adds value by explaining the relationship between 'external' and 'photo' parameters, clarifying usage of the URL for external images. However, does not add details for 'label' or 'plant' beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Add a photo to a plant gallery' with specific verb and resource. Mentions external vs internal via 'external=true' and URL, distinguishing from sibling 'edit_plant_gallery_photo'. However, does not differentiate from 'update_plant_photo'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on setting external=true with URL for external images, but no mention of when to use internal photos or conditions. No explicit when-to-use comparisons with siblings or when-not-to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_plant_log_entryAdd plant log entryB
Add a log/journal entry to a plant. Returns the new log entry ID. Endpoint: /api/plants/log/add.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | Yes | The plant ID. | |
| content | Yes | The log entry text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the basic action and return value but omits side effects, error conditions, authentication needs, or details about what happens to the existing log.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) and efficiently conveys the core action and return. The endpoint mention is slightly redundant but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description covers the essential action and return. It lacks some context (e.g., that the entry is appended), but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add further meaning to the parameters beyond what the schema already provides (plant ID and content text).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a log/journal entry to a plant') and mentions the return value ('Returns the new log entry ID'). It effectively distinguishes from edit sibling tools by using 'add' but does not differentiate from other log-related tools like fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., edit or fetch log entries). There are no mentions of prerequisites, like needing a valid plant ID, or any conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_add_taskAdd taskA
Create a task. Supports an optional due date, recurrence, and association with a plant. Returns the new task ID. Endpoint: /api/tasks/add.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | No | Optional plant ID to associate the task with. | |
| title | Yes | Task title. | |
| due_date | No | Optional due date (e.g. YYYY-MM-DD). | |
| description | No | Optional task description. | |
| recurring_time | No | Recurrence interval count. Requires a due_date to take effect. | |
| recurring_scope | No | Recurrence scope/unit (e.g. day, week, month) as accepted by HortusFox. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses that it returns a new task ID and gives the endpoint, but does not discuss side effects, permissions, or error conditions. The 'create' operation implies mutation, which is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action 'Create a task'. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with 6 parameters and no output schema, the description covers the core functionality, return value, and key optional features. Missing details on authentication or return format, but adequate given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal context beyond the schema (e.g., 'optional' for parameters). Does not explain interactions like recurring_time requiring due_date, which is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a task' and lists supported features (optional due date, recurrence, plant association). It distinguishes from sibling tools like hortusfox_edit_task by focusing on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions optional parameters but does not explicitly state when to use this tool versus alternatives. No exclusionary guidance or context about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_decrement_inventory_itemDecrement inventory amountA
Decrement the amount of an inventory item by one. Returns the new amount. Endpoint: /api/inventory/amount/dec.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The inventory item ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the mutation (decrement) and return value, but does not mention error handling, idempotency, or what happens if the item doesn't exist. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are concise and front-loaded: first sentence states the action, second the return, third an endpoint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple decrement tool with one parameter and no output schema, the description adequately covers the core functionality and return. It could mention that the item must exist, but overall it's complete enough given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with descriptions. The description does not add any additional meaning beyond 'item ID', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (decrement by one) and the resource (inventory item), and distinguishes from the sibling increment tool by specifying the direction and magnitude. The return value is also provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like hortusfox_increment_inventory_item or other inventory tools. The description only explains what it does, not the context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_calendar_entryEdit calendar entryB
Edit an existing calendar entry by its identifier. Endpoint: /api/calendar/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated name/title. | |
| class | No | Optional calendar class identifier. | |
| ident | Yes | The calendar entry identifier. | |
| date_from | Yes | Start date (YYYY-MM-DD). | |
| date_till | No | End date (YYYY-MM-DD). Defaults to the day after date_from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry burden. Mentions 'existing' entry but does not disclose behavior like partial updates, error handling, or required permissions. Endpoint detail is not behaviorally informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. The second sentence about endpoint is slightly redundant but not harmful. Could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no description of return value. For a mutation tool with no annotations, this is incomplete. Should mention what the response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. Description adds no extra meaning beyond the schema; it doesn't explain parameters further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Edit' and the resource 'calendar entry', and explicitly mentions the identifier. Differentiates from siblings like add/remove_calendar_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or when-not-to-use context. Only states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_inventory_itemEdit inventory itemB
Edit an existing inventory item by ID. Endpoint: /api/inventory/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The inventory item ID to edit. | |
| name | No | Updated name. | |
| tags | No | Updated comma-separated tags. | |
| group | No | Updated inventory group ID. | |
| photo | No | Updated photo URL. | |
| amount | No | Updated amount/quantity. | |
| location | No | Updated location ID. | |
| description | No | Updated description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose any behavioral traits, such as whether the edit is idempotent, what happens on failure, or side effects like updating timestamps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (2 sentences). The endpoint information is redundant but doesn't detract significantly. Could be more concise by removing the endpoint detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, the description is insufficient. It lacks details on return values, error states, and the scope of the edit operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with individual parameter descriptions. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Edit an existing inventory item by ID,' which is a specific verb and resource. It distinguishes from sibling tools like hortusfox_add_inventory_item and hortusfox_remove_inventory_item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., increment/decrement). No mention of prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_plant_attributeEdit custom plant attributeB
Edit an existing custom attribute of a plant, identified by its label. Endpoint: /api/plants/attributes/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | The existing attribute label to edit. | |
| plant | Yes | The plant ID. | |
| content | Yes | New attribute value/content. | |
| datatype | Yes | Attribute data type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'edit' but does not disclose permissions, reversibility, side effects, or what happens to other attributes. The endpoint is given but not behavioral.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences, concise. However, the second sentence providing the endpoint is likely unnecessary for an AI agent and wastes space. No redundancy but could be more efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 4 required parameters and no output schema. Description does not explain return format, error handling, or prerequisites. For a mutation tool, this lacks completeness needed for reliable agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented. Description adds 'identified by its label' which aligns with the 'label' parameter but provides no additional meaning beyond what schema offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it edits an existing custom attribute of a plant, identified by its label. This is distinct from sibling tools like add_plant_attribute and remove_plant_attribute, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., when to edit vs add or remove). Missing context on prerequisites or scenarios where editing is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_plant_gallery_photoEdit plant gallery photo labelB
Edit the label of a gallery photo item. Endpoint: /api/plants/gallery/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The gallery photo item ID. | |
| label | Yes | The new label/caption. | |
| plant | Yes | The plant ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description only states the endpoint URI but does not disclose behavioral traits like idempotency, error handling, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The endpoint URI adds minor context but is not essential for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple edit tool with no output schema, the description is minimally adequate. It lacks details on return values or side effects but is not misleading.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for 3 parameters. The description does not add meaning beyond the schema descriptions for item, label, and plant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Edit' and the resource 'label of a gallery photo item'. It distinguishes from siblings like add_plant_gallery_photo and remove_plant_gallery_photo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. No context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_plant_log_entryEdit plant log entryB
Edit an existing plant log entry by its ID. Endpoint: /api/plants/log/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| logid | Yes | The log entry ID. | |
| content | Yes | The updated log entry text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action and endpoint but does not disclose behavioral traits such as permissions required, irreversible changes, or overwriting behavior. The description is minimal for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences, no redundancy. However, it could include more relevant context without becoming verbose. Efficient but slightly under-informative for a tool that modifies data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and the endpoint, and the schema describes parameters adequately. However, for a mutation tool, additional behavioral context (e.g., that the logid must exist) would improve completeness. Minimal but functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for both parameters (logid and content) with 100% coverage. The description does not add additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Edit an existing plant log entry by its ID', which clearly identifies the tool's action and resource. It distinguishes from sibling tools like 'add' and 'remove'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied as it says 'Edit an existing plant log entry', but it does not provide explicit guidance on when to use this tool versus alternatives like add or remove. No when-not-to-use or prerequisite conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_edit_taskEdit taskB
Edit an existing task by ID, including toggling its done state. Endpoint: /api/tasks/edit.
| Name | Required | Description | Default |
|---|---|---|---|
| done | No | Set the task done/completed state. | |
| task | Yes | The task ID to edit. | |
| title | No | Updated title. | |
| due_date | No | Updated due date (e.g. YYYY-MM-DD). | |
| description | No | Updated description. | |
| recurring_time | No | Updated recurrence interval count. | |
| recurring_scope | No | Updated recurrence scope/unit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the endpoint and toggling done state, but fails to disclose whether updates are partial or full, if other fields can be updated independently, idempotency, or authorization requirements. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, with no fluff. However, it could be structured to immediately convey the core purpose without the endpoint detail. The endpoint is better placed in annotations or separate metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description should explain behavior like partial vs. full updates, required fields beyond 'task', and return status. It lacks this completeness, leaving agents uncertain about side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 7 parameters with descriptions (100% coverage). The description adds marginal value by explicitly mentioning 'toggling its done state,' which aligns with the schema's description of the 'done' parameter. It does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Edit an existing task by ID, including toggling its done state.' This specifies the verb (edit), resource (task), and a specific capability (toggle done state), distinguishing it from sibling tools like 'hortusfox_add_task' and 'hortusfox_remove_task'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites, when not to use, or context for invocation. It only states the action and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_export_backupExport backupA
Export a backup archive for the selected data categories. Returns a downloadable file URL. Endpoint: /api/backup/export.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | No | Include tasks. Default false. | |
| plants | No | Include plants. Default false. | |
| gallery | No | Include gallery photos. Default false. | |
| calendar | No | Include calendar entries. Default false. | |
| inventory | No | Include inventory. Default false. | |
| locations | No | Include locations. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the output (URL) and action (export), but does not mention side effects, safety profile, or duration. It is non-destructive by nature, but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states the action, second adds return type and endpoint. Highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and return, but lacks details on output format, file expiration, aggregation behavior, and prerequisites. For a simple export tool with no output schema, it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each boolean parameter having a description. The description adds no extra meaning beyond the schema; it only refers to 'selected data categories'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Export' and the resource 'backup archive', and specifies that it returns a downloadable file URL. It is distinct from the sibling tool 'hortusfox_import_backup'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the user wants to export backup categories, but does not explicitly state when to use this tool versus alternatives like import_backup or other fetch tools. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_fetch_calendarFetch calendar entriesB
Fetch calendar entries within a date range. Defaults to today through the next 30 days when omitted. Endpoint: /api/calendar/fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| date_from | No | Start date (YYYY-MM-DD). Defaults to today. | |
| date_till | No | End date (YYYY-MM-DD). Defaults to 30 days from today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions default ranges and an internal endpoint, but lacks details on idempotency, rate limits, data volume, or typical response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise, front-loaded sentences. The first states purpose, the second provides default behavior and endpoint. No extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter fetch with no output schema, the description is adequate but lacks return format details. It minimally covers core needs given the tool's low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents both parameters. The description adds only default values already present in the parameter descriptions, providing no incremental semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch calendar entries within a date range,' which specifies the verb and resource. It distinguishes from sibling calendar tools like 'hortusfox_add_calendar_entry' by implying a read operation, but does not explicitly differentiate from other fetch tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides default date ranges ('Defaults to today through the next 30 days') but offers no guidance on when to use this tool versus alternatives such as other fetch tools or calendar-specific actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_fetch_chatFetch chat messagesB
Fetch recent workspace chat messages. Endpoint: /api/chat/fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum messages to return (default 50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'recent' but does not specify sorting order, default behavior, or side effects. It does not clarify that the operation is read-only, nor does it disclose any behavioral traits like auth requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two sentences. However, the inclusion of the endpoint URL is extraneous for an AI agent and slightly reduces clarity. The main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter and no output schema, the description is minimal. It lacks details on default behavior, error cases, and how to handle larger result sets. Sibling fetch tools might have more context, but this one is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'limit', which already describes it as 'Maximum messages to return (default 50)'. The description adds no additional meaning beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch recent workspace chat messages', specifying the action (fetch) and resource (chat messages). It distinguishes itself from sibling tools like hortusfox_add_chat_message and other fetch tools for different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives, no exclusions, no prerequisites, and no context about scenarios where it is appropriate or not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_fetch_inventoryFetch inventoryA
Fetch the full inventory list. Endpoint: /api/inventory/fetch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states it fetches the 'full inventory list' but does not mention any additional behaviors such as return format, side effects, or safety. It is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no unnecessary words. It front-loads the core purpose and includes the endpoint as a secondary detail. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema, the description is mostly complete. It identifies the resource and the endpoint. However, it lacks details about the return structure (e.g., list of inventory items with fields), which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and schema description coverage is 100%. The description adds no parameter-specific semantics, but given the absence of parameters, it is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('the full inventory list'), and it includes the endpoint. This distinguishes it from sibling tools like hortusfox_fetch_calendar or hortusfox_fetch_chat, which fetch different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving the full inventory list but does not explicitly specify when to use it versus alternatives like hortusfox_search_plants or hortusfox_list_plants. No exclusion criteria or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_fetch_plant_logFetch plant log entriesB
Fetch log entries for a plant, with optional pagination. Endpoint: /api/plants/log/fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries to return (default 10). | |
| plant | Yes | The plant ID. | |
| paginate | No | Optional pagination page/cursor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only mentions fetching and pagination, but fails to disclose read-only nature, authentication needs, rate limits, or behavior on missing plant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and front-loaded with purpose. However, the endpoint URL may be redundant for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, and the description does not explain the return structure or default ordering. Lacks completeness for a fetch operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (100% coverage). The description adds 'optional pagination' but no additional semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that it fetches log entries for a plant, with optional pagination. It distinguishes itself from sibling tools like hortusfox_add_plant_log_entry and hortusfox_edit_plant_log_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_fetch_tasksFetch tasksA
Fetch tasks, optionally including completed ones. Endpoint: /api/tasks/fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| done | No | If true, include done/completed tasks. Default false. | |
| limit | No | Maximum tasks to return (default 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. It mentions optional completed task inclusion but does not state read-only nature, pagination, or error handling. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose. The endpoint detail is helpful but could be considered secondary. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 params, no output schema), description is adequate but lacks return value specification and any context about ordering or defaults beyond what's in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100%). Description adds minimal value beyond schema: it links 'optionally including completed ones' to the 'done' parameter but provides no extra meaning for 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and resource 'tasks', and distinguishes from siblings like hortusfox_add_task and hortusfox_edit_task. The optional inclusion of completed tasks is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description implies retrieval use case but does not contrast with sibling tools like hortusfox_fetch_calendar or hortusfox_list_plants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_get_locationGet location infoB
Fetch details of a single location by ID, optionally including its plants. Endpoint: /api/locations/info.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | The location ID. | |
| include_plants | No | If true, include the full list of plants at this location. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'fetch' which implies read-only, but does not explicitly state read-only, nor does it disclose error handling, authentication needs, or side effects. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with clear front-loading. The second sentence about the endpoint is slightly extraneous for agent selection but not harmful. Efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description lacks detail on what location details are returned. It covers the optional parameter but not the return structure or error scenarios. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds no meaning beyond the schema. The optional plant inclusion is already described in the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches details of a single location by ID with optional plant inclusion, using the verb 'fetch' and specifying the resource. It effectively distinguishes from sibling tools like 'hortusfox_list_locations' which lists locations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when you have a specific location ID) but does not explicitly state when not to use or mention alternatives like 'hortusfox_list_locations'. No exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_get_plantGet plant detailsA
Fetch full details of a single plant by its ID, including default fields and any custom attributes. Endpoint: /api/plants/get.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | Yes | The plant ID to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source of behavioral info. It indicates a read operation (fetch) but does not explicitly confirm it is non-destructive, require authentication, or detail error handling. Adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. First sentence conveys the core action and included data. Second sentence provides a developer-friendly endpoint hint. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool with no output schema, the description covers the concept (full details including custom attributes). However, it could briefly mention the return format (e.g., JSON object) to preempt agent questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the only parameter 'plant' is described as 'The plant ID to retrieve'). The description adds 'by its ID' but no additional format or source guidance. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetch full details of a single plant by its ID'. It specifies the verb (fetch), resource (plant), and criteria (by ID), and distinguishes from sibling tools like list or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a plant ID, but does not explicitly contrast with sibling tools like hortusfox_list_plants or when-not-to-use. No alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_import_backupImport backupB
Import previously staged backup data for the selected categories. Endpoint: /api/backup/import.
| Name | Required | Description | Default |
|---|---|---|---|
| tasks | No | Include tasks. Default false. | |
| plants | No | Include plants. Default false. | |
| gallery | No | Include gallery photos. Default false. | |
| calendar | No | Include calendar entries. Default false. | |
| inventory | No | Include inventory. Default false. | |
| locations | No | Include locations. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states 'import' but does not disclose whether the operation is destructive, idempotent, or what happens to existing data. 'Previously staged' implies a prior step but offers no details about the import process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The purpose is front-loaded. The endpoint URL is somewhat redundant but not harmful. Could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple boolean-only input, the description lacks context about the staging step, safety, and post-import state. An agent cannot judge if import is safe or reversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear boolean descriptions for each category. The description says 'selected categories' which refers to these booleans, but adds no new semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Import', the resource 'previously staged backup data', and 'for the selected categories' which maps to the input schema. It distinguishes from sibling tools like hortusfox_export_backup by specifying import and staged data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., staging must be done first), exclusions, or when not to use it. The sibling 'export_backup' is not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_increment_inventory_itemIncrement inventory amountA
Increment the amount of an inventory item by one. Returns the new amount. Endpoint: /api/inventory/amount/inc.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The inventory item ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it increments by one and returns the new amount, but with no annotations provided, it could mention error behavior (e.g., if item does not exist) or permission requirements. The endpoint is given, adding some transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first explains the action and return value, second gives the endpoint. Each sentence is necessary and succinct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description is fairly complete: it tells what it does, the effect, return value, and endpoint. It could mention error cases or prerequisites, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description does not add extra meaning beyond the schema's parameter description ('The inventory item ID.'). No additional format or usage details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: increment inventory amount by one, and specifies it returns the new amount. This distinguishes it from the sibling tool 'hortusfox_decrement_inventory_item' by naming the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the name and description imply when to use this tool (to increase count), there is no explicit guidance on when to use it versus alternatives, nor any exclusion context. The sibling tool 'decrement_inventory_item' is the obvious alternative, but not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_list_locationsList locationsB
List locations, optionally including the plants at each location. Endpoint: /api/locations/list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum locations to return. | |
| paginate | No | Optional pagination page/cursor. | |
| only_active | No | If true, only return active locations. Default false. | |
| include_info | No | Which plant fields to include when include_plants is true (e.g. 'id', 'name'). Default 'id'. | |
| include_plants | No | If true, include a plant_count and plant_list for each location. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose behavioral traits beyond schema (e.g., side effects, authentication needs, rate limits). Merely mentions endpoint, which is structural, not behavioral.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with core purpose. Efficiently communicates the essential action and a key option, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description does not explain return format or pagination behavior beyond schema parameters. Adequate for a list tool but could be more helpful by noting default behavior or result structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds no extra meaning to parameters beyond what schema already provides, though it does implicitly link the 'include_plants' option to the description of optionally including plants.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List locations' and mentions optional inclusion of plants at each location, providing specific verb and resource. Differentiates from sibling 'hortusfox_get_location' (single location) and 'hortusfox_list_plants' (plants).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives like 'hortusfox_get_location'. Does not mention when not to use or provide any context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_list_plant_galleryList plant gallery photosB
List all gallery photos for a plant. Endpoint: /api/plants/gallery/list.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | Yes | The plant ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'list all gallery photos' without disclosing result format, pagination, ordering, or any side effects. For a list operation, details about output structure and potential limitations are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences effectively convey the purpose. The endpoint URL is optional but not excessive. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description should provide more context about the return value (e.g., list of photo URLs or metadata) and any default behavior. It feels incomplete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'plant', with a description 'The plant ID.' The tool description adds no extra meaning beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all gallery photos for a plant' which is a specific verb+resource. It distinguishes from siblings like add/edit/remove gallery photos. The title also reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. However, the sibling tool names (e.g., hortusfox_add_plant_gallery_photo) implicitly differentiate read from write operations. No mention of required permissions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_list_plantsList plantsB
List plants, optionally filtered by location, with paging and sorting. Endpoint: /api/plants/list.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Offset: start returning plants from this index (for pagination). | |
| sort | No | Optional sort specifier (column/direction) as accepted by HortusFox. | |
| limit | No | Maximum number of plants to return. | |
| location | No | Optional location ID to filter plants by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions paging and sorting but lacks details on behavior (e.g., default pagination, sorting options, rate limits, authentication). The endpoint is provided but not behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loads the core purpose. The endpoint information is an added benefit. However, it could be slightly more structured with usage hints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and zero annotations, the description is minimal. It covers purpose and basic features but omits response format, error handling, or detailed pagination/sorting behavior. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the schema already documents parameters. The description adds context by hinting at filtering, paging, and sorting, but no additional semantic details beyond what is in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists plants with optional filtering, paging, and sorting. It is distinct from sibling tools like search_plants, but does not explicitly differentiate, so a slight deduction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description implies usage for listing with filters, it provides no explicit guidance on when to use this tool over alternatives like hortusfox_search_plants or when avoid it. No when-not-to-use or prerequisite information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_calendar_entryRemove calendar entryC
Remove a calendar entry by its identifier. Endpoint: /api/calendar/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| ident | Yes | The calendar entry identifier to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It only says 'Remove a calendar entry' without mentioning permanence, side effects, authorization needs, or return behavior. This is severely lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, one sentence plus an endpoint reference. It is front-loaded with the action, though the endpoint detail is redundant. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter removal tool, the description provides minimal viable information. However, it fails to mention the return value (e.g., confirmation or error) which is important for an agent to handle the tool's output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single parameter 'ident', with its description in the schema. The tool description adds no extra semantic value beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Remove' and the resource 'calendar entry', specifying removal by identifier. It distinguishes from sibling tools like add or edit calendar entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites or exclusion criteria, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_inventory_itemRemove inventory itemB
Remove an inventory item by ID. Endpoint: /api/inventory/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The inventory item ID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only mentions the endpoint but does not disclose important behavioral traits such as whether removal is permanent, error handling for non-existent items, or side effects on related data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no unnecessary words. Direct and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete-by-ID operation, the description is adequate in stating the endpoint and action. However, it lacks details on permanence, error responses, and data integrity, which would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'item' parameter described as 'The inventory item ID to remove.' The description adds no new information beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Remove'), resource ('inventory item'), and method ('by ID'). It effectively distinguishes from siblings like add, edit, fetch, and increment/decrement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like hortusfox_decrement_inventory_item or conditions for removal. The description lacks context on prerequisites or scenarios where this action is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_plantRemove plantB
Delete a plant by its ID. Endpoint: /api/plants/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | Yes | The plant ID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the action without disclosing side effects (e.g., cascading deletes, permanence, or error conditions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the action front-loaded. The endpoint URL is extraneous but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks information about return values or output, especially given no output schema. Minimal completeness for a simple delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description. The tool description adds 'by its ID' but no further semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a plant by its ID' with a specific verb and resource, distinguishing it from sibling tools that operate on other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., other remove tools) or when not to use it. Lacks prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_plant_attributeRemove custom plant attributeB
Remove a custom attribute from a plant by its label. Endpoint: /api/plants/attributes/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | The attribute label to remove. | |
| plant | Yes | The plant ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'Remove' without detailing side effects, reversibility, permissions, or what happens if the label does not exist. The endpoint is given but no behavioral context beyond the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence plus endpoint. It is front-loaded with the action. However, it is somewhat minimal; for a simple tool this is acceptable but could include brief context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and simple parameters, the description lacks context about error cases (e.g., nonexistent label or plant), expected results, or prerequisites. An agent would need additional assumptions to handle edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for both parameters. The description adds no additional meaning beyond what the schema provides. Per guidelines, baseline is 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove) and the resource (custom attribute from a plant). It explicitly mentions removal by label, distinguishing it from sibling tools like hortusfox_add_plant_attribute and hortusfox_edit_plant_attribute. The endpoint is also provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for removing a custom attribute, but does not provide explicit when-to-use or when-not-to-use guidance. It does not mention alternatives (e.g., editing the attribute instead) despite siblings existing. The guidance is adequate but minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_plant_gallery_photoRemove plant gallery photoC
Remove a gallery photo by its item ID. Endpoint: /api/plants/gallery/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | The gallery photo item ID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description must disclose behavior. It states removal but omits details like permanence, side effects, or error behavior. The endpoint mention adds little value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and to the point, front-loading the main action. However, it sacrifices useful content for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple removal tool, the basics are covered, but missing context like idempotency, error handling, and relationship to gallery add/edit siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description repeats but does not enrich the parameter definition. The parameter type (anyOf string/number) is not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Remove a gallery photo' and identifies the resource. It distinguishes from sibling tools like add or edit, though it could explicitly mention the parent plant context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., edit instead of remove). No prerequisites or conditions (e.g., photo must exist) are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_plant_log_entryRemove plant log entryB
Remove a plant log entry by its ID. Endpoint: /api/plants/log/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| logid | Yes | The log entry ID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must cover behavioral traits. It only states that it removes an entry, with no mention of side effects, permissions, or what happens if the ID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) and front-loaded with the main action. The endpoint info is extra but not verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and no output schema, the description is minimal and does not explain return values, errors, or typical usage, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the logid parameter fully (100% coverage). The description adds 'by its ID' which aligns with the schema but does not provide additional semantic value beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name and title clearly indicate removal of a plant log entry. The description states the verb 'Remove' and the resource 'plant log entry', and the sibling tools confirm it is distinct from other remove tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, no prerequisites or conditions for use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_remove_taskRemove taskB
Remove a task by ID. Endpoint: /api/tasks/remove.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task ID to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should have disclosed side effects, permissions, or irreversibility. It only states 'remove a task,' providing minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded, and contains only necessary information without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with one parameter and no output schema, the description is minimally adequate but lacks details on error conditions or post-removal state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the parameter 'task' as 'The task ID to remove.' The description adds no new meaning; baseline 3 applies due to 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (remove) and the resource (task), and it distinguishes itself from sibling tools like hortusfox_add_task, hortusfox_edit_task, and hortusfox_fetch_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any prerequisites or context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_search_plantsSearch plantsA
Search plants by a free-text expression (matches name, location, attributes and more). Endpoint: /api/plants/search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional result limit hint. | |
| expression | Yes | The search expression. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions the endpoint and the broad matching scope, but omits important traits such as pagination, read-only nature, default limits, or result format. This leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence plus an endpoint note. It is front-loaded with the key action and scope, wasting no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and only two parameters, the description covers the basic purpose and endpoint. However, it fails to mention what the search returns (e.g., full plant objects or IDs), pagination behavior, or sorting defaults. This leaves the agent with incomplete context for using the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter descriptions already define syntax. The tool description adds value by explaining that 'expression' is a free-text search across multiple fields, but does not add additional context for the 'limit' parameter. Overall, it provides marginal improvement over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and resource 'plants', and specifies that it matches multiple fields (name, location, attributes and more). This distinguishes it from sibling tools like 'list_plants' which likely provides a simple listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not provide guidance on when to use it versus alternatives like 'list_plants'. There is no explicit when-to-use or when-not-to-use context, making it adequate but lacking in decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_update_plantUpdate plant attributeC
Update a single attribute of a plant by name (e.g. name, location, description, humidity, etc.). Endpoint: /api/plants/update.
| Name | Required | Description | Default |
|---|---|---|---|
| plant | Yes | The plant ID to update. | |
| value | Yes | The new value for the attribute. | |
| attribute | Yes | The attribute/field key to change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no description of behavioral traits such as permission requirements, side effects, or whether the attribute must exist. Only states it updates a single attribute.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no wasted words. Endpoint detail is extra but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations; description is minimal but adequate for a simple update tool. Could mention return value or error cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters fully, and the description provides example attribute values (name, location, etc.), adding slight semantic help but not essential beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that the tool updates a single attribute of a plant by name, but 'by name' conflicts with the input schema which expects a plant ID, causing slight confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs siblings like hortusfox_add_plant_attribute or hortusfox_edit_plant_attribute, which have overlapping functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hortusfox_update_plant_photoUpdate plant main photoA
Update the main preview photo of a plant. Set external=true and provide a photo URL to use an external image. Optionally move the current photo into the gallery first. Endpoint: /api/plants/photo/update.
| Name | Required | Description | Default |
|---|---|---|---|
| photo | No | External photo URL (required when external=true). | |
| plant | Yes | The plant ID. | |
| external | No | If true, use an external photo URL (provide `photo`). Default false. | |
| move_to_gallery | No | If true, move the existing main photo into the plant gallery before replacing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the option to move current photo to gallery, but does not clarify default behavior (e.g., whether the current main photo is replaced without backup) or any required permissions. The endpoint is given but adds no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences: purpose, key usage, endpoint. No wasted words, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers external URL use and optional gallery move, but lacks explanation for selecting an internal photo (e.g., from gallery) as main. No mention of return value or error conditions. Adequate but incomplete for all scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds clarity: it explains the relationship between external and photo, and the purpose of move_to_gallery. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'update' and resource 'main preview photo' are clearly stated. The description distinguishes this tool from siblings like 'hortusfox_add_plant_gallery_photo' and 'hortusfox_update_plant' by specifying it updates the main photo, not adding to gallery or modifying plant details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to set external=true and optional move_to_gallery. It implies when to use external vs internal, but does not explicitly contrast with sibling tools for when not to use this tool.
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.
37 tool updates
v1.0.1- Changed
hortusfox_add_calendar_entry3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / class / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / class / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_chat_message1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
hortusfox_add_inventory_item7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / amount / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / amount / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / group / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / group / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / location / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / location / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_plant3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / location / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / location / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_plant_attribute5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / content / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } +] - removed
Input schema / properties / content / typeRemoved value: -[ - "string", - "number", - "boolean" -] - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_plant_gallery_photo3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_plant_log_entry3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_add_task5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / recurring_time / maximumAdded value: +9007199254740991 - added
Input schema / properties / recurring_time / minimumAdded value: +-9007199254740991
- Changed
hortusfox_decrement_inventory_item3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_calendar_entry5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / class / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / class / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / ident / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / ident / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_inventory_item9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / amount / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / amount / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / group / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / group / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / location / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / location / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_plant_attribute5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / content / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } +] - removed
Input schema / properties / content / typeRemoved value: -[ - "string", - "number", - "boolean" -] - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_plant_gallery_photo5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_plant_log_entry3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / logid / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / logid / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_edit_task5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / recurring_time / maximumAdded value: +9007199254740991 - added
Input schema / properties / recurring_time / minimumAdded value: +-9007199254740991 - added
Input schema / properties / task / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / task / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_export_backup1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
hortusfox_fetch_calendar1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
hortusfox_fetch_chat3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991
- Changed
hortusfox_fetch_plant_log7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991 - added
Input schema / properties / paginate / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / paginate / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_fetch_tasks3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991
- Changed
hortusfox_get_location3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / location / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / location / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_get_plant3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_import_backup1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
hortusfox_increment_inventory_item3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_list_locations5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991 - added
Input schema / properties / paginate / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / paginate / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_list_plant_gallery3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_list_plants7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / from / maximumAdded value: +9007199254740991 - added
Input schema / properties / from / minimumAdded value: +-9007199254740991 - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991 - added
Input schema / properties / location / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / location / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_calendar_entry3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / ident / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / ident / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_inventory_item3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_plant3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_plant_attribute3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_plant_gallery_photo3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / item / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / item / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_plant_log_entry3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / logid / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / logid / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_remove_task3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / task / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / task / typeRemoved value: -[ - "string", - "number" -]
- Changed
hortusfox_search_plants3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / limit / maximumAdded value: +9007199254740991 - added
Input schema / properties / limit / minimumAdded value: +-9007199254740991
- Changed
hortusfox_update_plant5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -] - added
Input schema / properties / value / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } +] - removed
Input schema / properties / value / typeRemoved value: -[ - "string", - "number", - "boolean" -]
- Changed
hortusfox_update_plant_photo3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / plant / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + } +] - removed
Input schema / properties / plant / typeRemoved value: -[ - "string", - "number" -]
38 tool updates
v1.0.0- First observed
hortusfox_add_calendar_entry - First observed
hortusfox_add_chat_message - First observed
hortusfox_add_inventory_item - First observed
hortusfox_add_plant - First observed
hortusfox_add_plant_attribute - First observed
hortusfox_add_plant_gallery_photo - First observed
hortusfox_add_plant_log_entry - First observed
hortusfox_add_task - First observed
hortusfox_decrement_inventory_item - First observed
hortusfox_edit_calendar_entry - First observed
hortusfox_edit_inventory_item - First observed
hortusfox_edit_plant_attribute - First observed
hortusfox_edit_plant_gallery_photo - First observed
hortusfox_edit_plant_log_entry - First observed
hortusfox_edit_task - First observed
hortusfox_export_backup - First observed
hortusfox_fetch_calendar - First observed
hortusfox_fetch_chat - First observed
hortusfox_fetch_inventory - First observed
hortusfox_fetch_plant_log - First observed
hortusfox_fetch_tasks - First observed
hortusfox_get_location - First observed
hortusfox_get_plant - First observed
hortusfox_import_backup - First observed
hortusfox_increment_inventory_item - First observed
hortusfox_list_locations - First observed
hortusfox_list_plant_gallery - First observed
hortusfox_list_plants - First observed
hortusfox_remove_calendar_entry - First observed
hortusfox_remove_inventory_item - First observed
hortusfox_remove_plant - First observed
hortusfox_remove_plant_attribute - First observed
hortusfox_remove_plant_gallery_photo - First observed
hortusfox_remove_plant_log_entry - First observed
hortusfox_remove_task - First observed
hortusfox_search_plants - First observed
hortusfox_update_plant - First observed
hortusfox_update_plant_photo
TDQS
Each tool targets a distinct resource and action, with clear prefixes and verbs. No two tools have overlapping functionality; even similar verbs like 'add' and 'create' are used for different entities (e.g., add_plant vs. add_plant_attribute).
All tools follow a consistent pattern: 'hortusfox_verb_noun' in snake_case. Verbs are descriptive and nouns match the resource. No mixing of conventions (e.g., camelCase) and the prefix ensures uniqueness.
38 tools is high for typical MCP servers, which often have 5-15. While the domain (plant management) is broad and justifies many tools, the sheer number may overwhelm agents, leading to selection difficulty. Still, the coverage seems necessary for the system's scope.
Core CRUD for plants, inventory, calendar, tasks, and locations is present, but there are gaps: no way to edit locations (only get/list), inventory lacks search, and no bulk or advanced operations. The backup/import/export tools are a nice addition, but missing location editing is a notable omission.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server and CLI for controlling FarmBot hardware, enabling AI agents to manage gardening tasks through tools like gantry movement and device status monitoring. It supports executing Lua scripts and core hardware commands like homing and emergency stops via the Model Context Protocol.3MIT
- FlicenseNot gradedqualityCmaintenanceEnterprise MCP server providing a suite of tools including file, database, GitHub, Slack, calendar, email, vector search, and Python execution, with safe defaults and OpenAI integration for automatic tool selection.-
- AlicenseAqualityCmaintenanceMCP server for managing houseplants by recording waterings and observations, providing care reminders and diagnosis through natural language.9MIT
- FlicenseNot gradedqualityBmaintenanceMCP server for the CultivarIA platform, enabling AI assistants to query real-time and historical telemetry from cultivation modules, analyze plant health, and control actuators like irrigation and climate systems via standardized tools and resources.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tomfrenzel/hortusfox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server