gorelo-mcp
Summary: This MCP server exposes read-only Gorelo PSA tools for querying and retrieving service-provider data.
Search and retrieve tickets with filters for status, client, priority, type, assignee, contact, tag, group, keyword, and date ranges.
Inspect ticket details, comments, conversations, approvals, statuses, tags, and types.
Browse clients, client locations, and contacts.
View billing contracts, time entries, billing roles, and work types.
List agent-managed assets and custom assets.
List technicians/users and technician groups.
Use cursor/pageSize pagination on supported list endpoints.
The provided schema does not expose create, update, or delete operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gorelo-mcpshow me open high-priority tickets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gorelo MCP Server
MCP server for Gorelo's PSA (Professional Services Automation) REST API - full Public API coverage (tickets, clients, contacts, assets, billing, projects, documents, alerts, and more) - for AI assistants and the WYRE Conduit gateway.
Authentication
Generate an API key for your Gorelo organization and send it as the X-API-Key header - this server handles that on every request. There is no token exchange.
Related MCP server: TicketAI
Configuration
Copy .env.example and set the variables below.
Env var | Description |
| Gorelo Public API key for stdio and |
|
|
|
|
|
|
| Required to start the HTTP transport. The process logs an error and exits non-zero when this is empty or a known placeholder ( |
| Set to exactly |
| Bind address when a secret is configured. Unset means |
| HTTP port. Defaults to |
| Tool selection; see Tool selection. |
|
|
/health stays unauthenticated, does not call getCredentials(), and does not return the API key. The stdio transport does not use CONDUIT_S2S_SECRET.
HTTP authentication
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The value is t=<unix seconds>,v1=<hex hmac-sha256>, where the HMAC is SHA-256 over the literal string t=<unix seconds> using CONDUIT_S2S_SECRET as the key. A missing or invalid header returns 401. The proof is valid for five minutes of clock skew.
In AUTH_MODE=gateway, /mcp also requires X-Gorelo-Api-Key. X-Gorelo-Region is optional; when present it must be exactly us or au, and any other value returns 400. The API key header is the only credential source for the request. A missing key returns 401 and does not fall back to GORELO_API_KEY.
POST /mcp HTTP/1.1
X-Gateway-S2S: t=1710000000,v1=<hmac-sha256 hex of "t=1710000000">
X-Gorelo-Api-Key: <tenant api key>
X-Gorelo-Region: usRequest limits
HTTP request bodies are capped at 256 KiB (262144 bytes). After the
X-Gateway-S2Scheck passes, aContent-Lengthabove the cap returns 413 with a JSON-RPC error; bodies withoutContent-Lengthare capped by the MCP SDK transport. Unauthenticated requests still get 401 first.tools/callarguments are capped at 10,000 elements (every array item and object key at any depth). Larger inputs return anisErrortool result and are never dispatched.
These limits address CVE-2026-111768 / GHSA-46jr-4wx8-v453 (memory exhaustion during validation) and GHSA-f897-62hf-6gxq (no request body / batch cap).
Tools
112 tools, generated at build time from Gorelo's OpenAPI spec (spec/gorelo-openapi.json, fetched 2026-10-20: 117 operations, 5 excluded). Names follow gorelo_<verb>_<noun>. The 24 read tools from earlier releases keep their names; their arguments are unchanged (camelCase filters such as pageSize/statusIds as arrays, and id for the get_client/get_contact/get_asset/get_time_entry tools).
Tiers follow the HTTP method:
Tier | Methods | Count | Annotations | Default |
read | GET | 58 |
| on |
write | POST / PUT / PATCH | 36 |
| on (the gateway gates writes), except billing writes (below) |
destructive | DELETE | 18 |
| off; set |
Write tools marked admin create or change clients, contacts, the item catalog, invoices or payments.
Money is read-only by default: the four billing writes (gorelo_create_invoice, gorelo_create_payment, gorelo_create_item, gorelo_update_item; every non-DELETE write under the Billing tag except time entries) are hidden from tools/list and refused at call time unless GORELO_ENABLE_BILLING_WRITES=true. The readonly preset hides them regardless. Billing DELETEs are ordinary destructive tools. Time entry create/update are unaffected.
The machine-readable classification (read / write / destructive / admin / billing_write / excluded_binary / excluded_sensitive) comes from node scripts/generate-tools.mjs --tiers <file>.
Request bodies are passed under a single body argument (the JSON object Gorelo documents for that endpoint). Multi-value filters (statusIds, clientIds, ...) take an array, which is sent comma-joined.
Alerts
Tool | Tier | Description |
| read | Lists alerts in Gorelo across all your clients. |
| write | Raises a new alert against one of your clients in Gorelo, such as an alert from an outside monitoring tool. |
Assets
Tool | Tier | Description |
| read | Gets a single agent (managed device) asset by id. |
| read | Gets a single custom asset by id. |
| read | Gets a single uptime check by id. |
| read | Lists agent (managed device) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first). |
| read | Lists the hardware types a custom asset can be given. |
| read | Lists custom (non-agent) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first). |
| read | Lists uptime checks for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first). |
| write | Creates a custom asset, meaning a device without the Gorelo agent, such as a printer or firewall. Use gorelo_list_custom_asset_hardware_types for valid hardware types. |
| write | Creates an uptime check that pings a host, requests a web address or connects to a TCP port on a schedule. |
| write | Updates a custom asset. Send only the fields you want to change. |
| write | Updates an uptime check. Send only the fields you want to change. |
| destructive | Deletes a managed device (agent asset) from Gorelo. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a custom asset from Gorelo. This is destructive and can't be undone from Conduit. |
| destructive | Deletes an uptime check, which stops that monitoring. This is destructive and can't be undone from Conduit. |
Billing
Tool | Tier | Description |
| read | Gets one contract, including the products and labor in each service line. |
| read | Gets one invoice, with its attachments and line items. |
| read | Gets one catalog item (a product or a bundle) by ID. |
| read | Gets a single time entry by id. |
| read | Lists the billing roles configured for the service provider. Use a role's Id as BillingRoleId when logging time against a ticket. |
| read | Lists billing contracts, each with the service lines it is made of. |
| read | Lists the service provider's invoices, filtered and sorted. |
| read | Lists the categories products are organised under, each with its subcategories. |
| read | Lists the service provider's item catalog: products and bundles. |
| read | Lists the tax rates configured for the service provider. |
| read | Lists logged time across every ticket and task, narrowed by any of the filters. |
| read | Lists the work types configured for the service provider. Use a work type's Id as WorkTypeId when logging time against a ticket. |
| write (admin, billing) | Raises a manual invoice against a client, with line items. |
| write (admin, billing) | Creates a product or a bundle in the item catalog. |
| write (admin, billing) | Records a payment received outside Gorelo against an approved invoice. |
| write | Logs time against a ticket. |
| write (admin, billing) | Partially updates an item. Send only the fields you want to change. |
| write | Partially updates a time entry. Send only the fields you want to change. |
| destructive | Deletes a billing contract from Gorelo. This is destructive and can't be undone from Conduit. |
| destructive | Deletes or voids an invoice, depending on its status. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a product or bundle from the item catalog. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a payment that was recorded through the Gorelo API, for example with gorelo_create_payment. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a logged time entry. This is destructive and can't be undone from Conduit. |
Clients
Tool | Tier | Description |
| read | Gets a single client by id. |
| read | Lists the locations for a given client. |
| read | Lists clients for the service provider using cursor pagination. Results are sorted by client id ascending (oldest first). |
| write (admin) | Creates a client (and its default location) for the service provider. |
| write (admin) | Updates an existing client. Only supplied (non-null) fields are changed. |
| destructive | Deletes a client from Gorelo. This is destructive and can't be undone from Conduit. |
Contacts
Tool | Tier | Description |
| read | Gets a single contact by id. |
| read | Lists contacts for the service provider using cursor pagination, optionally filtered by client. Results are sorted by contact id ascending (oldest first). |
| write (admin) | Creates a contact under a client, or a temporary contact when no client is given. |
| write (admin) | Updates a contact. Send only the fields you want to change. |
| destructive | Deletes a contact from Gorelo. This is destructive and can't be undone from Conduit. |
Deletions
Tool | Tier | Description |
| read | Lists records that have been deleted, so a copy kept in sync through this API can remove them. Results are sorted by DeletedOn ascending, then type id, then id, using cursor pagination. |
Documents
Tool | Tier | Description |
| read | Gets a single document. |
| read | Gets one version of a document, with its body and attachments. |
| read | Lists the records a document is related to. |
| read | Lists a document's versions, newest first. |
| read | Lists the service provider's documents. |
| write | Creates a document with an HTML body, either for a client or for internal use, optionally nested under another document. |
| write | Relates a document to other records. |
| write | Makes a copy of a document as a new document. |
| write | Makes an earlier version the current one. |
| write | Updates a document's title, body or placement. Send only the fields you want to change. |
| destructive | Removes one related item from a document. |
Forms
Tool | Tier | Description |
| read | Lists a form's submitted responses, newest first. |
| read | Lists the service provider's forms, most recently updated first. |
| write | Creates a link someone can use to fill in and submit this form. |
Organization
Tool | Tier | Description |
| read | Lists your Gorelo API keys, newest first. Shows names and details only, never the key values. |
| read | Lists the technician groups configured for the service provider. |
| read | Lists users (technicians) for the service provider using cursor pagination. Results are sorted by user id ascending (oldest first). |
Projects
Tool | Tier | Description |
| read | Gets a single project. |
| read | Returns one comment on a project. |
| read | Returns one task in full. |
| read | Gets one approval on a task, with its approvers. |
| read | Returns one comment on a task. |
| read | Returns a project's comments, newest first. |
| read | Lists a project's sections. |
| read | Lists the project tags configured for the service provider. |
| read | Returns a task's comments, newest first. |
| read | Lists the conversations on a task. |
| read | Lists a project's tasks. |
| read | Lists the project types configured for the service provider. |
| read | Lists projects, newest activity first. |
| write | Creates a project in Gorelo. |
| write | Posts a comment on a project. |
| write | Adds a section to a project. |
| write | Creates a task on a project's board. |
| write | Asks contacts to approve something on a task. |
| write | Posts a comment on a task. |
| write | Starts a side conversation on a task. |
| write | Updates a project. Send only the fields you want to change. |
| write | Updates a section's title or colour. Send only the fields you want to change. |
| write | Updates a task. Send only the fields you want to change. |
| destructive | Deletes a project and every task in it. This is destructive and can't be undone from Conduit. |
| destructive | Deletes one comment on a project. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a project section and every task in it. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a project task. This is destructive and can't be undone from Conduit. |
| destructive | Deletes one comment on a task. This is destructive and can't be undone from Conduit. |
Tickets
Tool | Tier | Description |
| read | Gets a single ticket. |
| read | Gets a single approval on a ticket, with its approvers. This is where approval status lives — the conversations list stays lean and does not carry it. |
| read | Gets a single comment on a ticket. Same shape as a comments-list item except that the full BodyHtml is always included, so there is no BodyTruncated field. |
| read | Lists the comments on a ticket using cursor pagination. Comments read oldest-first by default, like a conversation top to bottom. |
| read | Lists the conversations on a ticket. |
| read | Lists the ticket statuses configured for the service provider. |
| read | Lists the ticket tags configured for the service provider. |
| read | Lists the ticket types configured for the service provider. |
| read | Lists tickets for the service provider using cursor pagination. Default sort is updatedOn desc. |
| write | Creates a ticket in Gorelo. |
| write | Creates an approval on a ticket. Every listed contact starts Pending. |
| write | Adds a comment to a ticket. Gorelo shows it as posted by the API, not by you, and To and Cc come from the ticket's conversation. |
| write | Creates a side conversation on a ticket. Post a comment into it afterward using this conversation's returned Id as conversationId with conversationType=3. |
| write | Partially updates a ticket. Send only the fields you want to change. |
| destructive | Deletes a ticket and its time entries. This is destructive and can't be undone from Conduit. |
| destructive | Deletes a private comment from a ticket. This is destructive and can't be undone from Conduit. |
tools/list size
Measured as the JSON size of the tools/list result (names, descriptions, input schemas, annotations):
Configuration | Tools | Bytes |
| 58 | 39,718 |
default (read + write, no billing writes) | 90 | 87,530 |
| 112 | 102,064 |
Use a preset or GORELO_TOOLS_INCLUDE to shrink the list for clients with tight context budgets.
Tool selection
Env var | Description |
|
|
|
|
|
|
| Comma-separated name globs ( |
| Comma-separated name globs; drop matching tools. |
Presets and filters only narrow the set. A tool hidden from tools/list is also refused if called by name. Selection that leaves zero tools refuses to start.
Exclusions
Five operations are deliberately not exposed. Three because the Conduit gateway has no confirmed binary tool-result or upload path:
Operation | Reason |
| multipart file upload |
| returns a binary PDF |
| returns a binary PDF |
The list lives in EXCLUDED_BINARY in scripts/generate-tools.mjs.
Two more are never exposed under any configuration: POST /v1/api-keys and DELETE /v1/api-keys/{apiKeyId} (EXCLUDED_SENSITIVE; credential minting/revocation is out of scope for an AI tool surface). gorelo_list_api_keys stays: it returns key metadata only (id, name, scopes, dates), never the key value.
Behavior
One generic executor runs every tool: path parameters are URL-encoded, the host is always the region's fixed base URL (
us/au), and redirects are refused.HTTP 429 is retried up to 3 times (honoring
Retry-After, capped at 15s, else exponential backoff).Responses over 100KB are truncated with an explicit
[TRUNCATED: ...]marker; narrow with filters orpageSizeand follow the cursor.403 returns
The Gorelo API key for this connection doesn't have permission to run <tool> (HTTP 403). An admin can check the key's permissions in Gorelo under Settings → Integrations.401, 404 and 422 have their own messages. The API key is never included in errors or logs.
Regenerating
npm run generate # rewrite src/generated/tools.ts from spec/gorelo-openapi.json
npm run generate:check # exit 1 if the committed file is stale (also enforced by a test and CI)To pick up a new Gorelo API version, replace spec/gorelo-openapi.json, run npm run generate, review the diff (new operations need no code unless they use a body format other than JSON, which the generator rejects loudly), and commit both files.
Attribution
The operation-to-tool approach, retry/backoff and size-guard logic are adapted from peetinc/gorelo-mcp-all (MIT, Copyright (c) 2026 peetinc). See THIRD_PARTY_NOTICES.md.
Development
npm install
npm run generate # only after changing spec/gorelo-openapi.json
npm run build
npm test
npm run lint # tsc --noEmitDocker
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass a real S2S secret. In gateway mode, the Gorelo API key arrives on each request as X-Gorelo-Api-Key; it is not read from the environment. Do not pass a known placeholder such as your-s2s-secret or changeme. Startup treats those as unset and exits.
docker build -t gorelo-mcp .
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
gorelo-mcpCompose refuses to start when CONDUIT_S2S_SECRET is unset, sets AUTH_MODE=gateway, does not pass GORELO_API_KEY, and publishes 127.0.0.1:8080:8080. A project .env is interpolation only. Do not add env_file to the gateway service.
CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" docker compose upSingle-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses GORELO_API_KEY:
docker run \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e GORELO_API_KEY=your-value \
-e GORELO_REGION=us \
-p 127.0.0.1:8080:8080 \
gorelo-mcpLocal HTTP without a secret is development-only. It binds 127.0.0.1 even if MCP_HTTP_HOST is 0.0.0.0, and logs a warning:
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:httpAvailable Tools
90 toolsgorelo_create_alertB
Raises a new alert against one of your clients in Gorelo, such as an alert from an outside monitoring tool.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for posting an external alert against a client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is covered and the description only adds the external-source framing. It says nothing about whether duplicate alerts are deduplicated, whether the alert can be resolved later, or what the caller gets back on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action and scope with no filler. It is efficient, though it is arguably too thin given the nested body it fronts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with a nested request body and no output schema, the description covers the what but not the outcome — no indication of what ID or object is returned, whether severity defaults apply, or whether ClientId must already exist. Annotations absorb some of the burden, leaving it adequate but with real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body fields (Name, ClientId, Resource, Severity enum, Description) are documented in the schema, so the baseline of 3 applies. The description adds no parameter-level guidance of its own, and notably does not compensate for the garbled Resource description ('g. host name, service).').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Raises') and resource ('a new alert') scoped to a client in Gorelo, which cleanly separates it from the sibling list_alerts reader. It does not name the sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'such as an alert from an outside monitoring tool' implies the intended ingestion scenario, giving the agent a usable context cue. There is no explicit when-not guidance, no mention of how this relates to gorelo_list_alerts, and no note about creating tickets instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_clientB
Creates a client (and its default location) for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a client, along with its default location. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write/non-destructive profile is covered. The description adds one genuinely new behavioral fact — that a default location is created as a side effect — but says nothing about what happens on duplicate names/domains, required auth scope, or what the response returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, and the parenthetical side-effect is front-loaded before any other consideration. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a rich, fully-described nested schema and annotations that cover the safety profile, the description is close to sufficient. However, for a creation tool with no output schema it omits what is returned (e.g. the new client ID) and any failure/duplicate conditions, which an agent would want before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested Location object is thoroughly documented with per-field max lengths, so the schema carries nearly all parameter meaning. The description's only added value is clarifying that the Location object represents the client's default location, not an additional one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ("Creates a client") and adds a meaningful scope detail: a default location is created alongside it. That distinguishes it clearly from read/update siblings like gorelo_get_client and gorelo_update_client, though it never explicitly contrasts with gorelo_list_clients or other create tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g. creating a client with locations separately via gorelo_list_client_locations), and no stated prerequisites, permissions, or duplicate-handling rules. Usage must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_contactA
Creates a contact under a client, or a temporary contact when no client is given.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a contact, under a client or, with no client, as a temporary contact. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, so the description must add value, and it does by disclosing the 'temporary contact' fallback when no client is supplied. It does not cover failure modes (duplicate emails), permission requirements, or what is returned on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loading the primary behavior and appending the branching condition immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with a deeply nested body and no output schema, the description covers the core branching but leaves an agent guessing about the response payload (e.g. created contact ID) and about validation behavior. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each body field is fully documented, so baseline is 3. The description goes one step further by explaining the semantic consequence of omitting the optional ClientId (creates a temporary contact), which the schema itself does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates) and resource (contact) plus the scope variant 'under a client, or temporary'. This naturally separates it from gorelo_update_contact and gorelo_get_contact, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The client/no-client branch is an implicit usage condition, telling the agent which mode to pick based on whether a ClientId exists. There is no explicit guidance about when to prefer create vs update, or prerequisites such as required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_custom_assetA
Creates a custom asset, meaning a device without the Gorelo agent, such as a printer or firewall. Use gorelo_list_custom_asset_hardware_types for valid hardware types.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a custom asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the domain semantics of a custom asset and the hardware-type lookup dependency, but says nothing about what is returned (no output schema exists) or about failure conditions such as an inactive client or location.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the core definition front-loaded and the prerequisite lookup placed second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a single nested body object fully described in the schema, the description covers purpose, the domain definition, and the one external dependency. With no output schema, a note on what the call returns (e.g., the created asset identifier) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every body field (Name, ClientId, ContactId, LocationId, HardwareTypeId, warranty date, etc.) is already documented in the schema. The description's only parameter-relevant contribution is the pointer to the hardware-types listing tool; the baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Creates a custom asset') and then defines the term, disambiguating it from ordinary assets: 'a device without the Gorelo agent, such as a printer or firewall.' The concrete examples make it clear how this differs from sibling asset tools like gorelo_list_assets or gorelo_get_custom_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to gorelo_list_custom_asset_hardware_types to obtain a valid HardwareTypeId, which is real prerequisite guidance. It does not, however, say when NOT to use this (e.g., when the device can run the agent) or contrast with gorelo_update_custom_asset for edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_documentA
Creates a document with an HTML body, either for a client or for internal use, optionally nested under another document.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | A new document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the write-but-safe profile is already conveyed. The description adds the HTML-body nature of the write and the nesting relationship, but says nothing about permissions, side effects, or what a created document returns. Some added context, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb and key scope constraints front-loaded. No wasted text, though it is quite terse for a create tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented nested parameter and annotations covering the mutation profile, the description covers what an agent needs to call it. Only minor gaps remain (permissions, return shape), and no output schema exists to cover the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the nested object documents Body (HTML, no data: URLs), Title (max 200), ClientId, and ParentDocumentId in detail. The description only echoes these at a high level and adds no syntax or formatting detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a document') and adds meaningful scope: HTML body, client vs internal, optional nesting. An agent can distinguish it from gorelo_update_document and gorelo_duplicate_document, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the create context (new document, client or internal, nested or top-level) but gives no explicit when-to-use vs alternatives or prerequisites. The 'either for a client or for internal use' clause clarifies intent somewhat, but routing between create/update/duplicate is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_form_submission_linkB
Creates a link someone can use to fill in and submit this form.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for issuing a submission link. | |
| formId | Yes | Form the link is for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is known. The description adds that the output is a shareable fill-and-submit link, which is useful, but omits whether the link expires, is single-use, or requires auth — meaningful traits for a link-issuing mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean sentence with the core purpose front-loaded and no filler. It is arguably under-specified rather than padded, so brevity is a virtue here rather than a flaw in structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested body object and no output schema, the description should at least say what comes back (a URL?) and how TaskId versus TicketId scoping affects the generated link. Neither is covered, leaving the agent to infer the result shape entirely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents formId, TaskId, and TicketId including their mutual exclusivity. The description adds nothing about parameters, so the baseline 3 applies — the schema carries all the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (creates) and resource (a link for filling in and submitting a form), which is clearly distinct from every sibling tool listed. It stops short of naming which workflow or related endpoint it pairs with, but an agent can identify the operation immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says what the tool does but gives no guidance on when to reach for it versus alternatives such as gorelo_list_form_responses or gorelo_list_forms. There are no prerequisites, no exclusions, and no mention of how TaskId/TicketId scoping should drive the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_projectC
Creates a project in Gorelo.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered by structured data. The description contributes nothing beyond that — no mention of permission requirements, validation failures on missing client/group IDs, or side effects such as watcher/lead assignment rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single short sentence has zero waste and is front-loaded, but it errs toward under-specification rather than conciseness — it conveys no structure for a tool whose payload is a 13-field nested object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a required nested body object and no output schema, the description should say what comes back and how required foreign keys are sourced. Neither is addressed; the description is effectively one restated name against a rich 100%-documented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested body documents all 13 properties including backdating fields and the SharedWithContactIds constraint. The description adds no parameter meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Creates a project"), so the agent knows the operation. However, it adds essentially nothing beyond the tool name gorelo_create_project, and does not distinguish it from siblings such as gorelo_update_project, gorelo_list_projects, or gorelo_create_project_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g. needing valid ClientId/GroupId/LocationId/TypeId values), and no mention of related lookup tools like gorelo_list_clients or gorelo_list_project_types that would supply those identifiers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_commentC
Posts a comment on a project.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for posting a comment on a project. | |
| projectId | Yes | Project to comment on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is covered structurally. The description adds nothing beyond that: it does not mention that the body must be HTML, that attachments must be uploaded first, or what happens if ConversationId is omitted. With the bar lowered by annotations, this still adds no value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, but the brevity is closer to under-specification than to disciplined conciseness for a tool with a nested request body.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a write tool with a nested body object containing optional author/date/conversation/attachment fields and no output schema. The description says nothing about the two-step attachment flow, HTML formatting requirement, or the effects of posting, leaving the description thinner than the tool's complexity warrants.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including detailed nested field docs (HTML body, UTC CreatedOn, attachment upload flow, conversation type enum-ish values). The description contributes nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Posts a comment on a project'), which is enough to separate it from the sibling comment tools that target tasks and tickets. It never names those siblings explicitly, so differentiation is inferred from the word 'project' rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus gorelo_create_project_task_comment, gorelo_create_ticket_comment, or gorelo_list_project_comments. No prerequisites, permissions, or context for posting are given; the agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_sectionC
Adds a section to a project.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for adding a section to a project. | |
| projectId | Yes | Project to add the section to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that—no mention of default color behavior, whether the section is appended or ordered, or what happens on duplicate titles. With annotations present the bar is lower, but this text contributes no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. However, its brevity borders on under-specification, leaving no room for the routing or behavioral context an agent would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents both parameters including the nested body, and annotations cover the mutation/safety profile, so the core invocation is inferable. Still, for a create tool in a dense sibling set, the description should do more to distinguish it and mention prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with nested body fields (Title, Color with default #56A0F9, CreatedByName) fully documented in the schema itself. The description adds no parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Adds') and resource ('a section to a project'), which clearly separates it from siblings like gorelo_update_project_section and gorelo_list_project_sections. It stops short of explicitly naming those alternatives, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus gorelo_update_project_section or gorelo_create_project, no prerequisites (such as needing an existing projectId), and no exclusions. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_taskC
Creates a task on a project's board.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a task inside a project section. | |
| projectId | Yes | Project to create the task in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, covering the mutation/safety profile. The description adds essentially nothing beyond that – no mention of required section nesting, side effects, permissions, or what a successful creation returns, all of which would be valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence that is front-loaded with the action and target. It is appropriately short, though terse given the rich nested body the tool actually accepts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested, multi-field body and no output schema, the description relies heavily on the schema (which is complete) and annotations for safety. The main gaps – when to use it and behavioral/return context – are only partially covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (Title, SectionId, StatusId, PriorityId, etc.) are fully documented in the nested schema. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Creates') and resource ('a task on a project's board'), which lets an agent distinguish this from sibling operations like create_project, create_ticket, or create_project_section. It's clear but doesn't explicitly route against the near-neighbor create_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, prerequisites, or alternatives. With many create_* siblings (create_ticket, create_project_section, create_project_task_approval), nothing tells the agent when this tool is the right choice versus those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_task_approvalB
Asks contacts to approve something on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for asking contacts to approve something on a task. | |
| taskId | Yes | Task the approval is for. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-but-not-destructive profile is covered. The description adds one genuinely useful behavioral fact beyond them — that this reaches out to contacts, implying notifications are dispatched — but says nothing about what an approval record looks like, whether duplicates are permitted, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficiently sized, though the brevity borders on under-specification rather than true concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with a nested body object, two annotations, and no output schema, the description leaves the agent guessing about side effects (notifications), return value, and duplicate handling. The fully documented schema keeps this at minimum-viable rather than inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the nested body and its Name and ContactIds fields, so the schema carries the parameter burden. The description contributes nothing extra — it does not clarify the relationship between projectId and taskId or what 'Name' is displayed as.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action (asking contacts to approve something) and the resource it lives on (a task), so an agent can tell it creates an approval request rather than reading one. It does not, however, distinguish itself from the near-identical sibling gorelo_create_ticket_approval, which the name alone would have to carry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus gorelo_create_ticket_approval or gorelo_get_project_task_approval, no prerequisites, and no note that the task must already exist in the given project. The agent must infer all routing from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_task_commentC
Posts a comment on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for posting a comment on a task. | |
| taskId | Yes | Task to comment on. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive write. The description adds nothing beyond that – it doesn't explain that attachments must be uploaded first, that CreatedOn is for history imports only, or that leaving CreatedByName blank records 'API', all of which are buried in schema descriptions rather than surfaced as behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. Its brevity is not padded, though it slides into under-specification rather than earning the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-body mutation tool with no output schema, the description omits what a caller most needs: whether responses return the created comment, the attachment upload prerequisite, and how ConversationId/ConversationTypeId change the target of the post.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body parameters carry detailed descriptions, so the schema does the heavy lifting. The description adds no parameter meaning of its own, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Posts a comment on a task'), so the agent knows exactly what the tool does. It does not explicitly distinguish itself from project-level or ticket comment siblings, which would have earned a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus gorelo_create_project_comment, gorelo_create_ticket_comment, or the side-conversation tools, and no prerequisites (task must exist, permissions, conversation targeting) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_project_task_side_conversationC
Starts a side conversation on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for starting a side conversation on a task - a thread with somebody outside the task's own… | |
| taskId | Yes | Task to start the conversation on. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write nature is covered structurally. However, the description adds nothing beyond that: it does not disclose that the operation involves outbound communication to external parties (the body requires a Name/Email of an outside person plus CcEmails), nor any permission or notification consequences of starting such a thread.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, so there is no wasted text. The tradeoff is that its brevity comes from under-specification rather than efficient density — nothing beyond the bare action is stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested request body, no output schema, and external-recipient semantics, the description is too thin. An agent still lacks the information that this initiates outbound email to a third party and what occurs on the task once the conversation starts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested body object documents Name, Email, and CcEmails individually, so the schema carries the parameter burden. The description contributes no additional semantics about the projectId/taskId scoping or how the recipient is chosen, which is acceptable at baseline but adds no value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Starts") and resource ("a side conversation on a task"), which is clear enough for an agent to know it creates a new conversation thread rather than listing one. It does not differentiate from the close sibling gorelo_create_ticket_side_conversation, but the tool name's project/task scoping and the schema make the distinction recoverable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus gorelo_create_project_task_comment, gorelo_list_project_task_conversations, or the ticket-side-conversation variant. The only signal is the implied "create a thread" reading of the verb, leaving the agent to infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_ticketC
Creates a ticket in Gorelo.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating a ticket. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive mutation, so the safety profile is covered. Beyond that the description adds nothing: it does not mention that the call sends a 'ticket created' email when SendTicketCreatedEmail is set, that CreatedOn/ClosedOn permit backdating imports, or that referenced IDs must already exist. For a create operation with many side-effect-capable fields, this leaves real behavioral gaps unflagged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and contains no filler, so it is not bloated. But it is under-specified rather than concise — the brevity comes at the cost of any useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The payload is a nested body object with roughly 23 fields, four of them required, and there is no output schema to explain what is returned. For a mutation of this complexity, a bare one-liner leaves the agent without any information about the returned identifier, preconditions, or validation constraints that the schema alone doesn't convey contextually.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every nested field (Title, StatusId, GroupId, TypeId, backdating fields, email flag) is already documented in the schema. The description contributes no additional parameter meaning, which is the expected baseline 3 when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb (creates) and resource (a ticket in Gorelo), so the basic action is unambiguous. However, it does nothing to distinguish this from ticket-adjacent siblings such as gorelo_create_ticket_comment, gorelo_create_ticket_approval, or gorelo_create_ticket_side_conversation, and says nothing about scope or what a created ticket contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. needing valid GroupId/StatusId/TypeId values first via gorelo_list_ticket_statuses and gorelo_list_groups), and no mention of alternatives such as gorelo_update_ticket. The agent must infer all routing from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_ticket_approvalB
Creates an approval on a ticket. Every listed contact starts Pending.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Approval details. | |
| ticketId | Yes | Ticket identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, consistent with a creation tool. The description adds one genuinely useful behavioral fact beyond the annotations — every listed contact starts in Pending status — but omits whether contacts are notified, whether the approval can be edited afterward, and what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the core action front-loaded and the one non-obvious behavioral fact immediately after. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It is a mutation tool with a nested body object and no output schema, yet the description never indicates what is returned (an approval identifier?) or what the caller should do next. Adequate to invoke, thin for a complex create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both ticketId and the nested body fields are already documented. The sentence about contacts starting Pending adds a small amount of meaning to ContactIds, but no syntax, ordering, or limit details beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Creates an approval on a ticket"), which immediately separates it from gorelo_create_project_task_approval. It does not explicitly name that sibling or say how the two differ, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus gorelo_create_project_task_approval, no preconditions (ticket must exist, contacts must be valid), and no statement about what happens if an approval already exists. The agent must infer all of this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_ticket_commentA
Adds a comment to a ticket. Gorelo shows it as posted by the API, not by you, and To and Cc come from the ticket's conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment details. | |
| ticketId | Yes | Ticket identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-read-only, non-destructive mutation. The description adds useful behavioral context beyond annotations: the comment is shown as posted by the API rather than the user, and To/Cc are derived from the ticket's conversation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action and followed by important behavioral details. Every sentence adds value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested schema and no output schema, the description covers the core action, author identity, and recipient behavior. However, it omits return-value expectations, side effects such as notifications, and when to prefer this tool over sibling creation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter semantics are already well documented in the schema. The description's note about To/Cc coming from the conversation adds minor context but does not meaningfully elaborate on the nested parameters like Attachments, CreatedOn, or CreatedByName.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Adds a comment to a ticket.' However, it does not distinguish this tool from sibling tools like gorelo_create_ticket_side_conversation or gorelo_create_ticket_approval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to add comments, but it gives no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives such as side conversations or approvals, which are present as sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_ticket_side_conversationA
Creates a side conversation on a ticket. Post a comment into it afterward using this conversation's returned Id as conversationId with conversationType=3.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Side conversation details. | |
| ticketId | Yes | Ticket identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already state that this is a non-read-only, non-destructive mutation, and the description adds real value: it reveals that a side conversation must be followed by a comment posted with conversationType=3, which is workflow context the annotations lack. It still omits side effects such as sending email to the Email and CcEmails recipients, and whether the operation can be undone. That is enough for a 3, but no higher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two front-loaded sentences with no filler. The sentence about how to follow up is well placed as a next step, though technically it describes a different tool rather than this one. That is minor and still earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a two-parameter mutation with full schema coverage, annotations, and no output schema, and the description states the key response field: the returned Id. An agent knows what to call and what to do next. The only remaining gap is that it says nothing about recipient notification side effects or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested body object documents Name, Email, CcEmails, and AttachPublicConversation, so the schema already carries the meaning of each parameter. The description adds nothing about the parameters in its own schema; instead, it documents conversationId and conversationType=3, which belong to a follow-up call. The baseline of 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Creates a side conversation on a ticket.' That is unambiguous and, combined with the follow-up sentence about posting a comment into it, distinguishes this from gorelo_create_ticket_comment. It never explicitly says how it differs from the sibling list_ticket_conversations or create_project_task_side_conversation, though, so a 4 fits better than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives useful workflow guidance: call this first, then reuse the returned Id as conversationId with conversationType=3. However, it never states when to create a side conversation instead of a plain ticket comment, or what preconditions apply (for example, whether the ticket must be in a certain state). The intended usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_time_entryC
Logs time against a ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Logs time against a ticket. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds nothing beyond that — no mention of validation failures (404 on unknown task/ticket), no side effects on billing or approvals, no note about what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single terse sentence with zero waste, but it is undersized rather than appropriately sized — brevity here comes at the cost of missing information rather than from disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested 13-field mutation with no output schema, the description is thin, but the very rich schema carries most of the load. An agent could call it correctly from the schema alone, though it would learn nothing about outcomes or error behavior from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the ticket/task exclusivity rule, enum values for BillableStatusId, and the 5000-character attachment limit, so baseline 3 applies. The description adds no parameter meaning of its own and its 'against a ticket' phrasing slightly conflicts with the documented TaskId alternative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Logs time'), which distinguishes it from the list/get/update time-entry siblings. However, 'against a ticket' undersells the schema's TicketId-or-TaskId design, so the scope isn't fully accurate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this rather than gorelo_update_time_entry or gorelo_list_time_entries, and no mention of prerequisites such as needing a valid ticket/task, user, or work type. The agent must infer all usage context from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_create_uptime_checkB
Creates an uptime check that pings a host, requests a web address or connects to a TCP port on a schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for creating an uptime check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is a non-read-only, non-destructive operation, so the safety profile is covered. The description adds that checks run on a schedule and support ICMP, HTTP, and TCP targets, but it does not discuss side effects such as AdoptClientAssets or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single well-formed sentence with the core operation and supported check types front-loaded. There is no unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with a nested request body, the description covers the core purpose but leaves out when to use it, prerequisites like the client/location pairing noted in the schema, and side-effect context. The rich schema and existing annotations fill much of the gap, but the description alone is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the detailed field descriptions already carry parameter meaning. The description's mention of host, web address, and TCP port loosely maps to Target fields but adds no syntax, constraints, or required-field guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Creates') and resource ('uptime check') and explains the check types: ping a host, request a web address, or connect to a TCP port on a schedule. It is clear against the list/get/update siblings by name and operation, but it does not explicitly distinguish itself from those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance on when to use it versus viewing, updating, or listing uptime checks. There are no prerequisites, exclusions, or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_duplicate_documentC
Makes a copy of a document as a new document.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | A duplicate of a document. The body may be omitted entirely. | |
| documentId | Yes | Document to duplicate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, which is already the baseline for a create-style operation. The description adds nothing about what a duplicate carries over (versions, related items, comments, attachments), whether the copy is fully independent, or what happens if the source doesn't exist — behaviorally important for a duplication tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the key outcome (a new document) is stated immediately. It is under-specified rather than padded, so conciseness itself is fine.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a duplication mutation with a nested body object and no output schema, the description leaves the important questions unanswered: what the copy includes, whether the duplication is idempotent/repeatable, and what identifying information the response returns for the new document. The only detail an agent gets — where the title comes from — lives in the schema, not the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the schema documents documentId ("Document to duplicate") and the nested body.Title with its 200-char limit and " clone" default behavior. The description adds no parameter detail beyond that, so the baseline 3 applies since the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Makes a copy of a document") and clarifies the result is a new document, so it's clearly distinct from gorelo_get_document or gorelo_update_document. It doesn't explicitly differentiate from the sibling gorelo_create_document, which is the main confusion risk for a duplicate operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to duplicate versus calling gorelo_create_document from scratch, no prerequisites (permissions needed on the source document), and no exclusions. The agent must infer the selection criteria from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_assetBRead-only
Gets a single agent (managed device) asset by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Device identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, so the description is not the sole carrier of behavior. It adds nothing about not-found behavior, id format expectations, or whether the response includes related hardware/assignment data, which would have earned a higher score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with zero filler. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only getter with 100% schema coverage and no output schema, the description covers what is needed to call it correctly. Only minor gaps (what distinguishes an agent asset from custom assets, not-found behavior) remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully documented in the schema ('Device identifier'), so the description need not repeat it. It also doesn't add format, prefix, or lookup-key nuance beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (a single agent/managed-device asset) scoped by id, and the parenthetical clarifies that 'agent' equals a managed device, which helps separate it from gorelo_get_custom_asset. It stops short of explicitly naming the sibling it contrasts with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no reference to alternatives such as gorelo_list_assets (bulk listing) or gorelo_get_custom_asset (a different asset family). The agent must infer the routing from the word 'single' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_clientBRead-only
Gets a single client by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Client identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description carries a lighter burden — but it adds nothing beyond that: no not-found behavior, no permission requirements, no indication of what a client record contains. For a single-record fetch, the null/error case is the main thing an agent needs and it is unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and lookup key front-loaded and zero filler. It is efficient, though its brevity reflects under-specification rather than a tight description of a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required integer, read-only, no output schema needed for a straightforward fetch), and the description covers the operation and the key. Nothing an agent strictly needs to invoke it correctly is missing, though a note on what a client represents would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter at 100% schema description coverage ('Client identifier.'), so the schema already does the work. The phrase 'by id' merely restates the required field; no added meaning such as where to obtain the id or whether it is the internal id vs an external reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets a single client') plus the lookup key ('by id'), which contrasts implicitly with the sibling gorelo_list_clients. It does not explicitly name the list sibling, nor distinguish itself from gorelo_get_contact or other get_* tools, but the verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch one client when you have its id. No explicit when-to-use, no exclusions, and no pointer to gorelo_list_clients for discovery or gorelo_update_client for modification. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_contactCRead-only
Gets a single contact by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description carries a lighter burden, but it adds nothing beyond that: no mention of not-found behavior, no note on what fields a contact returns, no scoping or permission context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, well matched to a one-parameter lookup. It is efficient but so brief that it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-resource fetch with annotations covering the safety profile and a fully documented parameter, the minimum is met. However, an agent gets no signal about the shape of the returned contact record or error semantics, which a slightly longer description could supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 100% schema description coverage, the schema fully documents the id field. The description's "by id" merely restates it and adds no format, type, or sourcing detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Gets a single contact by id"), and the word "single" implicitly distinguishes it from gorelo_list_contacts. It does not name the sibling explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only implies usage through "by id" — the agent can infer it should be used when a contact identifier is already known. There is no explicit guidance on when to prefer gorelo_list_contacts or what to do if the id is unknown or invalid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_contractARead-only
Gets one contract, including the products and labor in each service line.
| Name | Required | Description | Default |
|---|---|---|---|
| contractId | Yes | Identifier of the contract. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating read. The description adds genuine value by disclosing that the response expands into products and labor per service line, which matters given there is no output schema. It says nothing about not-found behavior or permission requirements, so it is useful but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that front-loads the action and resource, then adds the payload detail. Zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with a fully documented schema and a readOnly annotation, the description covers both what it does and what comes back (products, labor, service lines), which compensates for the absent output schema. Only minor gaps remain around error/empty-result handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage ('Identifier of the contract'), so the schema carries parameter semantics. The description adds no format, sourcing, or validation hints for contractId, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('Gets one contract') with added scope detail about what the payload expands into. The singular 'one contract' implicitly distinguishes it from gorelo_list_contracts, but the sibling is never named, so an agent must infer the pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the singular phrasing suggests fetching a known contract ID while gorelo_list_contracts handles discovery. There is no explicit statement of when to prefer this tool, no prerequisite that contractId comes from the list endpoint, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_custom_assetBRead-only
Gets a single custom asset by id.
| Name | Required | Description | Default |
|---|---|---|---|
| customAssetId | Yes | Custom asset identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's burden is light. It adds nothing beyond that, though – no mention of behavior when the id doesn't exist (error vs. empty) or of permissions. Minimum viable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, and the key constraint ('by id') is front-loaded. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with annotations covering safety and full schema coverage, the description plus structured data is sufficient to call it correctly. A note on not-found behavior or the returned asset shape would round it out, but there is no output schema to compensate for it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already documents customAssetId. The description merely echoes that a lookup key is used, adding no format or example detail beyond the schema, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('custom asset') plus the lookup key ('by id'), which distinguishes it from list_custom_assets. It does not explicitly name the sibling it replaces, but the singular 'a single custom asset' makes the split from the list/create/update siblings clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and never mentions that gorelo_list_custom_assets is the alternative when the id is unknown. Usage must be inferred entirely from the tool name and the 'by id' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_documentCRead-only
Gets a single document.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | Document identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, and the description adds nothing beyond that — no mention of whether missing IDs error or return null, permissions needed, or what a document object contains. For a read tool the annotation covers the basics, but no extra behavioral context is offered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste, but it is under-specified rather than deliberately concise. Nothing in it fails to earn its place; there simply is very little of it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should convey what a returned document looks like or at least that the full document record is returned. It provides none of that, leaving the agent unable to predict the response shape for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema fully documents documentId ("Document identifier."). The description adds no format hints (e.g., ID prefix or slug) beyond the schema, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Gets) and resource (a single document), and the singular form distinguishes it from gorelo_list_documents and the create/update/duplicate siblings. It does not explicitly name those siblings, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this instead of gorelo_list_documents, gorelo_get_document_version, or the related-item listing tools. An agent must infer that this is the point-lookup path for a document by ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_document_versionBRead-only
Gets one version of a document, with its body and attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | Yes | Version identifier; it must be one of this document's. | |
| documentId | Yes | Document identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, so the description's added value is the disclosure that the response carries the body and attachments — useful since no output schema exists. It stops short of describing error behavior when a versionId belongs to a different document, which the schema hint explicitly raises as a constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope and response contents are conveyed in one clause. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage and annotations carrying the safety profile, the description covers purpose and return contents adequately. The one gap is behavior on mismatched document/version pairs, which is left to the schema hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both documentId and versionId are already documented, including the constraint that the version must belong to the document. The description adds no syntax, format, or relationship detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets one version of a document') and clarifies the scope as a single version rather than the document or its version list. It does not name gorelo_get_document or gorelo_list_document_versions, so sibling differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no mention of alternatives among the closely related document tools. The agent must infer the selection rule from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_invoiceARead-only
Gets one invoice, with its attachments and line items.
| Name | Required | Description | Default |
|---|---|---|---|
| invoiceId | Yes | Invoice identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile, so the description only needs to add context — and it does, disclosing that the response is expanded to include attachments and line items, which tells an agent it need not make follow-up calls. It omits any note on not-found behavior or whether expansions are optional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with the payload contents attached as a qualifier. Nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers what is returned (the invoice plus attachments and line items) and the annotation covers safety. Minor gaps remain around missing-ID behavior and whether the expansions are always present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the schema already documents invoiceId. The description adds no format, sourcing, or lookup guidance (e.g., where to obtain the ID), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets one invoice') and the singular 'one' implicitly separates it from the sibling gorelo_list_invoices. It stops short of naming the list alternative explicitly, so it's clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers this is the tool for fetching a single invoice by ID rather than enumerating them. There is no explicit when-to-use statement, no mention of gorelo_list_invoices as the alternative, and no prerequisites or error conditions described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_itemARead-only
Gets one catalog item (a product or a bundle) by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Identifier of the item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds the useful fact that the returned entity may be a product or a bundle, but says nothing about behavior when the ID is not found or whether related data is included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with the parenthetical clarification earning its place. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool this is nearly adequate, but no output schema exists, so the description would ideally say what the item record contains or what happens on a miss. That gap leaves it at minimum viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single itemId parameter, so the schema already carries the semantics. The description's 'by ID' merely restates it without adding format or sourcing guidance, making baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('catalog item') and clarifies that an item may be a product or a bundle, which is genuine value over the name. It does not name the sibling list_items or otherwise differentiate beyond the 'by ID' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'by ID' implies this is the single-record lookup and that list_items would be used for enumeration, but that inference is left to the agent. There is no explicit when-to-use or when-not sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_projectCRead-only
Gets a single project.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the description adds nothing on safety. It also says nothing about what happens with an unknown or malformed projectId (error vs empty result), which is the only behavioral question that matters here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is not padded, though it is also near the lower bound of useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-param read tool with annotations and full schema coverage, the description is minimally sufficient. Missing only the not-found/error behavior, which an agent would benefit from knowing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single required parameter (projectId), so the schema already carries parameter meaning. The description adds no format, ID-type, or lookup hints beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Gets a single project"), and "single" implicitly contrasts with the sibling gorelo_list_projects. It does not explicitly name that alternative or distinguish itself from gorelo_get_project_task, but the core operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus gorelo_list_projects or gorelo_get_project_task, and no prerequisites or error conditions stated. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_project_commentCRead-only
Returns one comment on a project.
| Name | Required | Description | Default |
|---|---|---|---|
| commentId | Yes | Comment to return. | |
| projectId | Yes | Project the comment belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not say what happens if the commentId does not exist, whether comments from other projects are rejected, or what the returned payload contains. For a pure getter the bar is lower, but no added context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though the brevity reflects under-specification as much as tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With low complexity, a fully documented two-parameter schema, and readOnlyHint covering safety, the description is minimally sufficient for calling the tool. However, with no output schema and no mention of return contents or not-found behavior, an agent cannot predict what it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both projectId and commentId carry inline descriptions, so the schema already does the parameter work. The description adds no format, scoping, or constraint information beyond that, which makes the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Returns') and a specific resource ('one comment on a project'), and the word 'one' distinguishes it from the sibling gorelo_list_project_comments. It stops short of naming that sibling or otherwise explicitly differentiating, so it is clear but not fully disambiguated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool rather than gorelo_list_project_comments or gorelo_create_project_comment, and no preconditions or alternatives are mentioned. An agent must infer that this is the single-item lookup path from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_project_taskCRead-only
Returns one task in full.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task to return. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safe-read profile, so the description only needs to add context. 'In full' gestures at return completeness but says nothing about not-found behavior, permission scoping on projectId/taskId, or what fields the full payload contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though the brevity shades into under-specification rather than true concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining what comes back, and 'in full' is too vague to define the returned shape. For a two-required-parameter getter with no annotations beyond read-only, the definition does not do enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required parameters (projectId, taskId) are already documented as strings pointing at the task and its project. The description adds no semantics beyond the schema, which is acceptable at this coverage level but is the baseline, not a contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns) and resource (one task), and 'in full' hints at full-detail retrieval versus the list sibling. But it never names gorelo_list_project_tasks or gorelo_get_project_task_approval, so an agent must still infer which task-retrieval tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives such as list_project_tasks for multiple tasks or the approval sub-resource tool. The agent is left to infer selection purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_project_task_approvalBRead-only
Gets one approval on a task, with its approvers.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task the approval is on. | |
| projectId | Yes | Project the task belongs to. | |
| approvalId | Yes | Approval identifier, from the conversations endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The phrase 'with its approvers' adds useful context about what the response includes, which goes beyond the annotations. However, with no output schema, no further behavioral details (error cases, whether approvers is always present) are given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every word (verb, singular resource, included relation) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read getter with full annotation and schema coverage, the description is minimally adequate. Without an output schema, the sole cue about return data is 'with its approvers', leaving the shape of the approval object unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter documented including the origin of approvalId ('from the conversations endpoint'). The description adds no parameter detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('one approval on a task'), which distinguishes it from the sibling gorelo_create_project_task_approval. It doesn't clarify what an 'approval' is or how it differs from gorelo_get_ticket_approval beyond the task context, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives and no exclusion conditions. The agent must infer usage entirely from the name and the fact that an approvalId is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_project_task_commentCRead-only
Returns one comment on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task the comment belongs to. | |
| commentId | Yes | Comment to return. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's only job is to add context — and it adds none. It says nothing about behavior when the comment, task, or project ID is invalid, whether it returns deleted comments, or if any permission scoping applies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single nine-word sentence with no filler and the resource front-loaded. It is lean to the point of under-specification, which is a completeness problem rather than a conciseness one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get-by-id tool with a fully documented three-parameter schema and a readOnlyHint annotation, this is close to adequate. The remaining gap is the absent output schema combined with no description of the returned comment's shape or not-found behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — each of projectId, taskId, and commentId is documented with its parent-child relationship — so the baseline of 3 applies. The description confirms the three IDs form a hierarchy (project → task → comment) but adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Returns one comment on a task") with the singular scope implied by "one". It is clear, but it never names the sibling that lists many comments (gorelo_list_project_task_comments) or the one that creates them, so the agent must infer the distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus gorelo_list_project_task_comments or gorelo_get_project_task. The get-by-id shape is implied by the required IDs in the schema, but the description contributes no usage guidance or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_ticketCRead-only
Gets a single ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| ticketId | Yes | Ticket identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description owes additional context and delivers none. It says nothing about error behavior for a missing/invalid ticketId, permission requirements, or the shape of the returned ticket, all of which matter for a get-by-id call with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is free of redundancy and front-loaded, but its brevity reflects under-specification rather than disciplined concision. There is no wasted text, yet almost nothing is conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and no nested objects, the description should at minimum hint at what is returned or what happens on a not-found ID. Neither is present, so an agent knows only that a ticket comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single ticketId parameter, so the schema already defines it and the baseline is 3. The description adds no semantics beyond the schema, such as whether the ID is a numeric string, internal ID, or external reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Gets a single ticket" states a concrete verb and resource, and the word "single" distinguishes it from the sibling list_tickets. However, it does not distinguish it from the other get_* siblings (get_ticket_approval, get_ticket_comment) or indicate what a ticket record contains, leaving the purpose only minimally specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus list_tickets, update_ticket, or the related get_ticket_* tools. The requirement of a ticketId implies retrieval-by-identifier, but that inference is left entirely to the caller.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_ticket_approvalARead-only
Gets a single approval on a ticket, with its approvers. This is where approval status lives — the conversations list stays lean and does not carry it.
| Name | Required | Description | Default |
|---|---|---|---|
| ticketId | Yes | Ticket identifier. | |
| approvalId | Yes | Approval identifier, from the conversations endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the description's job is lighter. It does add useful context that this endpoint is the sole home of approval status and that conversations are intentionally lean, but says nothing about response shape, permissions, or whether approver data can be paginated or partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded; the second sentence earns its place by explaining why approval status is not available elsewhere. Slightly indirect phrasing ('This is where approval status lives') rather than a crisp statement of scope keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter read tool with full schema coverage and no output schema, the description covers what is retrieved (the approval plus its approvers) and why it exists as a separate endpoint. The only gap is the shape of the returned approval object, which matters somewhat given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both ticketId and approvalId are already documented, including the note that approvalId comes from the conversations endpoint. The description adds no additional syntax, format, or sourcing guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and a precisely scoped resource ('a single approval on a ticket, with its approvers'), which separates it from the plural/list siblings like gorelo_list_ticket_conversations. It doesn't name the parallel task-level tool (gorelo_get_project_task_approval) that an agent might confuse it with, so differentiation is strong but not complete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies usage — look here for approval status because the conversations list deliberately omits it — which is a genuine routing hint. However, it never states an explicit 'use this when...' condition or names a specific alternative sibling tool to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_ticket_commentARead-only
Gets a single comment on a ticket. Same shape as a comments-list item except that the full BodyHtml is always included, so there is no BodyTruncated field.
| Name | Required | Description | Default |
|---|---|---|---|
| ticketId | Yes | Ticket identifier. | |
| commentId | Yes | Comment identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuine value beyond that: it discloses the return shape (same as a list item) and the key behavioral difference that full BodyHtml is always present and BodyTruncated is omitted, which is exactly the context needed with no output schema present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the operation and then explain the one meaningful difference from a list item. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-param read tool with fully documented params and readOnly annotations, the description covers the essential missing piece (return shape and the BodyHtml/BodyTruncated distinction). It does not mention error behavior for missing IDs, but nothing critical is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both ticketId and commentId are already documented in the schema. The description adds no additional meaning about identifier format or scoping, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Gets a single comment on a ticket') clearly states what it returns. It implicitly contrasts with the list variant ('a single comment'), but never names gorelo_list_ticket_comments or the parallel get_project_comment/get_project_task_comment siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The singular framing implies fetching one comment by ID rather than enumerating, which is enough to distinguish from the list tool. But there is no explicit when-to-use guidance, no mention of when to prefer the list endpoint, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_time_entryBRead-only
Gets a single time entry by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Time entry to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered; the description adds nothing beyond that — no mention of what happens with an invalid or missing id, whether archived/deleted entries are returned, or any permission scoping. For a trivial getter this is tolerable but still a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every word contributes to identifying the operation and its scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a one-parameter getter with readOnlyHint and a fully documented schema, the description is close to sufficient, but with no output schema it never indicates what the returned entry contains or how a not-found case behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the schema itself describing it as 'Time entry to read.' The description's 'by id' adds no syntax, format, or sourcing detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('a single time entry by id'), so an agent can tell it fetches one record rather than a collection. It doesn't explicitly name gorelo_list_time_entries or gorelo_update_time_entry as the alternatives, but 'single ... by id' implicitly separates it from the list sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use statement, no prerequisites, and no alternatives named. An agent must infer that this is the tool to call when it already holds a time entry id and wants the full record rather than a list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_get_uptime_checkBRead-only
Gets a single uptime check by id.
| Name | Required | Description | Default |
|---|---|---|---|
| checkId | Yes | Uptime check identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile, so the description needed to add context such as behavior on a nonexistent id, what fields come back, or whether errors are thrown. It adds no behavioral information beyond what annotations and the name already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; every word contributes to identifying the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage and a readOnlyHint annotation, the description is sufficient to call it correctly. Only minor behavioral detail (not-found handling) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single checkId parameter, so the schema carries the parameter documentation. 'By id' only restates that the identifier selects the record and adds no format or validity detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('uptime check') plus the retrieval key ('by id'), which distinguishes it from gorelo_list_uptime_checks. It does not name the sibling explicitly, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'A single uptime check by id' implies this is the fetch-one counterpart to the list tool, but there is no explicit when-to-use guidance and no named alternative. Adequate inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_alertsCRead-only
Lists alerts in Gorelo across all your clients.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor from a previous page. | |
| typeIds | No | type ids: Uptime=1, API=2, Script=3, External=4, Slide=5, Huntress=6, Error Event Log=7, Disk Usage=8, Connectivity=9, Process=10… | |
| pageSize | No | Alerts per page, 1-200. Defaults to 50. | |
| clientIds | No | client ids. An alert type that carries no client id never matches this filter. | |
| deviceIds | No | device ids (guids). | |
| sortOrder | No | desc (default, newest first) or asc. Sorted by CreatedOn. | |
| statusIds | No | status ids: New=1, Dismissed=2, Ticketed=3. Any other id is a 400. | |
| createdSince | No | Keeps only alerts raised at or after this instant (UTC). | |
| createdBefore | No | Keeps only alerts raised strictly before this instant (UTC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's only added value is the cross-client scope phrase. It says nothing about pagination via cursor, the default page size of 50, default sort order, or the shape of the returned alert records.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity reflects under-specification rather than tightly packed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter, paginated list tool with no output schema, the description omits pagination behavior, result ordering, and any indication of what an alert record contains. An agent can infer it is a read, but not how to page through or interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the nine parameters, including enum-like id mappings and cursor semantics, is already documented in the schema. The description adds no parameter detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Lists) and resource (alerts) and adds a scope qualifier ('across all your clients'). The only sibling in the alert family is gorelo_create_alert, so no explicit disambiguation is strictly needed, but the scope phrase sits slightly at odds with the clientIds filter in the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites, and no statement about what to do when results are truncated. 'Across all your clients' is the only contextual hint, and it is never framed as a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_api_keysARead-only
Lists your Gorelo API keys, newest first. Shows names and details only, never the key values.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page, from 1 to 200 (default 50). A value outside that range is rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description goes further by disclosing sort order (newest first) and that key values are deliberately withheld from the payload. That field-exclusion detail is the kind of context an agent cannot infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, action and ordering first, the security caveat second. No filler and nothing an agent must read past to get the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly sketches what comes back (names and details, not secret values), and pagination lives in the schema. Adequate for a simple zero-required-parameter read tool, though an explicit note that the listing is unfiltered would close the last gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with cursor and pageSize fully documented including range and default, so the description carries no burden here. It adds nothing about pagination behavior, which is fine given the schema covers it — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists your Gorelo API keys') plus ordering ('newest first') and field scope ('names and details only, never the key values'). No sibling tool covers API keys, so an agent can immediately tell this is the only key-listing route.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — browse/inspect API keys — and the sentence 'never the key values' usefully heads off a misuse attempt (expecting secrets back). But it never states when to use this versus anything else, nor where to go if the actual key value is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_assetsARead-only
Lists agent (managed device) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the device name, display name and description. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| clientIds | No | client ids to include. Omit for every client. | |
| statusIds | No | device status ids to include: 1 Unreachable, 2 Active, 3 Inactive, 4 Pending Delete, 6 Pending client inactive. | |
| createdSince | No | ISO-8601 timestamp; keeps only devices created at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only devices updated at or after it. | |
| createdBefore | No | ISO-8601 timestamp; keeps only devices created strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only devices updated strictly before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered by structured data. The description adds genuinely new behavioral facts: results are cursor-paginated and ordered by createdOn descending, which tells the agent how to iterate and what the first page means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first states the resource and pagination model, the second states sort order. Front-loaded and free of repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter, fully documented list tool with a read-only hint and no output schema, the description covers the essentials of how to page and what ordering to expect. The only gap is that, absent an output schema, it never indicates what a returned asset record contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all nine optional parameters, including the cursor/pageSize mechanics that the description only alludes to. The description adds no filter semantics (e.g., how query matches, whether date bounds compose) beyond what the schema already documents, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource and narrows the scope to 'agent (managed device) assets for the service provider', which implicitly separates it from the custom-asset siblings in the toolset. It does not name the closest alternative (gorelo_list_custom_assets) explicitly, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description tells you the tool enumerates devices page by page, newest first, with no statement of when to prefer it over gorelo_list_custom_assets or gorelo_get_asset. No prerequisites, exclusions, or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_billing_rolesARead-only
Lists the billing roles configured for the service provider. Use a role's Id as BillingRoleId when logging time against a ticket.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value by explaining how the returned Id is consumed (BillingRoleId on time entries), but says nothing about pagination, result shape, or whether roles are provider-scope vs client-scope. Reasonable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core purpose front-loaded and the downstream hint second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool with no output schema, the definition covers what the agent needs to select and use it, including the downstream Id usage. A brief note on what the list returns (Id, name, scope) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this scores 4. The description does not need to explain inputs, and it does not misleadingly imply any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the billing roles configured for the service provider'), which is unambiguous and distinct from generic list_* siblings like list_users or list_groups. It stops short of explicitly differentiating itself from adjacent admin-listing tools, but the resource noun is specific enough for an agent to identify it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives concrete downstream guidance: use a role's Id as BillingRoleId when logging time against a ticket, effectively pointing to the time-entry workflow. It lacks an explicit 'when not to use' or a named sibling alternative, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_client_locationsCRead-only
Lists the locations for a given client.
| Name | Required | Description | Default |
|---|---|---|---|
| clientId | Yes | Client identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and the description adds nothing beyond that—no pagination behavior, no statement about what happens when the client has no locations or does not exist, and no indication of return shape. For a list tool the description's contribution is essentially nil beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though its brevity borders on under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool with full schema coverage and an existing readOnlyHint, the minimum needed to call it correctly is present. Still, useful context such as result ordering, pagination, or empty-result behavior is absent, leaving it merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single clientId parameter is fully documented in the schema as the 'Client identifier.' The description adds no format or semantic detail beyond that, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') with a specific resource ('locations') and its scope ('for a given client'), so the operation is unambiguous. It does not, however, distinguish itself from related siblings such as gorelo_get_client, which could plausibly return location data too.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this instead of gorelo_get_client or gorelo_list_clients, and no prerequisites or exclusions are stated. The only implied usage comes from the required clientId parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_clientsARead-only
Lists clients for the service provider using cursor pagination. Results are sorted by client id ascending (oldest first).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the client name, alternate name, billing name and web domains. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| statusIds | No | client status ids to include: 1 Active, 3 Credit hold, 4 Archived. | |
| createdSince | No | ISO-8601 timestamp; keeps only clients created at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only clients updated at or after it. | |
| createdBefore | No | ISO-8601 timestamp; keeps only clients created strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only clients updated strictly before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations by disclosing cursor pagination and the ascending client-id sort order, but it says nothing about permissions, rate limits, or what fields are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste. The core purpose is front-loaded, and the pagination and ordering details earn their place as non-obvious behavioral context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with a fully documented eight-parameter schema and a readOnly annotation, the description covers the important non-schema behavior: pagination method and sort order. It stops short of describing return fields, but no output schema exists and the schema handles filtering details, so the remaining gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters (query, cursor, pageSize, statusIds, date filters) are already documented in the schema. The description's mention of cursor pagination and sorting adds little parameter-level meaning beyond that, making 3 the appropriate baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists clients') and narrows the scope to 'the service provider.' It does not explicitly differentiate from siblings like gorelo_get_client or gorelo_list_client_locations, but the resource noun is clear enough that an agent can distinguish this as the collection endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as the paginated list endpoint and mentions cursor pagination, but it does not say when to prefer this over gorelo_get_client for retrieving a single client or when to use gorelo_list_client_locations. No explicit exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_contactsARead-only
Lists contacts for the service provider using cursor pagination, optionally filtered by client. Results are sorted by contact id ascending (oldest first).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the contact email addresses, first name and last name. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| clientId | No | Deprecated single-client filter, superseded by clientIds. Still accepted; ignored when clientIds is supplied. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| clientIds | No | client ids to include. Omit for every client. | |
| statusIds | No | contact status ids to include: 1 Active, 3 Temporary, 4 Archived. | |
| createdSince | No | ISO-8601 timestamp; keeps only contacts created at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only contacts updated at or after it. | |
| createdBefore | No | ISO-8601 timestamp; keeps only contacts created strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only contacts updated strictly before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile comes from structured data. The description adds genuinely useful behavior beyond that: results are sorted by contact id ascending (oldest first) and paging is cursor-based. It does not cover result size limits, error conditions, or what a page contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the key operational facts (pagination style, sort order) are front-loaded. Nothing is repeated from the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 optional parameters and no output schema, the description is adequate on ordering and pagination but says nothing about the shape or fields of returned contacts, which the agent must infer. It is sufficient to make the call but not to interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, covering query, cursor, pageSize clamping, clientIds/clientId deprecation, statusIds enum values, and date filters. The description only mentions the optional client filter, which the schema already explains, so it adds no meaning beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists contacts'), plus scope ('for the service provider') and ordering. It distinguishes itself from gorelo_get_contact and gorelo_create_contact only implicitly through the verb 'list', so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'optionally filtered by client' and the pagination mention, but there is no explicit guidance on when to prefer this over gorelo_get_contact or on how to page through results versus fetching a single record. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_contractsBRead-only
Lists billing contracts, each with the service lines it is made of.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it. | |
| pageSize | No | Number of items per page. Clamped to 1-200 (default 50). | |
| clientIds | No | client ids; keeps only contracts billed to any of them. | |
| statusIds | No | status ids: 1 Active, 2 Expired, 3 Archived. Omitted returns Active and Expired (archived excluded). Any other id is a 400. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the bar is lower. The description does add real context beyond the annotation by disclosing that service lines are embedded in each returned contract (valuable since there is no output schema), but it says nothing about pagination flow or the default exclusion of Archived contracts, which lives only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource and its notable return characteristic are stated immediately. Nothing is restated or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a fully-optional-parameter read tool with 100% schema coverage and no output schema, the description covers what the tool returns (contracts plus their service lines), which is the main thing the schema cannot convey. It falls short only on pagination behavior and the filter-based usage context, which are minor gaps given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so cursor semantics, page-size clamping, and the statusId enum mapping are already fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (billing contracts) plus the nested service-line content of each record. It does not explicitly distinguish itself from the sibling gorelo_get_contract or mention that filters are available, so sibling differentiation is only implicit in the plural name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no mention of the clientId/statusId filters that would make this the right choice over gorelo_get_contract, and no note about when another tool is preferable. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_custom_asset_hardware_typesBRead-only
Lists the hardware types a custom asset can be given.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, so the description need not repeat that. It adds the useful gloss that this is a fixed catalog of values that can be assigned to a custom asset, distinguishing it from a data listing, but says nothing about ordering, pagination, or whether the list is static.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with no filler. It is arguably too terse rather than too long, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read with annotations covering safety and no output schema, the definition is minimally adequate. It leaves open what a returned 'hardware type' looks like (id vs name) and whether the caller should pass it directly to create/update_custom_asset, which an agent would need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; baseline 4 applies. No misleading parameter hints are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Lists the hardware types') and adds scope with 'a custom asset can be given,' making clear this is the enum of assignable hardware types. It does not name or differentiate itself from any sibling, but no sibling covers this resource, so confusion risk is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no mention of the obvious related tools (gorelo_create_custom_asset, gorelo_update_custom_asset) whose fields this list would populate. Usage is only inferable from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_custom_assetsARead-only
Lists custom (non-agent) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the asset name, description and serial number. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| clientIds | No | client ids to include. Omit for every client. | |
| createdSince | No | ISO-8601 timestamp; keeps only assets created at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only assets updated at or after it. | |
| createdBefore | No | ISO-8601 timestamp; keeps only assets created strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only assets updated strictly before it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description still adds real behavioral context by disclosing cursor pagination and the default sort order (createdOn descending, newest first), which an agent needs to reason about paging through results. It stops short of describing what a returned item contains or whether the cursor is stable across filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste; scope and pagination come first, and the sort order follows. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight optional filters, no output schema, and readOnlyHint carrying safety, the description covers the essentials: scope, paging model, and default ordering. The notable remaining gap is that, absent an output schema, it says nothing about the shape of a returned asset, so an agent cannot anticipate fields without a follow-up call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the description adds no filter semantics beyond the schema (it mentions cursor pagination, which the cursor param already explains). Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists custom (non-agent) assets") plus the scope "for the service provider," and the parenthetical "non-agent" implicitly separates it from gorelo_list_assets. No sibling is named explicitly, so an agent must infer the boundary, keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the "non-agent" qualifier suggests when to pick this over the general asset list, but there is no explicit when-to-use, when-not-to-use, or named alternative (gorelo_list_assets, gorelo_get_custom_asset). Adequate but with a clear routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_deletionsARead-only
Lists records that have been deleted, so a copy kept in sync through this API can remove them. Results are sorted by DeletedOn ascending, then type id, then id, using cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ISO-8601 UTC timestamp; keeps only deletions at or after it. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| typeIds | Yes | Required. Comma-separated record types to include: 1 Client, 2 Contact, 3 Contract, 4 Ticket, 5 Item, 6 Invoice, 7 Custom asset, 8 Project, 9 Task. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral detail beyond that: results are sorted by DeletedOn ascending, then type id, then id, and pagination is cursor-based. It does not describe retention limits or the deleted-record payload shape, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and followed by the sorting and pagination behavior. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with fully described parameters and readOnlyHint=true, the description covers purpose, sync use case, ordering, and pagination. Because there is no output schema, the absence of deleted-record field details is a minor gap, but not one that blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description only mentions cursor pagination generically and adds no parameter-specific semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it lists deleted records, and it explains the sync use case of removing those records from a copy. It is clearly distinct from active-record list tools, though it does not name a specific sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: keeping a copy in sync by discovering deletions that need to be removed locally. It does not include explicit exclusions or name alternative tools, but the intended scenario is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_documentsCRead-only
Lists the service provider's documents.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the title. Max 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| sortBy | No | Sort field: createdOn (default) or updatedOn. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| clientIds | No | client ids. Returns only those clients' documents, never internal ones. | |
| isStarred | No | Keeps only starred (true) or unstarred (false) documents. | |
| sortOrder | No | Sort direction: asc or desc (default). | |
| statusIds | No | status ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400. | |
| isInternal | No | true for internal documents only, false for client documents only. | |
| createdSince | No | Keeps only documents created at or after this UTC instant. Restoring a version resets a document's created time. | |
| updatedSince | No | Keeps only documents updated at or after this UTC instant (ISO 8601). Documents never updated are left out. | |
| createdBefore | No | Keeps only documents created strictly before this UTC instant. | |
| updatedBefore | No | Keeps only documents updated strictly before this UTC instant. | |
| parentDocumentId | No | Only the documents nested directly under this document. | |
| isPublicLinkEnabled | No | Keeps only documents whose public link is on (true) or off (false). | |
| isPublishedToPortal | No | Keeps only documents published (true) or not published (false) to the client portal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered by structured data and the description adds nothing on that axis. It also says nothing about the notable behavioral defaults that exist (archived excluded unless statusIds given, default page size of 50, out-of-range page sizes rejected rather than clamped) – though those live in the schema, the description contributes no context beyond restating the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with zero waste, which is structurally clean, but it is concise through under-specification rather than economy – the brevity leaves the reader without any orientation for a 16-filter query tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 16 optional filters and no output schema, the description should at minimum clarify the document scope (client vs internal vs both) and the default archived exclusion. Neither is present, and the one sentence present mislabels the corpus as the service provider's own documents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 16 parameters are self-documenting with defaults, enums-by-convention and rejection semantics. Baseline 3 applies; the description adds no parameter meaning of its own, and its 'service provider's documents' framing slightly undercuts the clientIds/isInternal scoping the schema exposes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb ("Lists") and resource ("documents"), so the basic operation is identifiable. However, "the service provider's documents" is vague and arguably misleading: the schema exposes clientIds and isInternal, showing both client and internal documents are returned. It also does nothing to distinguish this from sibling readers like gorelo_get_document or gorelo_list_document_versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this list endpoint versus gorelo_get_document for a single document, or versus gorelo_list_document_versions. No prerequisites, no mention of what happens when filters are omitted, no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_document_versionsBRead-only
Lists a document's versions, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| documentId | Yes | Document identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's added value is the ordering contract ('newest first'), which is genuinely useful behavioral detail not in the annotations. It says nothing about pagination behavior beyond the schema, limits on version retention, or whether a deleted document's versions are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, putting the resource first and the ordering trailing. It is efficient, though so terse that the brevity comes at the cost of context that could have been included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated read with full schema coverage, no output schema needed, and annotations covering the safety profile, the description plus structured fields are nearly sufficient. The remaining gap is what the versions contain (IDs only? full snapshots?) and whether deleted/historical documents are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — documentId, cursor, and pageSize are all documented including the 1-200 range and default 50 — so the baseline is 3. The description adds no parameter-level meaning (e.g., that documentId must reference an existing document) beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (a document's versions) plus an ordering guarantee ('newest first'), which is more than a restatement of the name. It does not explicitly distinguish itself from gorelo_get_document_version or gorelo_list_documents, leaving version-vs-document and list-vs-single to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no stated when-to-use or when-not-to-use guidance and no named alternative, even though siblings like gorelo_get_document_version and gorelo_restore_document_version clearly overlap. The only implied context is 'you have a documentId and want its history,' which an agent could infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_form_responsesBRead-only
Lists a form's submitted responses, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| formId | Yes | Form whose responses to list. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description contributes the meaningful behavioral detail that results come back newest-first, but says nothing about pagination traversal, whether all responses or only some are returned, or any scope/permission constraints. Useful addition, incomplete profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the ordering constraint attached, no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully documented parameters, the description is adequate but leaves the response shape undefined (no output schema exists, so the item structure of a form response is never described) and does not explain pagination semantics beyond what the cursor parameter implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; formId, cursor, and pageSize are all documented in the schema, including the 1-200 range with rejection-not-clamping behavior. The description adds nothing beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists a form's submitted responses') plus an ordering guarantee ('newest first'), which is enough to distinguish it from gorelo_list_forms (forms themselves) without opening either schema. It stops short of naming the sibling explicitly, so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no reference to alternatives such as gorelo_list_forms or link-creation tools. The use case is only inferrable from the one-line purpose statement, which is implicit guidance at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_formsBRead-only
Lists the service provider's forms, most recently updated first.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the form title, case-insensitively. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| tagIds | No | ticket tag ids; matches forms that apply any of them. | |
| groupIds | No | technician group ids; matches forms assigned to any of them. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| clientIds | No | client ids; matches forms restricted to any of them. | |
| sortOrder | No | Sort direction by last update: asc or desc (default). | |
| statusIds | No | form status ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400. | |
| allowInPortal | No | Keeps only forms offered (true) or not offered (false) in the client portal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the default ordering behavior ("most recently updated first"), which is useful context, but it omits meaningful behavioral facts such as the default exclusion of archived forms, which only appears in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though it is arguably too terse for a nine-parameter filtered list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich schema compensates for most of the description's thinness, and no output schema exists to explain. Still, for a tool with nine filters, cursor pagination, and a non-obvious archived-exclusion default, the one-line description leaves the agent to reconstruct the intended workflow from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the nine parameters is already documented, including the archived-default and pageSize rejection rules. The description adds no parameter-level meaning beyond the ordering note, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists the service provider's forms") plus the default ordering, so an agent knows exactly what it retrieves. It does not differentiate from close siblings such as gorelo_list_form_responses or gorelo_create_form_submission_link, which an agent must infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus gorelo_list_form_responses or any other listing tool, and no mention of prerequisites or when to page. The purpose implies a listing use case, but nothing in the text routes the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_groupsBRead-only
Lists the technician groups configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The phrase 'configured for the service provider' adds useful tenancy scoping context that annotations don't convey, but nothing is said about result size, ordering, or whether inactive groups are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition of the tool name verbatim. It could only be improved by adding one clause on usage or result scope, which would still keep it tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with annotations covering safety, the description is adequate but thin. With no output schema, the agent gets no hint about the shape of returned group objects (id, name, members) or whether pagination applies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. Schema coverage is reported at 100% with an empty object, confirming no hidden parameter semantics are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the technician groups') and scopes it to the service provider, which distinguishes it from sibling list tools like gorelo_list_users or gorelo_list_billing_roles. It stops short of explicitly naming a nearest alternative, but the resource is distinctive enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this versus other directory-style list tools (users, billing roles, work types), nor any note about prerequisites such as needing group membership data elsewhere. The agent must infer that this is the discovery call for technician grouping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_invoicesCRead-only
Lists the service provider's invoices, filtered and sorted.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text search against the invoice number, reference and name. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters and sort that produced it. | |
| number | No | Exact match on the invoice's bare sequential number (the wire's Number, not DisplayNumber). A value that does not parse as a whole number is a 400. | |
| sortBy | No | Sort field: createdOn (default), updatedOn, date, dueDate or totalAmount. | |
| pageSize | No | Number of items per page. 1-200 (default 50); out of range is a 400, never clamped. | |
| clientIds | No | client ids; keeps only invoices billed to any of them. | |
| sortOrder | No | Sort direction: asc or desc (default). | |
| statusIds | No | status ids: 1 Draft, 2 Submitted, 3 Paid, 4 Void, 5 Approved. Any other id is a 400. | |
| contractIds | No | contract ids; keeps only invoices raised from any of them. | |
| isEmailSent | No | Keeps only invoices that have (true) or have not (false) been emailed to the client. | |
| createdSince | No | Keeps only invoices created at or after this instant. | |
| dueDateSince | No | Keeps only invoices due at or after this date. | |
| updatedSince | No | Keeps only invoices last updated at or after this instant. | |
| createdBefore | No | Keeps only invoices created at or before this instant. | |
| dueDateBefore | No | Keeps only invoices due strictly before this date. | |
| updatedBefore | No | Keeps only invoices last updated at or before this instant. | |
| invoiceDateSince | No | Keeps only invoices dated at or after this date. | |
| invoiceDateBefore | No | Keeps only invoices dated strictly before this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, so the description owes context beyond that. It offers none: no statement about default result ordering, what happens with zero filters, that pageSize is rejected rather than clamped, or how the cursor is tied to filters/sort — all of which matter for an 18-parameter listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification for a tool with 18 optional filters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich schema carries most of the burden and there is no output schema to explain, so the definition is callable as-is. Still, for a tool with three date-range families (created/due/invoiceDate) and an opaque cursor, the description could usefully flag default sort and pagination expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-parameter text is unusually thorough (status id mapping, cursor/filter coupling, 400 conditions). The description itself adds nothing about parameters, so the baseline of 3 is the correct ceiling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Lists the service provider's invoices") plus the two axes of variation (filtered, sorted), which is enough to separate it from gorelo_get_invoice. It stops short of naming the sibling it is not, or stating that no filters means all invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing tells the agent to prefer this over gorelo_get_invoice when a specific id is known, or over other list endpoints. Filter and pagination semantics live entirely in the schema, so the description adds no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_item_categoriesARead-only
Lists the categories products are organised under, each with its subcategories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safety profile, so the description's job is to add context. It does add one useful fact – the response nests subcategories under each category – but says nothing about pagination, ordering, or depth of the hierarchy returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loading the resource and folding the return shape into the same clause. Nothing repeats the name or title redundantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read with no output schema, the description covers what an agent needs: what the resource is and that subcategories are nested. Only pagination and ordering behavior are left unstated, which is a minor gap at this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no schema surface for the description to compensate for; baseline 4 applies. The description correctly implies no arguments are needed by describing a pure enumeration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: lists product categories, and adds the shape detail that each entry carries its subcategories. That distinguishes it from gorelo_list_items, but the description never names the sibling, so the differentiation is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied – an agent can guess it is the taxonomy lookup to call before filtering items by category, but there is no when-to-use statement, no mention of alternatives such as gorelo_list_items, and no prerequisites noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_itemsBRead-only
Lists the service provider's item catalog: products and bundles.
| Name | Required | Description | Default |
|---|---|---|---|
| skus | No | SKUs, matched exactly. | |
| query | No | Free-text keyword matched against Name and Description. Max 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it. | |
| typeIds | No | item type ids (1 Product, 2 Bundle). | |
| vendors | No | vendor names, matched exactly. | |
| pageSize | No | Number of items per page. Rejected with a 400 outside 1-200 (default 50). | |
| clientIds | No | client ids. | |
| statusIds | No | status ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400. | |
| categoryIds | No | category ids. | |
| partNumbers | No | manufacturer part numbers, matched exactly. | |
| createdSince | No | Only items created on or after this UTC instant. | |
| updatedSince | No | Only items last changed on or after this UTC instant. | |
| createdBefore | No | Only items created on or before this UTC instant. | |
| updatedBefore | No | Only items last changed on or before this UTC instant. | |
| subcategoryIds | No | subcategory ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safety profile, so the bar is lower. The description adds only that the catalog spans products and bundles, which maps to the typeIds values already documented in the schema, and says nothing about pagination behavior or default filtering beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, and the core purpose is stated immediately. It is arguably too terse for a 15-parameter tool, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter filtered list tool with no output schema, the description covers purpose but leaves the shape of returned items and any pagination expectations unaddressed. The schema carries the parameter burden, but return-value context is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with filters, cursor semantics, and pageSize bounds fully documented in the schema. The description contributes no additional parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Lists the service provider's item catalog") and clarifies scope as products and bundles, which lets an agent distinguish it from gorelo_get_item and gorelo_list_item_categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus gorelo_get_item or the category listing tools, and no mention of prerequisites or typical retrieval scenarios. Usage is only inferable from the name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_commentsBRead-only
Returns a project's comments, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor from a previous page. | |
| pageSize | No | Comments per page, 1-200. Defaults to 50. | |
| projectId | Yes | Project whose comments to return. | |
| sortOrder | No | desc (default, newest first) or asc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read operation. The description's "newest first" detail is also already present in the sortOrder schema default, so it adds little behavioral context beyond structured fields; pagination and return shape are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It immediately communicates the resource and default ordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully documented parameters and readOnlyHint annotations, the description is nearly complete. It could say more about pagination behavior, but the schema already covers paging parameters and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents projectId, cursor, pageSize, and sortOrder. The description does not add parameter semantics beyond what the schema provides, which fits the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Returns a project's comments," with scope "newest first." It clearly distinguishes project comments from sibling task-comment and ticket-comment tools, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The usage is only implied by the phrase "Returns a project's comments."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_projectsCRead-only
Lists projects, newest activity first.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the project title, number and display number. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| sortBy | No | Sort field: updatedOn (default) or createdOn. | |
| tagIds | No | tag ids (Guids). | |
| typeIds | No | project type ids (Guids). | |
| groupIds | No | technician group ids. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| clientIds | No | client ids. | |
| sortOrder | No | Sort direction: asc or desc (default). | |
| statusIds | No | project status ids: 1 Not started, 2 In progress, 3 On hold, 4 Completed, 5 Closed. Any other id is a 400. | |
| createdSince | No | Keeps only projects created at or after this instant (UTC). | |
| updatedSince | No | Keeps only projects updated at or after this instant (UTC). | |
| createdBefore | No | Keeps only projects created strictly before this instant (UTC). | |
| updatedBefore | No | Keeps only projects updated strictly before this instant (UTC). | |
| leadAssigneeIds | No | lead assignee (technician) ids. | |
| targetDateAfter | No | Keeps only projects with a target date at or after this instant (UTC). A project with no target date matches neither bound. | |
| targetDateBefore | No | Keeps only projects with a target date strictly before this instant (UTC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring this a safe read, the description's only added statement is 'newest activity first' – which merely restates the schema defaults (sortBy=updatedOn, sortOrder=desc). It says nothing about pagination limits, result caps, or authorization scope that the annotations and schema don't already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero padding, which is efficient. However, for a tool with 17 filter parameters, that single clause is arguably undersized rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 optional filters, no output schema, and only a readOnly annotation, the description should at least mention pagination behavior, what fields a project summary includes, or scoping rules. It leaves everything beyond 'lists projects' to the schema, which is thin for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 17 parameters carries a meaningful description in the schema (ranges, enum values, rejection behavior, date bound semantics). The description adds no parameter meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists projects') plus a default ordering ('newest activity first'), so the agent knows exactly what the call returns at a high level. It does not distinguish itself from siblings such as gorelo_get_project (single project) or gorelo_list_project_sections, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no note about required permissions or scope, and no mention of how filtered listing relates to the get_* sibling tools. Usage is only implied by the verb 'Lists'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_sectionsCRead-only
Lists a project's sections.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's only job is to add context — and it adds none. It says nothing about pagination, result ordering, permissions required on the project, or whether empty/archived sections appear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short front-loaded sentence with no wasted words, but the terseness is under-specification rather than efficiency; there is nothing after the verb to orient an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only place an agent could learn what a "section" looks like or how results are returned, and it supplies none of that. For a simple list tool this is a noticeable gap rather than a fatal one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single projectId parameter, so the baseline of 3 applies. The description's only added signal is that the identifier scopes to a project, which the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ("Lists") and a resource ("a project's sections"), which is enough to separate it from gorelo_create_project_section and gorelo_update_project_section. However it is essentially a restatement of the tool name with no scope details (ordering, filters, whether archived sections are included), so it stays at minimum-viable clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings such as gorelo_get_project or gorelo_list_project_tasks, and no prerequisites or exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_tagsARead-only
Lists the project tags configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already tells the agent this is a safe read operation, and the description is consistent with that. It adds the useful scope detail that results are limited to the service provider's configured project tags, but it does not describe return format, ordering, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource and includes the only meaningful scope qualifier. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of a zero-parameter, read-only list tool with no output schema, the description is nearly complete. It identifies the resource and tenant scope, though it could add a brief note about what the returned tag list represents or whether all configured tags are returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics burden on the description. Schema coverage is 100% and the empty input schema correctly communicates that no arguments are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Lists the project tags') and adds scope ('configured for the service provider'). It is clearly distinct from the similarly named 'gorelo_list_ticket_tags', though it does not explicitly name that sibling as an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no guidance on when to use it, when not to use it, or which sibling tool to choose instead. The agent must infer that this is the right tool whenever project tags are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_task_commentsBRead-only
Returns a task's comments, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Cursor from a previous page. | |
| sortBy | No | Sort field: createdOn. | |
| taskId | Yes | Task whose comments to return. | |
| pageSize | No | Comments per page, 1-200. Defaults to 50. | |
| projectId | Yes | Project the task belongs to. | |
| sortOrder | No | desc (default, newest first) or asc. | |
| conversationId | No | Identifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType. | |
| conversationType | No | Kinds to include: 1 Public, 2 Private, 3 Side Conversation, 4 Approval. Comma-separated on its own; a single value when paired with conversationId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safe read-only behavior. The description adds the newest-first ordering, but it does not disclose pagination behavior, conversation filtering behavior, or result structure beyond what the schema already documents. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The ordering detail is placed immediately after the core action, making the definition efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with eight parameters including pagination and conversation filters, the description is quite sparse. It is adequate because the schema is fully documented and annotations cover read-only safety, but it leaves out useful context about filtering and pagination that an agent might need when choosing among comment-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are documented in the schema itself. The description adds no parameter-specific meaning beyond the ordering note, which is already represented by sortOrder in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns a task's comments. It also specifies ordering, newest first. It does not explicitly distinguish itself from siblings such as gorelo_list_project_comments or gorelo_get_project_task_comment, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives like gorelo_list_project_task_conversations, gorelo_get_project_task_comment, or project-level comment tools. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_task_conversationsBRead-only
Lists the conversations on a task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task whose conversations to return. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description adds no behavioral context beyond that. It does not mention pagination, ordering, response shape, or any permission/visibility constraints for conversations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately sized for a simple list operation, though its brevity contributes to gaps scored elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully described parameters and a readOnlyHint annotation, the description covers the core purpose. However, with no output schema, it does not describe what a conversation contains or whether the response is paginated, leaving a meaningful contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required parameters are fully documented in the schema. The description adds no parameter detail beyond what the schema already provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ("Lists") and resource ("conversations on a task"), so the basic action is clear. It does not distinguish this from close siblings such as list_project_task_comments, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no exclusions, and no alternatives. An agent can infer it lists task conversations, but nothing explicitly routes it against sibling tools like list_project_task_comments or create_project_task_side_conversation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_tasksCRead-only
Lists a project's tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| sortBy | No | Sort field: boardOrder (default), createdOn or updatedOn. | |
| dueAfter | No | Keeps only tasks due at or after this instant (UTC). A task with no due date matches neither bound. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| dueBefore | No | Keeps only tasks due strictly before this instant (UTC). | |
| projectId | Yes | Project whose tasks to list. | |
| sortOrder | No | Sort direction: asc (default) or desc. | |
| statusIds | No | task status ids: 1 Not started, 2 Working on it, 3 On hold, 4 Done. Any other id is a 400. Omitted returns every status. | |
| sectionIds | No | section ids (Guids). | |
| assigneeIds | No | technician ids; matches a task's lead or assisting assignees. | |
| incompleteOnly | No | When true, drops tasks in the Done status. | |
| leadAssigneeIds | No | technician ids; matches a task's lead assignee only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered, but the description adds nothing beyond that: it does not mention pagination behavior, page-size limits, return shape, or the fact that filters combine as an AND. For a 12-parameter listing tool this is a bare minimum of behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero wasted words and the resource front-loaded, but the brevity comes at the cost of under-specification rather than efficient information density. It is concise without being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, filtering semantics, pagination via cursor, and no output schema, the description should explain the returned collection and paging behavior. None of this is present, so an agent cannot know key operational details without reading the schema in full.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including cursor, pageSize bounds, dueAfter/dueBefore semantics, and statusIds enum values is already documented in the schema; the description contributes no additional parameter meaning. The baseline of 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear verb+resource (list + project tasks), but it essentially restates the tool name and adds no scope details or sibling differentiation — an agent must infer how this differs from gorelo_get_project_task or gorelo_list_project_task_comments from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as gorelo_get_project_task or gorelo_list_project_sections, and no prerequisites or exclusions are stated. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_project_typesBRead-only
Lists the project types configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered structurally. The description adds only the mild qualifier that results are tenant-configured project types; it says nothing about result volume, ordering, or whether the list can be empty or paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. Every word contributes to identifying the resource and its scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read-only enumeration this is close to sufficient, but with no output schema the description should hint at what a "project type" record contains or how results are returned. It also omits any routing signal relative to the many sibling list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline for this case is 4. Nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Lists the project types") and scopes it to "configured for the service provider." That distinguishes it from list_projects/list_project_tasks by resource, but it doesn't clarify the relationship to adjacent taxonomy siblings like list_project_tags or list_ticket_types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus list_projects or other enumeration tools, and no prerequisites or exclusions are mentioned. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_taxesBRead-only
Lists the tax rates configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds the useful fact that the returned set is scoped to the service provider's configuration, but says nothing about ordering, pagination, or result contents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though almost too sparse for a tool whose output shape is undocumented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool this is close to sufficient, but with no output schema the description could have indicated what a tax rate entry contains (name, percentage, applied scope), which the agent currently cannot infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the schema is empty, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly implies the full list is returned with no filtering knobs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('tax rates') with a scoping qualifier ('configured for the service provider'). It is unambiguous, though it does not explicitly position itself against any sibling (there is no other tax-related tool in the list, so this matters less).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says what it returns but never when to call it, what prerequisites exist, or what to do instead if you want, e.g., a single tax rate or tax rates for a different scope. No exclusions or alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticket_commentsBRead-only
Lists the comments on a ticket using cursor pagination. Comments read oldest-first by default, like a conversation top to bottom.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| sortBy | No | Sort field: createdOn. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| ticketId | Yes | Ticket identifier. | |
| sortOrder | No | Sort direction: asc (default) or desc. | |
| conversationId | No | Identifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType. | |
| conversationType | No | Kinds to include: 1 Public, 2 Private, 3 Side Conversation, 4 Approval. Comma-separated on its own; a single value when paired with conversationId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, lowering the burden. The description adds useful behavioral context about default ordering (oldest-first, conversational), but does not address pagination limits, empty-ticket behavior, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose. The 'like a conversation top to bottom' analogy is mildly decorative but helps convey default ordering, so it earns its place reasonably well.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and seven parameters, the description leaves the return shape (fields per comment, cursor wrapper) unexplained. It is adequate for a read-only list call backed by rich param docs, but stops short of the detail needed to know what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters are already documented in the schema, including cursor, pageSize clamping, sortOrder default, and conversationType values. The description only reinforces the sortOrder default and adds no semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (lists comments on a ticket) and adds cursor pagination scope. It is distinguishable from gorelo_get_ticket_comment and gorelo_create_ticket_comment, though it doesn't explicitly name siblings or differentiate from gorelo_list_ticket_conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the required ticketId; the description tells the agent comments read oldest-first 'by default,' hinting at sort behavior. But there is no explicit when-to-use guidance or exclusion pointing to the conversations endpoint or get_ticket_comment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticket_conversationsCRead-only
Lists the conversations on a ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| ticketId | Yes | Ticket identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safe read-only behavior. The description adds essentially no behavioral context beyond restating that conversations are listed, such as whether side conversations are included, pagination behavior, or what a “conversation” means here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. Its brevity is efficient, though it leaves little room for useful qualification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only list tool with annotations and full schema coverage, this is minimally adequate. However, it does not clarify how ticket conversations differ from ticket comments or side conversations, which is a meaningful gap given the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single ticketId parameter is documented in the schema as "Ticket identifier." The description adds no additional meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: lists conversations belonging to a ticket. It is clear what the tool does, but it does not distinguish ticket conversations from sibling concepts such as ticket comments or project task conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool rather than gorelo_list_ticket_comments, gorelo_get_ticket, or conversation-related siblings. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticketsARead-only
Lists tickets for the service provider using cursor pagination. Default sort is updatedOn desc.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the ticket title, number and display number. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| sortBy | No | Sort field: updatedOn (default) or createdOn. | |
| tagIds | No | tag ids; a ticket matches if it carries any of them. | |
| typeIds | No | ticket type ids to include. | |
| groupIds | No | group ids; a ticket matches if it is subscribed to any of them. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| clientIds | No | client ids to include. Omit for every client. | |
| sortOrder | No | Sort direction: asc or desc (default). | |
| statusIds | No | status ids to include. Omit for every status. | |
| contactIds | No | contact ids to include. | |
| priorityIds | No | priority ids on the public scale — None=0, Urgent=1, High=2, Normal=3, Low=4. | |
| createdSince | No | ISO-8601 timestamp; keeps only tickets created at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only tickets updated at or after it. | |
| createdBefore | No | ISO-8601 timestamp; keeps only tickets created strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only tickets updated strictly before it. | |
| leadAssigneeIds | No | lead assignee ids to include. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, so the description carries a lower burden. It adds cursor pagination behavior and the default sort order, but does not describe rate limits, permissions, response shape, or pagination termination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loads the core operation, and contains essentially no wasted wording. Its brevity is appropriate for a list endpoint whose parameters are fully documented in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter list tool with only a readOnly annotation and no output schema, the description is thin. The schema covers filter parameters well, but the description does not explain return values or how the paginated result is structured, leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 17 parameters are already documented in the schema. The description only restates cursor pagination and the default sort, which are already covered by the cursor, sortBy, and sortOrder schema descriptions; it adds no further parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Lists tickets.' It also scopes the operation to the service provider. It does not explicitly distinguish this tool from siblings such as gorelo_get_ticket or other ticket-list-adjacent tools, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context that this is a paginated list operation and notes the default sort. However, it provides no explicit when-to-use guidance, no when-not-to-use conditions, and no alternatives such as gorelo_get_ticket for fetching a single ticket.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticket_statusesARead-only
Lists the ticket statuses configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds only a small amount of context: that the statuses are service-provider-configured (i.e. tenant-level, not project-level). It says nothing about ordering, whether inactive statuses are included, or the shape of the returned list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero filler, front-loading the verb and resource. Nothing in it is redundant with the tool name to the point of waste, and nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with annotations covering the safety profile, this is nearly complete. The only gap is that with no output schema, an agent cannot predict whether the response is a bare array of names or objects with IDs — a minor omission for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. Schema coverage is reported at 100% and the empty object schema matches the description's implication of an unfiltered listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') plus a clear resource ('ticket statuses'), and the qualifier 'configured for the service provider' scopes it. It is naturally distinguishable from siblings like gorelo_list_ticket_types and gorelo_list_ticket_tags, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given, and no alternative tool is named. The usage is strongly implied — an agent would infer this is a lookup for valid status values, e.g. before calling gorelo_create_ticket or gorelo_update_ticket — but that inference is left to the reader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticket_tagsARead-only
Lists the ticket tags configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, covering the safety profile. The description adds scope context ('configured for the service provider') but does not disclose return format, pagination, or other behavioral traits. With annotations, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no redundant phrasing. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 0-param read-only list, the description is nearly complete; it could mention whether results are paginated or what tag fields are returned, but given no output schema and low complexity, it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline 4 applies. No parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Lists' and resource 'ticket tags', plus scope 'configured for the service provider'. It distinguishes from gorelo_list_project_tags by naming ticket tags, though it does not explicitly call out the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are mentioned. The agent must infer that this is for retrieving ticket tag definitions, likely when configuring tickets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_ticket_typesBRead-only
Lists the ticket types configured for the service provider.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this is a safe read operation, and the description adds only the mild scoping note that results are tenant/service-provider bound. It says nothing about ordering, pagination, volume, or whether archived/disabled ticket types are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words. It is efficient but so terse that there is nothing to structure beyond the single clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read with annotations and no output schema, the description is minimally sufficient. It still leaves the agent guessing what a 'ticket type' record contains and how it relates to ticket statuses, tags, and tickets, which matters for a reference-data lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond confirming that no filtering arguments are implied. Baseline 4 applies for a parameterless call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (ticket types) with a scoping qualifier (configured for the service provider). It does not, however, differentiate itself from closely related siblings such as gorelo_list_ticket_statuses or gorelo_list_ticket_tags, which an agent must disambiguate by name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no named alternatives. The agent is left to infer that this is the lookup call for ticket type IDs, presumably to feed gorelo_create_ticket or gorelo_update_ticket.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_time_entriesBRead-only
Lists logged time across every ticket and task, narrowed by any of the filters.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it. | |
| taskIds | No | task ids; keeps only time entries logged against any of them. | |
| userIds | No | user ids; keeps only time entries belonging to any of them. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| clientIds | No | client ids; keeps only time entries billed to any of them. | |
| ticketIds | No | ticket ids; keeps only time entries logged against any of them. | |
| invoiceIds | No | invoice ids; keeps only time entries billed on any of them. | |
| locationIds | No | client location ids; keeps only time entries whose ticket sits at any of them. | |
| createdSince | No | ISO-8601 timestamp; keeps only time entries created at or after it. | |
| startedSince | No | ISO-8601 timestamp; keeps only time entries whose work started at or after it. | |
| updatedSince | No | ISO-8601 timestamp; keeps only time entries updated at or after it. An entry that has never been changed is excluded. | |
| createdBefore | No | ISO-8601 timestamp; keeps only time entries created strictly before it. | |
| startedBefore | No | ISO-8601 timestamp; keeps only time entries whose work started strictly before it. | |
| updatedBefore | No | ISO-8601 timestamp; keeps only time entries updated strictly before it. An entry that has never been changed is excluded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that results span "every ticket and task" (i.e. account-wide default scope), but says nothing about ordering, caps on returned results beyond the schema's pageSize, or permission scoping. With annotations present, this is a modest but real addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and scope come first. It is arguably too terse for a 14-parameter tool, leaving room for one clarifying clause about filter combination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, unpaginated-by-default list tool with no output schema, the description should at least state result ordering, whether filters AND together, and what an unfiltered call returns. The schema carries the parameter detail, but these aggregate behaviors are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 14 parameters, so the schema already explains cursors, page sizes, id arrays and ISO-8601 boundaries in detail. The description adds only the general notion that filters narrow the result set, without clarifying combination semantics or whether filter arrays are ORed internally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Lists logged time across every ticket and task," which distinguishes it from the sibling get/create/update time-entry tools. The scope phrase "across every ticket and task" signals a broad, unfiltered-by-default collection, though no sibling is named explicitly as an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Narrowed by any of the filters" implies this is the query tool to reach for when you want a filtered set of time entries, but there is no explicit when-to-use/when-not guidance, no mention of how filters combine (AND vs OR), and no pointer to gorelo_get_time_entry for single-record retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_uptime_checksARead-only
Lists uptime checks for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword matched against the check description. Up to 200 characters. | |
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| tagIds | No | tag ids. A check is included if it carries any one of them. | |
| typeIds | No | check type ids to include: 1 ICMP, 2 HTTP, 3 TCP. | |
| pageSize | No | Number of items per page, 1-200 (default 50). Out of range is rejected, not clamped. | |
| clientIds | No | client ids to include. Omit for every client. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so the safety profile is covered. The description adds genuinely non-structured behavior: results are ordered by createdOn descending and paging is cursor-based, which an agent needs to interpret page contents correctly. It stops short of stating whether a total count or next-cursor is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler, and the core purpose is front-loaded before the pagination and ordering details. Nothing repeats the schema or the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with full schema coverage and no output schema, the description supplies the two things the structured fields don't: sort order and paging model. Only missing piece is any hint about response shape or how to detect the last page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented, including the 1-200 pageSize constraint and the typeIds enumeration. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (uptime checks) with a stated scope ('for the service provider'), which is clear enough to act on. It doesn't explicitly distinguish itself from the sibling gorelo_get_uptime_check or gorelo_list_alerts-adjacent tools, but the list-vs-get contrast is natural here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only implied guidance: 'omit for the first page' is stated in the schema, and the description's pagination framing hints at iterative paging. There is no explicit when-to-use versus gorelo_get_uptime_check (single check by id) or how the filters combine, so the agent must infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_usersARead-only
Lists users (technicians) for the service provider using cursor pagination. Results are sorted by user id ascending (oldest first).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque pagination cursor from a previous page; omit for the first page. | |
| pageSize | No | Number of items per page. Clamped to 1–200 (default 50). | |
| statusIds | No | status ids: Pending=1, Active=2, Disabled=3. Omit for Pending and Active - disabled users are listed only when 3 is named. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest, and it does add real behavior: cursor-based paging and an id-ascending 'oldest first' sort that tells an agent results are stable and deterministic. It still omits how the next cursor is surfaced in the response and any auth/rate-limit context, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the resource and paging model front-loaded and the sort behavior immediately after. Every clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter, read-only list tool this covers what is needed to make a first call, and there is no output schema to explain. The gap is pagination continuation: with cursor paging and no output schema, the description never says how the next cursor is returned, which is the one thing an agent must know to page through users.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents the cursor, the 1–200 clamp with default 50, and the Pending=1/Active=2/Disabled=3 status semantics in more detail than the description. The description's only added semantic is the result ordering, so this sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Lists users (technicians)'), scopes it to the service provider, and adds pagination and ordering details. It stops short of any explicit differentiation from sibling list tools, but no sibling covers users, so ambiguity is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for enumerating technicians, and the ordering note hints at a stable paginated scan. There is no explicit when-to-use framing, no statement of prerequisites, and no named alternative for fetching a single user or filtering users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_list_work_typesARead-only
Lists the work types configured for the service provider. Use a work type's Id as WorkTypeId when logging time against a ticket.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's main added value is the link between the returned Id and the WorkTypeId field in time entries. It says nothing about ordering, pagination, or whether inactive work types are included — modest added context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the purpose front-loaded and the practical follow-up second. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with no output schema, the description covers what is returned conceptually and how to use it. It falls slightly short by not indicating whether the list is paginated or filtered (e.g., active vs. all work types).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does add meaning about the output field semantics (Id → WorkTypeId), which is a small bonus rather than a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the work types configured for the service provider'), which is concrete enough to distinguish it from generic list siblings like gorelo_list_ticket_types or gorelo_list_item_categories. It doesn't explicitly contrast itself with those siblings, keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives downstream usage ('Use a work type's Id as WorkTypeId when logging time against a ticket'), which implies why an agent would call it. However, it offers no explicit when-not guidance or named alternatives among the many other list_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_restore_document_versionB
Makes an earlier version the current one.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | Yes | Version to restore; it must be one of this document's. | |
| documentId | Yes | Document identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/non-destructive profile is covered. The description adds the key behavioral fact that a prior version becomes current, but omits what happens to the previous current version (preserved in history? overwritten?), permission requirements, and whether the action is reversible. With annotations doing part of the work, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficiently written, though the brevity is close to under-specification rather than model concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema, the description is minimally sufficient: the agent knows what the call does and that both IDs are required. It leaves out the effects on existing current content and any failure modes (e.g., a versionId not belonging to the document), which an agent would want before mutating document state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both required parameters are described, including the important constraint that versionId must belong to the given document. The description adds nothing beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource effect: promoting an earlier document version to current. Combined with the name, an agent can distinguish it from gorelo_get_document_version (read) and gorelo_update_document (edit content). It never says the word 'document', but the tool name and required documentId make the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to restore versus update, no prerequisites, no mention of siblings. The agent must infer entirely from the name that this is the rollback path rather than an editing path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_clientA
Updates an existing client. Only supplied (non-null) fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating a client. | |
| clientId | Yes | Client to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is not read-only and not destructive. The description adds useful behavioral context by stating that only supplied non-null fields are changed, which is meaningful for a partial update operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero waste, and the key partial-update behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations and a fully described input schema, the description is largely sufficient. It could mention authentication or error behavior, but the schema carries most required detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema fully documents clientId and the nested body fields. The description reinforces partial-update semantics but adds little parameter detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Updates an existing client." It clearly identifies the operation but does not explicitly distinguish it from sibling tools such as gorelo_create_client or gorelo_get_client.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing clients and clarifies partial-update behavior, but it does not state when to use this tool versus alternatives or mention prerequisites such as required permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_contactB
Updates a contact. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating an existing contact. ContactId, bound from the route, identifies the contact. | |
| contactId | Yes | Contact to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, non-destructive mutation, so the safety profile is covered. Beyond that the description adds nothing: no mention of what happens to omitted fields, whether the operation is idempotent, permission requirements, or what is returned — and its partial-update claim conflicts with the schema, which marks ClientId, FirstName, LastName and PrimaryEmail as required in the body.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the one operational instruction. There is no filler, repetition, or hedging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The body is a nested object with 14 properties and no output schema, and there are no annotations providing extra behavior detail. For that level of complexity the description should at minimum clarify the required-fields conflict and describe the response or side effects; two sentences leave the agent ill-equipped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, which ordinarily sets a baseline of 3. But the one piece of parameter-related information in the description is misleading: it tells the agent to send only changed fields, while the input schema requires four body properties on every call. This actively steers an agent toward a failing or incomplete payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Updates a contact"), which is unambiguous against siblings like gorelo_create_contact and gorelo_get_contact. It does not explicitly differentiate itself from other update_* tools, but for a single-resource update the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Send only the fields you want to change" does address the PATCH-vs-PUT ambiguity, which is real guidance. However, it gives no when-to-use context versus create_contact, no prerequisites (e.g. contact must exist), and the guidance is contradicted by the schema's required body fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_custom_assetA
Updates a custom asset. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating a custom asset. Every field is optional - send only what should change. | |
| customAssetId | Yes | Custom asset to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is covered. The description adds meaningful partial-update semantics (unsent fields remain unchanged), but says nothing about permissions, whether omitted vs. null fields differ, or what the mutation returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core action front-loaded and the partial-update constraint immediately after. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter update with fully documented nested fields and mutation annotations, the description covers what an agent needs to call it correctly. The minor gap is the absence of return-value or permission context, though no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested body fields each carry detailed semantics including null-clearing behavior, so the schema does the heavy lifting. The description only reinforces that fields are optional, adding no new parameter detail beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates a custom asset'), clearly distinguishing it from the create/get/list custom_asset siblings by name. It does not explicitly name alternatives, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields you want to change' communicates PATCH-style usage semantics, which is genuinely useful guidance. However, there is no explicit when-to-use vs. gorelo_create_custom_asset or gorelo_get_custom_asset, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_documentB
Updates a document's title, body or placement. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Partial update of a document. Every field is optional; an omitted or null field is left as it is. | |
| documentId | Yes | Document to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), so the bar is lower, and the description does add the meaningful partial-update contract (omitted/null fields are left unchanged). But it omits the cascading effects that matter most — archiving a document archives every descendant at any depth, and an empty Attachments array removes all attachments — which sit uneasily against destructiveHint=false. The description could have surfaced that tension; the schema carries it instead.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the verb and scope front-loaded and no filler. It is slightly under-sized for a tool with ten optional nested fields and cascading archive semantics, so conciseness shades into thinness, but nothing written is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The nested body schema is unusually rich, so per-field detail need not be repeated in prose. Still, for a mutation tool with no output schema and no annotation detail beyond two booleans, the description should have signaled the destructive-capable operations and versioning behavior; leaving them buried in property text risks an agent calling it without realizing archiving is recursive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns above baseline by clarifying a genuine ambiguity the schema creates: both documentId and body are required, yet body's members are all optional, and 'send only the fields you want to change' tells the agent it must pass body but may leave members out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (updates a document) and correctly separates it from create/duplicate/get siblings. However the enumerated scope — 'title, body or placement' — covers only three of the schema's capabilities; the tool can also archive/restore sub-trees (StatusId), star, replace attachments, set AlternateName, and toggle public link / portal publishing. An agent reading only the description would badly underestimate what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields you want to change' is invocation guidance, not usage guidance; it never says when to choose this over gorelo_create_document, gorelo_duplicate_document, or gorelo_restore_document_version, and names no alternatives or preconditions. The reader must infer that this is the general-purpose edit path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_projectA
Updates a project. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating a project. Every field is optional - send only what you want to change. | |
| projectId | Yes | Project to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the partial-update contract, but does not say whether omitted fields are preserved, what happens on an unknown projectId, or what the response contains — notable gaps for a mutation tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the one operational rule that matters. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-object mutation with no output schema, the description plus schema cover the inputs well, but it leaves the return shape, error behavior, and the effect of omitted fields unstated. Adequate but with clear remaining gaps for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested body properties carry rich per-field descriptions (StatusId enum values, ClearTargetDate, LeadAssigneeId=0 removal, array-replacement semantics). The description only restates optionality, so baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Updates') and resource ('a project'), which cleanly separates it from gorelo_create_project, gorelo_get_project, and the *_project_task/*_project_section siblings. It stops short of explicitly naming those alternatives, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields you want to change' communicates PATCH-style semantics, which is the main usage rule an agent needs. However, it gives no explicit when-to-use vs when-not guidance relative to siblings, and no prerequisites (permissions, whether the project must be open) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_project_sectionA
Updates a section's title or colour. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating a section. Both fields are optional; send only what you want to change. | |
| projectId | Yes | Project the section belongs to. | |
| sectionId | Yes | Section to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only but non-destructive mutation; the description usefully adds that it is a partial merge (unsent fields are preserved), which is the key behavioral risk for an update tool. It says nothing about required permissions, whether a colour/title change is reversible, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the mutation scope front-loaded before the calling instruction. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-body mutation with no output schema, the definition covers the core semantics but leaves gaps: empty-body behavior, the accepted colour format, and permission requirements are unaddressed. Adequate to call correctly, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body already documents Color, Title and UpdatedByName with omit-to-leave-unchanged semantics. The description only reinforces the partial-update rule at the top level, adding no syntax or format detail beyond the schema (e.g. what colour format the app stores).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates a section's title or colour') and enumerates the mutable fields, which separates it cleanly from gorelo_create_project_section and gorelo_list_project_sections. It does not explicitly name those siblings, but the verb makes the distinction unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields you want to change' gives real partial-update guidance that shapes how the agent should call it. There is no explicit when-to-use/when-not or routing to alternatives, so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_project_taskA
Updates a task. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating a task. Every field is optional - send only what you want to change. | |
| taskId | Yes | Task to update. | |
| projectId | Yes | Project the task belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds PATCH-style semantics (omitted fields are untouched), which is useful, but says nothing about permission requirements or what the call returns for a complex multi-field mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed immediately by the operational constraint. No filler, no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-field nested mutation with no output schema and only minimal annotations, the description leaves gaps: whether the updated task is returned, what errors occur for invalid SectionId/StatusId, and whether array replacements are additive or destructive. The schema carries most of the burden, keeping this at minimum-viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body schema is unusually rich, already documenting replacement vs. omission semantics (e.g. "Send an empty string to remove it", "Replaces the watchers outright"). The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (updates) and resource (task), which cleanly separates it from the get/create task siblings. It does not explicitly name alternatives, but the verb makes the CRUD role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Send only the fields you want to change" conveys partial-update intent, which is genuine usage guidance. However, there is no statement of when to prefer this over gorelo_get_project_task or gorelo_create_project_task, no prerequisites (task must exist, projectId/taskId must be resolved first), and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_ticketA
Partially updates a ticket. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Unified partial update for a ticket. | |
| ticketId | Yes | Ticket to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only but non-destructive, and the description adds the meaningful PATCH contract that omitted fields are untouched. It does not disclose side effects of the update (e.g. array fields replacing entire sets, close-date/audit-field overrides), permission requirements, or error behavior, all of which are relevant for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the core partial-update rule is front-loaded. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is very rich and annotations cover the safety profile, so the description needn't enumerate fields. But for a 20+ field nested mutation with no output schema, it omits what happens on success (does it return the updated ticket?), and gives no warning about the consequential fields (ClosedOn, UpdatedOn, billing override) an agent should handle carefully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body documents all 20+ fields including replacement semantics for asset/uptime arrays. The description adds nothing field-specific beyond the general partial-update rule, which is the correct baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('partially updates') and resource ('a ticket'), and the word 'partially' immediately separates it from a full-replacement or create operation. It doesn't name siblings like gorelo_get_ticket or gorelo_create_ticket, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Send only the fields you want to change' gives clear invocation guidance for PATCH semantics, which is the primary usage decision for this tool. However, it never says when to prefer it over alternatives (e.g. status changes via comments/approvals) or notes any prerequisites such as permissions or the ticket needing an existing client.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_time_entryA
Partially updates a time entry. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Partial update of a time entry. | |
| timeEntryId | Yes | Time entry to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds the important merge semantic that unspecified fields survive the call, which is real behavioral information beyond the annotations. It stops short of covering permissions, whether approved/locked entries can be edited, or what happens on validation failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the PATCH semantics front-loaded in sentence one and the practical instruction in sentence two.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a narrow mutation whose entire parameter surface is documented at 100%, but it leaves open editability of approved entries and error behavior on invalid field combinations, which matter for a merge-style write tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the nested body fields each carry their own constraints (UTC instants, ActualHours > 0, BillableStatusId enum-like values, ServiceLineId retention), so the schema does the heavy lifting. The description adds only the generic instruction to omit unchanged fields, nothing field-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Partially updates a time entry") and the "partially" qualifier distinguishes it from a full-replace operation and from the sibling gorelo_create_time_entry / gorelo_get_time_entry. It does not name any sibling explicitly, but the create/get/list naming makes the family obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Send only the fields you want to change" gives clear invocation guidance for this tool, but nothing about when to choose it over gorelo_create_time_entry or gorelo_get_time_entry, and no prerequisites (e.g. does the entry need to be unapproved/editable?).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gorelo_update_uptime_checkA
Updates an uptime check. Send only the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Request body for updating an uptime check. Every field is optional - send only what should change. | |
| checkId | Yes | Uptime check to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the key behavioral trait of partial updates (only send changed fields), but it does not describe permissions, reversibility, or side effects beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core operation front-loaded followed by the most important usage constraint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested body with many optional fields, but the schema describes each one thoroughly and the description highlights the essential partial-update behavior. No output schema exists, so return-value explanation is not expected. A minor gap is the absence of any mention of checkId or response behavior, but the schema covers checkId and the description is otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters and all nested fields. The description repeats the PATCH-like semantics already stated in the body schema description, without adding new parameter-level details. Baseline 3 is appropriate given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Updates an uptime check"), which is clear enough for an agent to identify the operation. It does not explicitly differentiate from siblings like gorelo_create_uptime_check or gorelo_get_uptime_check, but the verb and required checkId in the schema imply an existing-resource mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence "Send only the fields you want to change" gives useful partial-update guidance. However, it does not explain when this tool should be chosen over create/get/list siblings, nor does it mention any prerequisites or exclusions.
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.
84 tool updates
v1.1.1- Added
gorelo_create_alert - Added
gorelo_create_client - Added
gorelo_create_contact - Added
gorelo_create_custom_asset - Added
gorelo_create_document - Added
gorelo_create_document_related_item - Added
gorelo_create_form_submission_link - Added
gorelo_create_project - Added
gorelo_create_project_comment - Added
gorelo_create_project_section - Added
gorelo_create_project_task - Added
gorelo_create_project_task_approval - Added
gorelo_create_project_task_comment - Added
gorelo_create_project_task_side_conversation - Added
gorelo_create_ticket - Added
gorelo_create_ticket_approval - Added
gorelo_create_ticket_comment - Added
gorelo_create_ticket_side_conversation - Added
gorelo_create_time_entry - Added
gorelo_create_uptime_check - Added
gorelo_duplicate_document - Changed
gorelo_get_asset1 field changed- added
Input schema / properties / id / descriptionAdded value: +"Device identifier."
- Changed
gorelo_get_client2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Client identifier." - changed
Input schema / properties / id / typePrevious value: -"number"New value: +"integer"
- Changed
gorelo_get_contact2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Contact identifier." - changed
Input schema / properties / id / typePrevious value: -"number"New value: +"integer"
- Added
gorelo_get_contract - Added
gorelo_get_custom_asset - Added
gorelo_get_document - Added
gorelo_get_document_version - Added
gorelo_get_invoice - Added
gorelo_get_item - Added
gorelo_get_project - Added
gorelo_get_project_comment - Added
gorelo_get_project_task - Added
gorelo_get_project_task_approval - Added
gorelo_get_project_task_comment - Changed
gorelo_get_ticket1 field changed- changed
Input schema / properties / ticketId / descriptionPrevious value: -"Ticket id (UUID)."New value: +"Ticket identifier."
- Changed
gorelo_get_ticket_approval2 fields changed- added
Input schema / properties / approvalId / descriptionAdded value: +"Approval identifier, from the conversations endpoint." - added
Input schema / properties / ticketId / descriptionAdded value: +"Ticket identifier."
- Changed
gorelo_get_ticket_comment2 fields changed- added
Input schema / properties / commentId / descriptionAdded value: +"Comment identifier." - added
Input schema / properties / ticketId / descriptionAdded value: +"Ticket identifier."
- Changed
gorelo_get_time_entry2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"Time entry to read." - changed
Input schema / properties / id / typePrevious value: -"number"New value: +"integer"
- Added
gorelo_get_uptime_check - Added
gorelo_list_alerts - Added
gorelo_list_api_keys - Changed
gorelo_list_assets11 fields changed- added
Input schema / properties / clientIds / descriptionAdded value: +"client ids to include. Omit for every client." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices created at or after it." - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / query / descriptionAdded value: +"Keyword matched against the device name, display name and description. Up to 200 characters." - added
Input schema / properties / statusIds / descriptionAdded value: +"device status ids to include: 1 Unreachable, 2 Active, 3 Inactive, 4 Pending Delete, 6 Pending client inactive." - changed
Input schema / properties / statusIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices updated strictly before it." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices updated at or after it."
- Changed
gorelo_list_client_locations2 fields changed- added
Input schema / properties / clientId / descriptionAdded value: +"Client identifier." - changed
Input schema / properties / clientId / typePrevious value: -"number"New value: +"integer"
- Changed
gorelo_list_clients9 fields changed- changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients created at or after it." - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / query / descriptionAdded value: +"Keyword matched against the client name, alternate name, billing name and web domains. Up to 200 characters." - added
Input schema / properties / statusIds / descriptionAdded value: +"client status ids to include: 1 Active, 3 Credit hold, 4 Archived." - changed
Input schema / properties / statusIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients updated strictly before it." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients updated at or after it."
- Changed
gorelo_list_contacts13 fields changed- changed
Input schema / properties / clientId / descriptionPrevious value: -"Filter to a single client."New value: +"Deprecated single-client filter, superseded by clientIds. Still accepted; ignored when clientIds is supplied." - changed
Input schema / properties / clientId / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / clientIds / descriptionAdded value: +"client ids to include. Omit for every client." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts created at or after it." - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / query / descriptionAdded value: +"Keyword matched against the contact email addresses, first name and last name. Up to 200 characters." - added
Input schema / properties / statusIds / descriptionAdded value: +"contact status ids to include: 1 Active, 3 Temporary, 4 Archived." - changed
Input schema / properties / statusIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts updated strictly before it." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts updated at or after it."
- Changed
gorelo_list_contracts6 fields changed- added
Input schema / properties / clientIds / descriptionAdded value: +"client ids; keeps only contracts billed to any of them." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque pagination cursor from a previous page; omit for the first page."New value: +"Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it." - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1-200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / statusIdsAdded value: +{ + "description": "status ids: 1 Active, 2 Expired, 3 Archived. Omitted returns Active and Expired (archived excluded). Any other id is a 400.", + "items": { + "type": "integer" + }, + "type": "array" +}
- Added
gorelo_list_custom_asset_hardware_types - Changed
gorelo_list_custom_assets9 fields changed- added
Input schema / properties / clientIds / descriptionAdded value: +"client ids to include. Omit for every client." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets created at or after it." - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / query / descriptionAdded value: +"Keyword matched against the asset name, description and serial number. Up to 200 characters." - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets updated strictly before it." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets updated at or after it."
- Added
gorelo_list_deletions - Added
gorelo_list_document_related_items - Added
gorelo_list_document_versions - Added
gorelo_list_documents - Added
gorelo_list_form_responses - Added
gorelo_list_forms - Added
gorelo_list_invoices - Added
gorelo_list_item_categories - Added
gorelo_list_items - Added
gorelo_list_project_comments - Added
gorelo_list_project_sections - Added
gorelo_list_project_tags - Added
gorelo_list_project_task_comments - Added
gorelo_list_project_task_conversations - Added
gorelo_list_project_tasks - Added
gorelo_list_project_types - Added
gorelo_list_projects - Added
gorelo_list_taxes - Changed
gorelo_list_ticket_comments11 fields changed- added
Input schema / properties / conversationId / descriptionAdded value: +"Identifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType." - added
Input schema / properties / conversationType / descriptionAdded value: +"Kinds to include: 1 Public, 2 Private, 3 Side Conversation, 4 Approval. Comma-separated on its own; a single value when paired with conversationId." - added
Input schema / properties / conversationType / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / properties / conversationType / typePrevious value: -"string"New value: +"array" - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque pagination cursor from a previous page; omit for the first page." - added
Input schema / properties / pageSize / descriptionAdded value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / sortBy / descriptionAdded value: +"Sort field: createdOn." - added
Input schema / properties / sortOrder / descriptionAdded value: +"Sort direction: asc (default) or desc." - removed
Input schema / properties / sortOrder / enumRemoved value: -[ - "asc", - "desc" -] - added
Input schema / properties / ticketId / descriptionAdded value: +"Ticket identifier."
- Changed
gorelo_list_ticket_conversations1 field changed- added
Input schema / properties / ticketId / descriptionAdded value: +"Ticket identifier."
- Changed
gorelo_list_tickets27 fields changed- added
Input schema / properties / clientIds / descriptionAdded value: +"client ids to include. Omit for every client." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / contactIds / descriptionAdded value: +"contact ids to include." - changed
Input schema / properties / contactIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets created at or after it." - changed
Input schema / properties / groupIds / descriptionPrevious value: -"A ticket matches if it is subscribed to any of these groups."New value: +"group ids; a ticket matches if it is subscribed to any of them." - changed
Input schema / properties / groupIds / items / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / leadAssigneeIds / descriptionAdded value: +"lead assignee ids to include." - changed
Input schema / properties / leadAssigneeIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / priorityIds / descriptionPrevious value: -"None=0, Urgent=1, High=2, Normal=3, Low=4."New value: +"priority ids on the public scale — None=0, Urgent=1, High=2, Normal=3, Low=4." - changed
Input schema / properties / priorityIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / query / descriptionPrevious value: -"Keyword matched against the ticket title, number and display number."New value: +"Keyword matched against the ticket title, number and display number. Up to 200 characters." - added
Input schema / properties / sortBy / descriptionAdded value: +"Sort field: updatedOn (default) or createdOn." - removed
Input schema / properties / sortBy / enumRemoved value: -[ - "updatedOn", - "createdOn" -] - added
Input schema / properties / sortOrder / descriptionAdded value: +"Sort direction: asc or desc (default)." - removed
Input schema / properties / sortOrder / enumRemoved value: -[ - "asc", - "desc" -] - added
Input schema / properties / statusIds / descriptionAdded value: +"status ids to include. Omit for every status." - changed
Input schema / properties / statusIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / tagIds / descriptionPrevious value: -"A ticket matches if it carries any of these tags."New value: +"tag ids; a ticket matches if it carries any of them." - changed
Input schema / properties / tagIds / items / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / typeIds / descriptionAdded value: +"ticket type ids to include." - changed
Input schema / properties / typeIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets updated strictly before it." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets updated at or after it."
- Changed
gorelo_list_time_entries19 fields changed- added
Input schema / properties / clientIds / descriptionAdded value: +"client ids; keeps only time entries billed to any of them." - changed
Input schema / properties / clientIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / createdBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries created strictly before it." - changed
Input schema / properties / createdSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries created at or after it." - changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque pagination cursor from a previous page; omit for the first page."New value: +"Opaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it." - added
Input schema / properties / invoiceIds / descriptionAdded value: +"invoice ids; keeps only time entries billed on any of them." - changed
Input schema / properties / invoiceIds / items / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / locationIds / descriptionAdded value: +"client location ids; keeps only time entries whose ticket sits at any of them." - changed
Input schema / properties / locationIds / items / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / startedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries whose work started strictly before it." - changed
Input schema / properties / startedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries whose work started at or after it." - added
Input schema / properties / taskIds / descriptionAdded value: +"task ids; keeps only time entries logged against any of them." - added
Input schema / properties / ticketIds / descriptionAdded value: +"ticket ids; keeps only time entries logged against any of them." - changed
Input schema / properties / updatedBefore / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries updated strictly before it. An entry that has never been changed is excluded." - changed
Input schema / properties / updatedSince / descriptionPrevious value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries updated at or after it. An entry that has never been changed is excluded." - added
Input schema / properties / userIds / descriptionAdded value: +"user ids; keeps only time entries belonging to any of them." - changed
Input schema / properties / userIds / items / typePrevious value: -"number"New value: +"integer"
- Added
gorelo_list_uptime_checks - Changed
gorelo_list_users3 fields changed- changed
Input schema / properties / pageSize / descriptionPrevious value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)." - changed
Input schema / properties / pageSize / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / statusIdsAdded value: +{ + "description": "status ids: Pending=1, Active=2, Disabled=3. Omit for Pending and Active - disabled users are listed only when 3 is named.", + "items": { + "type": "integer" + }, + "type": "array" +}
- Added
gorelo_restore_document_version - Added
gorelo_update_client - Added
gorelo_update_contact - Added
gorelo_update_custom_asset - Added
gorelo_update_document - Added
gorelo_update_project - Added
gorelo_update_project_section - Added
gorelo_update_project_task - Added
gorelo_update_ticket - Added
gorelo_update_time_entry - Added
gorelo_update_uptime_check
24 tool updates
v0.1.0- First observed
gorelo_get_asset - First observed
gorelo_get_client - First observed
gorelo_get_contact - First observed
gorelo_get_ticket - First observed
gorelo_get_ticket_approval - First observed
gorelo_get_ticket_comment - First observed
gorelo_get_time_entry - First observed
gorelo_list_assets - First observed
gorelo_list_billing_roles - First observed
gorelo_list_client_locations - First observed
gorelo_list_clients - First observed
gorelo_list_contacts - First observed
gorelo_list_contracts - First observed
gorelo_list_custom_assets - First observed
gorelo_list_groups - First observed
gorelo_list_ticket_comments - First observed
gorelo_list_ticket_conversations - First observed
gorelo_list_ticket_statuses - First observed
gorelo_list_ticket_tags - First observed
gorelo_list_ticket_types - First observed
gorelo_list_tickets - First observed
gorelo_list_time_entries - First observed
gorelo_list_users - First observed
gorelo_list_work_types
TDQS
Scored across 90 tools
Most tools are scoped by resource and action (ticket/project/document/asset) with descriptions that help distinguish them. Some boundaries blur between comments, conversations, and approvals on tickets/tasks, and between agent assets and custom assets.
All tools use a consistent gorelo_ prefix and snake_case verb_noun pattern such as list_, get_, create_, update_, duplicate_, and restore_. Compound names still follow the same predictable convention.
Ninety tools is far beyond a well-scoped MCP surface, even for a broad PSA/RMM platform. The volume creates high selection burden and suggests many operations should be grouped, trimmed, or exposed through more focused endpoints.
The surface covers many entities with list/get/create/update operations, but there are notable gaps: almost no delete operations, agent assets are read-only, invoices/contracts/items are mostly read-only, and forms lack get/create operations. These gaps will force agents to work around missing lifecycle operations.
Maintenance
Related MCP Connectors
One governed MCP endpoint for 40+ business systems. Read-only, source-cited answers.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides AI assistants with direct access to Autotask PSA for MSP operations. Enables natural language interaction for ticket management, time logging, company lookups, project tracking, and billing review through 39 comprehensive tools.100103 npmApache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to analyze IT support tickets, categorize urgency, suggest responses, and retrieve statistics via MCP tools.-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query internal business data for insights into customers, revenue, subscriptions, sales, and churn through controlled, read-only MCP tools.-
- AlicenseAqualityBmaintenanceProvides read-only visibility into CyberQP privileged access management data, including customer and account metadata, tenant event logs, and Just-In-Time account status and policies, for AI assistants.10Apache 2.0