Skip to main content
Glama

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_API_KEY

Gorelo Public API key for stdio and AUTH_MODE=env. Not read by the gateway Compose service.

GORELO_REGION

us (default) or au - your account's regional API host. Not a credential.

MCP_TRANSPORT

stdio (default) or http.

AUTH_MODE

env (default, reads the vars above) or gateway (credentials arrive per-request via X-Gorelo-* headers, injected by the Conduit gateway). Gateway mode never falls back to GORELO_API_KEY. The container image and Compose default to gateway.

CONDUIT_S2S_SECRET

Required to start the HTTP transport. The process logs an error and exits non-zero when this is empty or a known placeholder (changeme, change-me, secret, example, placeholder, replace-me, your-secret, your-s2s-secret, s2s-secret, replace-with-a-real-secret). Compose will not start without it. Never commit a real value. The value is never logged.

MCP_ALLOW_INSECURE_DEV

Set to exactly 1 only for local development to start HTTP without CONDUIT_S2S_SECRET. The process logs a warning, does not enforce X-Gateway-S2S, and binds 127.0.0.1 only. A non-loopback MCP_HTTP_HOST is overridden and logged. A placeholder secret still refuses to start.

MCP_HTTP_HOST

Bind address when a secret is configured. Unset means 0.0.0.0. The container image sets 0.0.0.0. Ignored in favor of 127.0.0.1 when there is no secret.

MCP_HTTP_PORT

HTTP port. Defaults to 8080.

GORELO_PRESET, GORELO_ENABLE_DESTRUCTIVE, GORELO_ENABLE_BILLING_WRITES, GORELO_TOOLS_INCLUDE, GORELO_TOOLS_EXCLUDE

Tool selection; see Tool selection.

LOG_LEVEL

debug | info (default) | warn | error.

/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: us

Request limits

  • HTTP request bodies are capped at 256 KiB (262144 bytes). After the X-Gateway-S2S check passes, a Content-Length above the cap returns 413 with a JSON-RPC error; bodies without Content-Length are capped by the MCP SDK transport. Unauthenticated requests still get 401 first.

  • tools/call arguments are capped at 10,000 elements (every array item and object key at any depth). Larger inputs return an isError tool 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

readOnlyHint: true

on

write

POST / PUT / PATCH

36

readOnlyHint: false, destructiveHint: false

on (the gateway gates writes), except billing writes (below)

destructive

DELETE

18

readOnlyHint: false, destructiveHint: true

off; set GORELO_ENABLE_DESTRUCTIVE=true

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

gorelo_list_alerts

read

Lists alerts in Gorelo across all your clients.

gorelo_create_alert

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

gorelo_get_asset

read

Gets a single agent (managed device) asset by id.

gorelo_get_custom_asset

read

Gets a single custom asset by id.

gorelo_get_uptime_check

read

Gets a single uptime check by id.

gorelo_list_assets

read

Lists agent (managed device) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

gorelo_list_custom_asset_hardware_types

read

Lists the hardware types a custom asset can be given.

gorelo_list_custom_assets

read

Lists custom (non-agent) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

gorelo_list_uptime_checks

read

Lists uptime checks for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

gorelo_create_custom_asset

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.

gorelo_create_uptime_check

write

Creates an uptime check that pings a host, requests a web address or connects to a TCP port on a schedule.

gorelo_update_custom_asset

write

Updates a custom asset. Send only the fields you want to change.

gorelo_update_uptime_check

write

Updates an uptime check. Send only the fields you want to change.

gorelo_delete_asset

destructive

Deletes a managed device (agent asset) from Gorelo. This is destructive and can't be undone from Conduit.

gorelo_delete_custom_asset

destructive

Deletes a custom asset from Gorelo. This is destructive and can't be undone from Conduit.

gorelo_delete_uptime_check

destructive

Deletes an uptime check, which stops that monitoring. This is destructive and can't be undone from Conduit.

Billing

Tool

Tier

Description

gorelo_get_contract

read

Gets one contract, including the products and labor in each service line.

gorelo_get_invoice

read

Gets one invoice, with its attachments and line items.

gorelo_get_item

read

Gets one catalog item (a product or a bundle) by ID.

gorelo_get_time_entry

read

Gets a single time entry by id.

gorelo_list_billing_roles

read

Lists the billing roles configured for the service provider. Use a role's Id as BillingRoleId when logging time against a ticket.

gorelo_list_contracts

read

Lists billing contracts, each with the service lines it is made of.

gorelo_list_invoices

read

Lists the service provider's invoices, filtered and sorted.

gorelo_list_item_categories

read

Lists the categories products are organised under, each with its subcategories.

gorelo_list_items

read

Lists the service provider's item catalog: products and bundles.

gorelo_list_taxes

read

Lists the tax rates configured for the service provider.

gorelo_list_time_entries

read

Lists logged time across every ticket and task, narrowed by any of the filters.

gorelo_list_work_types

read

Lists the work types configured for the service provider. Use a work type's Id as WorkTypeId when logging time against a ticket.

gorelo_create_invoice

write (admin, billing)

Raises a manual invoice against a client, with line items.

gorelo_create_item

write (admin, billing)

Creates a product or a bundle in the item catalog.

gorelo_create_payment

write (admin, billing)

Records a payment received outside Gorelo against an approved invoice.

gorelo_create_time_entry

write

Logs time against a ticket.

gorelo_update_item

write (admin, billing)

Partially updates an item. Send only the fields you want to change.

gorelo_update_time_entry

write

Partially updates a time entry. Send only the fields you want to change.

gorelo_delete_contract

destructive

Deletes a billing contract from Gorelo. This is destructive and can't be undone from Conduit.

gorelo_delete_invoice

destructive

Deletes or voids an invoice, depending on its status. This is destructive and can't be undone from Conduit.

gorelo_delete_item

destructive

Deletes a product or bundle from the item catalog. This is destructive and can't be undone from Conduit.

gorelo_delete_payment

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.

gorelo_delete_time_entry

destructive

Deletes a logged time entry. This is destructive and can't be undone from Conduit.

Clients

Tool

Tier

Description

gorelo_get_client

read

Gets a single client by id.

gorelo_list_client_locations

read

Lists the locations for a given client.

gorelo_list_clients

read

Lists clients for the service provider using cursor pagination. Results are sorted by client id ascending (oldest first).

gorelo_create_client

write (admin)

Creates a client (and its default location) for the service provider.

gorelo_update_client

write (admin)

Updates an existing client. Only supplied (non-null) fields are changed.

gorelo_delete_client

destructive

Deletes a client from Gorelo. This is destructive and can't be undone from Conduit.

Contacts

Tool

Tier

Description

gorelo_get_contact

read

Gets a single contact by id.

gorelo_list_contacts

read

Lists contacts for the service provider using cursor pagination, optionally filtered by client. Results are sorted by contact id ascending (oldest first).

gorelo_create_contact

write (admin)

Creates a contact under a client, or a temporary contact when no client is given.

gorelo_update_contact

write (admin)

Updates a contact. Send only the fields you want to change.

gorelo_delete_contact

destructive

Deletes a contact from Gorelo. This is destructive and can't be undone from Conduit.

Deletions

Tool

Tier

Description

gorelo_list_deletions

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

gorelo_get_document

read

Gets a single document.

gorelo_get_document_version

read

Gets one version of a document, with its body and attachments.

gorelo_list_document_related_items

read

Lists the records a document is related to.

gorelo_list_document_versions

read

Lists a document's versions, newest first.

gorelo_list_documents

read

Lists the service provider's documents.

gorelo_create_document

write

Creates a document with an HTML body, either for a client or for internal use, optionally nested under another document.

gorelo_create_document_related_item

write

Relates a document to other records.

gorelo_duplicate_document

write

Makes a copy of a document as a new document.

gorelo_restore_document_version

write

Makes an earlier version the current one.

gorelo_update_document

write

Updates a document's title, body or placement. Send only the fields you want to change.

gorelo_delete_document_related_item

destructive

Removes one related item from a document.

Forms

Tool

Tier

Description

gorelo_list_form_responses

read

Lists a form's submitted responses, newest first.

gorelo_list_forms

read

Lists the service provider's forms, most recently updated first.

gorelo_create_form_submission_link

write

Creates a link someone can use to fill in and submit this form.

Organization

Tool

Tier

Description

gorelo_list_api_keys

read

Lists your Gorelo API keys, newest first. Shows names and details only, never the key values.

gorelo_list_groups

read

Lists the technician groups configured for the service provider.

gorelo_list_users

read

Lists users (technicians) for the service provider using cursor pagination. Results are sorted by user id ascending (oldest first).

Projects

Tool

Tier

Description

gorelo_get_project

read

Gets a single project.

gorelo_get_project_comment

read

Returns one comment on a project.

gorelo_get_project_task

read

Returns one task in full.

gorelo_get_project_task_approval

read

Gets one approval on a task, with its approvers.

gorelo_get_project_task_comment

read

Returns one comment on a task.

gorelo_list_project_comments

read

Returns a project's comments, newest first.

gorelo_list_project_sections

read

Lists a project's sections.

gorelo_list_project_tags

read

Lists the project tags configured for the service provider.

gorelo_list_project_task_comments

read

Returns a task's comments, newest first.

gorelo_list_project_task_conversations

read

Lists the conversations on a task.

gorelo_list_project_tasks

read

Lists a project's tasks.

gorelo_list_project_types

read

Lists the project types configured for the service provider.

gorelo_list_projects

read

Lists projects, newest activity first.

gorelo_create_project

write

Creates a project in Gorelo.

gorelo_create_project_comment

write

Posts a comment on a project.

gorelo_create_project_section

write

Adds a section to a project.

gorelo_create_project_task

write

Creates a task on a project's board.

gorelo_create_project_task_approval

write

Asks contacts to approve something on a task.

gorelo_create_project_task_comment

write

Posts a comment on a task.

gorelo_create_project_task_side_conversation

write

Starts a side conversation on a task.

gorelo_update_project

write

Updates a project. Send only the fields you want to change.

gorelo_update_project_section

write

Updates a section's title or colour. Send only the fields you want to change.

gorelo_update_project_task

write

Updates a task. Send only the fields you want to change.

gorelo_delete_project

destructive

Deletes a project and every task in it. This is destructive and can't be undone from Conduit.

gorelo_delete_project_comment

destructive

Deletes one comment on a project. This is destructive and can't be undone from Conduit.

gorelo_delete_project_section

destructive

Deletes a project section and every task in it. This is destructive and can't be undone from Conduit.

gorelo_delete_project_task

destructive

Deletes a project task. This is destructive and can't be undone from Conduit.

gorelo_delete_project_task_comment

destructive

Deletes one comment on a task. This is destructive and can't be undone from Conduit.

Tickets

Tool

Tier

Description

gorelo_get_ticket

read

Gets a single ticket.

gorelo_get_ticket_approval

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.

gorelo_get_ticket_comment

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.

gorelo_list_ticket_comments

read

Lists the comments on a ticket using cursor pagination. Comments read oldest-first by default, like a conversation top to bottom.

gorelo_list_ticket_conversations

read

Lists the conversations on a ticket.

gorelo_list_ticket_statuses

read

Lists the ticket statuses configured for the service provider.

gorelo_list_ticket_tags

read

Lists the ticket tags configured for the service provider.

gorelo_list_ticket_types

read

Lists the ticket types configured for the service provider.

gorelo_list_tickets

read

Lists tickets for the service provider using cursor pagination. Default sort is updatedOn desc.

gorelo_create_ticket

write

Creates a ticket in Gorelo.

gorelo_create_ticket_approval

write

Creates an approval on a ticket. Every listed contact starts Pending.

gorelo_create_ticket_comment

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.

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

gorelo_update_ticket

write

Partially updates a ticket. Send only the fields you want to change.

gorelo_delete_ticket

destructive

Deletes a ticket and its time entries. This is destructive and can't be undone from Conduit.

gorelo_delete_ticket_comment

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

GORELO_PRESET=readonly

58

39,718

default (read + write, no billing writes)

90

87,530

GORELO_ENABLE_DESTRUCTIVE=true + GORELO_ENABLE_BILLING_WRITES=true (everything)

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

GORELO_PRESET

all (default: read + write), readonly (read only), crm (Clients, Contacts, Organization), tickets (Tickets, Contacts, Clients), monitoring (Alerts, Assets). Tag presets match any of an operation's OpenAPI tags. Unknown values refuse to start.

GORELO_ENABLE_DESTRUCTIVE

true enables the DELETE tools. Anything else leaves them off. Presets and filters never enable them.

GORELO_ENABLE_BILLING_WRITES

true enables invoice, payment and item create/update. Default off; presets and filters never enable them.

GORELO_TOOLS_INCLUDE

Comma-separated name globs (*, ?); keep only matching tools, e.g. gorelo_*_ticket*,gorelo_list_clients.

GORELO_TOOLS_EXCLUDE

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

POST /v1/attachments

multipart file upload

GET /v1/invoices/{invoiceId}/pdf

returns a binary PDF

GET /v1/documents/{documentId}/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 or pageSize and 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 --noEmit

Docker

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

Compose 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 up

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

Local 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:http

Available Tools

90 tools
gorelo_create_alertB

Raises a new alert against one of your clients in Gorelo, such as an alert from an outside monitoring tool.

NameRequiredDescriptionDefault
bodyYesRequest body for posting an external alert against a client.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a client, along with its default location.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives (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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a contact, under a client or, with no client, as a temporary contact.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a custom asset.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
bodyYesA new document.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_projectC

Creates a project in Gorelo.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a project.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, 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.

NameRequiredDescriptionDefault
bodyYesRequest body for posting a comment on a project.
projectIdYesProject to comment on.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
bodyYesRequest body for adding a section to a project.
projectIdYesProject to add the section to.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus 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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a task inside a project section.
projectIdYesProject to create the task in.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for asking contacts to approve something on a task.
taskIdYesTask the approval is for.
projectIdYesProject the task belongs to.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for posting a comment on a task.
taskIdYesTask to comment on.
projectIdYesProject the task belongs to.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
bodyYesRequest body for starting a side conversation on a task - a thread with somebody outside the task's own…
taskIdYesTask to start the conversation on.
projectIdYesProject the task belongs to.

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating a ticket.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesApproval details.
ticketIdYesTicket identifier.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
bodyYesComment details.
ticketIdYesTicket identifier.

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb 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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesSide conversation details.
ticketIdYesTicket identifier.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesLogs time against a ticket.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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.

NameRequiredDescriptionDefault
bodyYesRequest body for creating an uptime check.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesA duplicate of a document. The body may be omitted entirely.
documentIdYesDocument to duplicate.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to 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_assetB
Read-only

Gets a single agent (managed device) asset by id.

NameRequiredDescriptionDefault
idYesDevice identifier.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_clientB
Read-only

Gets a single client by id.

NameRequiredDescriptionDefault
idYesClient identifier.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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

The tool is simple (one required 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_contactC
Read-only

Gets a single contact by id.

NameRequiredDescriptionDefault
idYesContact identifier.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_contractA
Read-only

Gets one contract, including the products and labor in each service line.

NameRequiredDescriptionDefault
contractIdYesIdentifier of the contract.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

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

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_assetB
Read-only

Gets a single custom asset by id.

NameRequiredDescriptionDefault
customAssetIdYesCustom asset identifier.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

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

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_documentC
Read-only

Gets a single document.

NameRequiredDescriptionDefault
documentIdYesDocument identifier.

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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

There is no output schema, 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_versionB
Read-only

Gets one version of a document, with its body and attachments.

NameRequiredDescriptionDefault
versionIdYesVersion identifier; it must be one of this document's.
documentIdYesDocument identifier.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_invoiceA
Read-only

Gets one invoice, with its attachments and line items.

NameRequiredDescriptionDefault
invoiceIdYesInvoice identifier.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_itemA
Read-only

Gets one catalog item (a product or a bundle) by ID.

NameRequiredDescriptionDefault
itemIdYesIdentifier of the item.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a one-parameter read tool this is 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_projectC
Read-only

Gets a single project.

NameRequiredDescriptionDefault
projectIdYesProject identifier.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 100% for the single 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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this 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_commentC
Read-only

Returns one comment on a project.

NameRequiredDescriptionDefault
commentIdYesComment to return.
projectIdYesProject the comment belongs to.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_taskC
Read-only

Returns one task in full.

NameRequiredDescriptionDefault
taskIdYesTask to return.
projectIdYesProject the task belongs to.

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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

There is no output schema, 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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_approvalB
Read-only

Gets one approval on a task, with its approvers.

NameRequiredDescriptionDefault
taskIdYesTask the approval is on.
projectIdYesProject the task belongs to.
approvalIdYesApproval identifier, from the conversations endpoint.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives 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_commentC
Read-only

Returns one comment on a task.

NameRequiredDescriptionDefault
taskIdYesTask the comment belongs to.
commentIdYesComment to return.
projectIdYesProject the task belongs to.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_ticketC
Read-only

Gets a single ticket.

NameRequiredDescriptionDefault
ticketIdYesTicket identifier.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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

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

Parameters3/5

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

Schema description coverage is 100% for the single 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.

Purpose3/5

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.

Usage Guidelines2/5

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_approvalA
Read-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.

NameRequiredDescriptionDefault
ticketIdYesTicket identifier.
approvalIdYesApproval identifier, from the conversations endpoint.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_commentA
Read-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.

NameRequiredDescriptionDefault
ticketIdYesTicket identifier.
commentIdYesComment identifier.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_entryB
Read-only

Gets a single time entry by id.

NameRequiredDescriptionDefault
idYesTime entry to read.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every word contributes to identifying the operation and its scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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

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

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_checkB
Read-only

Gets a single uptime check by id.

NameRequiredDescriptionDefault
checkIdYesUptime check identifier.

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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

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

Parameters3/5

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

Schema description coverage is 100% for the single 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.

Purpose4/5

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.

Usage Guidelines3/5

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_alertsC
Read-only

Lists alerts in Gorelo across all your clients.

NameRequiredDescriptionDefault
cursorNoCursor from a previous page.
typeIdsNotype ids: Uptime=1, API=2, Script=3, External=4, Slide=5, Huntress=6, Error Event Log=7, Disk Usage=8, Connectivity=9, Process=10…
pageSizeNoAlerts per page, 1-200. Defaults to 50.
clientIdsNoclient ids. An alert type that carries no client id never matches this filter.
deviceIdsNodevice ids (guids).
sortOrderNodesc (default, newest first) or asc. Sorted by CreatedOn.
statusIdsNostatus ids: New=1, Dismissed=2, Ticketed=3. Any other id is a 400.
createdSinceNoKeeps only alerts raised at or after this instant (UTC).
createdBeforeNoKeeps only alerts raised strictly before this instant (UTC).

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, 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_keysA
Read-only

Lists your Gorelo API keys, newest first. Shows names and details only, never the key values.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page, from 1 to 200 (default 50). A value outside that range is rejected.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_assetsA
Read-only

Lists agent (managed device) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

NameRequiredDescriptionDefault
queryNoKeyword matched against the device name, display name and description. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
clientIdsNoclient ids to include. Omit for every client.
statusIdsNodevice status ids to include: 1 Unreachable, 2 Active, 3 Inactive, 4 Pending Delete, 6 Pending client inactive.
createdSinceNoISO-8601 timestamp; keeps only devices created at or after it.
updatedSinceNoISO-8601 timestamp; keeps only devices updated at or after it.
createdBeforeNoISO-8601 timestamp; keeps only devices created strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only devices updated strictly before it.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_rolesA
Read-only

Lists the billing roles configured for the service provider. Use a role's Id as BillingRoleId when logging time against a ticket.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a parameterless, read-only 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_locationsC
Read-only

Lists the locations for a given client.

NameRequiredDescriptionDefault
clientIdYesClient identifier.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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

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

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to 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_clientsA
Read-only

Lists clients for the service provider using cursor pagination. Results are sorted by client id ascending (oldest first).

NameRequiredDescriptionDefault
queryNoKeyword matched against the client name, alternate name, billing name and web domains. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
statusIdsNoclient status ids to include: 1 Active, 3 Credit hold, 4 Archived.
createdSinceNoISO-8601 timestamp; keeps only clients created at or after it.
updatedSinceNoISO-8601 timestamp; keeps only clients updated at or after it.
createdBeforeNoISO-8601 timestamp; keeps only clients created strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only clients updated strictly before it.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_contactsA
Read-only

Lists contacts for the service provider using cursor pagination, optionally filtered by client. Results are sorted by contact id ascending (oldest first).

NameRequiredDescriptionDefault
queryNoKeyword matched against the contact email addresses, first name and last name. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
clientIdNoDeprecated single-client filter, superseded by clientIds. Still accepted; ignored when clientIds is supplied.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
clientIdsNoclient ids to include. Omit for every client.
statusIdsNocontact status ids to include: 1 Active, 3 Temporary, 4 Archived.
createdSinceNoISO-8601 timestamp; keeps only contacts created at or after it.
updatedSinceNoISO-8601 timestamp; keeps only contacts updated at or after it.
createdBeforeNoISO-8601 timestamp; keeps only contacts created strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only contacts updated strictly before it.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_contractsB
Read-only

Lists billing contracts, each with the service lines it is made of.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it.
pageSizeNoNumber of items per page. Clamped to 1-200 (default 50).
clientIdsNoclient ids; keeps only contracts billed to any of them.
statusIdsNostatus ids: 1 Active, 2 Expired, 3 Archived. Omitted returns Active and Expired (archived excluded). Any other id is a 400.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_typesB
Read-only

Lists the hardware types a custom asset can be given.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_assetsA
Read-only

Lists custom (non-agent) assets for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

NameRequiredDescriptionDefault
queryNoKeyword matched against the asset name, description and serial number. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
clientIdsNoclient ids to include. Omit for every client.
createdSinceNoISO-8601 timestamp; keeps only assets created at or after it.
updatedSinceNoISO-8601 timestamp; keeps only assets updated at or after it.
createdBeforeNoISO-8601 timestamp; keeps only assets created strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only assets updated strictly before it.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_deletionsA
Read-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.

NameRequiredDescriptionDefault
sinceNoISO-8601 UTC timestamp; keeps only deletions at or after it.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
typeIdsYesRequired. 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.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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_documentsC
Read-only

Lists the service provider's documents.

NameRequiredDescriptionDefault
queryNoKeyword matched against the title. Max 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
sortByNoSort field: createdOn (default) or updatedOn.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
clientIdsNoclient ids. Returns only those clients' documents, never internal ones.
isStarredNoKeeps only starred (true) or unstarred (false) documents.
sortOrderNoSort direction: asc or desc (default).
statusIdsNostatus ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400.
isInternalNotrue for internal documents only, false for client documents only.
createdSinceNoKeeps only documents created at or after this UTC instant. Restoring a version resets a document's created time.
updatedSinceNoKeeps only documents updated at or after this UTC instant (ISO 8601). Documents never updated are left out.
createdBeforeNoKeeps only documents created strictly before this UTC instant.
updatedBeforeNoKeeps only documents updated strictly before this UTC instant.
parentDocumentIdNoOnly the documents nested directly under this document.
isPublicLinkEnabledNoKeeps only documents whose public link is on (true) or off (false).
isPublishedToPortalNoKeeps only documents published (true) or not published (false) to the client portal.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this 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_versionsB
Read-only

Lists a document's versions, newest first.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
documentIdYesDocument identifier.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_responsesB
Read-only

Lists a form's submitted responses, newest first.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
formIdYesForm whose responses to list.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_formsB
Read-only

Lists the service provider's forms, most recently updated first.

NameRequiredDescriptionDefault
queryNoKeyword matched against the form title, case-insensitively.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
tagIdsNoticket tag ids; matches forms that apply any of them.
groupIdsNotechnician group ids; matches forms assigned to any of them.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
clientIdsNoclient ids; matches forms restricted to any of them.
sortOrderNoSort direction by last update: asc or desc (default).
statusIdsNoform status ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400.
allowInPortalNoKeeps only forms offered (true) or not offered (false) in the client portal.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this 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_groupsB
Read-only

Lists the technician groups configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_invoicesC
Read-only

Lists the service provider's invoices, filtered and sorted.

NameRequiredDescriptionDefault
queryNoFree-text search against the invoice number, reference and name.
cursorNoOpaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters and sort that produced it.
numberNoExact 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.
sortByNoSort field: createdOn (default), updatedOn, date, dueDate or totalAmount.
pageSizeNoNumber of items per page. 1-200 (default 50); out of range is a 400, never clamped.
clientIdsNoclient ids; keeps only invoices billed to any of them.
sortOrderNoSort direction: asc or desc (default).
statusIdsNostatus ids: 1 Draft, 2 Submitted, 3 Paid, 4 Void, 5 Approved. Any other id is a 400.
contractIdsNocontract ids; keeps only invoices raised from any of them.
isEmailSentNoKeeps only invoices that have (true) or have not (false) been emailed to the client.
createdSinceNoKeeps only invoices created at or after this instant.
dueDateSinceNoKeeps only invoices due at or after this date.
updatedSinceNoKeeps only invoices last updated at or after this instant.
createdBeforeNoKeeps only invoices created at or before this instant.
dueDateBeforeNoKeeps only invoices due strictly before this date.
updatedBeforeNoKeeps only invoices last updated at or before this instant.
invoiceDateSinceNoKeeps only invoices dated at or after this date.
invoiceDateBeforeNoKeeps only invoices dated strictly before this date.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_categoriesA
Read-only

Lists the categories products are organised under, each with its subcategories.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a zero-parameter read 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_itemsB
Read-only

Lists the service provider's item catalog: products and bundles.

NameRequiredDescriptionDefault
skusNoSKUs, matched exactly.
queryNoFree-text keyword matched against Name and Description. Max 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it.
typeIdsNoitem type ids (1 Product, 2 Bundle).
vendorsNovendor names, matched exactly.
pageSizeNoNumber of items per page. Rejected with a 400 outside 1-200 (default 50).
clientIdsNoclient ids.
statusIdsNostatus ids: 1 Active, 2 Archived. Omitted returns Active only (archived excluded). Any other id is a 400.
categoryIdsNocategory ids.
partNumbersNomanufacturer part numbers, matched exactly.
createdSinceNoOnly items created on or after this UTC instant.
updatedSinceNoOnly items last changed on or after this UTC instant.
createdBeforeNoOnly items created on or before this UTC instant.
updatedBeforeNoOnly items last changed on or before this UTC instant.
subcategoryIdsNosubcategory ids.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

No guidance on when to use this 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_commentsB
Read-only

Returns a project's comments, newest first.

NameRequiredDescriptionDefault
cursorNoCursor from a previous page.
pageSizeNoComments per page, 1-200. Defaults to 50.
projectIdYesProject whose comments to return.
sortOrderNodesc (default, newest first) or asc.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "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.

Usage Guidelines2/5

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_projectsC
Read-only

Lists projects, newest activity first.

NameRequiredDescriptionDefault
queryNoKeyword matched against the project title, number and display number.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
sortByNoSort field: updatedOn (default) or createdOn.
tagIdsNotag ids (Guids).
typeIdsNoproject type ids (Guids).
groupIdsNotechnician group ids.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
clientIdsNoclient ids.
sortOrderNoSort direction: asc or desc (default).
statusIdsNoproject status ids: 1 Not started, 2 In progress, 3 On hold, 4 Completed, 5 Closed. Any other id is a 400.
createdSinceNoKeeps only projects created at or after this instant (UTC).
updatedSinceNoKeeps only projects updated at or after this instant (UTC).
createdBeforeNoKeeps only projects created strictly before this instant (UTC).
updatedBeforeNoKeeps only projects updated strictly before this instant (UTC).
leadAssigneeIdsNolead assignee (technician) ids.
targetDateAfterNoKeeps only projects with a target date at or after this instant (UTC). A project with no target date matches neither bound.
targetDateBeforeNoKeeps only projects with a target date strictly before this instant (UTC).

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, 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_sectionsC
Read-only

Lists a project's sections.

NameRequiredDescriptionDefault
projectIdYesProject identifier.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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

With no output schema, the description 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.

Parameters3/5

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

Schema description coverage is 100% for the single 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.

Purpose3/5

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.

Usage Guidelines2/5

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

No guidance on when to use this 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_tagsA
Read-only

Lists the project tags configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('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.

Usage Guidelines2/5

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_commentsB
Read-only

Returns a task's comments, newest first.

NameRequiredDescriptionDefault
cursorNoCursor from a previous page.
sortByNoSort field: createdOn.
taskIdYesTask whose comments to return.
pageSizeNoComments per page, 1-200. Defaults to 50.
projectIdYesProject the task belongs to.
sortOrderNodesc (default, newest first) or asc.
conversationIdNoIdentifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType.
conversationTypeNoKinds to include: 1 Public, 2 Private, 3 Side Conversation, 4 Approval. Comma-separated on its own; a single value when paired with conversationId.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_conversationsB
Read-only

Lists the conversations on a task.

NameRequiredDescriptionDefault
taskIdYesTask whose conversations to return.
projectIdYesProject the task belongs to.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler. It 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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_tasksC
Read-only

Lists a project's tasks.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
sortByNoSort field: boardOrder (default), createdOn or updatedOn.
dueAfterNoKeeps only tasks due at or after this instant (UTC). A task with no due date matches neither bound.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
dueBeforeNoKeeps only tasks due strictly before this instant (UTC).
projectIdYesProject whose tasks to list.
sortOrderNoSort direction: asc (default) or desc.
statusIdsNotask status ids: 1 Not started, 2 Working on it, 3 On hold, 4 Done. Any other id is a 400. Omitted returns every status.
sectionIdsNosection ids (Guids).
assigneeIdsNotechnician ids; matches a task's lead or assisting assignees.
incompleteOnlyNoWhen true, drops tasks in the Done status.
leadAssigneeIdsNotechnician ids; matches a task's lead assignee only.

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as 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_typesB
Read-only

Lists the project types configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("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.

Usage Guidelines2/5

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

There is no guidance on when to 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_taxesB
Read-only

Lists the tax rates configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_commentsB
Read-only

Lists the comments on a ticket using cursor pagination. Comments read oldest-first by default, like a conversation top to bottom.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
sortByNoSort field: createdOn.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
ticketIdYesTicket identifier.
sortOrderNoSort direction: asc (default) or desc.
conversationIdNoIdentifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType.
conversationTypeNoKinds to include: 1 Public, 2 Private, 3 Side Conversation, 4 Approval. Comma-separated on its own; a single value when paired with conversationId.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_conversationsC
Read-only

Lists the conversations on a ticket.

NameRequiredDescriptionDefault
ticketIdYesTicket identifier.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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

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

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool 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_ticketsA
Read-only

Lists tickets for the service provider using cursor pagination. Default sort is updatedOn desc.

NameRequiredDescriptionDefault
queryNoKeyword matched against the ticket title, number and display number. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
sortByNoSort field: updatedOn (default) or createdOn.
tagIdsNotag ids; a ticket matches if it carries any of them.
typeIdsNoticket type ids to include.
groupIdsNogroup ids; a ticket matches if it is subscribed to any of them.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
clientIdsNoclient ids to include. Omit for every client.
sortOrderNoSort direction: asc or desc (default).
statusIdsNostatus ids to include. Omit for every status.
contactIdsNocontact ids to include.
priorityIdsNopriority ids on the public scale — None=0, Urgent=1, High=2, Normal=3, Low=4.
createdSinceNoISO-8601 timestamp; keeps only tickets created at or after it.
updatedSinceNoISO-8601 timestamp; keeps only tickets updated at or after it.
createdBeforeNoISO-8601 timestamp; keeps only tickets created strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only tickets updated strictly before it.
leadAssigneeIdsNolead assignee ids to include.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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_statusesA
Read-only

Lists the ticket statuses configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a zero-parameter read-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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_tagsA
Read-only

Lists the ticket tags configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_typesB
Read-only

Lists the ticket types configured for the service provider.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_entriesB
Read-only

Lists logged time across every ticket and task, narrowed by any of the filters.

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page. Only valid against the same filters that produced it.
taskIdsNotask ids; keeps only time entries logged against any of them.
userIdsNouser ids; keeps only time entries belonging to any of them.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
clientIdsNoclient ids; keeps only time entries billed to any of them.
ticketIdsNoticket ids; keeps only time entries logged against any of them.
invoiceIdsNoinvoice ids; keeps only time entries billed on any of them.
locationIdsNoclient location ids; keeps only time entries whose ticket sits at any of them.
createdSinceNoISO-8601 timestamp; keeps only time entries created at or after it.
startedSinceNoISO-8601 timestamp; keeps only time entries whose work started at or after it.
updatedSinceNoISO-8601 timestamp; keeps only time entries updated at or after it. An entry that has never been changed is excluded.
createdBeforeNoISO-8601 timestamp; keeps only time entries created strictly before it.
startedBeforeNoISO-8601 timestamp; keeps only time entries whose work started strictly before it.
updatedBeforeNoISO-8601 timestamp; keeps only time entries updated strictly before it. An entry that has never been changed is excluded.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_checksA
Read-only

Lists uptime checks for the service provider using cursor pagination. Results are sorted by createdOn descending (newest first).

NameRequiredDescriptionDefault
queryNoKeyword matched against the check description. Up to 200 characters.
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
tagIdsNotag ids. A check is included if it carries any one of them.
typeIdsNocheck type ids to include: 1 ICMP, 2 HTTP, 3 TCP.
pageSizeNoNumber of items per page, 1-200 (default 50). Out of range is rejected, not clamped.
clientIdsNoclient ids to include. Omit for every client.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_usersA
Read-only

Lists users (technicians) for the service provider using cursor pagination. Results are sorted by user id ascending (oldest first).

NameRequiredDescriptionDefault
cursorNoOpaque pagination cursor from a previous page; omit for the first page.
pageSizeNoNumber of items per page. Clamped to 1–200 (default 50).
statusIdsNostatus ids: Pending=1, Active=2, Disabled=3. Omit for Pending and Active - disabled users are listed only when 3 is named.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_typesA
Read-only

Lists the work types configured for the service provider. Use a work type's Id as WorkTypeId when logging time against a ticket.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a zero-parameter read-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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
versionIdYesVersion to restore; it must be one of this document's.
documentIdYesDocument identifier.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating a client.
clientIdYesClient to update.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: "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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating an existing contact. ContactId, bound from the route, identifies the contact.
contactIdYesContact to update.

TDQS

B3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating a custom asset. Every field is optional - send only what should change.
customAssetIdYesCustom asset to update.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesPartial update of a document. Every field is optional; an omitted or null field is left as it is.
documentIdYesDocument to update.

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating a project. Every field is optional - send only what you want to change.
projectIdYesProject to update.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating a section. Both fields are optional; send only what you want to change.
projectIdYesProject the section belongs to.
sectionIdYesSection to update.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating a task. Every field is optional - send only what you want to change.
taskIdYesTask to update.
projectIdYesProject the task belongs to.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesUnified partial update for a ticket.
ticketIdYesTicket to update.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesPartial update of a time entry.
timeEntryIdYesTime entry to update.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyYesRequest body for updating an uptime check. Every field is optional - send only what should change.
checkIdYesUptime check to update.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("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.

Usage Guidelines3/5

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.

  1. 84 tool updatesv1.1.1
    • Addedgorelo_create_alert
    • Addedgorelo_create_client
    • Addedgorelo_create_contact
    • Addedgorelo_create_custom_asset
    • Addedgorelo_create_document
    • Addedgorelo_create_document_related_item
    • Addedgorelo_create_form_submission_link
    • Addedgorelo_create_project
    • Addedgorelo_create_project_comment
    • Addedgorelo_create_project_section
    • Addedgorelo_create_project_task
    • Addedgorelo_create_project_task_approval
    • Addedgorelo_create_project_task_comment
    • Addedgorelo_create_project_task_side_conversation
    • Addedgorelo_create_ticket
    • Addedgorelo_create_ticket_approval
    • Addedgorelo_create_ticket_comment
    • Addedgorelo_create_ticket_side_conversation
    • Addedgorelo_create_time_entry
    • Addedgorelo_create_uptime_check
    • Addedgorelo_duplicate_document
    • Changedgorelo_get_asset1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Device identifier."
    • Changedgorelo_get_client2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Client identifier."
      • changedInput schema / properties / id / type
        Previous value: -"number"New value: +"integer"
    • Changedgorelo_get_contact2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Contact identifier."
      • changedInput schema / properties / id / type
        Previous value: -"number"New value: +"integer"
    • Addedgorelo_get_contract
    • Addedgorelo_get_custom_asset
    • Addedgorelo_get_document
    • Addedgorelo_get_document_version
    • Addedgorelo_get_invoice
    • Addedgorelo_get_item
    • Addedgorelo_get_project
    • Addedgorelo_get_project_comment
    • Addedgorelo_get_project_task
    • Addedgorelo_get_project_task_approval
    • Addedgorelo_get_project_task_comment
    • Changedgorelo_get_ticket1 field changed
      • changedInput schema / properties / ticketId / description
        Previous value: -"Ticket id (UUID)."New value: +"Ticket identifier."
    • Changedgorelo_get_ticket_approval2 fields changed
      • addedInput schema / properties / approvalId / description
        Added value: +"Approval identifier, from the conversations endpoint."
      • addedInput schema / properties / ticketId / description
        Added value: +"Ticket identifier."
    • Changedgorelo_get_ticket_comment2 fields changed
      • addedInput schema / properties / commentId / description
        Added value: +"Comment identifier."
      • addedInput schema / properties / ticketId / description
        Added value: +"Ticket identifier."
    • Changedgorelo_get_time_entry2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Time entry to read."
      • changedInput schema / properties / id / type
        Previous value: -"number"New value: +"integer"
    • Addedgorelo_get_uptime_check
    • Addedgorelo_list_alerts
    • Addedgorelo_list_api_keys
    • Changedgorelo_list_assets11 fields changed
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids to include. Omit for every client."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices created at or after it."
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / query / description
        Added value: +"Keyword matched against the device name, display name and description. Up to 200 characters."
      • addedInput schema / properties / statusIds / description
        Added value: +"device status ids to include: 1 Unreachable, 2 Active, 3 Inactive, 4 Pending Delete, 6 Pending client inactive."
      • changedInput schema / properties / statusIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / updatedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices updated strictly before it."
      • changedInput schema / properties / updatedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only devices updated at or after it."
    • Changedgorelo_list_client_locations2 fields changed
      • addedInput schema / properties / clientId / description
        Added value: +"Client identifier."
      • changedInput schema / properties / clientId / type
        Previous value: -"number"New value: +"integer"
    • Changedgorelo_list_clients9 fields changed
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients created at or after it."
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / query / description
        Added value: +"Keyword matched against the client name, alternate name, billing name and web domains. Up to 200 characters."
      • addedInput schema / properties / statusIds / description
        Added value: +"client status ids to include: 1 Active, 3 Credit hold, 4 Archived."
      • changedInput schema / properties / statusIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / updatedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients updated strictly before it."
      • changedInput schema / properties / updatedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only clients updated at or after it."
    • Changedgorelo_list_contacts13 fields changed
      • changedInput schema / properties / clientId / description
        Previous value: -"Filter to a single client."New value: +"Deprecated single-client filter, superseded by clientIds. Still accepted; ignored when clientIds is supplied."
      • changedInput schema / properties / clientId / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids to include. Omit for every client."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts created at or after it."
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / query / description
        Added value: +"Keyword matched against the contact email addresses, first name and last name. Up to 200 characters."
      • addedInput schema / properties / statusIds / description
        Added value: +"contact status ids to include: 1 Active, 3 Temporary, 4 Archived."
      • changedInput schema / properties / statusIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / updatedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts updated strictly before it."
      • changedInput schema / properties / updatedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only contacts updated at or after it."
    • Changedgorelo_list_contracts6 fields changed
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids; keeps only contracts billed to any of them."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / cursor / description
        Previous 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."
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1-200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / statusIds
        Added 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"
        +}
    • Addedgorelo_list_custom_asset_hardware_types
    • Changedgorelo_list_custom_assets9 fields changed
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids to include. Omit for every client."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets created at or after it."
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / query / description
        Added value: +"Keyword matched against the asset name, description and serial number. Up to 200 characters."
      • changedInput schema / properties / updatedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets updated strictly before it."
      • changedInput schema / properties / updatedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only assets updated at or after it."
    • Addedgorelo_list_deletions
    • Addedgorelo_list_document_related_items
    • Addedgorelo_list_document_versions
    • Addedgorelo_list_documents
    • Addedgorelo_list_form_responses
    • Addedgorelo_list_forms
    • Addedgorelo_list_invoices
    • Addedgorelo_list_item_categories
    • Addedgorelo_list_items
    • Addedgorelo_list_project_comments
    • Addedgorelo_list_project_sections
    • Addedgorelo_list_project_tags
    • Addedgorelo_list_project_task_comments
    • Addedgorelo_list_project_task_conversations
    • Addedgorelo_list_project_tasks
    • Addedgorelo_list_project_types
    • Addedgorelo_list_projects
    • Addedgorelo_list_taxes
    • Changedgorelo_list_ticket_comments11 fields changed
      • addedInput schema / properties / conversationId / description
        Added value: +"Identifier of the single conversation to read, from the conversations endpoint. Requires a single conversationType."
      • addedInput schema / properties / conversationType / description
        Added 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."
      • addedInput schema / properties / conversationType / items
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / conversationType / type
        Previous value: -"string"New value: +"array"
      • addedInput schema / properties / cursor / description
        Added value: +"Opaque pagination cursor from a previous page; omit for the first page."
      • addedInput schema / properties / pageSize / description
        Added value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / sortBy / description
        Added value: +"Sort field: createdOn."
      • addedInput schema / properties / sortOrder / description
        Added value: +"Sort direction: asc (default) or desc."
      • removedInput schema / properties / sortOrder / enum
        Removed value: -[
        -  "asc",
        -  "desc"
        -]
      • addedInput schema / properties / ticketId / description
        Added value: +"Ticket identifier."
    • Changedgorelo_list_ticket_conversations1 field changed
      • addedInput schema / properties / ticketId / description
        Added value: +"Ticket identifier."
    • Changedgorelo_list_tickets27 fields changed
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids to include. Omit for every client."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / contactIds / description
        Added value: +"contact ids to include."
      • changedInput schema / properties / contactIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets created at or after it."
      • changedInput schema / properties / groupIds / description
        Previous 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."
      • changedInput schema / properties / groupIds / items / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / leadAssigneeIds / description
        Added value: +"lead assignee ids to include."
      • changedInput schema / properties / leadAssigneeIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / priorityIds / description
        Previous 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."
      • changedInput schema / properties / priorityIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / query / description
        Previous 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."
      • addedInput schema / properties / sortBy / description
        Added value: +"Sort field: updatedOn (default) or createdOn."
      • removedInput schema / properties / sortBy / enum
        Removed value: -[
        -  "updatedOn",
        -  "createdOn"
        -]
      • addedInput schema / properties / sortOrder / description
        Added value: +"Sort direction: asc or desc (default)."
      • removedInput schema / properties / sortOrder / enum
        Removed value: -[
        -  "asc",
        -  "desc"
        -]
      • addedInput schema / properties / statusIds / description
        Added value: +"status ids to include. Omit for every status."
      • changedInput schema / properties / statusIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / tagIds / description
        Previous value: -"A ticket matches if it carries any of these tags."New value: +"tag ids; a ticket matches if it carries any of them."
      • changedInput schema / properties / tagIds / items / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / typeIds / description
        Added value: +"ticket type ids to include."
      • changedInput schema / properties / typeIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / updatedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets updated strictly before it."
      • changedInput schema / properties / updatedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only tickets updated at or after it."
    • Changedgorelo_list_time_entries19 fields changed
      • addedInput schema / properties / clientIds / description
        Added value: +"client ids; keeps only time entries billed to any of them."
      • changedInput schema / properties / clientIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / createdBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries created strictly before it."
      • changedInput schema / properties / createdSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries created at or after it."
      • changedInput schema / properties / cursor / description
        Previous 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."
      • addedInput schema / properties / invoiceIds / description
        Added value: +"invoice ids; keeps only time entries billed on any of them."
      • changedInput schema / properties / invoiceIds / items / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / locationIds / description
        Added value: +"client location ids; keeps only time entries whose ticket sits at any of them."
      • changedInput schema / properties / locationIds / items / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / startedBefore / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries whose work started strictly before it."
      • changedInput schema / properties / startedSince / description
        Previous value: -"ISO-8601 timestamp."New value: +"ISO-8601 timestamp; keeps only time entries whose work started at or after it."
      • addedInput schema / properties / taskIds / description
        Added value: +"task ids; keeps only time entries logged against any of them."
      • addedInput schema / properties / ticketIds / description
        Added value: +"ticket ids; keeps only time entries logged against any of them."
      • changedInput schema / properties / updatedBefore / description
        Previous 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."
      • changedInput schema / properties / updatedSince / description
        Previous 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."
      • addedInput schema / properties / userIds / description
        Added value: +"user ids; keeps only time entries belonging to any of them."
      • changedInput schema / properties / userIds / items / type
        Previous value: -"number"New value: +"integer"
    • Addedgorelo_list_uptime_checks
    • Changedgorelo_list_users3 fields changed
      • changedInput schema / properties / pageSize / description
        Previous value: -"Items per page, clamped 1-200 (default 50)."New value: +"Number of items per page. Clamped to 1–200 (default 50)."
      • changedInput schema / properties / pageSize / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / statusIds
        Added 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"
        +}
    • Addedgorelo_restore_document_version
    • Addedgorelo_update_client
    • Addedgorelo_update_contact
    • Addedgorelo_update_custom_asset
    • Addedgorelo_update_document
    • Addedgorelo_update_project
    • Addedgorelo_update_project_section
    • Addedgorelo_update_project_task
    • Addedgorelo_update_ticket
    • Addedgorelo_update_time_entry
    • Addedgorelo_update_uptime_check
  2. 24 tool updatesv0.1.0
    • First observedgorelo_get_asset
    • First observedgorelo_get_client
    • First observedgorelo_get_contact
    • First observedgorelo_get_ticket
    • First observedgorelo_get_ticket_approval
    • First observedgorelo_get_ticket_comment
    • First observedgorelo_get_time_entry
    • First observedgorelo_list_assets
    • First observedgorelo_list_billing_roles
    • First observedgorelo_list_client_locations
    • First observedgorelo_list_clients
    • First observedgorelo_list_contacts
    • First observedgorelo_list_contracts
    • First observedgorelo_list_custom_assets
    • First observedgorelo_list_groups
    • First observedgorelo_list_ticket_comments
    • First observedgorelo_list_ticket_conversations
    • First observedgorelo_list_ticket_statuses
    • First observedgorelo_list_ticket_tags
    • First observedgorelo_list_ticket_types
    • First observedgorelo_list_tickets
    • First observedgorelo_list_time_entries
    • First observedgorelo_list_users
    • First observedgorelo_list_work_types

TDQS

B3.1/5.0

Scored across 90 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count1/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    Provides 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.
    100
    103 npm
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to query internal business data for insights into customers, revenue, subscriptions, sales, and churn through controlled, read-only MCP tools.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Provides 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.
    10
    Apache 2.0