Skip to main content
Glama
tomfrenzel

hortusfox-mcp

by tomfrenzel

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 build

This produces the runnable server at dist/index.js.

Configuration

The server is configured entirely through environment variables:

Variable

Required

Description

HORTUSFOX_URL

Base URL of your HortusFox instance, e.g. https://garden.example.com

HORTUSFOX_API_TOKEN

API key created in the HortusFox admin panel

HORTUSFOX_TIMEOUT

Request timeout in milliseconds (default 30000)

See .env.example.

Usage

Run directly

HORTUSFOX_URL=https://garden.example.com \
HORTUSFOX_API_TOKEN=your-token \
node dist/index.js

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

Register 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

hortusfox_get_plant

plants/get

plant

hortusfox_add_plant

plants/add

name, location

hortusfox_update_plant

plants/update

plant, attribute, value

hortusfox_remove_plant

plants/remove

plant

hortusfox_list_plants

plants/list

location?, limit?, from?, sort?

hortusfox_search_plants

plants/search

expression, limit?

hortusfox_add_plant_attribute

plants/attributes/add

plant, label, datatype, content

hortusfox_edit_plant_attribute

plants/attributes/edit

plant, label, datatype, content

hortusfox_remove_plant_attribute

plants/attributes/remove

plant, label

hortusfox_update_plant_photo

plants/photo/update

plant, external?, photo?, move_to_gallery?

hortusfox_list_plant_gallery

plants/gallery/list

plant

hortusfox_add_plant_gallery_photo

plants/gallery/add

plant, label?, external?, photo?

hortusfox_edit_plant_gallery_photo

plants/gallery/edit

plant, item, label

hortusfox_remove_plant_gallery_photo

plants/gallery/remove

item

hortusfox_add_plant_log_entry

plants/log/add

plant, content

hortusfox_edit_plant_log_entry

plants/log/edit

logid, content

hortusfox_remove_plant_log_entry

plants/log/remove

logid

hortusfox_fetch_plant_log

plants/log/fetch

plant, paginate?, limit?

Photos: the API-based photo tools support external image URLs (external: true with a photo URL). Direct binary file uploads are not exposed over the token API.

Locations

Tool

Endpoint

Key arguments

hortusfox_list_locations

locations/list

only_active?, include_plants?, include_info?, paginate?, limit?

hortusfox_get_location

locations/info

location, include_plants?

Tasks

Tool

Endpoint

Key arguments

hortusfox_fetch_tasks

tasks/fetch

done?, limit?

hortusfox_add_task

tasks/add

title, description?, due_date?, recurring_time?, recurring_scope?, plant?

hortusfox_edit_task

tasks/edit

task, title?, description?, due_date?, recurring_time?, recurring_scope?, done?

hortusfox_remove_task

tasks/remove

task

Inventory

Tool

Endpoint

Key arguments

hortusfox_fetch_inventory

inventory/fetch

hortusfox_add_inventory_item

inventory/add

name, description?, tags?, location?, amount?, group?, photo?

hortusfox_edit_inventory_item

inventory/edit

item, plus any of the add fields

hortusfox_increment_inventory_item

inventory/amount/inc

item

hortusfox_decrement_inventory_item

inventory/amount/dec

item

hortusfox_remove_inventory_item

inventory/remove

item

Calendar

Tool

Endpoint

Key arguments

hortusfox_fetch_calendar

calendar/fetch

date_from?, date_till?

hortusfox_add_calendar_entry

calendar/add

name, date_from, date_till?, class?

hortusfox_edit_calendar_entry

calendar/edit

ident, name?, date_from, date_till?, class?

hortusfox_remove_calendar_entry

calendar/remove

ident

Chat

Tool

Endpoint

Key arguments

hortusfox_fetch_chat

chat/fetch

limit?

hortusfox_add_chat_message

chat/message/add

message

Backup

Tool

Endpoint

Key arguments

hortusfox_export_backup

backup/export

locations?, plants?, gallery?, tasks?, inventory?, calendar?

hortusfox_import_backup

backup/import

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-tags

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEntry name/title.
classNoOptional calendar class identifier.
date_fromYesStart date (YYYY-MM-DD).
date_tillNoEnd date (YYYY-MM-DD). Defaults to the day after date_from.

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe chat message text.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesItem name.
tagsNoOptional comma-separated tags.
groupNoOptional inventory group ID.
photoNoOptional photo URL.
amountNoOptional current amount/quantity.
locationNoOptional location ID for the item.
descriptionNoOptional item description.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name of the plant.
locationYesID of the location the plant belongs to (see hortusfox_list_locations).

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesAttribute label/name.
plantYesThe plant ID.
contentYesAttribute value/content.
datatypeYesAttribute data type (e.g. text, number, date, boolean) as defined in HortusFox.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_log_entryAdd plant log entryB

Add a log/journal entry to a plant. Returns the new log entry ID. Endpoint: /api/plants/log/add.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantYesThe plant ID.
contentYesThe log entry text.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses 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.

Conciseness4/5

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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantNoOptional plant ID to associate the task with.
titleYesTask title.
due_dateNoOptional due date (e.g. YYYY-MM-DD).
descriptionNoOptional task description.
recurring_timeNoRecurrence interval count. Requires a due_date to take effect.
recurring_scopeNoRecurrence scope/unit (e.g. day, week, month) as accepted by HortusFox.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesThe inventory item ID.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated name/title.
classNoOptional calendar class identifier.
identYesThe calendar entry identifier.
date_fromYesStart date (YYYY-MM-DD).
date_tillNoEnd date (YYYY-MM-DD). Defaults to the day after date_from.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesThe inventory item ID to edit.
nameNoUpdated name.
tagsNoUpdated comma-separated tags.
groupNoUpdated inventory group ID.
photoNoUpdated photo URL.
amountNoUpdated amount/quantity.
locationNoUpdated location ID.
descriptionNoUpdated description.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesThe existing attribute label to edit.
plantYesThe plant ID.
contentYesNew attribute value/content.
datatypeYesAttribute data type.

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_log_entryEdit plant log entryB

Edit an existing plant log entry by its ID. Endpoint: /api/plants/log/edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
logidYesThe log entry ID.
contentYesThe updated log entry text.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
doneNoSet the task done/completed state.
taskYesThe task ID to edit.
titleNoUpdated title.
due_dateNoUpdated due date (e.g. YYYY-MM-DD).
descriptionNoUpdated description.
recurring_timeNoUpdated recurrence interval count.
recurring_scopeNoUpdated recurrence scope/unit.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksNoInclude tasks. Default false.
plantsNoInclude plants. Default false.
galleryNoInclude gallery photos. Default false.
calendarNoInclude calendar entries. Default false.
inventoryNoInclude inventory. Default false.
locationsNoInclude locations. Default false.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_fromNoStart date (YYYY-MM-DD). Defaults to today.
date_tillNoEnd date (YYYY-MM-DD). Defaults to 30 days from today.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum messages to return (default 50).

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum entries to return (default 10).
plantYesThe plant ID.
paginateNoOptional pagination page/cursor.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
doneNoIf true, include done/completed tasks. Default false.
limitNoMaximum tasks to return (default 100).

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationYesThe location ID.
include_plantsNoIf true, include the full list of plants at this location. Default false.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantYesThe plant ID to retrieve.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksNoInclude tasks. Default false.
plantsNoInclude plants. Default false.
galleryNoInclude gallery photos. Default false.
calendarNoInclude calendar entries. Default false.
inventoryNoInclude inventory. Default false.
locationsNoInclude locations. Default false.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesThe inventory item ID.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum locations to return.
paginateNoOptional pagination page/cursor.
only_activeNoIf true, only return active locations. Default false.
include_infoNoWhich plant fields to include when include_plants is true (e.g. 'id', 'name'). Default 'id'.
include_plantsNoIf true, include a plant_count and plant_list for each location. Default false.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_plantsList plantsB

List plants, optionally filtered by location, with paging and sorting. Endpoint: /api/plants/list.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoOffset: start returning plants from this index (for pagination).
sortNoOptional sort specifier (column/direction) as accepted by HortusFox.
limitNoMaximum number of plants to return.
locationNoOptional location ID to filter plants by.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the schema already documents 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identYesThe calendar entry identifier to remove.

TDQS

C2.8/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesThe inventory item ID to remove.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantYesThe plant ID to remove.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelYesThe attribute label to remove.
plantYesThe plant ID.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_log_entryRemove plant log entryB

Remove a plant log entry by its ID. Endpoint: /api/plants/log/remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
logidYesThe log entry ID to remove.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesThe task ID to remove.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional result limit hint.
expressionYesThe search expression.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
plantYesThe plant ID to update.
valueYesThe new value for the attribute.
attributeYesThe attribute/field key to change.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
photoNoExternal photo URL (required when external=true).
plantYesThe plant ID.
externalNoIf true, use an external photo URL (provide `photo`). Default false.
move_to_galleryNoIf true, move the existing main photo into the plant gallery before replacing.

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 37 tool updatesv1.0.1
    • Changedhortusfox_add_calendar_entry3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / class / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / class / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_chat_message1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedhortusfox_add_inventory_item7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / amount / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / amount / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / group / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / group / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / location / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / location / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_plant3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / location / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / location / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_plant_attribute5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / content / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  }
        +]
      • removedInput schema / properties / content / type
        Removed value: -[
        -  "string",
        -  "number",
        -  "boolean"
        -]
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_plant_gallery_photo3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_plant_log_entry3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_add_task5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / recurring_time / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / recurring_time / minimum
        Added value: +-9007199254740991
    • Changedhortusfox_decrement_inventory_item3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_calendar_entry5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / class / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / class / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / ident / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / ident / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_inventory_item9 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / amount / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / amount / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / group / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / group / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / location / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / location / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_plant_attribute5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / content / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  }
        +]
      • removedInput schema / properties / content / type
        Removed value: -[
        -  "string",
        -  "number",
        -  "boolean"
        -]
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_plant_gallery_photo5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_plant_log_entry3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / logid / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / logid / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_edit_task5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / recurring_time / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / recurring_time / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / task / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / task / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_export_backup1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedhortusfox_fetch_calendar1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedhortusfox_fetch_chat3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
    • Changedhortusfox_fetch_plant_log7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / paginate / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / paginate / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_fetch_tasks3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
    • Changedhortusfox_get_location3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / location / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / location / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_get_plant3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_import_backup1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedhortusfox_increment_inventory_item3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_list_locations5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / paginate / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / paginate / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_list_plant_gallery3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_list_plants7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / from / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / from / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
      • addedInput schema / properties / location / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / location / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_calendar_entry3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / ident / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / ident / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_inventory_item3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_plant3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_plant_attribute3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_plant_gallery_photo3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / item / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / item / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_plant_log_entry3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / logid / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / logid / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_remove_task3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / task / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / task / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
    • Changedhortusfox_search_plants3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / limit / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / limit / minimum
        Added value: +-9007199254740991
    • Changedhortusfox_update_plant5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
      • addedInput schema / properties / value / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "boolean"
        +  }
        +]
      • removedInput schema / properties / value / type
        Removed value: -[
        -  "string",
        -  "number",
        -  "boolean"
        -]
    • Changedhortusfox_update_plant_photo3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / plant / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "number"
        +  }
        +]
      • removedInput schema / properties / plant / type
        Removed value: -[
        -  "string",
        -  "number"
        -]
  2. 38 tool updatesv1.0.0
    • First observedhortusfox_add_calendar_entry
    • First observedhortusfox_add_chat_message
    • First observedhortusfox_add_inventory_item
    • First observedhortusfox_add_plant
    • First observedhortusfox_add_plant_attribute
    • First observedhortusfox_add_plant_gallery_photo
    • First observedhortusfox_add_plant_log_entry
    • First observedhortusfox_add_task
    • First observedhortusfox_decrement_inventory_item
    • First observedhortusfox_edit_calendar_entry
    • First observedhortusfox_edit_inventory_item
    • First observedhortusfox_edit_plant_attribute
    • First observedhortusfox_edit_plant_gallery_photo
    • First observedhortusfox_edit_plant_log_entry
    • First observedhortusfox_edit_task
    • First observedhortusfox_export_backup
    • First observedhortusfox_fetch_calendar
    • First observedhortusfox_fetch_chat
    • First observedhortusfox_fetch_inventory
    • First observedhortusfox_fetch_plant_log
    • First observedhortusfox_fetch_tasks
    • First observedhortusfox_get_location
    • First observedhortusfox_get_plant
    • First observedhortusfox_import_backup
    • First observedhortusfox_increment_inventory_item
    • First observedhortusfox_list_locations
    • First observedhortusfox_list_plant_gallery
    • First observedhortusfox_list_plants
    • First observedhortusfox_remove_calendar_entry
    • First observedhortusfox_remove_inventory_item
    • First observedhortusfox_remove_plant
    • First observedhortusfox_remove_plant_attribute
    • First observedhortusfox_remove_plant_gallery_photo
    • First observedhortusfox_remove_plant_log_entry
    • First observedhortusfox_remove_task
    • First observedhortusfox_search_plants
    • First observedhortusfox_update_plant
    • First observedhortusfox_update_plant_photo

TDQS

B3.4/5.0
Disambiguation5/5

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

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness3/5

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

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    3
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enterprise 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.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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

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