Semaphore UI MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Semaphore UI MCP serverrun the deploy template in project 1 and show me the logs when it finishes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Semaphore UI MCP server
A Python Model Context Protocol server for Semaphore UI. Connect an MCP client to inspect automation, manage project configuration, launch jobs, and troubleshoot task output through Semaphore's management API.
It provides named, schema-validated management API tools and a wait_for_task
helper, including routes omitted from the upstream OpenAPI document. The server
works over stdio or Streamable HTTP and uses the official Python MCP SDK.
Capabilities
Projects and project membership, global users, API tokens, and server information.
Templates, task execution, task status and logs, task cancellation, and a bounded
wait_for_taskhelper.Inventories, repositories, environments, variable groups, access keys, schedules, views, and integrations.
Management routes for runners, credentials, and edition-specific features where the Semaphore instance and account permit them.
Read-only MCP resources for discovering projects and inspecting their configuration.
Diagnostic prompts for investigating tasks and preparing template runs.
API-token or username/password authentication, custom CA certificates, bounded request timeouts, read-only mode, and a project allowlist.
See the complete API coverage reference for tool names, HTTP routes, API-source provenance, and exclusions. Edition-specific tools are advertised consistently; the Semaphore server determines whether an operation is available to the configured account.
Related MCP server: paperclip-mcp
Install and run
Requires Python 3.13+. uv is the recommended installer; a pip installation is also supported below.
git clone https://github.com/johsem/semaphoreui-mcp.git
cd semaphoreui-mcp
uv sync --locked
export SEMAPHORE_URL="https://semaphore.example.com"
export SEMAPHORE_API_TOKEN="your-api-token"
uv run --frozen semaphoreui-mcpThe default transport is stdio. An MCP client starts the process and exchanges protocol messages through its standard input and output. Operational logs go to standard error. Running the command directly will wait for an MCP client.
Check the installed version or inspect the catalogue without contacting Semaphore:
uv run --frozen semaphoreui-mcp --version
uv run --frozen semaphoreui-mcp --list-toolsTo install without uv, create a Python 3.13+ virtual environment and run
python -m pip install . inside it. This resolves dependencies from the ranges in
pyproject.toml; uv sync --locked uses the repository's exact dependency lock.
For versioned wheels, PyPI packages, and prebuilt containers, see installing a release. Use the channels listed in the chosen GitHub release.
Connect an MCP client
Use this configuration in a client that supports the common mcpServers format,
replacing the absolute checkout path and credentials:
{
"mcpServers": {
"semaphore": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/semaphoreui-mcp",
"run",
"--frozen",
"semaphoreui-mcp"
],
"env": {
"SEMAPHORE_URL": "https://semaphore.example.com",
"SEMAPHORE_API_TOKEN": "your-api-token",
"SEMAPHORE_TOOL_PROFILE": "core",
"SEMAPHORE_READ_ONLY": "true",
"SEMAPHORE_PROJECT_IDS": "1,2"
}
}
}
}This example selects the core tool profile with read-only access to projects 1
and 2. Remove the project allowlist to use the whole account's scope;
set SEMAPHORE_READ_ONLY=false to enable task launches. Use the full profile for
configuration changes. The MCP server cannot grant permissions beyond
those of its Semaphore account.
If uv is unavailable on the MCP client's executable search path, use its absolute
path, or set command to the installed virtual environment's absolute
bin/semaphoreui-mcp path and omit args.
Configuration
Configuration is read from environment variables. The process does not implicitly
load .env; pass variables through your client, shell, or container configuration.
Variable | Default | Meaning |
| Required | Server root URL or URL ending in |
| Unset | Semaphore API token. Prefer a dedicated account with the permissions needed for your workflow. |
| Unset | Username for session login when no API token is configured. |
| Unset | Password paired with |
|
| Validate Semaphore's HTTPS certificate. Disable only for a deliberately trusted development environment. |
| Unset | Path to a PEM CA bundle for a private certificate authority. |
|
| Upstream HTTP request timeout in seconds. |
|
|
|
|
| Disable management mutations and job execution. |
| Unset | Comma-separated positive project IDs. Restrict project access and block global administration. |
| Unset | Bearer token protecting Streamable HTTP. Required for non-loopback bindings, optional on loopback. |
| Local host patterns | Comma-separated allowed HTTP host patterns. Include the hostname used by external clients. |
| Local HTTP origin patterns | Optional comma-separated origin allowlist for the MCP SDK's DNS rebinding protection. |
Configure either an API token or a complete username/password pair. For accounts
requiring interactive SSO or two-factor login, use an API token. .env.example
contains a complete environment template; .env is ignored by Git and excluded
from the Docker build context.
The project allowlist also filters project discovery. Global operations that cannot be scoped to a project are blocked, apart from safe server information and filtered project listing. Semaphore remains responsible for enforcing account permissions on each upstream request.
Keep configuration files containing tokens private. Tool responses and task logs can contain sensitive values supplied by Semaphore, including variables or output from automation. Review what your MCP client stores and shares. Read-only mode prevents mutations; it does not sanitize all upstream data.
Choose a tool profile
Use SEMAPHORE_TOOL_PROFILE=core for inspecting projects and template dependencies,
running or stopping tasks, and reading their status and output. It keeps the tool
list focused on everyday operations. Use full when you need configuration
changes, user administration, or edition-specific management operations. The
default remains full for existing configurations.
The CLI option --tool-profile core or --tool-profile full overrides the
environment variable. Inspect either profile without credentials or a connection:
uv run --frozen semaphoreui-mcp --list-tools --tool-profile core
uv run --frozen semaphoreui-mcp --list-tools --tool-profile fullOffline listing shows the selected profile's catalogue. At runtime, read-only mode
and the project allowlist further restrict available tools. Tools excluded by the
profile cannot be called by name either. The core profile still allows task
execution; combine it with SEMAPHORE_READ_ONLY=true for inspection-only access.
Resources and prompts remain available under both profiles and retain the same
access restrictions. Restart the server after changing its profile.
Common workflows
Tool inputs use named path/query parameters and a body object for JSON requests.
Inspect the tool's advertised schema before using optional fields; the catalogue
keeps the upstream field names and validates inputs locally.
For standard project-resource create/update operations, the adapter fills body
project_id and resource id from the path parameters where required by the API.
Supplying a conflicting ID is rejected before making the request.
Call
list_projectsto discover project IDs.Call
list_templateswith{"project_id": 1}to discover templates.Inspect the selected template and its inventory, environment, and repository.
Launch a task with
create_task:{ "project_id": 1, "body": { "template_id": 2 } }Use the returned task ID with
get_task,get_task_output, orget_task_raw_output, each takingproject_idandtask_id.Use
wait_for_taskto poll within a bounded time instead of repeatedly making manual status calls. A timeout ends polling; it does not cancel the job.
For example, call wait_for_task with:
{
"project_id": 1,
"task_id": 123,
"timeout": 60,
"poll_interval": 2,
"include_output": true,
"tail_lines": 100
}Its timeout stops further polling. The initial status request and optional
output fetch follow SEMAPHORE_TIMEOUT and the HTTP client's retry rules
separately, so total elapsed time can exceed the polling timeout. The result
includes the last task state, finished, and timed_out.
The optional output is a snapshot. Semaphore can persist final log lines after the task reports completion; fetch task output again if those lines are not yet available.
For task history, list_recent_tasks and list_recent_template_tasks accept
count and a before task ID cursor. A template listing supports its advertised
sort/order/app filters; task output endpoints do not support pagination.
Task creation runs real automation with the template's privileges. For an Ansible
template that supports check mode, the task body can include
"params": {"dry_run": true}. The task API's environment and arguments
fields are JSON-encoded strings, when supplied, rather than nested JSON values.
To cancel a task:
{
"project_id": 1,
"task_id": 123,
"body": {
"force": false
}
}Send that input to stop_task. Use the task's latest status and output to verify
what stopped and whether any changes had already been made.
Resources and prompts
MCP clients that support resources can read:
Resource URI | Content |
| Server capabilities and API compatibility information. |
| Visible projects, respecting the allowlist. |
| Project data; collection is |
| An individual task. |
The investigate_task prompt guides diagnosis using task metadata and output. The
plan_template_run prompt guides inspection of the template and its dependencies
before execution. Prompts provide a workflow; they do not launch jobs themselves.
Streamable HTTP
Start locally:
export MCP_HTTP_TOKEN="a-separate-long-random-token"
uv run --frozen semaphoreui-mcp \
--transport streamable-http --host 127.0.0.1 --port 8000Connect your client's Streamable HTTP transport to http://127.0.0.1:8000/mcp,
with an Authorization: Bearer <MCP_HTTP_TOKEN> request header when the token is
configured. All MCP HTTP requests must carry the configured token. This service
uses one Semaphore credential identity for every connected client and stateless
MCP HTTP sessions. It does not implement per-user OAuth or a multi-tenant login.
For a LAN or reverse-proxy deployment, set MCP_HTTP_TOKEN and add the public host
to MCP_ALLOWED_HOSTS, for example mcp.example.com. Configure
MCP_ALLOWED_ORIGINS if your client sends an Origin header. Terminate HTTPS at your
reverse proxy before sending credentials across an untrusted network. Binding to
0.0.0.0 or :: requires a token even when the container port is published only
on the host's loopback interface.
Docker
cp .env.example .env
# Edit .env: set the Semaphore URL/token and a separate MCP_HTTP_TOKEN.
docker compose up --build -dThe container runs as an unprivileged user and Compose publishes port 8000 only on
127.0.0.1. Connect to http://127.0.0.1:8000/mcp with the bearer token. The image
installs runtime dependencies from uv.lock; Compose uses a read-only root
filesystem and a writable temporary directory. For a custom CA bundle, mount the
PEM file read-only and set SEMAPHORE_CA_BUNDLE to its path inside the container.
To use the image over stdio instead:
docker build -t semaphoreui-mcp .
docker run --rm -i --env-file .env semaphoreui-mcp --transport stdioDo not allocate a TTY (-t) for stdio MCP. The image's default command starts HTTP;
the explicit --transport stdio argument overrides it.
systemd service
To run the HTTP transport as a supervised service on a Linux host or container
running systemd, install the package into a uv-managed virtual environment and use
deploy/semaphoreui-mcp.service as a template.
Run these commands from a source checkout or extracted source distribution, with
Git and uv installed. The example expects a system-wide uv executable at
/usr/local/bin/uv; adjust that path if needed. A uv installation in your personal
home directory may not be accessible to the service user.
sudo useradd --system --user-group --home /opt/semaphoreui-mcp --shell /usr/sbin/nologin semaphoreui-mcp
sudo mkdir -p /opt/semaphoreui-mcp && sudo chown semaphoreui-mcp: /opt/semaphoreui-mcp
sudo -u semaphoreui-mcp env UV_PYTHON_INSTALL_DIR=/opt/semaphoreui-mcp/uv sh -c '
/usr/local/bin/uv venv /opt/semaphoreui-mcp/venv --python 3.13 &&
/usr/local/bin/uv pip install --python /opt/semaphoreui-mcp/venv/bin/python \
"semaphoreui-mcp @ git+https://github.com/johsem/semaphoreui-mcp"'
sudo install -o root -g semaphoreui-mcp -m 0640 .env.example /etc/semaphoreui-mcp.env
sudoedit /etc/semaphoreui-mcp.envReplace the placeholder Semaphore URL and credentials and set MCP_HTTP_TOKEN
before starting the service. The unit loads this file via EnvironmentFile and
runs with NoNewPrivileges/ProtectSystem=strict. Pin the package source to a
commit (...semaphoreui-mcp@<sha>) when deploying a specific revision; dependency
versions are still resolved from the package's allowed ranges.
The template listens on 127.0.0.1:8000. Adjust --host, --port,
MCP_ALLOWED_HOSTS, and the paths for your environment before installing it:
sudo install -o root -g root -m 0644 deploy/semaphoreui-mcp.service /etc/systemd/system/semaphoreui-mcp.service
sudo systemctl daemon-reload
sudo systemctl enable --now semaphoreui-mcp
sudo systemctl status semaphoreui-mcpConnect to http://127.0.0.1:8000/mcp with the configured bearer token. Follow the
HTTP configuration guidance when exposing it through a TLS
reverse proxy. View service logs with sudo journalctl -u semaphoreui-mcp.
Development and validation
uv sync --locked --group dev
uv run --frozen ruff check .
uv run --frozen ruff format --check .
uv run --frozen pytest --cov=semaphoreui_mcp --cov-report=term-missing
uv run --frozen python -m buildUnit and protocol tests use controlled HTTP responses and local MCP sessions. They do not need live Semaphore credentials or execute real automation. GitHub Actions runs lint, tests, catalogue discovery, package builds, and disposable-container compatibility tests on pushes, pull requests, and manual runs. Test reports and built distributions are saved as workflow artifacts. GitLab CI remains available for GitLab-hosted repositories. Python tests run on 3.13, 3.14, and 3.15. Weekly Dependabot pull requests cover Python dependencies, GitHub Actions, and Docker base images.
An optional integration smoke test verifies the adapter against a disposable Semaphore Community container:
uv run --frozen python scripts/smoke_test.py --dockerUse --image semaphoreui/semaphore:<tag> to test another release. The default
image and recorded results are listed in API coverage.
It requires Docker and downloads the Semaphore image if needed. The script creates a unique container with temporary credentials and a random loopback port. It exercises cookie login and API-token creation/use/revocation, project CRUD, access-key/repository/inventory/environment/template/schedule creation and cleanup, template listing, schedule reads, task execution and output, and project backup. Its Ansible task runs a debug-only playbook inside that container. The script removes its container and anonymous volumes afterwards; the downloaded image remains cached. It does not use your configured Semaphore instance.
The tested releases and scope are recorded in API coverage. Deployment-specific permissions, SSO policy, external runner connectivity, and Pro-only routes still need validation against the intended deployment.
The catalogue is bundled with the package so discovery does not require network
access or a running Semaphore server. When adding or updating API coverage, review
upstream API and router changes, update the bundled specification and
src/semaphoreui_mcp/data/overrides.json as needed, update the coverage reference,
and run the test suite and relevant smoke tests. Tool schemas are built from these
files at startup; keep existing tool names stable.
Compatibility and scope
The server does not require a particular Semaphore release or reject instances based on their version. Existing tools are expected to work with newer releases that preserve the API routes, request formats, and behavior they use. They can also work with older releases where those APIs are available. New upstream features may require a catalogue update before they are exposed as tools.
Compatibility is per operation: older versions may lack routes or fields, and breaking API changes may require adapter updates. The catalogue does not automatically detect or hide operations missing from a particular installation. See API coverage for tested versions, validation scope, and the source release used to build the bundled schemas. That source records API provenance, not a required server version.
The bundled OpenAPI source and applicable upstream license are included in package data. This is an independent integration with the Semaphore project.
The MCP exposes management operations. Interactive login/SSO flows, WebSocket subscriptions, runner agent transport, incoming integration webhooks, the Terraform backend protocol, and JWKS endpoints are outside that interface. Username/password session setup is handled internally by the HTTP client. Unsupported routes and account/edition limitations return errors from Semaphore; consult API coverage for the precise boundary.
Help and contributions
Bug reports and contributions are welcome through GitHub issues and pull requests. For a compatibility or connection problem, include the MCP server version, Semaphore version and edition, MCP client, transport, affected tool, and a minimal reproduction with sanitized error output. Remove tokens, passwords, private configuration, and sensitive task output before sharing.
For code changes, use the development checks above and add regression coverage for changed behavior. API changes should include updated tool schemas, coverage documentation, and a smoke-test result for the affected Semaphore release when possible.
See CONTRIBUTING.md for the development workflow and catalogue maintenance for API updates. Report vulnerabilities privately using SECURITY.md. Maintainers can follow the release guide; user-facing changes are recorded in the changelog.
License
This project is licensed under the MIT License. The bundled Semaphore API specification retains its upstream copyright notices and MIT license.
Available Tools
213 toolsactivate_subscriptionBDestructive
activate subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /subscription. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so safety profile is covered. The description adds useful non-annotation context (edition/license/permission gating, 404 behavior on Community editions), but says nothing about what state changes, whether activation is reversible, or privilege requirements for the mutation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then constraints, then body format. The final sentence is cryptic ('JSON-encoded string fields must remain strings') but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with a required nested object and no output schema, the description omits success/failure semantics, what the key represents, and what the destructive effect actually is. The edition/license caveat is the only substantive addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required parameter is a nested body with a required 'key' field whose meaning the description never explains. 'Supply API fields in body' and the JSON-string warning gesture at the wrapper, but the agent still does not know what 'key' should contain (license key, subscription key, activation code).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('activate subscription') and is distinguishable from siblings like get_subscription, refresh_subscription, and delete_subscription. It is slightly thin on what is actually being activated (a license key? an existing subscription record?), but the endpoint reference POST /subscription anchors it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The edition/license/permission caveat with 'some Community routes return 404 or empty lists' gives real context on when the call will work, which is more than most definitions offer. However, it gives no guidance on when to activate versus refresh_subscription or get_subscription, and no prerequisite steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_template_inventoryCDestructive
Attach Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/attach.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, readOnlyHint=false and openWorldHint=true, so the risk profile is covered structurally. The description adds no behavioral context beyond the raw endpoint: nothing about whether the attach replaces existing inventory associations, whether it is reversible, or what authorization is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the action front-loaded and no filler. The second sentence is essentially a URL restatement, which is terse but of marginal value to an agent that already has the parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with three undocumented parameters and no output schema, the description should say what changes as a result of the attach and what an agent should verify before calling it. Neither is present, leaving the definition thin for the operation's risk level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does: the path template maps each of the three integers to a role (a project, a template within it, an inventory to attach). It still gives no constraints, such as whether the inventory must be related to that project or what errors occur on mismatch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Attach Inventory') and then gives the REST endpoint, which reveals that the operation links an inventory to a template within a project. That is more informative than the title alone, but it never states in plain language what 'attach' means for the objects involved. The existence of detach_template_inventory and set_template_default_inventory makes the distinction inferable but not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when this should be used versus detach_template_inventory or set_template_default_inventory, and no prerequisites (e.g. that the inventory must already exist and belong to the project). The agent is left to infer usage entirely from the name and URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cluster_tasksCDestructiveIdempotent
clear Cluster Tasks. DELETE /cluster/tasks. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered by structured data. The description adds the endpoint path but never explains what actually gets destroyed or how the six scope booleans control which categories of cluster tasks are removed — the single most important behavioral fact for a destructive call. The "JSON-encoded string fields must remain strings" note is generic boilerplate that doesn't apply to the boolean fields here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, so there is no bloat, but the first merely echoes the tool name and the third is a templated serialization note of dubious relevance to a boolean-only payload. Brevity here stems from omission rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, nested-object, zero-coverage tool with no output schema, the description leaves the critical questions unanswered: which scope flags must be set, whether the call is scoped to a cluster/node or global, and what the response confirms. Annotations cover the safety hints, but nothing else compensates for the missing semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one top-level parameter but 0% schema description coverage and six undocumented nested booleans (queue, active, claims, aliases, running, runtime_fields), the description needed to carry the meaning. Instead it offers only the generic "Supply API fields in body," adding nothing about what each scope flag selects or whether omitting a flag means 'not cleared' or 'clear all'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"clear Cluster Tasks" largely restates the tool name, and the only added specificity comes from the endpoint path "DELETE /cluster/tasks", which signals a purge operation. It never disambiguates from the large family of sibling clear/stop/delete tools (clear_project_cache, clear_global_runner_cache, stop_template_tasks, delete_global_task), so an agent cannot tell precisely what resource is purged or at what scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which sibling to prefer (e.g., list_cluster_tasks to inspect first, or stop_template_tasks vs. this purge). The only usage-ish instruction is "Supply API fields in body," which is a formatting note, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_global_runner_cacheCDestructiveIdempotent
Clear global runner cache. DELETE /runners/{runner_id}/cache.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond restating the operation and the HTTP route; it does not say what is invalidated, whether jobs are interrupted, or whether the runner must be stopped.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with the action front-loaded and no wasted clauses. The endpoint string adds little for an agent but costs almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, open-world mutation with no output schema and an undocumented parameter, yet the description provides no risk context, no prerequisite, and no notion of what state changes. Given the complexity profile, it is too thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, and the description only embeds it in a URL template (DELETE /runners/{runner_id}/cache). It does not clarify whether runner_id refers to a global runner ID (versus a project runner) or where the ID can be obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (clear global runner cache) and even names the underlying endpoint, so the operation is unambiguous. It doesn't explicitly distinguish itself from siblings like clear_project_runner_cache or clear_server_cache, but the resource name itself carries that differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to clear the cache versus the sibling clear_project_runner_cache or clear_server_cache, nor any precondition such as the runner needing to be idle or inactive. The agent must infer selection 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.
clear_project_cacheCDestructiveIdempotent
Clear Cache. DELETE /project/{project_id}/cache.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description only echoes the HTTP method (DELETE) via the endpoint, adding no context about what is destroyed or the impact on in-flight tasks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no wasted words, and the action is front-loaded. It is efficient but so sparse that it borders on under-specification rather than tight conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive mutation with no output schema and no annotations explaining consequences, yet the description offers only a name and endpoint. It omits what the cache is, whether the operation is reversible, and any guidance an agent needs before invoking a destructive call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It does show project_id as a path segment in the URL template, hinting it identifies the target project, but adds no format or constraint detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Clear' plus the endpoint path '/project/{project_id}/cache' do indicate that it clears a specific project's cache, which is more specific than the bare name. However, 'Clear Cache' restates the tool name and never states what cache or what the effect is, leaving scope implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this versus siblings like clear_server_cache, clear_global_runner_cache, or clear_project_runner_cache. The agent must infer selection 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.
clear_project_runner_cacheCDestructiveIdempotent
Clear project runner cache. DELETE /project/{project_id}/runners/{runner_id}/cache.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, and openWorldHint=true, so the safety profile is covered. The description adds the underlying DELETE route, confirming the mutation scope is limited to a single runner's cache, but says nothing about what breaks (e.g., in-flight jobs or re-download requirements) or permission needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, endpoint second — no filler. It is appropriately sized for what little it chooses to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive, no-output-schema mutation tool whose description gives no explanation of consequences, expected state after clearing, or failure modes. With 0% schema coverage and no output schema, the description leaves too much to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for two undocumented integer params. The path template shows both project_id and runner_id are scoping identifiers in the URL, but provides no format, range, or lookup guidance beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Clear) and resource (project runner cache), which is unambiguous against most siblings. It does not explicitly distinguish itself from close siblings like clear_global_runner_cache or clear_project_cache, though the name and scoping imply the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus clear_project_cache or clear_global_runner_cache, nor any prerequisites or after-effects that would trigger it. 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.
clear_server_cacheCDestructiveIdempotent
clear Cache. DELETE /cache.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds no behavioral context such as what specifically gets flushed, whether it affects running tasks, or how the operation is scoped. It only repeats the HTTP endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but the second sentence 'DELETE /cache.' is redundant with the tool name and annotations and does not clarify scope. It is concise but under-specified rather than efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive cache-clearing operation in a family of similar cache tools, the description does not explain what 'server cache' means operationally or how it differs from project or runner caches. Annotations cover the safety profile, but the scope ambiguity remains a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There are no parameter semantics to document, and the schema is fully explicit about the empty input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'clear Cache. DELETE /cache.' largely restates the tool name rather than specifying what cache is cleared. It does not distinguish this server-level cache clearing from sibling tools like clear_project_cache, clear_global_runner_cache, or clear_project_runner_cache.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when this tool should be used, what prerequisites exist, or which sibling cache-clearing alternative is appropriate. The agent is left to infer usage 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.
confirm_taskCDestructive
Confirm Task. POST /project/{project_id}/tasks/{task_id}/confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing on top of that: it does not say what state change occurs, whether the task must be awaiting confirmation, or whether the action is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but that brevity is under-specification rather than economy. The HTTP route line consumes space without conveying behavior an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent, destructive mutation with no output schema and zero parameter documentation, the definition is incomplete. An agent cannot tell from the description what confirming accomplishes or what happens to the task afterwards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it only embeds the two IDs in a URL template. While the mapping of project_id and task_id to the path is mildly informative, no types, ranges, or meaning of 'confirm' relative to those IDs are added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Confirm Task') and appends an HTTP route. It signals that the operation targets a project-scoped task, but it does not say what 'confirming' a task actually does or how it differs from siblings such as reject_task, get_task, or stop_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to confirm a task versus rejecting it (reject_task) or simply inspecting it (get_task, wait_for_task). No preconditions, state requirements, or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_access_keyCDestructive
Add access key. POST /project/{project_id}/keys. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds the endpoint and a non-obvious serialization constraint (JSON-encoded string fields must stay strings), but says nothing about what the key grants, whether creation is reversible, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler. The terseness is appropriate, though the third sentence's phrasing ("JSON-encoded string fields must remain strings") is dense and could be clearer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating tool that creates a credential, with a 14-property nested body, 0% schema description coverage, and no output schema. The description leaves out the polymorphic body requirements and permission prerequisites, which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only says to put API fields in the body. It never explains the critical relationship between the `type` enum (none/ssh/login_password/string) and which corresponding sub-object must be populated, nor the meaning of `owner`, `override_secret`, or the source_storage_* fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Add access key") plus the underlying endpoint, so the operation is unambiguous. It does not differentiate from siblings like update_access_key, get_access_key, or list_access_keys, but the create semantics are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_access_key or the other key-related siblings, and no mention of prerequisites such as project permissions. The agent must infer the usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_api_tokenCDestructive
Create an API token. POST /user/tokens. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the endpoint and a cryptic note about JSON-encoded string fields; it omits critical token-creation behavior such as whether the token value is returned once and never retrievable again, what permissions the token gets, and how expires_at defaults are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the purpose and endpoint, which is good. The third sentence about JSON-encoded string fields is opaque and arguably does not earn its place without explaining which fields it refers to.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a credential-minting, destructive-flagged operation with no output schema and an undocumented nested body, the description is too thin. An agent cannot tell from it what the response will contain (presumably the token) or how to safely handle the one-time secret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter is a nested body object with 'name' and 'expires_at'. The description only says 'Supply API fields in body', which merely restates the schema, and never explains name requirements/uniqueness or expires_at format and omission behavior. The trailing note about JSON-encoded string fields is confusing rather than clarifying.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create an API token') and even gives the HTTP endpoint, so the action is unambiguous. However, it does nothing to distinguish this from siblings like create_access_key or list_api_tokens/delete_api_token, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_access_key. The endpoint reference is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_environmentCDestructive
Add environment. POST /project/{project_id}/environment. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds real value in the encoding caveat about JSON string fields and the endpoint, though it does not disclose what side effects occur (secret storage, sync initialization) or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the action front-loaded and no filler. The endpoint is arguably redundant with the tool name but is harmless and useful for API-literate callers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent write with a large nested body, no schema descriptions, and no output schema, the description is too thin. An agent must guess which body fields exist and what the response will be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body carries roughly a dozen fields, yet the description only says 'supply API fields in body' and warns that JSON-encoded string fields must remain strings. It never mentions name (the only required body field), project_id, secrets, or sync settings, so it does not compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add environment') plus the underlying endpoint POST /project/{project_id}/environment, so an agent knows exactly what resource is created. It does not differentiate from siblings such as update_environment or sync_environment, which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_environment, sync_environment, or delete_environment, and no preconditions (project permissions, whether the environment must not already exist) are stated. 'Add' implies creation, but that inference comes from the name rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_global_roleBDestructive
create global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /roles. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation and destructive/open-world profile, and the description adds edition/license gating, possible 404/empty-list responses, and the underlying POST /roles endpoint. It does not disclose required permission level, duplicate-slug behavior, or what happens on failure, which matters for a non-idempotent create.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the operation and three compact sentences with no filler. 'Supply API fields in body' is slightly redundant with the schema but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create endpoint with a nested, undocumented body and no output schema, the description covers availability and transport-level behavior but omits the field-level semantics and permission requirements an agent needs to construct a valid call. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only says to supply API fields in the body and keep JSON-encoded strings as strings. It never explains the required slug, name, permissions (apparently an integer bitmask), or optional project_id, leaving the nested body effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('create global role'), so an agent knows what operation it performs. It does not distinguish this from the sibling create_project_role or explain the global-vs-project scope difference, so sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful availability context ('depends on Semaphore edition, license, and permissions') and warns that some Community routes return 404 or empty lists. However, it never says when to choose this over create_project_role or update_global_role, nor what prerequisites must be satisfied first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_global_runnerCDestructive
Add global runner. POST /runners. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered externally. The description adds only the endpoint and a string-encoding caveat; it does not disclose side effects such as credential creation, default inactive/registered behavior, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the action and endpoint, and contains no filler. The final string-encoding sentence is somewhat cryptic, but the overall structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive creation tool with a complex nested body and no output schema, the description is missing the details an agent needs: required body fields, default values, the registered-runner workflow, and how this differs from create_project_runner. The endpoint and body reference alone are not sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0%, so the description must compensate for a nested body with many fields. Instead it only says to 'Supply API fields in body' and warns that JSON-encoded string fields must remain strings, without naming fields, required values, defaults, or the meaning of 'registered' and 'project_id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Add global runner' with the endpoint POST /runners. It is distinguishable from create_project_runner by the 'global' resource name, though it does not explicitly explain when to choose this tool over the project-level sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling create_project_runner, no prerequisites, and no exclusions. The description only states what the tool does, leaving the agent to infer the global-versus-project decision 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.
create_integrationBDestructive
create a new integration. POST /project/{project_id}/integrations. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral caveat ('JSON-encoded string fields must remain strings'), but it never explains what the destructive side effects are, that repeat calls create duplicates, or what comes back on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the purpose front-loaded and no filler. The endpoint line is mildly redundant with the path parameter but still earns its place as a routing hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a non-idempotent, destructive create whose body schema is a large undocumented nested object with no output schema. The description covers only the surface; an agent still lacks required-body guidance, side-effect expectations, and any notion of what a successful creation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the nested IntegrationRequest fields are entirely undocumented, so the description must compensate. It partly does, telling the agent to supply API field names in `body` and warning about string-encoded fields, but it never mentions the required `name` field, the `task_params` sub-structure, or that project_id also appears inside the body.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('create a new integration') and pins it to the POST /project/{project_id}/integrations endpoint, which is unambiguous about what object is being created. The verb alone separates it from update_integration/delete_integration, but no sibling is named or contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus update_integration, create_integration_alias, or create_integration_value, and no prerequisites or permission notes. The only usage-adjacent information is the REST path, which the agent must infer conditions from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_integration_aliasCDestructive
Create a new alias for an integration. POST /project/{project_id}/integrations/{integration_id}/aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive and non-idempotent, so the description should clarify what is being created or replaced, but it adds nothing. Critically, an alias creation presumably needs alias content, yet no payload or naming behavior is described, leaving the mutation opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Only two short sentences and front-loaded with the verb, which is good. The second sentence is a redundant REST path restatement that adds little beyond what the schema already lists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Short and technically accurate for a two-parameter call, but for a destructive create tool with no output schema it leaves too much unsaid: what the alias consists of, what it affects, and what must exist beforehand. Adequate at best.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it only restates project_id and integration_id as path segments via the URL template. It gives no meaning to what an alias is, no constraints, and the schema exposes no field for the alias value itself, which the description never addresses.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new alias for an integration', with the target path spelled out. It does not, however, distinguish itself from the very similar siblings create_project_integration_alias and create_terraform_alias, so an agent cannot tell from the description alone which one applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the near-identical sibling create_project_integration_alias. The only orientation offered is a raw HTTP path, which does not help select the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_integration_matcherBDestructive
Add Integration Matcher. POST /project/{project_id}/integrations/{integration_id}/matchers. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as non-read-only, open-world, non-idempotent, and destructive, so the safety profile is largely covered. The description adds the endpoint and a useful note that JSON-encoded string fields must remain strings. However, it does not describe required permissions, side effects, or response behavior for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences and front-loads the action. The endpoint and body-encoding caveat are immediately visible. There is no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a create tool with a nested body object, three required parameters, no output schema, and no parameter descriptions in the schema. The description provides the HTTP endpoint and one encoding warning but leaves out the body fields, enums, required nested values, and expected result. It is not complete enough for an agent to invoke confidently without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but does not. It says to supply API fields in the body and warns about JSON-encoded strings, but it does not explain project_id, integration_id, or the nested fields key, name, value, method, match_type, and body_data_type. Agents must inspect the schema to understand most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: adding an Integration Matcher. The POST path reinforces that this creates a matcher under a project integration. It does not explicitly distinguish itself from sibling tools such as update_integration_matcher or create_integration_value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus update_integration_matcher, create_integration_value, or list_integration_matchers. It also omits prerequisites such as whether the integration must already exist. Usage is only implied by the name and HTTP method.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_integration_valueBDestructive
Add Integration Extracted Value. POST /project/{project_id}/integrations/{integration_id}/values. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds useful implementation context by naming the POST endpoint and warning that JSON-encoded string fields must remain strings, but it does not explain side effects, permissions, or behavior when the value already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loads the action, then gives the endpoint and one concrete caveat. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, non-idempotent mutation tool with a nested body object whose fields are entirely undocumented in the schema. The description provides the endpoint and one field-format warning but leaves out required body-field semantics, expected effects, and any permissions or duplicate-handling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only identifies project_id and integration_id through the path and vaguely says to 'Supply API fields in body'; it does not explain body fields such as key, name, variable, value_source, variable_type, body_data_type, or their enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add Integration Extracted Value', and reinforces it with the exact POST endpoint. It is distinguishable from sibling operations like update_integration_value, delete_integration_value, and get_integration_value by the create verb, though the phrasing is slightly awkward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Add' implies creation, but the description gives no explicit guidance on when to use this tool versus update_integration_value or other integration-value tools. There are no prerequisites, exclusions, or alternative-routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_inventoryCDestructive
create inventory. POST /project/{project_id}/inventory. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, non-idempotent, destructive, open-world mutation. The description adds the endpoint and a useful encoding constraint for JSON-encoded string fields. However, it does not explain permissions, side effects, or what creation affects beyond the project scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action: create inventory. The endpoint and encoding note are relevant, though the phrasing is terse and could be slightly more organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent create operation with a nested request body and no output schema, the description is too thin. It omits permissions, side effects, error behavior, and most body-field semantics, leaving the agent under-informed about a complex mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the body contains a complex InventoryRequest with fields such as name, type, inventory, runner_tag, ssh_key_id, and template_id. The description only says to supply API fields in the body and keep JSON-encoded strings as strings; it does not clarify required fields, enums, nullable IDs, or project_id/body interaction enough to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: create an inventory. It also identifies the HTTP path, showing that creation is project-scoped. It does not explicitly distinguish this from update_inventory, delete_inventory, or other create_* tools, but the purpose is still easy to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus update_inventory, list_inventories, or attach_template_inventory. The POST endpoint implies creation, but the description gives no prerequisites, when-not-to-use cases, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectBDestructive
Create a new project. POST /projects. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, non-idempotent, destructive, open-world operation. The description adds the HTTP endpoint and a body-format constraint about JSON-encoded string fields, but does not explain permissions, side effects, or what project resources are created. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and endpoint. The sentence about body fields and JSON-encoded strings is useful, though slightly cryptic. There is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers the basic call shape and the annotations already describe the mutation safety profile. However, for a project-creation tool with a nested request body and no output schema, the description omits field semantics, side effects, and usage boundaries. It is minimally adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only says to supply API fields in the body and that JSON-encoded string fields must remain strings. It does not explain the required name field, the demo/alert/type fields, or their meaning. The body-format note adds some value, but most parameter semantics are left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Create a new project." It also names the endpoint POST /projects, which makes the operation clear. It does not explicitly distinguish itself from related siblings like update_project or delete_project, but the create semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a new project is needed, but gives no explicit when-to-use guidance, prerequisites, or alternatives. It does not say when to prefer create_project over update_project, list_projects, or other project-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_integration_aliasCDestructive
Create a new integration alias for the project. POST /project/{project_id}/integrations/aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, which communicates the risk profile. The description adds only the POST endpoint, without explaining what an alias is, what side effects occur, what permissions are required, or whether existing aliases are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words, and the core action is front-loaded. The endpoint path adds minor operational context without making it verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive create operation with no output schema and an undocumented parameter. The description should explain what an integration alias represents, what happens after creation, and how it relates to project integrations. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (project_id) with 0% description coverage, so the description must compensate. It only implies project scoping via 'for the project' and the endpoint path, without explaining format, constraints, or expected value beyond the schema's integer type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Create a new integration alias for the project.' It clearly identifies the project-scoped nature of the operation. However, it does not distinguish itself from the sibling tool create_integration_alias, so an agent must infer the difference from context alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus create_integration_alias, list_project_integration_aliases, or other project-integration tools. It also omits prerequisites or conditions for creating an alias.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_roleBDestructive
create project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/roles. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds value beyond that with edition/license gating and the 404/empty-list caveat on Community routes, plus the instruction that JSON-encoded string fields must remain strings. It still doesn't state exactly what gets created or whether retries are safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and immediately followed by the eligibility caveat and endpoint. No filler, though the endpoint string adds little beyond what a client already knows and the body hint is compressed to the point of ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and a nested body at 0% schema coverage, the description covers availability and endpoint but leaves the body contract underspecified. An agent knows it may 404 on Community but not what a valid permissions value or slug format looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for two required parameters, including a nested body with slug, name, permissions, and a redundant project_id. It only says 'Supply API fields in body; JSON-encoded string fields must remain strings,' which says nothing about what slug vs name mean or what the integer permissions value encodes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('create project role') and names the endpoint POST /project/{project_id}/roles, so an agent can distinguish it from update_project_role, delete_project_role, and list_project_roles. It stops short of explicitly naming siblings, but the CRUD prefix makes the distinction self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description adds real eligibility context ('Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists'), which helps the agent decide whether calling is even viable. However, it never states when to prefer this over update_project_role or create_global_role, and gives no prerequisite/ordering guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_runnerCDestructive
Add project runner. POST /project/{project_id}/runners. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds the endpoint and a serialization caveat ('JSON-encoded string fields must remain strings'), which is genuine extra context, but says nothing about the fact that a runner created this way may need a registration token before it can work.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, action and endpoint front-loaded, no filler. It is tight, but its brevity comes partly from omitting things that matter rather than from efficient encoding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating creation tool with no output schema and an unannotated nested body, the description should say what comes back (e.g. the runner object or a token) and what happens when registered=false. Neither is present, so an agent cannot predict the result of the call it is about to make.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0%, so the description is the only place an agent could learn parameter meaning — yet 'Supply API fields in body' adds nothing. It never names name, tags, active, webhook, is_default, or max_parallel_tasks, and the 'JSON-encoded string fields' hint is not tied to any identifiable field (webhook is the only string, and it isn't called out).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add project runner') and pins it to an HTTP endpoint (POST /project/{project_id}/runners), so the agent knows this creates a project-scoped runner. It does not explicitly contrast with create_global_runner, which is the one adjacent call an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (project admin rights), and no alternatives named. The key decision an agent faces — create_project_runner vs create_global_runner, and set registered=false plus a registration-token flow — is nowhere acknowledged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_userCDestructive
Link user to project. POST /project/{project_id}/users. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, which is non-obvious for a "link" operation, yet the description says nothing about what gets destroyed, whether re-adding an existing member errors, or what permissions are needed. The one behavioural note (JSON-encoded string fields must remain strings) is obscure and doesn't map to any visible parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded with the core action, which is good. However, the third sentence about JSON-encoded string fields is cryptic in a schema whose only string field is a free-form role, so that sentence does not clearly earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, open-world mutation with a nested body object and no output schema, the description omits membership semantics, role validity, error behaviour, and prerequisites. An agent could parse it but would likely call it with an incorrect or underspecified body.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not name the nested body fields role or user_id, nor explain valid role values or how they are obtained. The vague instruction to "supply API fields in body" leaves the agent to guess the required body shape from the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Link user to project" states a specific verb and resource, and separates it from update_project_user and delete_project_user. The added endpoint reference (POST /project/{project_id}/users) reinforces the create semantics, but it never names the sibling tools it should be chosen over.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_project_user (existing membership) or create_user (user does not exist yet). The only instruction is a mechanical note about supplying body fields, which is invocation mechanics rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_repositoryCDestructive
Add repository. POST /project/{project_id}/repositories. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (destructiveHint=true, idempotentHint=false, openWorldHint=true), so the bar is lower. The description still adds genuine value with the serialization caveat that JSON-encoded string fields must remain strings, a real failure mode for agents. It stops short of stating required permissions, what happens to the request on validation failure, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded fragments: verb first, then endpoint, then the encoding constraint. Zero filler, though the telegraphic style leaves some ambiguity about how the 'API fields' passthrough relates to the nested schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating open-world creation tool with two required parameters, a six-property nested object, no field descriptions and no output schema, the description is thin. An agent cannot learn from it which fields are mandatory nor what a successful call returns, so it must reverse-engineer the schema by trial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it largely does not: it never names the required body fields (name, git_url) nor explains the optional ones (git_branch, ssh_key_id, id). What it does add is the useful framing that body is a passthrough of API fields and the encoding caveat, but no field-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Add repository" gives a specific verb plus resource, reinforced by the concrete endpoint POST /project/{project_id}/repositories. It is clearly distinguishable from siblings such as update_repository, delete_repository and list_repositories, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use creation versus update_repository, no mention of prerequisites (project membership, permissions, whether a project must exist first), and no exclusions. The only guidance is mechanical ('supply API fields in body'), which is not usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scheduleCDestructive
create schedule. POST /project/{project_id}/schedules. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false; the description adds only a note about body field encoding. It never warns that creating a schedule may trigger automated jobs, that schedules are persistent/destructive state, or what happens on duplicate creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with the route and the key encoding caveat; only the redundant opening fragment 'create schedule' wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive create tool with a 0%-documented nested body, no output schema and no annotations explanation of consequences, this is far too thin; an agent could not safely construct a valid schedule body from this definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is a large nested object, yet the description only says to 'supply API fields in body' and that JSON-encoded strings stay strings. It explains nothing about the schedule 'type' enum, cron_format vs run_at, task_params, or which of project_id/template_id/repository_id drive behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource ('create schedule') plus the route 'POST /project/{project_id}/schedules', so an agent can tell it makes a new schedule under a project. However, it does not differentiate from nearby siblings such as create_task, create_template or validate_schedule, and the first sentence merely restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus validate_schedule, list_schedules or update_schedule, and no prerequisites (e.g. whether a template_id or repository_id is mandatory). The agent must infer usage entirely from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_secret_storageCDestructive
Add. POST /project/{project_id}/secret_storages. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds no real behavioral context: it doesn't say how the secret is stored/validated, what happens on duplicate names, or that a secret credential is being persisted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus an endpoint, so it is compact and front-loaded. But "Add." is a wasted fragment and the brevity comes at the cost of under-specification rather than information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive create tool with a complex nested body, zero schema coverage, and no output schema, the description leaves an agent unable to construct a correct body without the raw schema. It should at minimum outline the required body fields and the type enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% on a nested body with ~10 properties (type enum, params, secret, sync_paths, sync_interval), so the description is responsible for compensation. It offers only "supply API fields in body" and a note that JSON-encoded strings stay strings – no field meanings, no required-field guidance, no enum context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the vague verb "Add" and never names the resource in prose; the resource is only inferable from the endpoint path `/project/{project_id}/secret_storages`. The tool name carries most of the meaning, and nothing distinguishes this from update_secret_storage or create_integration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use context, no prerequisites, no mention of the sibling update_secret_storage/delete_secret_storage alternatives. The only instruction is a formatting note about the body, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskBDestructive
Start an automation task. Ansible and Terraform switches belong in body.params; environment and arguments are JSON-encoded strings. This executes code on managed infrastructure. POST /project/{project_id}/tasks. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true, idempotent=false and openWorld=true, and the description adds real context beyond them: 'This executes code on managed infrastructure' warns of consequential side effects, and the emphasis that JSON-encoded strings must stay strings heads off a common serialization failure. It does not cover permissions or concurrency limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by parameter placement rules, a safety warning, and the endpoint. It is compact and mostly waste-free, though 'environment and arguments are JSON-encoded strings' and 'JSON-encoded string fields must remain strings' partially restate each other.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a nested body with ~14 properties at 0% schema coverage, a destructive annotation, and no output schema, the description covers the highest-risk traps but leaves most body fields (secret, message, playbook, version, inventory_id, build_task_id) entirely undocumented. Adequate but with clear gaps for a mutation tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% on a deeply nested body, but the description supplies genuinely useful placement rules: Ansible/Terraform switches go under body.params, environment and arguments are JSON-encoded strings. It still says nothing about template_id being the sole required body field or what limit, secret, playbook, inventory_id or version mean.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb+resource ('Start an automation task') and even gives the underlying REST route (POST /project/{project_id}/tasks), so the operation is unambiguous. It does not, however, distinguish this from nearby siblings such as run_workflow or create_schedule, leaving that differentiation to the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus run_workflow or wait_for_task, no prerequisites (e.g., a template must exist and template_id is required), and no exclusions. Usage is only implied by the word 'Start'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_templateCDestructive
create template. POST /project/{project_id}/templates. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description adds the POST endpoint and a useful note that JSON-encoded string fields must remain strings, but it does not elaborate on destructive side effects, auth needs, or idempotency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and has no wasted sentences. The endpoint and string-field constraint are useful, though the overall terseness leaves important gaps for a complex create operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive create operation with a large nested body, no output schema, and 0% schema description coverage. The description does not explain required fields, conditional requirements, or body structure, so it is not complete enough for an agent to safely construct the request without relying entirely on schema inspection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only says to supply API fields in the body and that JSON-encoded string fields must remain strings; it does not explain project_id, the required name field, app-specific conditionals (inventory_id vs. playbook), or nested body structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('create template') and includes the endpoint, so the agent can tell it creates a template. It does not explicitly differentiate itself from siblings such as update_template or delete_template, but create vs. update/delete is reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, prerequisites, or when not to use it. It only states the endpoint and a body-format note, leaving usage selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_template_permissionCDestructive
Add Template Perm. POST /project/{project_id}/templates/{template_id}/perms. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, openWorld=true, and idempotent=false, so the safety profile is covered. The description adds the POST endpoint and a body-encoding caveat, but does not explain the access-control impact, required authorization, or non-idempotent effects of adding a permission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and endpoint. The abbreviation 'Perm' slightly reduces clarity, but there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with a nested body object, three required parameters, 0% schema description coverage, and no output schema, the description is incomplete. It omits body field semantics, access implications, and expected response behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters, but it only says 'Supply API fields in body' and notes JSON-encoded string fields must remain strings. It does not explain required fields such as role_slug and permissions, or what the permissions integer represents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add Template Perm' plus the POST endpoint for template permissions. It is understandable despite the abbreviation 'Perm', and it distinguishes creation from sibling list/get/delete/update tools, though it does not explicitly contrast with update_template_permission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to use this tool versus update_template_permission, delete_template_permission, or list_template_permissions. The only usage information is the HTTP endpoint and a body-format caveat, leaving the agent to infer intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_terraform_aliasCDestructive
create terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/inventory/{inventory_id}/terraform/aliases. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/safety profile, and the description adds genuinely non-obvious context: edition/license/permission gating, that some Community routes silently return 404 or empty lists, and that JSON-encoded string fields must stay strings. That is real behavioral value beyond the annotations, though it says nothing about the effect of creation or what a successful response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, but telegraphic fragments ('create terraform alias.', 'Supply API fields in body') and a raw endpoint path that partly duplicates the schema. Efficient in size, weak in readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and zero schema coverage, the description is the only documentation, and it omits the required body field, the meaning of each body property, and the result of the call. The availability caveat is useful but insufficient for a mutation tool with a nested required body.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters (including a nested body with four properties), so the description must carry the load. It only implies project_id/inventory_id via the URL template and waves at the body generically; the required auth_key_id and the optional alias/project_id/inventory_id body fields are never mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource ('create terraform alias') and gives the concrete endpoint path, so the resource is identifiable. But it never explains what a terraform alias actually is (a mapping between a Terraform state and an auth key/inventory), so an agent unfamiliar with the domain gets only a name restatement plus a URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_terraform_alias, delete_terraform_alias, or list_terraform_aliases, and no prerequisites beyond a vague 'depends on edition, license, and permissions'. The 404/empty-list note describes route availability, not usage selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_userBDestructive
Creates a user. POST /users. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the API endpoint and a field-format constraint, but does not mention required permissions, duplicate-user behavior, or what happens on failure. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences and front-loads the key action and endpoint. Every sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive user-creation mutation with no output schema and zero schema description coverage, the description is too thin. It omits permissions, validation expectations, duplicate handling, response behavior, and the meaning of the nested body fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single body parameter contains seven nested fields with no individual descriptions. The description only says to supply API fields in the body and that JSON-encoded string fields must remain strings; it does not explain field meanings, required combinations, or password handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Creates a user.' It is clearly distinct from update_user and delete_user by name and action. However, it does not explicitly differentiate itself from siblings beyond the obvious create operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use create_user versus update_user, list_users, or get_user. It simply states that it creates a user and the HTTP endpoint, leaving selection between sibling tools implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_viewBDestructive
create view. POST /project/{project_id}/views. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, destructive, open-world, non-idempotent operation. The description adds useful context via the POST endpoint and the note that JSON-encoded string fields must remain strings, but it does not explain permissions, side effects, or what exactly is created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and endpoint. The body-format note is relevant, though the fragmentary style and minimal repetition of the tool name keep it from being maximally polished.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with a nested body schema and no output schema, the description gives the endpoint and a body encoding hint. It remains thin on body-field semantics and permissions, but annotations cover the safety profile and the schema exposes the basic field names and types.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only mentions project_id implicitly through the path and says to supply 'API fields in body.' It does not document the body fields (title, position, id, project_id) or their required/optional status, aside from a narrow JSON-string note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('create view') and adds the exact POST endpoint, so the agent can identify the operation. It does not explicitly differentiate from siblings such as update_view or delete_view, but the verb makes the intended action clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives no guidance on when to create a view versus update_view, delete_view, or set_view_positions. There are no prerequisites or exclusions, only the endpoint and a body-format note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflowBDestructive
Add workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-idempotent and open-world, and the description adds beyond them: edition/license gating and 404/empty-list failure modes. It does not reconcile the destructive flag with a pure 'add' operation (e.g. what gets overwritten, whether duplicate names collide) or explain the non-idempotent behavior on retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the action and endpoint, with no filler. Slightly telegraphic ('Add workflow.'), but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a deeply nested, undescribed body (WorkflowNode, WorkflowEdge, TaskPrams), no output schema, and destructive annotations, the description should at least sketch the node/edge model and required body fields. Instead it leaves the agent to infer the entire payload shape from a parameterless schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the body is a nested WorkflowTemplate with nodes/edges, so the description carries the load; 'supply API fields in body; JSON-encoded string fields must remain strings' is genuinely useful wiring guidance. But it says nothing about project_id, the nodes/edges structure, or which template fields are required, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (workflow) and the endpoint POST /project/{project_id}/workflows, but the verb 'Add' is close to restating the tool name and it never says what a workflow is (a node/edge graph) or how it differs from neighboring create_* tools like create_template or create_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real preconditions — availability varies by Semaphore edition, license and permissions, and Community routes may 404 or return empty lists — which is useful when-to-use context. However, it never says when to choose create_workflow over create_template/create_task or what to do when the route 404s.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_access_keyCDestructiveIdempotent
Removes access key. DELETE /project/{project_id}/keys/{key_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety profile is covered. The description adds only the route, revealing that keys are project-scoped, but says nothing about whether deletion is permanent, whether access is revoked immediately, or what happens to anything referencing the key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the route. Nothing is wasted, though the brevity borders on under-specification for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema and entirely undocumented parameters, the description is missing consequences, authorization expectations, and any confirmation semantics. An agent has enough to fire the call but not enough to be confident about side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither parameter is described. The route template conveys that key_id is nested under project_id, which is a small but real gain; otherwise the meaning of the two required integer IDs is left entirely to the schema's type/minimum constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes access key') and pins the exact REST route, so its scope (a key inside a project) is unambiguous. The verb also implicitly distinguishes it from the create/update/get/list access key siblings, though none are named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_access_key, create_access_key, or whether deletion is the right remedy for a compromised key. There are no prerequisites, warnings, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_api_tokenCDestructiveIdempotent
Expires API token. DELETE /user/tokens/{token_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| token_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond the HTTP endpoint — it doesn't say the token stops authenticating immediately, whether the action can be undone, or how errors are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action; nothing is padded. Terseness here is close to under-specification but the structure itself is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible credential-removal tool with no output schema and an undocumented parameter, the description leaves out the sourcing of token_id and the consequence of the call — an agent has to infer both.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only place token_id could be explained. It only echoes the path template; it doesn't say the id comes from list_api_tokens or what format it takes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Expires API token' states a specific verb and resource, and the DELETE /user/tokens/{token_id} path removes ambiguity about what object is affected. It distinguishes adequately from siblings like delete_access_key and create_api_token without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives (e.g. revoking via update, or delete_access_key for other credential types), and no mention of prerequisites or irreversibility in the description text itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_appCDestructiveIdempotent
delete App. DELETE /apps/{app_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that — no mention of cascade effects (e.g., whether related records are removed), permission requirements, or irreversibility confirmation, which is the kind of context a deletion tool should supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no waste, and the action is front-loaded. It is arguably too sparse rather than too long — the restated endpoint contributes little value relative to the missing context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the destructive/idempotent profile and the schema is trivial, but among dozens of delete_* siblings and multiple app-related mutations, the description gives no basis for correct selection. For a destructive operation, the definition is thinner than it should be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single self-evident parameter (app_id) and 0% schema description coverage, the endpoint path /apps/{app_id} does confirm the parameter is the app identifier. No format, type, or lookup guidance is added, but little is needed for one obvious ID field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ("delete App") and confirms the REST endpoint behind it, so the basic action is unambiguous. However, it largely restates the tool name and does not explain what an "App" is or how this differs from sibling operations on the same resource (update_app, set_app_active, get_app).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to delete an app versus deactivating it via set_app_active or modifying it via update_app, and no preconditions or warnings. The agent must infer everything 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.
delete_environmentCDestructiveIdempotent
Removes environment. DELETE /project/{project_id}/environment/{environment_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| environment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond the name and endpoint path — no mention of what happens to dependent resources (references, templates bound to the environment) or whether deletion is permanent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. It is efficient, though the second sentence (REST path) is essentially a restatement of transport rather than added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-reversible-by-design operation with zero parameter documentation and no output schema, the description is too thin. It leaves out cascade behavior, prerequisites, and confirmation expectations an agent needs before invoking a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, yet it only embeds the two parameters in a URL template. It adds no meaning about what project_id vs environment_id identify, nor validation or scoping constraints beyond type/minimum in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Removes') and resource ('environment'), which is unambiguous about the operation. It does not differentiate from siblings such as delete_project or update_environment, but the core purpose is clear without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (update_environment, delete_project, or the get_environment_references tool that could inform deletion safety). 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.
delete_global_roleCDestructiveIdempotent
delete global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /roles/{role_slug}.
| Name | Required | Description | Default |
|---|---|---|---|
| role_slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavior — edition/license/permission dependence and that some Community routes return 404 or empty lists — which helps an agent interpret failures. It stops short of saying whether deletion is permanent, what happens to users holding the role, or what a success response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action, with no padding. Slight waste in the opening lowercase restatement of the tool name, but overall tight and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and no parameter documentation, the description leaves key gaps: irreversibility, side effects on role assignments, and how to source the role_slug. The edition-availability caveat is a good start but insufficient for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required role_slug property, so the description must compensate. Beyond the endpoint template implying it is a path segment, it never explains whether the value is a slug or numeric id, its format, or that list_global_roles is the way to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("delete global role") and pins it to the endpoint DELETE /roles/{role_slug}, which distinguishes it from the many other delete_* siblings. It does not explicitly contrast with delete_project_role or update_global_role, but the name plus endpoint make the target unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (e.g. delete_project_role, update_global_role) or what prerequisites exist before deletion. The availability note about edition/license/permissions and 404s is environmental context, not usage routing, so an agent still has to infer when this call is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_global_runnerCDestructiveIdempotent
Delete global runner. DELETE /runners/{runner_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond the REST path — no statement about irreversibility, whether the runner must be unattached from projects, or what happens to jobs assigned to it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the operation, which is good. However, the second sentence merely restates the HTTP endpoint and carries no decision-relevant information for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and an undocumented parameter, the description should cover preconditions and consequences. It leaves the agent without guidance on side effects, dependent resources, or confirmation requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single runner_id parameter is documented only as an integer with minimum 1. The description does not explain where to obtain that ID (e.g., via list_global_runners) or what it identifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Delete global runner"), which is clear enough for an agent to identify the operation. The word "global" implicitly separates it from the many project-scoped siblings such as delete_project_runner, but the description never makes that distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus delete_project_runner, update_global_runner, or set_global_runner_active. No prerequisites or warnings about what conditions must hold before a runner can be deleted are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_global_taskBDestructiveIdempotent
Stop or remove a task from the global running/queued task pool (administrator only). DELETE /tasks/{task_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds the admin-only permission requirement, but does not clarify the ambiguity it introduces (does it stop a running task, or delete a queued one) or what happens to task output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact clauses with the core action and the admin constraint front-loaded; no filler. The 'Stop or remove' hedge is the only thing that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param destructive delete with annotations covering safety, the definition is nearly sufficient. The remaining gap is the unresolvable stop-vs-delete ambiguity and the undocumented task_id, which an agent cannot fill from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, but schema description coverage is 0% and the description gives no detail beyond the DELETE /tasks/{task_id} path, which merely implies task_id is a task identifier. It doesn't state whether task_id refers to a global-scope task specifically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Stop or remove a task') scoped to the 'global running/queued task pool' and gives the endpoint. The 'global' qualifier distinguishes it from the sibling delete_task, though the dual 'stop or remove' framing slightly blurs exactly what happens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'(administrator only)' is a useful precondition, but the description never says when to pick this over delete_task, stop_task, reject_task, or clear_cluster_tasks. Usage must be inferred from the word 'global' and the running/queued phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_integrationBDestructiveIdempotent
Remove integration. DELETE /project/{project_id}/integrations/{integration_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds little beyond restating the operation and path — it does not say what happens to dependent aliases/values/matchers or whether the removal is reversible, which is the context an agent would actually need here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action and followed by the endpoint. No filler, though the endpoint restates the operation rather than adding new information, making the second sentence low-value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive delete with no output schema, the annotations cover the safety signal, but the 0% parameter coverage and the absence of any cascade/attachment behavior leaves an agent without enough to call it confidently in ambiguous cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning; the URL template does show that project_id and integration_id are path identifiers scoping the target resource. However, it adds nothing about identifier provenance (where to obtain an integration_id) or precedence, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove integration") and the REST path confirms it targets a project-scoped integration. It is not explicitly differentiated from the many sibling delete tools (delete_integration_value, delete_integration_alias, delete_integration_matcher), so the agent must infer that this removes the integration itself rather than a sub-resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and no mention of the closely related siblings (delete_integration_value, delete_integration_alias, delete_integration_matcher) or of any prerequisite such as detaching the integration first. The 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.
delete_integration_aliasBDestructiveIdempotent
Remove integration alias. DELETE /project/{project_id}/integrations/{integration_id}/aliases/{alias_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| alias_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds only the REST endpoint path and does not clarify what happens to flows referencing the alias after deletion, which would be genuinely useful for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and zero wasted wording. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with three undocumented parameters and no output schema, the description is thin. It omits what state is changed, whether cascading effects occur, and how the project-scoped variant differs, leaving key gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does by exposing the path template, which shows alias_id is nested under integration_id and project_id, giving useful hierarchical meaning beyond bare integer types, but no format or constraint details are added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove') and resource ('integration alias'), making the operation unambiguous. However, it does not differentiate from the near-identical sibling delete_project_integration_alias, so an agent cannot tell which to pick from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this vs delete_project_integration_alias, delete_integration, or delete_integration_value. No prerequisites such as required permissions or whether the alias must be unused are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_integration_matcherCDestructiveIdempotent
Removes integration matcher. DELETE /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| matcher_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so "Removes" restates the structured hint. The description adds nothing beyond the annotations: no cascade behavior, no permission/scope requirements, no mention of what breaks if the matcher is referenced elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and zero filler. It is efficient but terse to the point of under-specification, which the conciseness dimension does not penalize but keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema and no parameter documentation, the description should carry more: irreversibility, referential-integrity risks, and ID sourcing. Only the endpoint path is supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all three parameters are bare integers with only a minimum. The URL template implies the nesting (matcher inside integration inside project), which is mild added value, but there is no guidance on where to obtain the IDs or what happens on a mismatched hierarchy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Removes integration matcher") and even gives the REST endpoint, so the operation is unambiguous. It does not, however, distinguish itself from adjacent siblings such as delete_integration, delete_integration_alias, or update_integration_matcher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or prerequisite guidance. The agent must infer from the name alone that this deletes a single matcher and that get_integration_matcher_references might be worth checking first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_integration_valueCDestructiveIdempotent
Removes integration extract value. DELETE /project/{project_id}/integrations/{integration_id}/values/{value_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| value_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is largely covered. The description adds essentially nothing beyond restating deletion — no mention of whether dependent data is removed, whether the deletion cascades, or whether errors occur when references exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The endpoint path is compact and informative rather than filler, though it takes space that could have carried behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation with three fully undocumented parameters, the description is too thin: it omits preconditions, side effects on references, and error behavior. Annotations carry the safety signal, but the operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three required integer parameters, so the description should compensate. The URL template does convey the hierarchy (value_id scoped under integration_id under project_id), which is some help, but no parameter is explained in words or given format/constraint guidance beyond 'minimum: 1' in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Removes') and resource ('integration extract value'), and the endpoint path confirms it operates on a single value nested under a project/integration. It is distinguishable from delete_integration, delete_integration_alias and delete_integration_matcher by the 'value' noun, though it never names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this rather than deleting the whole integration or an alias/matcher, no preconditions, and no note about consequences for anything referencing the value. 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.
delete_inventoryCDestructiveIdempotent
Removes inventory. DELETE /project/{project_id}/inventory/{inventory_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false, and the description is consistent with that. However, the description adds no behavioral detail beyond the annotations, such as what related data is affected, whether deletion is reversible, or whether prerequisites exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, and the core action is front-loaded. The endpoint adds compact context without bloating the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description should clarify effects and prerequisites, but it only restates removal and the endpoint. The annotations carry safety hints, yet important context about what gets removed and what must be true before deletion is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, but it only shows project_id and inventory_id as path placeholders. It does not explain their format, constraints, or semantics beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Removes inventory," and gives the endpoint path. It is clear what the tool does, though it does not explicitly distinguish itself from nearby operations such as detach_template_inventory or delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this deletion operation versus alternatives, nor are there preconditions or exclusions. The agent must infer usage entirely from the tool name and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectCDestructiveIdempotent
Delete project. DELETE /project/{project_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false. The description adds only the HTTP method and path; it says nothing about what gets destroyed, whether deletion cascades to related resources, required permissions, or confirmation needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two terse, front-loaded fragments with no filler or repetition. Its brevity is structurally clean, though for a destructive operation it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive project deletion with no output schema, the description lacks irreversibility warnings, cascade or related-resource impact, permission requirements, and the restore_project alternative. The annotations cover safety flags but not the operational context an agent needs before invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required project_id integer. The description only shows project_id in the path template; it does not explain whether this is a numeric project ID, where to obtain it, or how it relates to project names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Delete project' plus the endpoint 'DELETE /project/{project_id}' confirms the exact operation. It does not distinguish itself from restore_project or the many sibling delete tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no warning that deletion is irreversible, and no mention of the restore_project alternative. The agent must infer usage 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.
delete_project_integration_aliasBDestructiveIdempotent
Remove integration alias. DELETE /project/{project_id}/integrations/aliases/{alias_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| alias_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the REST endpoint, saying nothing about what is lost, whether attached integration values/matchers are affected, or required permissions — acceptable given annotations, but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action front-loaded before the endpoint detail. No filler, though the endpoint restates what the parameter names roughly imply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive, project-scoped delete with no output schema and undescribed parameters; annotations cover reversibility/safety, but the description leaves unresolved what an agent needs to know about authorization and side effects beyond 'this deletes the alias'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two integer params, so the description must compensate. The path template does imply alias_id is scoped under project_id, which is useful, but gives no constraints, formats, or error behavior for either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove') and resource ('integration alias'), and the endpoint path clarifies it is the project-scoped alias rather than the global one. It is distinguishable from delete_integration_alias and create_project_integration_alias, though the description never explicitly contrasts them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus delete_integration_alias, list_project_integration_aliases, or update_integration. No prerequisites or exclusions (e.g. whether the alias must be unreferenced first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_roleBDestructiveIdempotent
delete project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/roles/{role_slug}.
| Name | Required | Description | Default |
|---|---|---|---|
| role_slug | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context about edition/license/permission dependence and Community-edition 404 or empty-list behavior, which is beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and endpoint. The availability caveat is useful, though the description is terse and could better organize the parameter or error details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world delete operation with no output schema, the description covers availability and some error behavior. It still omits important context such as what exactly is removed, cascading effects, and permission requirements beyond a general mention.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only restates project_id and role_slug as path parameters in the DELETE route, without explaining formats, constraints, or how role_slug should be obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'delete project role.' It is clearly a deletion operation, though it does not explicitly distinguish itself from sibling tools like update_project_role or delete_global_role beyond the name/resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides contextual caveats about availability depending on edition, license, and permissions, and notes possible 404 or empty-list responses. However, it does not explicitly say when to use this tool versus alternatives such as update_project_role or delete_global_role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_project_runnerCDestructiveIdempotent
Delete project runner. DELETE /project/{project_id}/runners/{runner_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds only a REST endpoint string and says nothing about irreversibility, effect on assigned jobs, or required permissions, so it contributes almost nothing beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, no filler. The REST path sentence is marginally redundant with the tool name but does convey the resource hierarchy, so it roughly earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive mutation with no output schema and zero parameter documentation; the description should at least state whether deletion is permanent, what happens to the runner's jobs, or what permissions are needed. Instead it restates the name and a raw endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the two integer params carry no descriptions. The URL template 'DELETE /project/{project_id}/runners/{runner_id}' does map each parameter to its role and confirms the project→runner hierarchy, but adds no format, validation, or edge-case detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete project runner'), which is enough to separate it from delete_global_runner and update_project_runner by name. It does not explicitly contrast itself with those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g. pausing/disabling the runner first, permission requirements), and never names the alternative tool for global runners. 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.
delete_project_userBDestructiveIdempotent
Removes user from project. DELETE /project/{project_id}/users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the agent knows this is a destructive, repeatable write. The description adds only the REST endpoint mapping; it says nothing about whether the removed user's tasks, schedules, or permissions are reassigned or lost. With annotations carrying the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences, front-loaded with the action and resource. The endpoint clause is mildly redundant but harmless; nothing bloats the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive mutation with no output schema, the definition is adequate to call it but omits consequences (what access or resources the user loses) and any confirmation/error behavior, which matter for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description carries the burden, but it only echoes them implicitly via the URL template. It never explains that user_id identifies the member to remove or where project_id comes from, leaving both undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Removes user from project'), which implicitly distinguishes it from delete_user (removes from the system) and delete_project (removes the whole project). It does not explicitly name those siblings, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like leave_project, update_project_user, or delete_user, nor any prerequisites (e.g., admin rights). The 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.
delete_repositoryCDestructiveIdempotent
Removes repository. DELETE /project/{project_id}/repositories/{repository_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond restating the HTTP verb – no cascade effects, no confirmation requirements, no indication of whether the deletion is immediate or asynchronous, and no auth/permission notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and followed by the endpoint; nothing is padded. The brevity is efficient but tips toward under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-reversible operation with no output schema and zero parameter documentation, the description is far too thin. An agent gets no information about consequences of deletion, error conditions, or how the call reports success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters are undocumented integers with only a minimum constraint. The URL template gives the only semantic hint, mapping project_id and repository_id to path segments, but it adds nothing about format, scope, or what happens when an ID is invalid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes repository') and even names the exact endpoint, so there is no ambiguity about what the call does. It does not explicitly distinguish itself from siblings like update_repository or get_repository, but the verb makes the distinction self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_repository or list_repositories, no preconditions, and no warning about what deleting a repository implies for attached templates or other dependents. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scheduleCDestructiveIdempotent
Deletes schedule. DELETE /project/{project_id}/schedules/{schedule_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| schedule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the core safety profile is covered. The description adds only the endpoint path and does not explain irreversibility, cascade effects, or required permissions beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the verb and endpoint are front-loaded and immediately useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world delete operation with no output schema and no documented parameters, the description is too thin. It should at least explain what is removed and any important side effects, even if annotations cover the safety hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both required integer parameters are undocumented in structured data. The endpoint path implies which parameters are needed, but the description does not explain their meaning, constraints, or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes schedule') and adds the REST endpoint, which makes the project/schedule scoping clear. It does not distinguish itself from siblings such as delete_template or set_schedule_active beyond the name, but the operation is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of alternatives like set_schedule_active, update_schedule, or deleting a parent template. No prerequisites, warnings, or exclusion conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_secret_storageCDestructiveIdempotent
Remove. DELETE /project/{project_id}/secret_storages/{storage_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| storage_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true, idempotentHint=true and openWorldHint=true, so the description adds no safety context of its own. It does not say what is permanently destroyed (stored credentials/encryption material), whether deletion fails if the storage is in use, or whether it can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no padding and the action front-loaded. However, the extreme brevity is under-specification rather than efficiency, and the path template substitutes for explanatory prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible-sounding operation with no output schema and zero parameter descriptions, the description omits consequences, dependency checks, and permission requirements. An agent has enough to form the call but not enough to make a safe decision about it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning, yet it only places {project_id} and {storage_id} in a URL template. It does not explain what a secret storage ID is, how to obtain it (e.g., via list_secret_storages), or whether project_id must match the storage's owner.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Remove" is a vague verb on its own, but the REST route DELETE /project/{project_id}/secret_storages/{storage_id} disambiguates the resource as a secret storage scoped to a project. It identifies the action and target, but never names any of the many sibling delete_* tools, so nothing distinguishes it beyond the endpoint path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives. Nothing warns that a storage still referenced by integrations may need unlinking first (the sibling get_secret_storage_references hints at such dependencies), and no prerequisites or safe-usage context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_subscriptionADestructiveIdempotent
delete subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /subscription.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false. The description adds edition/license/permission constraints and route-specific 404/empty-list caveats that are not in the annotations, giving useful operational context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus the endpoint are front-loaded with the action, followed by the key availability caveat. Every sentence adds value and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter destructive endpoint with rich annotations, the description covers availability constraints and the route. It does not spell out irreversibility or side effects on related resources, but the destructive annotation already signals risk, so the remaining gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which sets the baseline at 4. The description adds no parameter detail, which is appropriate because the schema is empty and there are no parameter semantics to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'delete' and resource 'subscription', and the DELETE /subscription endpoint confirms the operation. An agent can distinguish it from get_subscription, refresh_subscription, and activate_subscription by the verb alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides prerequisites such as Semaphore edition, license, and permissions, and warns that some Community routes return 404 or empty lists. However, it does not explicitly say when to use this versus the sibling subscription tools or when deletion is inappropriate, so usage is implied rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskBDestructiveIdempotent
Deletes task (including output). DELETE /project/{project_id}/tasks/{task_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description does add one real piece of behavioral context — that the task's output is removed too — but says nothing about irreversibility, cascade effects, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its side effect, with the endpoint as supporting detail. No filler, though the endpoint syntax is low-value for an agent that already has the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema tool, the definition covers the core action and the output deletion but omits confirmation requirements, what happens to dependent objects, and how to choose between this and delete_global_task. Adequate to call safely only because annotations carry the destructive flag.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only partially does: the path template 'DELETE /project/{project_id}/tasks/{task_id}' clarifies that both integers are path segments rather than body fields. It adds no constraints, formats, or validation notes beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes task'), plus a distinguishing scope detail ('including output') that a bare 'delete' would not convey. It does not differentiate from the sibling delete_global_task, so an agent cannot tell which deletion path applies from this text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus delete_global_task / delete_project / stop_task, and no prerequisites or warnings beyond the word 'Deletes'. 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.
delete_templateCDestructiveIdempotent
Removes template. DELETE /project/{project_id}/templates/{template_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is destructive, idempotent, not read-only, and open-world, so the description adds little behavioral context. It does not explain what else may be affected by deleting a template, whether deletion is reversible, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the operation stated first and the endpoint second. It is efficient, though the endpoint path mostly restates the parameter names rather than adding much explanatory value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description is too thin. It omits side effects, permissions, confirmation expectations, and the consequences of deleting a template, leaving the agent with only the endpoint and verb.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden for parameter meaning. It only repeats project_id and template_id as URL path placeholders and adds no explanation of what those identifiers select or any constraints beyond the schema's integer minimum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Removes template', and reinforces it with the DELETE endpoint path. It is clear what the tool does, though it does not explicitly differentiate itself from nearby destructive siblings such as delete_template_permission or detach_template_inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisite checks, and no warning about confirming a destructive template deletion. The operation is implied only by the verb 'Removes'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_template_permissionCDestructiveIdempotent
Delete Template Perm. DELETE /project/{project_id}/templates/{template_id}/perms/{perm_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| perm_id | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds only the REST path and says nothing about what is removed, required permissions, or side effects beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The only weakness is the unexplained abbreviation 'Perm' and the raw endpoint notation, which is slightly cryptic but still compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema and no parameter descriptions, the definition is thin. It omits prerequisites, failure modes, and the effect of deleting the permission, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The endpoint path maps each of the three required IDs to its role in the resource hierarchy, but it does not explain what a perm_id represents or how to obtain one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a delete action on a template permission, and the HTTP endpoint clarifies the resource nesting (project → template → perm). However, the abbreviated 'Template Perm' and lack of explicit sibling differentiation (vs. update/get/list_template_permissions) keep it at merely adequate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as update_template_permission or delete_template. The agent must infer from the name that this removes a single permission assignment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_terraform_aliasADestructiveIdempotent
delete terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| alias_id | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description goes beyond that by warning that the endpoint can fail with 404 or empty results depending on edition/license/permissions — a failure mode an agent would otherwise misread as 'alias not found'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, verb-and-resource statement front-loaded, endpoint last. The conditional-availability sentence is slightly vague ("some Community routes") but still earns its place as a caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-path-param delete with a full annotation set and no output schema, the definition covers identity, route, and failure caveats adequately. What is missing is whether deletion cascades or is recoverable, but destructiveHint already signals the risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load; the embedded path template (DELETE /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}) does map each of the three required params to its role in the hierarchy. It adds no type, format, or lookup guidance beyond that mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("delete terraform alias") and pins it down with the exact REST route, so an agent can distinguish it from create_terraform_alias, update_terraform_alias and delete_terraform_state. It never explicitly names those siblings, but the resource scoping is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability note (edition, license, permissions, 404s on Community routes) gives useful preconditions for attempting the call, which most delete tools omit. However, there is no guidance on when to prefer this over update_terraform_alias or how to verify the alias first via get_terraform_alias/list_terraform_aliases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_terraform_stateADestructiveIdempotent
delete terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/inventory/{inventory_id}/terraform/states/{state_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| state_id | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, but the description adds genuinely new operational context: availability gated by Semaphore edition, license, and permissions, and that some Community routes return 404 or empty lists. That tells the agent how to interpret a failed delete rather than assuming the state was absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the action is front-loaded, and the caveat follows. The endpoint echo is mildly redundant but cheap and useful for disambiguation. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param destructive tool with no output schema, the description covers what the tool does, how it is scoped, and the main failure mode. It stops short of stating irreversibility or success/error semantics explicitly, but annotations carry the destructive profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all three params are bare integers in the schema. The description partially compensates by presenting the REST path, which maps project_id, inventory_id, and state_id to their roles in the resource hierarchy. It adds no further format or constraint detail, so it lands at the baseline-plus level for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb plus resource ("delete terraform state"), which is unambiguous against siblings like get_terraform_state, list_terraform_states, or delete_terraform_alias. It does not explicitly name a sibling to differentiate, which is the only thing keeping it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a single obvious use (remove an existing state) and warns that availability depends on edition, license, and permissions, so an agent knows failures may be environmental. It gives no explicit when-to-use vs alternatives or prerequisites beyond that caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_userCDestructiveIdempotent
Deletes user. DELETE /users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond restating the endpoint — it doesn't mention irreversibility, cascade effects on the user's owned resources, or required admin rights, which is the added value expected when annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero padding, and the core verb is front-loaded. It is efficient but borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive user-deletion tool with no output schema, the description is too thin: it omits whether deletion is permanent, what happens to related resources, and any authorization prerequisites. Annotations cover the read/write and destructive flags, but the operational context an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter with 0% schema description coverage. The path fragment "/users/{user_id}" hints that user_id identifies the target, but no format, range, or sourcing guidance is added beyond what the raw name implies, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Deletes user") and even names the HTTP endpoint, so the operation is unambiguous. However, it does nothing to distinguish it from siblings like delete_project_user or disable_user_totp, leaving an agent to infer scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g., disable_user_totp, delete_project_user, or update_user to deactivate). The description offers no preconditions such as whether the user must be empty of projects first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_viewCDestructiveIdempotent
Removes view. DELETE /project/{project_id}/views/{view_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| view_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint, idempotentHint, and openWorldHint, so safety profile is covered. The description adds only the REST endpoint, with no mention of what exactly is removed, whether it's reversible, or permission requirements—little value beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource. The endpoint line is compact and adds locational context without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, project-scoped delete with no output schema, the description is minimally adequate given annotations cover the safety profile. It leaves gaps around parameter meaning and irreversibility that would help an agent invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; the URL template (project/{project_id}/views/{view_id}) does map both parameters to their roles, providing some semantics. However, it adds no detail on meaning or constraints beyond what the path implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Removes view'), clearly distinguishing it from sibling update_view/get_view. The REST path adds project scoping context, though it doesn't explicitly call out the project-level scope in prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like update_view or list_views, and no prerequisites (e.g., permissions, confirmation) are mentioned. 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.
delete_workflowBDestructiveIdempotent
Remove workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. DELETE /project/{project_id}/workflows/{workflow_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds edition/license/permission gating and 404 behavior, which is genuine extra context. It does not say what is destroyed beyond the workflow itself (runs, schedules, history) or whether deletion is recoverable, and the "empty lists" remark is unclear for a DELETE operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded. The edition/permission caveat earns its place; the "empty lists" clause is somewhat noisy and confusing in a delete context but is the only padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers availability gating but omits scope of deletion (cascading effects on workflow runs or schedules) and any indication of the response. Annotations supply the safety flags, so the remaining gap is moderate rather than severe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required integer params, so the description carries the burden. The embedded path template DELETE /project/{project_id}/workflows/{workflow_id} does clarify the role and ordering of each identifier, which is real value. It adds no constraints beyond that, such as whether IDs must belong to the same project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove workflow") and reinforces it with the DELETE endpoint. An agent can distinguish it from update_workflow/create_workflow without effort. It does not, however, differentiate itself from the many other delete_* siblings beyond the noun, which is probably sufficient here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives availability caveats (edition, license, permissions) and warns that some Community routes return 404 or empty lists, which is useful context for interpreting failures. But it never says when to use this versus alternatives, nor states prerequisites or side effects that would guide selection. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_template_inventoryCDestructive
Detach Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/detach.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description contributes nothing beyond the endpoint path: it doesn't say what gets removed, whether the default inventory linkage is cleared, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two short, front-loaded lines with no filler, but the second line is mostly redundant with the name rather than adding information. Brevity here comes from under-specification, not from efficient editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with no output schema and zero parameter documentation needs a fuller description. As given, an agent cannot tell what side effects detaching has (e.g., on tasks or default inventory settings) or what a successful response means.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with three required integer parameters, so the description must compensate. The path template only reveals that the three IDs form a project/template/inventory hierarchy; it adds no semantics such as whether inventory_id is scoped to the project or the template.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ("Detach Inventory") and adds only an HTTP endpoint. It gives no plain-language statement of what detaching actually does to the relationship between the template and the inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus the counterpart sibling attach_template_inventory, or versus delete_inventory. The agent must infer the operation's purpose and any prerequisites on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_user_totpCDestructiveIdempotent
Disable Totp. DELETE /users/{user_id}/2fas/totp/{totp_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| totp_id | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds only the HTTP endpoint, saying nothing about required auth level, what the user loses (access lockout, other 2FA methods untouched), or error behavior when totp_id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action. The endpoint line is somewhat redundant with the schema and annotations but is compact enough not to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and zero parameter documentation, the description should state auth requirements, consequences, and failure modes. Annotations cover the safety hints, but the picture an agent needs to call this confidently is still incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both required parameters. The embedding of user_id and totp_id in the path only restates their names; neither the schema nor the description explains what totp_id identifies (a TOTP enrollment/device ID) or what values are valid beyond the integer/minimum constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Disable') and resource ('Totp') scoped to a user, and the DELETE path confirms it removes a specific TOTP registration. An agent can distinguish it from enable_user_totp, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the inverse enable_user_totp or get_user_totp_qr alternatives. The agent must infer usage 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.
enable_user_totpDDestructive
Enable Totp. POST /users/{user_id}/2fas/totp.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the description needs to add context such as admin-only access or lockout risk. Instead it only repeats an HTTP endpoint, which is not behavior an agent can act on, and gives no warning that this changes a user's security configuration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded with the verb, but the brevity comes from omission rather than economy: the REST path is arguably wasted space while operational context is missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, open-world mutation with no output schema and undocumented parameters, the agent needs to know permission requirements, whether the user must already have generated a TOTP secret, and the effect (possible lockout). None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single user_id parameter. The description only embeds {user_id} in the path template, adding no meaning beyond the schema — no indication of whose ID it is (admin rights required, must be an existing user) or what happens on invalid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The sentence "Enable Totp" restates the tool name almost verbatim, and the only added information is the REST endpoint path. It does not explain what enabling TOTP means for the user (e.g., turning on 2FA enforcement) or how it relates to siblings like disable_user_totp and get_user_totp_qr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternatives are given. The existence of a paired disable_user_totp and a get_user_totp_qr tool is not acknowledged, so the agent gets no routing help at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_access_keyCRead-onlyIdempotent
Get Keys. GET /project/{project_id}/keys/{key_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds only the endpoint path and provides no additional behavioral context such as authentication requirements, rate limits, or what the retrieved key object contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with no wasted sentences. However, it is composed of two terse fragments rather than a structured explanation, leaving most context to the schema and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should at least hint at what a retrieved access key contains or how it is represented. It also leaves both required parameters undocumented despite 0% schema description coverage, making it incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it only exposes project_id and key_id through the URL path. It does not explain what these IDs refer to, their constraints, or how they relate to the access key resource.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Keys" is vague and plural, but the HTTP path GET /project/{project_id}/keys/{key_id} identifies retrieval of a single access key by ID. It does not distinguish this tool from siblings such as list_access_keys or get_access_key_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and does not mention alternatives like list_access_keys or get_access_key_references. An agent must infer usage solely from the endpoint shape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_access_key_referencesDRead-onlyIdempotent
Get Key Refs. GET /project/{project_id}/keys/{key_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| key_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the raw endpoint path: it does not explain what references are returned, whether results are paginated, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but it is under-specified rather than genuinely concise. The HTTP endpoint restates routing information already implied by the tool name and schema without adding useful explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no explanation of what "references" means for an access key, how many might be returned, or how to interpret them. For a domain-specific reference-listing tool, the definition leaves an agent guessing about the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for two undocumented integer parameters. It only embeds project_id and key_id in the URL template, giving no meaning beyond their names—such as what a key reference is scoped to or whether IDs must exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Key Refs" is little more than a restatement of the tool name, and the abbreviation "Refs" is ambiguous without domain context. The HTTP endpoint adds a hint that this retrieves references for an access key under a project, but it does not specify what a "reference" is or how this differs from get_access_key or list_access_keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool rather than get_access_key, list_access_keys, or the many sibling get_*_references tools. No prerequisites, exclusions, or alternative-selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_admin_infoCRead-onlyIdempotent
get Admin Info. GET /admin/info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered without the description. The description contributes nothing beyond the route, notably not whether the response requires elevated admin privileges or what kinds of data (license, version, settings) surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but both sentences are low-value: the first repeats the tool name and the second repeats the route an agent already knows from the name. Brevity here stems from under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no description of the response payload, the agent has no idea what 'admin info' contains or whether the result is large. For an informational tool with no parameters, the description should at least characterize the returned data or its privilege requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to convey; baseline 4 applies. The schema is empty and fully consistent with the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name and appends the HTTP route ("GET /admin/info"), which is a tautology rather than a statement of what is returned or what 'admin info' covers. It does not distinguish this tool from plausible siblings such as get_system_info, get_server_options, or get_current_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the many other get_* informational siblings. The only hint of usage is the implied endpoint, which an agent cannot use to make a selection decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_appCRead-onlyIdempotent
get App. GET /apps/{app_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds nothing beyond that — no note on error behavior for unknown IDs, no indication of scope or visibility, and no distinguishing detail for an openWorldHint=true tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but its brevity comes from under-specification rather than efficiency; both sentences are near-redundant with the name and schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotation-adjacent context, and 0% parameter description coverage, the description carries the full explanatory burden and fails to deliver. An agent still cannot tell what an 'app' object contains or how to source the ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter app_id has no description in the schema. The endpoint path implies app_id identifies the app, but the description never confirms this, states the format (numeric vs UUID), or explains where to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"get App" merely restates the tool name, and "GET /apps/{app_id}" restates the endpoint rather than describing what an app is or what the call returns. There is no differentiation from siblings such as list_apps, update_app, or delete_app beyond the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_apps (to discover IDs) or update_app. The agent must infer that an app_id must first be known, and there is no mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cluster_statusCRead-onlyIdempotent
get Cluster Status. GET /cluster.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond the endpoint path: no indication of what the status payload reveals, freshness, or whether it is expensive/slow against a live cluster.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no filler, but the second fragment ('GET /cluster') only duplicates implementation detail an agent cannot act on, and the whole is arguably too terse to be an adequate definition rather than efficiently written.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema and a crowded sibling set of cluster/system/admin info tools, the description should say what the response covers and when it is the right source. Neither is provided, so an agent cannot confidently choose this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies by rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"get Cluster Status" essentially restates the tool name, and "GET /cluster" only names the underlying endpoint. It never says what 'status' means (health, workers, version, queue) or how it differs from siblings like get_system_info, get_admin_info, or get_server_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of the near-identical informational siblings. An agent has to guess whether this or get_system_info/get_admin_info is the right call for cluster-level diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userARead-onlyIdempotent
Fetch logged in user. GET /user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, and open-world behavior. The description adds a small amount of context by implying authentication via 'logged in user' and naming the endpoint, but it does not describe response shape or auth requirements beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and endpoint, with no wasted wording. It is appropriately sized for a zero-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple current-user read with rich annotations and no parameters, the description is nearly complete. The only minor omission is return-value context, though no output schema exists to carry it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. Baseline 4 applies, and the description appropriately avoids discussing nonexistent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('logged in user'), with 'logged in' scoping it apart from get_user. It does not explicitly name or contrast the sibling alternatives, but the scope is clear enough to identify the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance versus siblings such as get_user or list_users. 'Logged in user' implies the use case, but the agent must infer the selection rule and any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_environmentCRead-onlyIdempotent
Get environment. GET /project/{project_id}/environment/{environment_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| environment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the URL route, saying nothing about what happens on a missing/invalid ID, whether the response is cached, or what the resource contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with zero filler and the core purpose front-loaded. It is efficient, though the second sentence spends space on an HTTP route rather than information more useful to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% parameter coverage, the description should describe the returned environment shape and failure modes; instead it stops at the route. For a two-required-parameter retrieval tool with rich annotations, this leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both required integer parameters are undocumented beyond type and minimum 1. The description only reveals that the two IDs are path segments, which hints that environment_id is scoped under project_id, but adds no semantics about valid ranges, behavior on nonexistent IDs, or relationship between the two.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb (Get) and resource (environment) and appends the HTTP path, which confirms this retrieves a single environment scoped to a project. However, it is essentially a restatement of the tool name plus a route, and it never distinguishes itself from siblings like list_environments or get_environment_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_environments (discovery) or get_environment_references (dependency lookup), nor any prerequisite or precondition noted. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_environment_referencesCRead-onlyIdempotent
Get Environment Refs. GET /project/{project_id}/environment/{environment_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| environment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered structurally. Beyond that the description adds nothing — not what 'refs' contain, whether results are paginated, or why the endpoint is 'open world' (unbounded returned items), leaving the annotations to carry all behavioral meaning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two short sentences with no padding, but the brevity comes at the cost of under-specification rather than efficiency; the endpoint restatement earns little place in a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no explanation of what a reference is or what shape the response takes, so an agent cannot anticipate the return value. For a tool with zero parameter documentation, this description is too thin to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither parameter is documented in the schema, and the description only repeats the path template showing project_id and environment_id are path identifiers. It adds no format, type, or constraint detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb+resource ('Get Environment Refs') and gives the REST endpoint, so the agent knows it retrieves reference data for an environment. However, 'refs' is undefined and the definition never distinguishes it from siblings such as get_environment or get_inventory_references, which could easily be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get_environment or the other *_references tools; the only content is a restated endpoint path. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_roleARead-onlyIdempotent
get global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /roles/{role_slug}.
| Name | Required | Description | Default |
|---|---|---|---|
| role_slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds valuable failure-mode context by noting edition/license/permission dependence and possible 404 or empty-list responses, which an agent needs to interpret outcomes. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and free of filler. Each sentence adds either the resource/route, availability caveats, or failure-mode context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers availability caveats well, but with no output schema and no parameter documentation, it leaves the agent without guidance on what a successful response looks like or how to obtain a valid role_slug. Adequate but with clear gaps for a single-resource fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain what role_slug means, where to source it, or whether it is a slug versus an ID. The route path /roles/{role_slug} only restates the parameter name and does not compensate for the missing semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('get global role') and includes the underlying route GET /roles/{role_slug}. It implicitly distinguishes a single-role fetch from list_global_roles, but does not explicitly name or contrast with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful contextual guidance that availability depends on edition, license, and permissions, and that some Community routes return 404 or empty lists. However, it does not say when to prefer this tool over list_global_roles or get_project_role, nor does it explain prerequisites for obtaining a valid role_slug.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_runnerCRead-onlyIdempotent
Get global runner. GET /runners/{runner_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, and the description only restates the HTTP method. It adds no behavioral context beyond annotations, such as response shape, permissions, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler and the purpose is front-loaded. The endpoint is arguably redundant, but it does not burden the reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool, the annotations and schema cover much of what is needed, but the description never explains what the returned global runner contains or any access constraints. With no output schema, that return-value gap matters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required runner_id parameter has no schema description. The endpoint template conveys that runner_id is a path parameter, but adds little beyond the property name and does not explain where to obtain it or what it identifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('global runner') and includes the endpoint. It implicitly distinguishes global runners from project runners via the resource name, but does not explicitly contrast with get_project_runner or list_global_runners.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided. The GET endpoint implies retrieval by ID, but the agent is not told when to choose this over get_project_runner, list_global_runners, or other sibling getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_taskARead-onlyIdempotent
Inspect the global task pool. Upstream v2.19.17 returns the full pool even for this task-specific route; use get_task for a single project task. GET /tasks/{task_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds genuine undisclosed behavior: upstream v2.19.17 returns the entire pool even on this task-specific route, which is exactly the kind of quirk an agent cannot infer from any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus the route, zero waste, with the surprising behavior front-loaded before the alternative routing. Nothing could be removed without losing signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full annotation coverage and no output schema, this covers the essential behavior including the version-specific quirk. The only gap is whether task_id is validated, ignored, or errors when the pool is returned instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it effectively signals that task_id does not narrow the result under v2.19.17 (the full pool is returned regardless). It never states this explicitly apart from 'even for this task-specific route', leaving a small inference gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Inspect the global task pool') and immediately resolves the confusing name/route mismatch by noting this task-specific route returns the full pool upstream. It also names get_task as the single-task alternative, so the tool can be told apart from siblings, though its relationship to list_global_tasks is never clarified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to get_task 'for a single project task', giving a concrete when-not condition and alternative. It stops short of explaining when to pick this over the very similar list_global_tasks sibling, which is the closest ambiguity an agent would face.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integrationCRead-onlyIdempotent
Get Integration. GET /project/{project_id}/integrations/{integration_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds nothing beyond that — no auth requirements, no error behavior for a missing integration, no indication of what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the second sentence largely restates the schema's required parameters as a path template rather than adding new information. Not verbose, just low-value per sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with no output schema and 0% parameter documentation, the description leaves too much unstated: what fields come back, what happens if the ID doesn't exist, and how it differs from adjacent read tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not. The URL template only reuses the parameter names project_id and integration_id, giving no further meaning (format of IDs, scope rules, or whether the integration must belong to that project).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Integration" is essentially the tool name restated as a sentence. The REST path fragment adds only that the resource is project-scoped, and nothing distinguishes this from siblings such as get_integration_value, get_integration_references, or list_integrations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many other integration getters/listers. The only implicit guidance is that it fetches one integration by ID under a project, which an agent must infer from the URL template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_matcherCRead-onlyIdempotent
Get Integration Matcher. GET /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| matcher_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description contributes only the REST path; it says nothing about lookup failure behavior (e.g. 404 for an unknown matcher), permission requirements, or response content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource and path front-loaded and no filler. It is efficient but so sparse that brevity is achieved by omission rather than by pruning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three undocumented required parameters, no output schema, and no explanation of what a matcher object contains, the definition leaves the agent guessing about the return value and the ID nesting relationship.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, but it only echoes the three IDs as path placeholders. It never states that matcher_id must belong to integration_id within project_id, which is the key constraint for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Get Integration Matcher') and appends the raw REST route. It identifies the resource family but never says what a matcher actually is or what is returned, so it adds little beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings such as list_integration_matchers, get_integration_matcher_references, or update_integration_matcher. The agent must infer from names alone that this is the single-item fetch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_matcher_referencesDRead-onlyIdempotent
Get Integration Matcher Refs. GET /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| matcher_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not explain what references are returned, whether the matcher must exist, or what an openWorld call implies here, so for a tool whose annotations leave the content opaque it under-delivers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two terse fragments with no filler, so it is not bloated. But brevity here is under-specification rather than efficiency, and the raw endpoint path is the only content-bearing element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with 0% schema description coverage and no output schema, the description should explain what references are and roughly what is returned. Instead it provides only the endpoint, leaving the agent unable to predict the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the three required integer parameters are undocumented in the schema. The URL template at least shows that project_id, integration_id, and matcher_id are path identifiers nested in a hierarchy, but it adds no constraints, formats, or meaning beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description just restates the tool name ("Get Integration Matcher Refs") and appends the raw HTTP path. It never says what a "ref" is or what the response represents, so an agent cannot distinguish this from get_integration_references, get_integration_value_references, or get_integration_matcher without guessing from the path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The sibling list contains several closely related reference getters (get_integration_references, get_integration_value_references), and the description gives no basis for choosing among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_referencesCRead-onlyIdempotent
Get Integration Refs. GET /project/{project_id}/integrations/{integration_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds only the REST path, and says nothing about what the references represent, whether results can be empty, or how pagination/ordering works for a collection-returning read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences with no padding, so it is not verbose. However, one of them is pure name repetition and the other is a raw endpoint string, so the brevity reflects thin content rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is responsible for telling the agent what comes back — a list of referencing resources — and it does not. Combined with undocumented parameters, an agent cannot predict the response shape or handle empty results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not. The path template at least reveals that integration_id is scoped under project_id, but there is no guidance on ID validity, ownership, or error behavior for either required integer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence restates the tool name almost verbatim ('Get Integration Refs'), adding no verb/resource nuance beyond what the identifier already conveys. The only added information is the HTTP route, which hints at scope but never explains what a 'reference' is or how it differs from get_integration_value_references or get_integration_matcher_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus siblings such as get_integration or get_integration_value_references, and no prerequisite context. 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.
get_integration_valueCRead-onlyIdempotent
Get Integration Extract Value. GET /project/{project_id}/integrations/{integration_id}/values/{value_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| value_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false, and openWorld=true, so the safety profile is covered. The description adds nothing beyond the HTTP verb and path — no note on error behavior for missing IDs, no permission requirements, no scoping caveats that an openWorld read would warrant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the verb, so there is no padding. But the first fragment duplicates the tool name verbatim and the second duplicates what the schema already shows, so neither sentence earns much beyond brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A three-parameter lookup with no output schema and no schema descriptions needs the description to explain the resource and the ID relationships; it does neither. Only the annotations carry real information, leaving the definition substantially under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three required integer parameters. The description only echoes them as path placeholders, giving no meaning beyond 'these are IDs in the URL' — it does not say what a value_id identifies versus an integration_id or how they relate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs the verb 'Get' with the resource 'Integration Extract Value' and a REST route showing it fetches a single value by ID, which distinguishes it from list_integration_values. However, 'Integration Extract Value' merely restates the tool name, and nothing explains what an integration value actually is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_integration_values, get_integration, or get_integration_value_references. The agent must infer usage purely from the route shape and the sibling naming pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_value_referencesCRead-onlyIdempotent
Get Integration Extract Value Refs. GET /project/{project_id}/integrations/{integration_id}/values/{value_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| value_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds only the HTTP path and does not disclose what references are returned, permission requirements, or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but it is terse to the point of under-specification rather than efficiently informative. The endpoint sentence adds little beyond the schema path structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter descriptions, an agent lacks important context about what 'refs' are, what is returned, and how the three required IDs relate. Annotations cover safety, but the description does not complete the operational picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It only shows the three IDs as path placeholders; it does not explain what each ID identifies, valid relationships between them, or how to obtain them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, 'Integration Extract Value Refs,' and adds the HTTP path, so the basic operation is identifiable. However, it does not clarify what a 'ref' is or distinguish this tool from nearby siblings like get_integration_value or get_integration_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_integration_value or get_integration_references. The agent must infer the use case 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.
get_inventoryDRead-onlyIdempotent
Get inventory. GET /project/{project_id}/inventory/{inventory_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered elsewhere. The only extra signal is the URL path showing the lookup is project-scoped; nothing is said about permissions, 404 behavior, or what the response entity looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short fragments, so there is no bloat, but the content is under-specified rather than efficient. The endpoint path is front-loaded after a vague verb phrase and carries most of the informational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read this is close to the minimum an agent needs to fire the call, but with 0% schema coverage and no output schema the description should at least clarify what entity is returned and how it relates to sibling inventory tools. It does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema only declares two bare integer IDs with minimum 1. The template '/project/{project_id}/inventory/{inventory_id}' confirms both are path identifiers, but adds no meaning about what a project_id or inventory_id refers to or how to obtain them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description essentially restates the tool name ('Get inventory') and appends the raw REST path. The path does hint that a single inventory is fetched within a project scope, which is slightly more than pure tautology, but it never states what an inventory is or how the returned entity differs from, e.g., get_inventory_references or list_inventories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, no prerequisites, no alternatives. With ~170 siblings including list_inventories, get_inventory_references, delete_inventory and update_inventory, an agent gets zero help in choosing this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_referencesDRead-onlyIdempotent
Get Inventory Refs. GET /project/{project_id}/inventory/{inventory_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description is not required to re-state safety; it adds nothing beyond that. It does not mention whether the result is a list, whether references are paginated, or what an empty inventory looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, which is good, but the brevity comes from under-specification rather than economy of wording. Every token past the tool name is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotation-derived return info, and 0% parameter documentation, the description leaves the agent unable to predict the response shape or confirm it is the right tool. For a reference-lookup endpoint in a large API surface, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both required integer parameters (project_id, inventory_id) are undocumented anywhere. The embedded path hints they are path parameters and scopes the lookup to a project and inventory, but it adds no format, valid-range, or error behavior detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Inventory Refs" essentially restates the tool name, and the appended REST path gives only the location, not the meaning. It never says what an inventory "reference" is (templates? workflows? attached objects?) or what the tool returns, so an agent cannot distinguish it from get_inventory on substance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no distinction from the nearby get_inventory or the family of other *_references tools, and no stated prerequisites (e.g., that the inventory must exist or be readable). The agent must guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_terraform_stateARead-onlyIdempotent
get latest terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states/latest.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavioral value beyond that: availability varies by Semaphore edition, license, and permissions, and Community routes may return 404 or empty lists — a non-obvious failure characteristic an agent should anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose, followed by the availability caveat. The raw endpoint path is slightly redundant but compact and adds routing context. No wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema and annotations covering the safety profile, the description supplies the key missing piece (partial-availability / 404 behavior). The remaining gap is parameter meaning, only partially filled by the path template.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the two required params are otherwise undocumented. The endpoint template ('/project/{project_id}/inventory/{inventory_id}/...') implicitly maps each parameter to its resource, partially compensating, but adds no detail on valid values or sourcing of IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('get latest terraform state'), and the word 'latest' distinguishes it from siblings like get_terraform_state and list_terraform_states. It doesn't explicitly name those alternatives, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch the newest state for a given inventory. There is no explicit when-to-use/when-not guidance and no named alternative for retrieving historical states or listing them. Availability caveats are present but describe failure modes, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectCRead-onlyIdempotent
Fetch project. GET /project/{project_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description only restates a GET endpoint and adds no behavioral context such as permissions, errors, or return handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments are front-loaded and contain no filler. The endpoint line is somewhat redundant, and the definition is arguably too sparse to be appropriately sized for the task.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool, annotations cover safety and no output schema exists. Still, the description does not clarify what is returned, whether permissions are required, or how missing projects are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is project_id, and schema description coverage is 0%. The description only shows it as a path placeholder; it does not explain what the project ID is, where to obtain it, or how invalid/nonexistent IDs are handled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch project'), so the action is clear. However, it offers no scope or distinction from siblings such as list_projects or get_project_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this versus list_projects, get_project_permissions, or other get_* project tools. The endpoint alone does not supply usage criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_backupCRead-onlyIdempotent
Backup A Project. GET /project/{project_id}/backup.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the description could have used its space for what the backup contains, whether it is a file download or JSON payload, size/side effects, or auth requirements. It instead only echoes the HTTP route, adding essentially no behavior beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and free of padding. It is terse rather than bloated, so its weakness is under-specification, not verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single-parameter read tool with no output schema, so the description must carry the burden of explaining the return — especially important for a 'backup' endpoint where the agent needs to know if it gets a JSON blob, a file, or a download URL. That critical information is entirely absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, but the only mention of project_id is the '{project_id}' placeholder in the URL. It does not say whether the value is a numeric ID vs slug, what happens if the project doesn't exist, or whether other projects are ever included.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource ('Project') and the operation ('Backup'), but 'Backup A Project' reads ambiguously — it could mean creating/triggering a backup or producing a downloadable backup artifact. The GET verb in the second sentence is the only signal, and it is embedded in a raw endpoint string rather than stated as a purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives named. Sibling tools like restore_project, get_project, and list_projects exist, and the description does not clarify the relationship (e.g., that this yields backup data consumed by restore_project).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_permissionsBRead-onlyIdempotent
Fetch permissions of the current user for project. GET /project/{project_id}/role.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds only the underlying REST route (GET /project/{project_id}/role), and says nothing about what is returned (role name vs. permission set) or what auth scope is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose; the endpoint line is secondary and does not obstruct scanning. Nothing is padded, though the endpoint is of marginal value to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what 'permissions' means in the response shape (role vs. permission list), and it does not. Annotations cover the safety profile, so the remaining gap is the return-value semantics and error behavior for inaccessible projects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description is the only place to explain the single parameter. The path template hints that project_id identifies the project, but the description never states format, whether it must be a project the caller belongs to, or what happens for a non-member project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('Fetch permissions ... for project') and scopes it to 'the current user', which distinguishes it from siblings like get_project_role and list_project_roles. It does not explicitly name those siblings, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus get_project_role, list_project_roles, or get_template_permission. The 'current user' scoping implies the use case but no alternative or exclusion is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_roleARead-onlyIdempotent
get project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles/{role_slug}.
| Name | Required | Description | Default |
|---|---|---|---|
| role_slug | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds useful operational context beyond annotations: edition/license/permission dependence and possible 404 or empty-list responses on Community routes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with the action and endpoint front-loaded. The availability caveat is relevant and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter, the annotations and availability caveat provide useful context. However, with no output schema and 0% parameter coverage, the description omits return-value shape and detailed parameter meaning, so it is callable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only restates the parameter names through the endpoint template. It does not explain role_slug format, project_id constraints, or what identifying a project role entails, leaving meaningful semantic gaps for both required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'get' and resource 'project role', and the endpoint path makes single-role retrieval by project and slug clear. It does not explicitly differentiate itself from sibling tools such as list_project_roles or get_global_role, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and endpoint template: retrieve one project role by project_id and role_slug. However, it gives no explicit when-to-use guidance versus list_project_roles or get_global_role; the availability caveat is not the same as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_runnerCRead-onlyIdempotent
Get project runner. GET /project/{project_id}/runners/{runner_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is clear. The description adds only a REST endpoint path and no additional behavioral context such as authentication needs, error behavior, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and contains no filler. The HTTP path is somewhat redundant with the tool name, but the structure remains efficient for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no parameter descriptions and no output schema, the description is too sparse. It does not explain what a project runner is, what the retrieval returns, or how the two required IDs relate to each other.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It only shows project_id and runner_id as path placeholders, without explaining what they identify, their integer constraints, or expected values beyond the schema's minimum of 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get project runner,' and includes the REST path. This clearly identifies a single-resource retrieval, but it does not distinguish the tool from nearby siblings such as get_global_runner or list_project_runners.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool instead of list_project_runners, get_global_runner, or other runner-related tools. The distinction is only implied by the word 'get' and the parameter names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_task_statsCRead-onlyIdempotent
Get Task Stats. GET /project/{project_id}/stats.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive date in YYYY-MM-DD format. | |
| start | No | Inclusive date in YYYY-MM-DD format. | |
| user_id | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds nothing beyond restating the HTTP route: no explanation of how stats are aggregated, whether the date range is required for meaningful results, or what epoch/units the output uses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no padding, but the brevity is under-specification rather than efficiency – the space saved is not reallocated to any information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no output schema, and an undefined return shape, the description leaves the agent unable to predict what it gets back or how to use the filters. For a stats endpoint where the meaning of the response is the whole point, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% – user_id and project_id carry no schema descriptions. The description does not compensate: it never explains that user_id scopes stats to a single user, nor how start/end interact with the aggregation. Only the endpoint template hints at project_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the verb and resource ("Get Task Stats") plus the raw endpoint, so the broad purpose is clear. However, "stats" is never defined – an agent cannot tell whether this returns counts by status, durations, or aggregates – and it does not distinguish itself from the sibling get_template_task_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_template_task_stats or list_tasks / list_project_events. The agent must infer from the endpoint path that this is the project-scoped variant, which is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_userCRead-onlyIdempotent
Get Users. GET /project/{project_id}/users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety is covered structurally. The description adds no behavioral context beyond the endpoint — no mention of permissions required, error behavior for non-members, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero filler, and the endpoint is front-loaded as the second sentence. However, the brevity is under-specification rather than disciplined conciseness — the 'Get Users' fragment earns nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full annotation coverage, the minimum is met, but among ~150 siblings the description gives no disambiguation and no return-value hint (no output schema exists). An agent could easily pick the wrong user-fetching tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden; the path template does indicate that project_id scopes to a project and user_id identifies a user within it, which is real added meaning. It still omits that these are integer IDs and omits any constraint or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The REST path 'GET /project/{project_id}/users/{user_id}' does pin down that this retrieves a single project-scoped user, but the prose 'Get Users' is plural and tautological. It never distinguishes this from siblings like get_user, list_users, or list_project_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this instead of list_project_users (list) or get_user (global lookup). The agent must infer the single-resource-vs-list distinction purely from the endpoint string.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repositoryCRead-onlyIdempotent
Get repository. GET /project/{project_id}/repositories/{repository_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds nothing beyond that: no note on permission requirements, 404 behavior for unknown ids, or what the returned repository object contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero padding and the resource named up front, so nothing is wasted. However, the brevity is under-specification rather than economy — the second sentence only repeats the identity of the tool in URL form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what a repository record contains and whether lookups fail loudly on missing ids. Neither is present, and there is no indication of relationship to the many repository sub-resources in the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. The URL template at least implies both ids are path-scoped identifiers, but it never clarifies that project_id must be the owning project or what happens if repository_id belongs to a different project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get repository" restates the tool name, and the GET path restates the same fact in REST form. It does tell an agent this fetches a single repository scoped by project and repository id, but it never distinguishes itself from close siblings like list_repositories, get_repository_references, or get_repository_branches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. project membership), and no routing to alternatives such as list_repositories for browsing or get_repository_references for dependency info. The agent must infer all selection logic 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.
get_repository_referencesDRead-onlyIdempotent
Get Repository Refs. GET /project/{project_id}/repositories/{repository_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the endpoint path: it does not say what a 'ref' is, whether the result is paginated, or what happens when the repository has no refs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is two short fragments with zero padding and the resource is front-loaded, but the brevity comes at the cost of substance rather than in service of it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lookup tool with no output schema and no parameter documentation, the description should at minimum say what a ref is (branches/tags/commit SHAs) and the shape of the return. It does neither, leaving the agent guessing about the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither project_id nor repository_id is documented in the schema. The only hint is the embedded path template, which shows both are path segments, but nothing about valid values, ownership, or lookup behavior is conveyed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Get Repository Refs') and appends the raw HTTP path. 'Refs' is Git jargon that is never explained, and it does not distinguish this tool from the sibling list_repository_branches, which plausibly returns overlapping data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or how it relates to alternatives such as get_repository, list_repository_branches, or list_repository_playbooks. The agent is left to 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.
get_scheduleCRead-onlyIdempotent
Get schedule. GET /project/{project_id}/schedules/{schedule_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| schedule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered elsewhere. The description contributes nothing beyond the endpoint path – no note on permission requirements, visibility of the schedule, or what is returned when the id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two fragments, no padding, so nothing is wasted – but the brevity is a symptom of under-specification rather than discipline. Front-loading is fine; there simply is very little content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description would need to describe the returned schedule shape, or at least the auth prerequisite. Combined with 0% parameter documentation and no differentiation from siblings, an agent cannot reliably call this without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the two required integer parameters. The path template only signals that both are identifiers, without saying whether project_id must match the schedule's owning project or what happens on a mismatch. That is below the baseline expected when the schema is undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get schedule" restates the tool name verbatim and adds only the raw HTTP route. The route does confirm a single-schedule fetch scoped to a project, but there is no statement of what the returned schedule contains or how it differs from list_schedules or get_template. This is closer to tautology than a stated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the many siblings in the same family (list_schedules, list_template_schedules, update_schedule, validate_schedule). An agent must infer that this is the per-schedule read from the name alone. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secret_storageCRead-onlyIdempotent
Get Secret Storage. GET /project/{project_id}/secret_storages/{storage_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| storage_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety behavior is covered. The description adds nothing beyond the annotations — no mention of what is returned, whether access is permission-gated, or what happens for a nonexistent id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences, front-loaded and free of padding. Brevity here reflects under-specification rather than disciplined economy, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter documentation, and no annotation gaps closed, the description leaves the agent without knowledge of what a 'secret storage' contains or how to interpret the response. For a lookup tool the minimum bar would include return shape or at least a note that it returns a single storage object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not. The path template hints that project_id and storage_id are both identifiers in a path, but neither's meaning, type, or constraints (both are integers with minimum 1) is explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name and adds the HTTP route 'GET /project/{project_id}/secret_storages/{storage_id}', which implies a single-resource fetch scoped to a project. It does not distinguish this from siblings such as list_secret_storages or get_secret_storage_references, so an agent gets only a vague sense of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus list_secret_storages, get_secret_storage_references, or update_secret_storage. The route implicitly suggests 'use when you have a specific storage_id', but this is never made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secret_storage_referencesCRead-onlyIdempotent
Get Refs. GET /project/{project_id}/secret_storages/{storage_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| storage_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is fully covered elsewhere. The description adds only the raw endpoint path; it says nothing about what a "ref" is, whether results can be large, or whether the storage must exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse fragments with no filler, but the brevity comes from omission rather than economy. The verb phrase is front-loaded, which is the only structural strength.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should have explained what the returned references represent and roughly what shape they take; it does neither. For a lookup tool whose value depends entirely on interpreting "refs," the definition leaves the core question unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries weight, and the URL template does clarify that project_id and storage_id are path-scoped identifiers with a nesting relationship (storage lives under project). The parameter names are self-explanatory integers, so this is adequate but adds little beyond placement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Refs" essentially restates the tool name (get_secret_storage_references), and "Refs" is never expanded into "references to this secret storage." The REST path does pin the resource to a project-scoped secret storage, which lifts it above pure tautology, but an agent still has to guess whether this returns objects referencing the storage or references held by the storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this rather than siblings such as get_secret_storage (the item itself) or the parallel *_references tools. No prerequisites, no exclusions, and no indication of what an agent should do with the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_optionsCRead-onlyIdempotent
get Options. GET /options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and that it is non-destructive, so safety is covered. The description adds nothing beyond that — not what the options are (feature flags, limits, settings), not whether they require admin rights, and not the shape of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but the second sentence ("GET /options") is pure redundancy with the name and adds no information. Brevity here reflects under-specification rather than efficient writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotation detail about content, the description leaves an agent unable to predict what the returned "options" contain or how they relate to set_server_option. Given the large sibling set, more context was warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"get Options. GET /options." restates the tool name and the HTTP verb without saying what an "option" is or what the call returns. It cannot be distinguished from the sibling get_user_options, which by name appears to be the user-scoped counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this versus get_user_options, set_server_option, or get_system_info. The agent must guess that this retrieves server-level configuration options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptionARead-onlyIdempotent
get subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /subscription.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds real value beyond that: an edition/license/permission dependency and the fact that some routes return 404 or empty lists, which is behavior an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the operation and followed by the availability caveat, with no filler. Slightly clipped phrasing ('get subscription' lowercase) but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param read with no output schema, the availability caveat is the key missing piece and it is present. What is absent is any indication of what the returned subscription data looks like, which matters since no output schema exists to describe it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is fully documented, so there is nothing for the description to compensate for; the 4 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('get subscription') plus the canonical endpoint, so the basic operation is identifiable. However, it doesn't say what a subscription object contains or distinguish this from siblings like refresh_subscription, activate_subscription, or delete_subscription, leaving purpose only minimally viable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives conditional context — availability depends on edition, license, and permissions, and Community routes may 404 or return empty — which helps an agent predict failure modes. But it never states when to call this versus refresh_subscription or activate_subscription, so alternative selection 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.
get_system_infoCRead-onlyIdempotent
you must be authenticated to use this. GET /info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description's one genuine addition is the authentication requirement, which is a real operational prerequisite not encoded in annotations, but it says nothing about the nature or scope of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the prerequisite front-loaded, so nothing is wasted. However, the brevity reflects under-specification rather than disciplined editing — the single content sentence adds almost no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description is the only place an agent could learn what this call returns, and it does not say. Given multiple sibling info/introspection tools, an agent cannot predict the response payload or choose this over get_admin_info or get_server_options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies a parameterless GET, and there are no semantics left undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description only restates the tool name as an HTTP endpoint ("GET /info"), without explaining what system information is returned. It does not distinguish this from near-siblings like get_admin_info, get_server_options, get_cluster_status, or ping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a prerequisite ("you must be authenticated"), which is not usage guidance. There is no statement of when to use this versus the many other get_* introspection tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskCRead-onlyIdempotent
Get a single task. GET /project/{project_id}/tasks/{task_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds only the REST path, which implies project scoping but reveals nothing about task state, error behavior, or what is returned; for a task that may still be running, that omission matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, purpose front-loaded, no padding. The REST path adds mild routing context rather than being pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% parameter descriptions, the definition leaves the agent uninformed about the return shape or where to find logs/outputs (get_task_output). For a simple getter it is barely sufficient but clearly under-described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. The endpoint template signals that project_id and task_id are path identifiers, but it gives no format, type, or ID-source detail beyond that hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a single task,' distinct from list-style siblings. It does not, however, distinguish itself from get_global_task, get_task_output, or get_task_raw_output, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of list_tasks, get_global_task, or wait_for_task. The description gives no context or exclusions for choosing among these closely related task tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_outputARead-onlyIdempotent
Get every persisted task log line as structured output; upstream does not support output pagination. GET /project/{project_id}/tasks/{task_id}/output.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world behavior. The description adds the important operational constraint that all persisted lines are returned and upstream does not support output pagination, warning that output is unpaginated. It does not discuss auth requirements or task-state prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one front-loaded sentence plus the endpoint path, with no filler. The no-pagination note earns its place because it affects how the agent should consume the output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read endpoint and annotations carry the safety profile, but there is no output schema and no parameter description coverage. The description covers scope and no-pagination behavior but omits return format and task prerequisites, leaving notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It only echoes project_id and task_id in the endpoint path, adding little meaning beyond the parameter names and their relationship to project and task.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: get every persisted task log line as structured output. The phrase 'as structured output' distinguishes it from the raw-output sibling get_task_raw_output, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage cue is implicit: choose this for structured output rather than raw output. It does not explicitly say when to use it versus get_task_raw_output, nor does it list prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_raw_outputBRead-onlyIdempotent
Get complete task logs as plain text with ANSI escape codes removed. GET /project/{project_id}/tasks/{task_id}/raw_output.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds real value by disclosing the return format and the ANSI-stripping transformation, which matters because there is no output schema. However, it says nothing about the practical traits of a 'complete' log payload, such as whether the size is unbounded or how large outputs are bounded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core behavior (complete logs, plain text, ANSI removed) is front-loaded before the endpoint reference. Nothing needs to be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only tool with two params and no output schema needs the description to convey the return shape, and 'complete task logs as plain text with ANSI escape codes removed' does that minimally. It is incomplete on sibling differentiation and payload-size expectations, which are the remaining risks for an agent calling this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides only names and types. The description partly compensates by embedding the path template GET /project/{project_id}/tasks/{task_id}/raw_output, which ties both required parameters to their roles. It still gives no format hints, such as whether task_id is a numeric ID, and no guidance for invalid or missing IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource: it retrieves a task's complete logs as plain text with ANSI codes stripped. That is specific enough to act on, but it never distinguishes itself from the close sibling get_task_output (or get_task), so an agent cannot tell from this text which one returns raw versus processed output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance. With get_task_output, get_task, and list_task_stages among the siblings, the description should say when raw output is the right choice (for example, for unfiltered console logs), but it offers no routing criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateCRead-onlyIdempotent
Get template. GET /project/{project_id}/templates/{template_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered externally. The description adds nothing beyond the raw HTTP route — no note on what is returned, error behavior for missing IDs, or required permissions. With annotations doing all the work, this is a bare-minimum pass-through.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded and waste-free, but the first is pure tautology and the second is a route string rather than added meaning. Brevity here reflects low content rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema, the description should still convey what a template is and what the response contains. Instead it offers only the endpoint, leaving the agent to guess the return shape and ID provenance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither project_id nor template_id is documented in the schema. The URL template at least shows both are path parameters in that order, which is mild compensating value, but it adds no type, range, or sourcing guidance (e.g., where to obtain template_id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource and the endpoint path clarifies that the lookup is scoped to a project. However, 'Get template' largely restates the tool name, and it does not distinguish this from siblings like get_template_permission or get_template_references. An agent can infer it is a single-resource fetch but gets no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_templates or the references/permission getters that share the template resource. No prerequisites (e.g., needing the numeric IDs from list_templates) are stated, so the agent must infer the usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_template_permissionCRead-onlyIdempotent
Get Template Perm. GET /project/{project_id}/templates/{template_id}/perms/{perm_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| perm_id | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description adds only the REST path, with no information on error behavior (e.g., missing permission), authorization requirements, or what the returned permission object contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler and the intent front-loaded. The only waste is the cryptic abbreviation 'Perm' instead of the full resource name, which trades clarity for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with annotations covering the safety profile, more is still needed: what the response looks like (no output schema), and how it relates to list_template_permissions. As written, an agent knows the address but not the payload or the selection rationale.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry param meaning. The URL template does indicate all three parameters are positional path segments in a project->template->perm hierarchy, which helps slightly, but there is no detail on ID acquisition, formats, or what a perm_id refers to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' plus the endpoint path shows retrieval of a single template permission scoped by project/template/perm IDs. However, the abbreviated 'Get Template Perm.' is ambiguous on its own (perm = permission?) and doesn't distinguish it from the many siblings such as list_template_permissions or get_project_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance at all on when to use this versus list_template_permissions (which would enumerate permissions) or get_project_permissions. The agent must infer single-item retrieval purely from the path template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_template_referencesCRead-onlyIdempotent
Get Template Refs. GET /project/{project_id}/templates/{template_id}/refs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only "GET" and the endpoint path, with no context about what references are returned or any behavioral constraints beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with no filler. However, it is under-specified rather than appropriately concise, and the endpoint line partly repeats the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and annotations cover safety, but with no output schema and no explanation of what template references are, the description is incomplete for an agent trying to call it correctly. It gives route mechanics but not semantic context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it only echoes the path parameters project_id and template_id. It does not clarify what those IDs refer to or add meaning beyond the schema's required integer fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name with "Get Template Refs" and adds only the HTTP route. It does not explain what "template refs" are or distinguish this lookup from get_template or other reference tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_template, get_*_references siblings, or any alternative. The route implies it is a project/template lookup, but the selection context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_template_task_statsCRead-onlyIdempotent
Get Task Stats. GET /project/{project_id}/templates/{template_id}/stats.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive date in YYYY-MM-DD format. | |
| start | No | Inclusive date in YYYY-MM-DD format. | |
| user_id | No | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, so the safety profile is covered. Beyond the raw path, the description discloses nothing about behavior: what dimensions are aggregated, whether optional filters narrow the aggregation, or how large an unfiltered response could be for openWorld datasets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short and front-loaded, which is good, but the second sentence is just a REST path that mostly duplicates the required parameters in the schema rather than adding meaning. Terseness here reads as under-specification, not efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema, and no annotation-level detail about the result shape, the description should explain what the stats response contains and how the optional filters behave. None of that is present, leaving the agent guessing at both inputs and outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%: start/end carry format descriptions but user_id, project_id, and template_id have none. The description does not explain that user_id narrows stats to a single user or that start/end are range filters on the aggregation window — both non-obvious semantics for a stats endpoint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Task Stats" largely restates the tool name, but the appended endpoint path ('/project/{project_id}/templates/{template_id}/stats') does establish that the stats are scoped to a specific template inside a project, which distinguishes it from the sibling get_project_task_stats. It never says what a "stat" is (counts by status, durations, host totals).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_project_task_stats, get_task, list_template_tasks, or list_recent_template_tasks. The agent must infer from the name alone that this aggregates template-level statistics rather than listing task records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_terraform_aliasARead-onlyIdempotent
get terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| alias_id | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real value beyond them by disclosing that some Community-edition routes return 404 or empty lists depending on license and permissions, which is exactly the kind of failure-mode context an agent needs before interpreting an empty response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the operation is front-loaded and the caveat sentence is dense with useful information rather than padding. The lowercase terse opening is slightly under-polished but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with no output schema, the description should at least hint at what an alias record contains, or how to obtain valid IDs. It covers availability and the endpoint but leaves the returned shape and ID discovery to inference, which is a meaningful gap for an agent calling it cold.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all three parameters (project_id, inventory_id, alias_id) are documented only by name and type. The description partially compensates by embedding them in the REST path, which conveys that alias_id is scoped under an inventory under a project, but it adds no format, lookup, or ID-provenance detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get') and resource ('terraform alias') and the REST path makes clear it retrieves a single alias identified by alias_id, which distinguishes it from list_terraform_aliases and from create/update/delete_terraform_alias. It does not explicitly name those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the endpoint shape – fetch one alias by project/inventory/alias ID. The description instead spends its guidance on availability preconditions (edition, license, permissions) rather than telling the agent when to choose this over list_terraform_aliases or get_terraform_state. It never states explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_terraform_stateBRead-onlyIdempotent
get terraform state. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states/{state_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| state_id | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered; the description adds genuinely non-obvious context that availability is gated by Semaphore edition, license, and permissions and that Community routes may return 404 or empty lists. That is real operational intelligence beyond the structured fields, though nothing is said about what the payload contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences plus the endpoint path, with the core action stated first and the availability caveat second. There is no filler; every element carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-resource getter with annotations covering the safety profile, an output schema absent by design, the description adequately covers the call and its failure modes. It falls short on how to obtain the three required IDs and on how this differs from the adjacent terraform-state siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three required integer parameters, so the description carries the full burden. The path template implies the project > inventory > state hierarchy, which adds a little, but it does not explain what a state_id is or how to discover a valid one (e.g., via list_terraform_states).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the name almost verbatim ('get terraform state'), which alone would be a tautology, but the appended REST path clarifies that it fetches one state scoped under a project and inventory. It still never contrasts itself with get_latest_terraform_state or list_terraform_states, so an agent must infer the single-vs-list distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to pick this over get_latest_terraform_state (latest only) or list_terraform_states (enumeration). The availability sentence describes failure conditions rather than selection criteria, so the agent gets no routing signal among the three terraform-state readers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userCRead-onlyIdempotent
Fetches a user profile. GET /users/{user_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds only the HTTP endpoint, with no note on permissions, not-found behavior, or what a 'profile' contains, which is minimal added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and then the endpoint. Nothing is wasted, though the endpoint sentence is mostly redundant for an agent that already sees the schema and annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations and no output schema, the description is minimally viable. However, given many user-related siblings and zero schema coverage on the sole parameter, it leaves too much unsaid about scope, return shape, and differentiation from get_current_user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single undocumented parameter. The endpoint path '{user_id}' weakly signals that the parameter is a user identifier, but it does not clarify whether it accepts numeric ID only, what happens with invalid IDs, or how it differs from usernames.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Fetches a user profile') and even names the underlying endpoint GET /users/{user_id}. It does not distinguish this from nearby siblings such as get_current_user, get_user_options, or list_users, so an agent must infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool rather than get_current_user, get_user_options, or list_users. The only implied usage is that it fetches a profile by ID, leaving the choice among user-related siblings unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_optionsARead-onlyIdempotent
Returns the per-user options of the authenticated user as a key/value map. Keys are returned without the internal user<id>. namespace prefix. Returns an empty object when the user has no stored options. GET /user/options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: it explains that keys are returned without the internal `user<id>.` prefix and that an empty object is returned when no options exist. It stops short of documenting authentication requirements or error behavior, but adds substantial value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core operation and followed by precise return-value details. Every sentence earns its place by clarifying output shape, key formatting, and empty-state behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the burden of explaining the return value, which it does thoroughly: key/value map, prefix stripping, and empty-object fallback. Annotations cover the safety profile, so nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so parameter semantics baseline is 4. The description correctly does not waste space on nonexistent inputs, keeping the focus on return behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns per-user options for the authenticated user. It also clarifies the return shape (key/value map) and scope, which distinguishes it from sibling get_server_options and user detail tools like get_user. An agent can identify the operation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'authenticated user' scope and the read-only nature of the operation, but the description does not explicitly state when to use this tool versus alternatives such as get_user, get_current_user, or get_server_options. It also does not mention pairing with set_user_option for updates. Adequate but with clear gaps in routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_totp_qrDRead-onlyIdempotent
Totp Qr. GET /users/{user_id}/2fas/totp/{totp_id}/qr.
| Name | Required | Description | Default |
|---|---|---|---|
| totp_id | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered structurally. The description adds nothing beyond the endpoint path — no note that it returns sensitive secret/QR data, no auth or permission context, and no statement of what happens when the TOTP entry doesn't exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero filler and the resource named first. It is not bloated, but the brevity comes from omission rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter tool with no output schema and no parameter descriptions, the description should say what is returned (a QR image, a URI, or base64 payload) and any sensitivity caveat. Neither is present, leaving an agent unable to predict the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it only partly does so: the path template shows user_id scopes to a user and totp_id identifies a specific TOTP entry. It adds no format, validity, or error semantics for the two required integer parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is essentially the tool name restated ('Totp Qr') plus a raw HTTP path. The path does reveal the resource hierarchy (a user's TOTP entry), which is marginally more than a pure tautology, but no verb or explanation of what the call actually returns is given.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. Siblings such as enable_user_totp, disable_user_totp, and get_user_options are plausibly related, and the description gives no basis for choosing among them or for knowing what prerequisite state (TOTP enabled?) is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_viewCRead-onlyIdempotent
Get view. GET /project/{project_id}/views/{view_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| view_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond the endpoint path — no note on permissions required, error behavior for missing project/view, or what a "view" contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the resource statement front-loaded. The brevity is efficient even though the content is thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool this could be adequate, but with no output schema the description should at least hint at what a retrieved view returns (template associations, positions, etc.) and how to obtain the view_id. Neither is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both required integer parameters. The endpoint template implicitly maps project_id and view_id to their roles in the path, which is the only semantic help offered; there is no indication of id source (e.g., from list_views) or whether a view_id is globally unique or project-scoped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get view" is essentially a restatement of the tool name; the only added information is the HTTP path, which implies the resource is nested under a project. It does not distinguish the tool from close siblings like list_views, get_workflow, or get_template beyond the resource noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_views (to find a view id) or get_project. No prerequisites, exclusions, or alternative paths are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowARead-onlyIdempotent
Get workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the static hints in the annotations (readOnly, idempotent), the description adds significant operational behavioral details regarding error handling (404 or empty lists) and environmental constraints (license/edition requirements). This is high-value context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is highly concise. Every part of the statement serves a function—either stating the action, the operational caveat, or the API structure. It is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the limited metadata and schema coverage, the description performs well by addressing the most critical practical concerns: operational availability and error modes (404s). It leaves out return structure, but the operational completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. The description only reinforces the technical endpoint structure ('GET /project/{project_id}/workflows/{workflow_id}') and provides no semantic meaning or context regarding what the IDs represent or how they should be formatted beyond what the basic schema implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The purpose is clearly stated as 'Get workflow.' It specifies retrieving a resource identified by IDs. It is clear enough for the agent to understand the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides crucial usage context by detailing external dependencies ('Semaphore edition, license, and permissions'). This is essential guidance for the AI when determining if the tool is usable or if an operational check should be performed first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_runBRead-onlyIdempotent
Get workflow run details. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, so the burden is lower. The description adds genuinely useful context beyond the schema and annotations: availability varies by edition/license, and some routes return 404 or empty lists — a failure mode an agent should anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose, then the availability caveat and route. The route string is somewhat redundant but earns its place by helping interpret 404s.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema and full annotation coverage, the description covers the essential failure behavior. However, it never says what 'details' are returned, leaving the agent without a picture of the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and none of the three required integers (project_id, workflow_id, run_id) are explained. The URL template implies they are path identifiers, which adds marginal value, but it does not compensate for the complete lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get workflow run details') that clearly identifies a single-run read. It does not explicitly distinguish from siblings like list_workflow_runs or get_workflow, but 'details' versus 'list' is enough for an agent to pick the correct one in most cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a caveat about edition/license/permissions but no guidance on when to use this tool versus list_workflow_runs (to discover run IDs) or get_workflow_run_artifacts. An agent must infer the alternative from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_run_artifactsARead-onlyIdempotent
Get merged workflow run artifacts. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: edition/license/permission gating and the fact that Community routes may return 404 or an empty list, which is exactly the failure mode an agent needs to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose then caveats. The trailing endpoint path partially restates the hierarchy already implied by the first sentence, but it is compact enough not to feel wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should hint at what an artifact result looks like (names, links, sizes, merge behavior) and it does not. Safety and availability are covered, but the return shape — the main unknown an agent faces here — is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 3 required params, so the description must compensate. The included endpoint path (project/{project_id}/workflows/{workflow_id}/runs/{run_id}) does clarify the scoping hierarchy of the three IDs, which is useful, but it adds nothing about types, valid ranges, or how to obtain the IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get merged workflow run artifacts', which distinguishes it from siblings like get_workflow_run (run metadata) and get_task_output (task logs). The term 'merged' is left unexplained and slightly muddies what exactly is returned, but the resource is identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a conditional context ('availability depends on edition, license, and permissions; some Community routes return 404 or empty lists'), which is real usage guidance. However, it never says when to choose this over neighboring tools such as get_workflow_run or get_task_output, nor what preconditions to verify first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_projectCDestructiveIdempotent
Left Project. DELETE /project/{project_id}/me.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is mostly covered. The description adds only the HTTP endpoint and does not explain consequences such as loss of access, effect on owned resources, required permissions, or whether the action can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, but the first fragment "Left Project" is grammatically odd and the endpoint restates implementation detail rather than user-facing semantics. It is concise without being especially informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive membership mutation with a single undocumented parameter and no output schema, the description is under-specified. It lacks consequences, authorization context, and sibling differentiation, which an agent needs to invoke it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, project_id, with 0% schema description coverage. The description shows project_id in the path but does not explain its meaning, acceptable project scope, or whether it must correspond to a project the caller belongs to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase "Left Project" is awkward and close to a restatement of the tool name, but the endpoint "DELETE /project/{project_id}/me" clarifies that it removes the authenticated user's membership from a project. It does not distinguish this from siblings like delete_project or delete_project_user, leaving the precise scope only partially clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no comparison to alternatives such as delete_project_user. The endpoint implies a self-removal operation, but the agent must infer when this is appropriate versus other project-membership tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_access_keysCRead-onlyIdempotent
Get access keys linked to project. GET /project/{project_id}/keys.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive; the description only restates the GET verb via the raw endpoint path. It says nothing about pagination, result ordering defaults, or what fields each key entry carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and zero filler. The raw REST path is redundant given the tool name but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description should say what a returned key looks like (id, name, type) and whether results are paginated or capped. None of that is present, leaving real gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (sort and order documented, project_id not), and the description adds nothing beyond the path template. It never explains that 'sort' and 'order' take enum values nor how they interact, so it does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource+scope: 'Get access keys linked to project'. The plural 'keys' plus project scoping distinguishes it from the singular get_access_key sibling, though only implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no mention of the obvious alternative, get_access_key, or the related list_api_tokens. The agent must infer from the plural noun that this is the bulk listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_tokensBRead-onlyIdempotent
Fetch API tokens for user. GET /user/tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is fully covered. The description adds the underlying endpoint (GET /user/tokens), which usefully confirms the tokens are the authenticated user's rather than project-scoped, but it says nothing about whether secret token values are returned, whether results are paginated, or what happens with zero tokens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose, with no filler. It is efficient, though borderline under-specified rather than genuinely terse-and-complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument read tool with full annotation coverage and no output schema, the definition is minimally sufficient to call it. However, an agent still lacks any sense of the response shape (token fields, masked values, ordering), which a one-clause addition could have supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. Nothing in the description is needed to explain arguments, and it correctly implies the scope comes from the authenticated session rather than input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (fetch) and resource (API tokens) scoped to the user, which separates it from create_api_token and delete_api_token in the sibling list. It is clear but does not explicitly say it lists the caller's own tokens rather than tokens of an arbitrary user, which matters since there is no user parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus create_api_token or delete_api_token, and no stated prerequisites or exclusions. Usage can only be inferred from the tool name and the read-only annotation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsCRead-onlyIdempotent
Get apps. GET /apps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered structurally. The description adds only "GET /apps," which effectively restates the read-only nature and contributes no new behavior detail such as result size, pagination, or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded, with zero filler. It is efficient rather than padded, though the terseness borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with rich annotations and no output schema, the essentials are covered. However, an agent still cannot tell whether the list is complete or paginated, or what an app object contains, and the description does nothing to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the empty schema with additionalProperties=false makes that unambiguous; there is nothing for the description to disambiguate. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get apps" names a verb and resource, so the basic intent is legible, and "GET /apps" pins it to a REST endpoint. But with siblings like get_app, update_app, delete_app, and set_app_active in the same namespace, the description never clarifies that this is the collection-level list (or how results relate to get_app), so it stops at minimum viable differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this instead of get_app, or of any prerequisites, scope, or filtering behavior. The agent must infer usage purely from the name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_project_rolesARead-onlyIdempotent
list available project roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles/all.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, yet the description adds real behavioral context beyond them: results vary by Semaphore edition and license, and some routes legitimately return 404 or empty lists. That failure-mode disclosure is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the caveat, then the endpoint. Slight redundancy between "available" and "Availability" but nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema and strong annotations, the description covers the main thing an agent needs to know: that empty/404 responses are normal and not errors. It stops short of describing what fields each returned role contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, project_id, with 0% schema description coverage, but its meaning is obvious from the name and the endpoint path shown in the description. No extra semantics (validation, scope) are added, so it sits at adequate rather than helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("list available project roles") plus the underlying endpoint GET /project/{project_id}/roles/all, which makes the read-catalog nature explicit. It does not, however, distinguish itself from sibling list_project_roles or list_global_roles, which an agent would have to infer from the "available" wording alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about when results may be missing (edition/license/permission constraints, Community routes returning 404 or empty lists), which implies when not to trust the output. But it never states when to choose this over list_project_roles, get_project_role, or list_global_roles, leaving sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cluster_tasksCRead-onlyIdempotent
get Cluster Tasks. GET /cluster/tasks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the safety profile is covered. The description adds only the HTTP path 'GET /cluster/tasks', which conveys nothing about payload shape, pagination, or what a 'cluster task' actually is — minimal added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short and front-loaded, which is good, but the second fragment ('GET /cluster/tasks') largely restates the first rather than adding information, so the brevity comes at the cost of content rather than being earned economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param read tool this could be adequate, but with no output schema the description should at least hint at what cluster tasks are and how they relate to the numerous task-oriented siblings. As written, an agent has no basis for choosing this over list_tasks or list_global_tasks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the schema is trivially complete. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource being fetched ('Cluster Tasks') with a generic 'get' verb, so the agent knows it retrieves cluster tasks. However, it leaves the verb ambiguous against the name's 'list' and never distinguishes it from near-neighbors like clear_cluster_tasks, list_tasks, or get_cluster_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus the many other list/get tools in the family, nor any exclusion such as 'not for task history — use list_recent_tasks'. Usage must be inferred 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.
list_environmentsCRead-onlyIdempotent
Get environment. GET /project/{project_id}/environment.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond restating the HTTP path — no mention of result size, default ordering, pagination, or whether an empty list or error is returned when a project has no environments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short fragments — no waste, but under-specified rather than concise. The endpoint path is arguably filler for an agent that cannot call HTTP routes directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations beyond safety hints, so the description must carry the burden of explaining what a caller gets back. It does not: no mention of return shape, list vs single object, pagination, or behavior on an empty project.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the endpoint path does usefully reveal that project_id is a path parameter. However, sort and order semantics (what "name" sorting means, whether order applies only with sort) are left entirely to the terse schema descriptions, and project_id has no schema description at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get environment. GET /project/{project_id}/environment." names the resource and the underlying endpoint, but the verb conflicts with the tool name (list_environments implies a collection, the description says singular "environment"). A sibling get_environment exists, so an agent cannot easily tell which of the two actually returns multiple environments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus get_environment, create_environment, update_environment or sync_environment. The endpoint path is the only context, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsBRead-onlyIdempotent
Get Events related to Semaphore and projects you are part of. GET /events.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety characteristics are covered. The description adds the scope of events (Semaphore and user's projects) and mentions the underlying GET /events endpoint, but does not describe pagination, return format, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the resource and scope front-loaded. The second sentence ('GET /events.') is somewhat redundant with the verb 'Get' and adds little beyond the endpoint, but does not detract significantly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with rich annotations, the description covers what the tool returns at a high level. However, it omits pagination or ordering behavior and does not help distinguish this tool from closely related siblings, leaving a gap in selection guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and requires no parameter documentation. The baseline for zero-param tools is 4, and the description does not introduce confusing parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('Events') with scope ('related to Semaphore and projects you are part of'). However, it does not differentiate from sibling tools like list_project_events or list_recent_events, leaving ambiguity about which event-listing tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as list_project_events, list_recent_events, or list_recent_project_events. The scope hint ('projects you are part of') implies usage but does not state exclusions or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_rolesARead-onlyIdempotent
list global roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /roles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the bar is lower. The description adds real value beyond them: availability varies by Semaphore edition and license, permission-gated, and some Community routes return 404 or an empty list rather than erroring — exactly the kind of caveat an agent needs to interpret an empty response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose followed by the operational caveat. The trailing 'GET /roles' endpoint is minor redundant noise but does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description arguably should hint at what a role record contains or the shape of the returned list. It covers failure modes well but leaves return-value interpretation to the agent; adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. Schema coverage is fully moot here and the description correctly spends no words on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('list global roles'), which cleanly separates it from the single-item get_global_role and from project-scoped list_project_roles / list_available_project_roles. It is clear what the tool does, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name and the edition/permission caveat; there is no explicit 'use this when you need X instead of list_project_roles'. The agent must infer the choice between the several role-listing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_runnersBRead-onlyIdempotent
Get all global runners. GET /runners.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is fully covered. The description adds only the raw endpoint ('GET /runners'), which gives no behavioral value such as pagination, ordering, or whether all runners are returned at once.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose. The trailing endpoint string is marginal filler but not disruptive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param list tool with full annotation coverage, the safety and input sides are complete. However, with no output schema, the description says nothing about the result shape or whether the list is paginated or filtered, leaving a modest gap an agent may care about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description correctly implies a no-argument call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get all global runners' clearly states it lists global (not project) runners. The global vs. project distinction is inferable from the name and description, distinguishing it from list_project_runners, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for listing global runners, but the description never states when to use it over list_project_runners or get_global_runner (singular), nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_runner_tagsBRead-onlyIdempotent
Get global runner tags. GET /runner_tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds only the HTTP path 'GET /runner_tags', which restates retrieval behavior without adding pagination, response-shape, auth, or scope details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences and front-loads the action. The endpoint mapping is slightly redundant but still useful, and there is no bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter read tool whose annotations already cover safety and idempotency, the definition is minimally adequate. However, with no output schema, it does not describe what the returned tag list looks like or how it relates to global runners.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is little schema semantics to compensate for. The baseline for a no-parameter tool applies, and the description does not introduce unnecessary parameter confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get global runner tags. The word 'global' usefully distinguishes it from the sibling list_project_runner_tags, but it does not explicitly explain the relationship or what a runner tag represents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_global_runners, list_project_runner_tags, or other list/get tools. The description gives no prerequisites, exclusions, or alternative-selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_global_tasksCRead-onlyIdempotent
Get Tasks. GET /tasks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds nothing beyond that — no mention of result volume, pagination, or what a global-scope listing includes, and "GET /tasks" merely echoes the readOnly annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the second sentence ("GET /tasks") is redundant with the first and neither sentence carries substantive information. Brevity here comes at the cost of usefulness rather than from efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description is the only place an agent could learn the return shape and how the global task list differs from sibling listings. It provides none of that, leaving the agent to guess scope and result size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to explain. The empty schema is unambiguous and the description cannot contradict it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Tasks. GET /tasks." largely restates the tool name and repeats the same idea twice as a REST path. It never says what scope of tasks (global vs. project vs. cluster) is returned, so an agent cannot tell it apart from list_tasks, list_recent_tasks, or list_cluster_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this over the several sibling list/get task tools. No prerequisites, no exclusions, no mention of filtering or ordering assumptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_aliasesBRead-onlyIdempotent
Get all aliases for an integration. GET /project/{project_id}/integrations/{integration_id}/aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds the concrete endpoint path, which tells the agent the operation is project-scoped and read-only in REST terms, but says nothing about return shape, pagination, or what an alias contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose, zero filler. The path fragment is terse but earns its place by clarifying scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-integer read tool with full annotation coverage and no output schema, the description is minimally adequate. It still leaves the alias object shape and the distinction from list_project_integration_aliases unstated, which matters given the near-duplicate sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the schema alone documents nothing beyond integer/minimum constraints. The description compensates partially by placing {project_id} and {integration_id} in the path, clarifying that both are path identifiers of the owning project and integration rather than filters — but it adds no format or edge-case detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get/list) and resource (all aliases for an integration), which is more than a restatement of the name. However, it does not distinguish itself from the sibling list_project_integration_aliases, and the name (list_integration_aliases) is at odds with the project-scoped path it cites, which an agent could read as ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_project_integration_aliases (the closest sibling) or create_integration_alias / delete_integration_alias. The agent must infer from the path fragment alone that this is the project-scoped listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_matchersCRead-onlyIdempotent
Get Integration Matcher linked to integration extractor. GET /project/{project_id}/integrations/{integration_id}/matchers.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description contributes the REST endpoint path, which confirms it is a scoped list read, but says nothing about pagination, result size, or ordering for collection endpoints where that matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation before the endpoint. The path is somewhat redundant with the schema and name, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema list tool with two required IDs, the description covers input scoping adequately via the path but leaves the return shape, whether all matchers are returned, and pagination unstated. Annotations carry the safety story, so this is close to adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with two required integer params, so the description must compensate. The path template GET /project/{project_id}/integrations/{integration_id}/matchers does map each parameter to its role (project container vs. integration container), which is genuine added meaning, but the odd phrase "integration extractor" muddies whether integration_id refers to the extractor or its parent integration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb (Get) and resource (Integration Matcher), and the embedded path clarifies it is a collection endpoint under a project/integration. But it uses the singular "Integration Matcher" for a list tool named list_integration_matchers, and never distinguishes it from the sibling get_integration_matcher or list_integration_values, leaving ambiguity about which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no statement about when not to use it, and no naming of an alternative sibling. The only contextual hint ("linked to integration extractor") is oblique and does not tell an agent when this list call is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integrationsCRead-onlyIdempotent
get all integrations. GET /project/{project_id}/integrations.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds the HTTP method and endpoint, which is mildly useful context but not beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasted words, front-loading the purpose before the endpoint. It could be slightly more structured by separating usage context, but it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description does not explain the return format (e.g., what fields each integration has, pagination behavior). It also leaves the required parameter unexplained, making it inadequate for an agent to invoke with full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the project_id parameter is undocumented in the schema. The description only shows it in the endpoint path, providing minimal semantic value (it implies a project identifier is needed) but no explanation of format, constraints, or behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb 'get' and resource 'integrations', and includes the endpoint path. It is distinguishable from most siblings but does not differentiate from similar list tools like list_integration_aliases or list_integration_values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. It simply says 'get all integrations' without mentioning prerequisites, exclusions, or related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_valuesBRead-onlyIdempotent
Get Integration Extracted Values linked to integration extractor. GET /project/{project_id}/integrations/{integration_id}/values.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the GET endpoint and that results are tied to an integration extractor, but it does not add meaningful details such as pagination, permissions, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, front-loads the action and resource, and includes the endpoint without unnecessary filler. Every element is directly relevant to identifying the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool, the description gives enough to locate the endpoint, and annotations cover the safety profile. However, with no output schema and no return-value or pagination context, it remains only minimally complete for an agent deciding how to use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented project_id and integration_id. It only repeats both parameter names in the URL path; it does not explain what values are valid beyond the schema's integer/minimum constraints or clarify how integration_id relates to the extractor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: retrieving Integration Extracted Values linked to an integration extractor. It also gives the exact endpoint, making the purpose clear, though it does not explicitly contrast with the singular get_integration_value or broader list_integrations sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by saying values are linked to an integration extractor and by naming project_id and integration_id, but it gives no explicit when-to-use guidance, prerequisites, or alternative-tool comparison against get_integration_value and list_integrations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inventoriesCRead-onlyIdempotent
Get inventory. GET /project/{project_id}/inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes | ||
| template_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond the path—no mention of pagination, result limits, or what filtering behavior to expect when optional params are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but that is under-specification rather than concision—two fragments that convey almost no information. Including the raw HTTP path is the only concrete detail and it displaces more useful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter list tool with no output schema, the definition leaves the agent without the list semantics, filtering behavior, or ordering conventions it needs. The annotations cover safety but not the operational context this tool requires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40% across 5 parameters, so the description must compensate, and it does not. The filter parameters app, template_id, sort, and order are never mentioned, leaving the agent to infer from bare property names which are filters and which are ordering controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get inventory" essentially restates the tool name and adds only a raw HTTP path. It never says this returns a list of inventories scoped to a project, and with a sibling named get_inventory the description does nothing to distinguish listing from fetching a single inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus get_inventory, list_templates, or the inventory-related create/update/delete siblings. The endpoint path weakly implies project scoping, but no prerequisites or alternative-selection criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_eventsBRead-onlyIdempotent
Get Events related to this project. GET /project/{project_id}/events.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the HTTP GET endpoint, which reinforces the read-only behavior, but it does not disclose pagination, ordering, or return behavior beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences and front-loads the purpose. The endpoint sentence is compact, though it is largely technical detail rather than additional semantic guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with rich annotations and no output schema, the description is minimally sufficient to call the tool. However, it omits pagination behavior and does not clarify how this differs from recent-event sibling tools, leaving meaningful ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single required parameter project_id is only indirectly referenced in the endpoint path. The description does not explain that project_id is a required numeric project identifier or add any meaning beyond the schema's type information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — getting events related to a project — and includes the underlying endpoint. It is clear what the tool returns at a high level, but it does not distinguish itself from sibling tools such as list_recent_project_events or list_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus list_events or list_recent_project_events. The project scope is implied, but no alternatives, exclusions, or use-case conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_integration_aliasesBRead-onlyIdempotent
Get all integration aliases for the project. GET /project/{project_id}/integrations/aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered externally. The description adds only the REST endpoint string, and says nothing about ordering, pagination, or behavior when the project does not exist or has no aliases — modest added value given the low annotation-based bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the operation front-loaded. The second sentence largely restates the first as an HTTP route, which is near-redundant but cheap and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only list endpoint with full annotation coverage and no output schema, the description plus schema is sufficient to invoke it correctly. Only return-shape hints and sibling disambiguation are missing, both minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so project_id (integer, min 1) is undocumented in the schema; the path template '{project_id}' at least confirms the parameter is a project identifier used in the URL. It does not clarify ID-vs-name expectations or any constraints beyond the schema's minimum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all integration aliases') plus the scoping qualifier 'for the project', which implicitly separates it from the global list_integration_aliases. However, it never names that sibling or any other neighbor, so the distinction must be inferred from phrasing alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative. The agent gets no help deciding between this, list_integration_aliases, get_integration, or list_integrations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_rolesBRead-onlyIdempotent
list project roles. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/roles.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely useful context beyond them: results depend on edition, license, and permissions, and some Community routes return 404 or empty lists. That caveat is exactly the kind of pre-call warning an agent needs, though it stops short of describing the returned role objects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the caveat; both earn their place. It is efficient without being padded, though slightly terse relative to the ambiguity it leaves.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description covers the main gotcha (empty/404 responses by edition). But with no parameter documentation and no hint of what a role record contains or whether results are paginated, it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not. The endpoint path implies project_id, but the 'mode' enum ('merge') is unexplained, leaving one of two parameters wholly undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('list project roles') and the endpoint, so the action is unambiguous. However, it does not distinguish itself from the close siblings list_available_project_roles or get_project_role, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_available_project_roles or get_project_role. The availability note explains failure modes rather than selection criteria, leaving the agent to guess among similar role-listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_runnersARead-onlyIdempotent
Returns runners owned by the project together with global runners that have tags. GET /project/{project_id}/runners.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: the result set is a union of project-owned runners and tagged global runners, so an agent won't assume results are confined to the project. It says nothing about pagination or ordering, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the return-set definition; the trailing API route is compact and aids mapping to the REST surface. Nothing is padded, though the endpoint string adds little an agent cannot infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only list tool with full annotation coverage and no output schema, the description gives what an agent needs: what it returns, whose runners, and the inclusion rule for global runners. No critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single project_id parameter is undocumented in the schema. The description supplies the parameter name via the endpoint template 'GET /project/{project_id}/runners', but adds no semantics such as access requirements or what an invalid project yields, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Returns runners owned by the project together with global runners that have tags.' It also defines the scope of the return set, which distinguishes it from a plain runner list. It does not name list_global_runners as the sibling it contrasts with, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this is appropriate (you want the project's own runners plus tagged global ones) but never states when to use list_global_runners or get_project_runner instead. Usage is inferable from scope wording only; no exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_runner_tagsCRead-onlyIdempotent
Get project runner tags. GET /project/{project_id}/runner_tags.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds only the raw endpoint path, which conveys no behavior beyond the name – nothing about whether results are paginated, ordered, or empty when no tags exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no wasted language. However, the second sentence merely restates the HTTP route rather than earning its place with useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool the description is thin: it never says what a 'tag' is in this context (a tag name string returned per runner, or aggregated project-level tags) and there is no output schema to fall back on. An agent cannot predict the shape or emptiness of the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter. The endpoint template implies project_id is a project identifier, but the description never states this is the project whose runner tags are returned, nor whether runners must exist for a meaningful result. With one undocumented parameter, the description should compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get project runner tags'), which is enough to distinguish it from mutation siblings like update_project_runner or delete_project_runner. It does not explicitly differentiate from list_global_runner_tags or list_project_runners, which is the most likely source of confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_global_runner_tags (global scope) or list_project_runners (the runners themselves). The agent must infer from the name alone that this returns tags for a project's runners rather than the runners.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsCRead-onlyIdempotent
Get projects. GET /projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no mention of pagination, result ordering, or whether all projects or only ones the caller can see are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, which is appropriate, but the second sentence ("GET /projects.") conveys nothing an agent can act on and is effectively redundant with the name. Concise but one of the two sentences does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read tool with complete annotations and no output schema, the description is minimally sufficient to invoke it. However, with no output schema the description could reasonably say what is returned (id/name fields) or whether results are paginated, and it does neither.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4: there is nothing for the description to compensate for, and the schema fully covers the (empty) input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get projects" essentially restates the tool name and the raw HTTP route (GET /projects), adding no verb specificity beyond the name. It does not distinguish this list-all operation from the sibling get_project (singular) or list_recent_project_events, so an agent gets no disambiguation signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as get_project for a single project, and no note about filtering or scope. The default assumption (list everything) is left to inference rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_usersCRead-onlyIdempotent
Get users linked to project. GET /project/{project_id}/users.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already specify readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds only the raw HTTP route and says nothing about pagination, default sorting, returned fields, or permission requirements for listing project users.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences are front-loaded and waste no space. The core purpose appears first, with the endpoint as supporting detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally adequate for a simple list endpoint backed by annotations, but it omits return shape, pagination, and any distinction from similar list/get tools. With no output schema, it should do more to describe what a caller receives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The required project_id parameter has no schema description, and the description does not clarify its expected value beyond implying a project context. The sort and order parameters are covered only minimally by the schema enums, and the description does not explain defaults or behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get users linked to a project. The GET endpoint reinforces scope, though it does not explicitly distinguish this from siblings like get_project_user or list_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus get_project_user (single user lookup) or list_users (global listing). The tool name implies listing project members, but no explicit selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_eventsARead-onlyIdempotent
Get last 200 Events related to Semaphore and projects you are part of. GET /events/last.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open world), so the description's job is to add operational context — and it does, disclosing the hard 200-event ceiling and the visibility scope. It does not say whether results are newest-first or whether the 200 cap is a truncation with no pagination path, which would have completed the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and result cap. The endpoint reference is the only marginally expendable element and it is a compact trailing clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, annotation-covered list tool with no output schema, the description supplies the essentials: what is returned, how many, and from which scope. Ordering and truncation behavior are the only meaningful gaps left for an agent deciding whether this view is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to compensate for. The mention of the underlying 'GET /events/last' endpoint reinforces that no filters are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Get') with a precise resource ('last 200 Events') and scope ('related to Semaphore and projects you are part of'), which implicitly separates it from project-scoped siblings like list_project_events and list_recent_project_events. It stops short of naming those alternatives explicitly, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'projects you are part of' implies this is the cross-project, unfiltered recent-activity view, and the 'last 200' cap hints at a quick-glance use case. However, it never states when to prefer list_events or list_project_events instead, leaving the boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_project_eventsDRead-onlyIdempotent
get Last Events. GET /project/{project_id}/events/last.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only the HTTP route and nothing about what 'last' means, result count, ordering, or pagination, which is a significant gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the second sentence merely restates the endpoint, which adds little value. The brevity comes at the cost of necessary detail rather than from efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one required parameter, no output schema, and several similar sibling list tools, the description should clarify scope, recency semantics, and differentiation. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema only supplies an integer type with minimum 1. The description does not explain that project_id is the project whose events are returned, why it is required, or whether the events are project-scoped versus global, so it does little to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'get Last Events' and gives the endpoint path, which identifies a read of recent project events, but 'Last Events' is undefined (how many? ordering? since when?). It does not distinguish this tool from sibling tools like list_project_events, list_events, or list_recent_events, leaving the agent unable to tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_project_events or list_recent_events, no prerequisites, and no conditions. The description only repeats the tool name and HTTP route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_tasksBRead-onlyIdempotent
List recent tasks, newest first. Use count and before (the last task id) for cursor pagination; the response X-Has-Next header indicates more pages. GET /project/{project_id}/tasks/last.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| limit | No | ||
| before | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond them: newest-first ordering, cursor pagination via 'before', and the X-Has-Next response header. It is silent on permissions and on what a returned task contains, and the presence of both 'count' and 'limit' in the schema is left unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: ordering and endpoint first, then the pagination contract. Everything is front-loaded and each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the mention of the X-Has-Next header is valuable and covers the pagination return signal. However, the unresolved count/limit duplication and the absence of any scope statement versus list_tasks leave meaningful gaps for an agent choosing and calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains 'before' as the last task id and references 'count', but never addresses 'project_id' or, more importantly, the duplicate 'limit' parameter that mirrors 'count' — leaving the agent unsure which to send or whether they interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb and resource ('List recent tasks, newest first'), which is more specific than a generic list. It does not, however, differentiate itself from close siblings such as list_tasks, list_recent_template_tasks, or list_cluster_tasks, so the agent must infer the distinction from the words 'recent' and 'newest first' alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to paginate but never states when this tool should be chosen over list_tasks or how it differs in scope. Usage is implied by 'recent' rather than stated as an explicit condition with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_template_tasksARead-onlyIdempotent
List recent tasks, newest first. Use count and before (the last task id) for cursor pagination; the response X-Has-Next header indicates more pages. GET /project/{project_id}/templates/{template_id}/tasks/last.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| limit | No | ||
| before | No | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: result ordering is newest-first, pagination is cursor-based via the last task id, and continuation is signalled by an X-Has-Next header. That header contract is exactly the kind of response-side detail annotations cannot convey. It falls short of 5 because it omits defaults, what happens when no cursor is supplied, and what fields each task carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then pagination mechanics, then the underlying route. Nothing is redundant and each sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool whose safety profile is already covered by annotations, the description covers pagination adequately. But with no output schema and no parameter descriptions, an agent still lacks the response shape, the meaning of 'recent', default page size, and any resolution of the count/limit duplication.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden, and it does explain count as page size and before as the last task id cursor. However, the 'limit' parameter is never mentioned and its relationship to count (apparently a duplicate) is unresolved, which is a real ambiguity for an agent filling the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List recent tasks, newest first') and grounds it in an endpoint scoped to /project/{project_id}/templates/{template_id}/tasks/last, so the template scoping is implied. It does not explicitly distinguish itself from close siblings like list_template_tasks, list_recent_tasks, or list_tasks, leaving that inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance for pagination — use count and before (the last task id) and watch the X-Has-Next header. But it offers no guidance on when to choose this over list_template_tasks or list_recent_tasks, which is the more consequential selection decision given the crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_repositoriesCRead-onlyIdempotent
Get repositories. GET /project/{project_id}/repositories.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds only the raw endpoint path, with nothing about pagination, result ordering defaults, or the fact that all repositories in the project are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no padding. The endpoint restatement is mildly redundant but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter listing tool with no output schema, the description leaves out scoping behavior, pagination, sort/order semantics, and return shape. An agent could invoke it, but not confidently predict what it gets back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description says nothing about project_id, sort, or order beyond echoing the path template. With schema description coverage at 67%, project_id is undocumented in both the schema and the description, and the description does not compensate by explaining sorting or ordering behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('repositories') plus the underlying endpoint, which reads as a project-scoped listing. It does not explicitly differentiate itself from the sibling get_repository (singular) or list_repository_branches, but the plural resource makes the intent clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when to prefer get_repository or list_repository_branches, and no stated prerequisites such as project membership or permissions. The agent must infer usage 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.
list_repository_branchesCRead-onlyIdempotent
Get Repository Branches. GET /project/{project_id}/repositories/{repository_id}/branches.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond a raw endpoint string — no note on pagination, result ordering, or what happens with invalid IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding or redundancy. It is concise but partly because it says so little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter tool with zero schema descriptions and no output schema, the description leaves the agent without any explanation of the inputs or the shape of the result. Annotations carry the safety story, but the semantic gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does not: neither project_id nor repository_id is explained. The embedded path template does at least show where each ID is used, which is marginally better than nothing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Repository Branches" restates the tool name and adds only the modest clarification that branches belong to a repository. The HTTP path hints at the resource hierarchy but the description never states what the operation actually returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings such as get_repository or list_repositories, and no prerequisites or pagination/scope notes. 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.
list_repository_playbooksCRead-onlyIdempotent
Get Repository Playbooks. GET /project/{project_id}/repositories/{repository_id}/playbooks.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | ||
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description contributes only a REST path, which adds no behavioral insight: no mention of pagination, return shape, whether playbooks are filtered by branch, or what an empty result means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding, but the second sentence merely restates the structure already implied by the parameter names, so little of the brevity is spent on useful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% schema coverage, the description is the only source of semantics, and it omits what a playbook is, what the response contains, and how branch scoping works. Inadequate for a 3-parameter retrieval tool even granting that annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, yet it only surfaces project_id and repository_id via the URL template. The optional 'branch' parameter is never mentioned, so the agent has no idea whether omitting it returns all branches or a default branch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb ('Get') and a resource ('Repository Playbooks'), but 'playbook' is never defined and the description does nothing to distinguish this from siblings like get_repository, list_repository_branches, or get_repository_references. The agent knows it is a retrieval call scoped to a repository, which is the minimum viable level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus list_repositories, get_repository, or list_repository_branches. Nothing states prerequisites, whether a repository must exist, or what the optional branch parameter is for. The agent must infer everything from the endpoint path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schedulesCRead-onlyIdempotent
Get Project Schedules. GET /project/{project_id}/schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. Beyond restating the endpoint path, the description adds nothing about return contents, pagination, or ordering, so it contributes little behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The REST path is somewhat redundant with a well-formed MCP tool definition, but it does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with annotations covering safety, this is nearly enough. Missing is any hint of what the result contains (fields returned, whether inactive schedules are included) or how it relates to the sibling list_template_schedules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required integer parameter with 0% schema description coverage, so the description should compensate. The embedded path '/project/{project_id}/schedules' implicitly confirms that project_id identifies the project whose schedules are listed, but it adds no constraints or meaning beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' plus 'Project Schedules' identifies the resource as schedules scoped to a project, and the REST path reinforces that. However, it never says this returns a list of schedules or how it differs from the close sibling list_template_schedules, leaving the agent to infer scope from the fragment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which alternative to pick. The sibling set includes list_template_schedules and get_schedule, and the description gives no guidance for choosing among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_secret_storagesCRead-onlyIdempotent
Get Secret Storages. GET /project/{project_id}/secret_storages.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered elsewhere. The description's only added behavior is the HTTP path, which reveals project scoping but says nothing about pagination, result size, permissions required, or what a secret storage object contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource, and no filler. The endpoint sentence is terse and mildly useful, though it duplicates information an agent could infer from the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what is returned, and it does not — no mention of the fields in a secret storage entry, list shape, or pagination. For a listing tool in a family of related secret-storage tools, this leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 0% schema description coverage, so the schema offers only a type and minimum. The description's path template ({project_id}) at least tells the agent that project_id is a path segment scoping the listing to a project, but adds nothing about valid values or what happens for inaccessible projects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get Secret Storages" names the resource and the plural implies a collection listing, and the endpoint path confirms it is a project-scoped GET. But the phrasing largely restates the tool name and never distinguishes this list operation from the sibling get_secret_storage (singular) or get_secret_storage_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_secret_storage or get_secret_storage_references. There is no mention of pagination, filtering, or whether an empty project returns an empty list, so the agent must infer everything about selection and result handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_ansible_errorsCRead-onlyIdempotent
Get Ansible Task Errors. GET /project/{project_id}/tasks/{task_id}/ansible/errors.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the description needn't re-state safety. It adds nothing beyond them: no mention of response shape, whether an in-progress task returns partial errors, or empty-result behavior. The endpoint path is corroboration, not new behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded fragments with no padding — the purpose is the first thing read. The terseness borders on under-specification rather than waste, which keeps it just below 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotation-derived detail about return values, the description leaves the agent guessing what 'errors' contains and in what format. For a retrieval tool with two opaque integer IDs, that is a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither parameter is documented anywhere except the URL template in the description, which implies project_id and task_id are path segments. That is a marginal gain, but it doesn't say what a task_id refers to (job vs. Ansible task) or what happens with an invalid pair.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get Ansible task errors) and even includes the exact endpoint, which distinguishes it from siblings like list_task_stages or list_task_ansible_hosts. It falls short of 5 because 'errors' is never defined (per-host failures? play recap? parsing errors?).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of get_task_output, get_task_raw_output, or list_task_ansible_hosts, all of which are plausible alternatives in the sibling set. The agent must infer the choice from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_ansible_hostsCRead-onlyIdempotent
Get Ansible Task Hosts. GET /project/{project_id}/tasks/{task_id}/ansible/hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description adds nothing beyond that—no mention of pagination, empty results for pending tasks, availability only after a certain task stage, or permissions. The endpoint path is the only marginal addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero filler, and the resource is front-loaded before the endpoint. The brevity is efficient rather than padded, though it edges toward under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full annotation coverage and no output schema, the description does not need to explain return values or safety. Still, it leaves the agent without any sense of the response shape or failure modes, which a single added sentence could have fixed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both required integer parameters, so the description carries the full burden—but it only echoes the path placeholders {project_id} and {task_id} without explaining valid values, whether the task must belong to the project, or what the minimum-1 constraint implies. It adds essentially no meaning beyond the schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a generic verb 'Get' with the resource 'Ansible Task Hosts', which narrowly restates the tool name. The REST endpoint path confirms it returns hosts associated with a specific task, but it never explains what a 'host' means here (inventory hosts targeted by the Ansible run) or how it differs from the sibling list_task_ansible_errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, no prerequisites, and no pointer to alternatives such as list_task_stages, list_task_ansible_errors, or get_task. The agent must infer the use case 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.
list_tasksARead-onlyIdempotent
List up to 1000 project tasks. Use list_recent_tasks or list_recent_template_tasks for supported cursor pagination. GET /project/{project_id}/tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| order | No | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description's job is to add beyond that. It does so by disclosing the 1000-task cap and the lack of cursor pagination, which are actionable constraints. It stops short of describing the response shape or sort ordering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, with the capability and its hard limit front-loaded before the sibling routing hint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Read-only tool with no output schema, so the description should convey the return shape and sorting semantics. It covers the size cap and pagination alternative but leaves the two sort-related parameters and the response contents unaddressed. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for three parameters. The description only implies project_id via the path; it says nothing about what 'sort' accepts or how 'order' interacts with it, so two parameters remain undocumented in both schema and text. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ... project tasks') plus the scope cap of 1000, which distinguishes it from the unbounded/unpaginated siblings. The endpoint path reinforces the project-scoped nature. An agent can immediately tell this apart from list_recent_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to list_recent_tasks or list_recent_template_tasks when cursor pagination is needed, implying this tool is not paginated. That is a concrete when-to-use-which rule rather than vague guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_stagesCRead-onlyIdempotent
Get Task Stages. GET /project/{project_id}/tasks/{task_id}/stages.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, and the description adds no meaningful behavioral context beyond repeating GET. It does not mention return format, pagination, permissions, or error behavior, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded fragments with no filler. The endpoint line is somewhat redundant with the tool name but still useful for confirming path structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with two required parameters and no output schema, the description is too minimal. It omits what task stages are, what the response contains, and any usage context, relying almost entirely on the annotations for safety information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The endpoint path shows that project_id and task_id are path parameters, but the schema has 0% description coverage and the description provides no further meaning about either ID. It does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'Get' and the resource 'Task Stages', and the REST path clarifies that it fetches stages for a specific task under a project. However, it largely restates the tool name and does not explain what a stage represents or distinguish the tool from nearby task-related endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get_task, list_tasks, list_task_ansible_errors, or list_task_ansible_hosts. The agent must infer usage entirely from the name and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_template_permissionsCRead-onlyIdempotent
Get Template Perms. GET /project/{project_id}/templates/{template_id}/perms.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds nothing beyond restating the REST endpoint path, disclosing no pagination, ordering, or return-shape behavior for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no filler, so nothing is wasted, but the brevity is under-specification rather than economical expression – the whole description is essentially the tool name plus a URL.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter list tool with no output schema and no annotation gaps, the description should at minimum clarify that it returns all permission entries for a template and how that differs from the single-permission getter. It does neither, leaving an agent with no basis to choose between siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – neither project_id nor template_id has a description. The endpoint path hints both are path identifiers scoped to a project and template respectively, which is marginal, but there is no statement about what a template ID refers to, ownership requirements, or any constraint beyond the schema's minimum:1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource ('Get Template Perms') is identifiable, but the abbreviation 'Perms' is terse and the description never distinguishes this list operation from the sibling get_template_permission (singular) or create/update/delete_template_permission. An agent must infer the list-vs-single distinction from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, no mention of the singular get_template_permission alternative. The only usage signal is the implicit 'this is a read' from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesCRead-onlyIdempotent
Get template. GET /project/{project_id}/templates.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | ||
| sort | No | sorting name | |
| order | No | ordering manner | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the endpoint path — no pagination, no result-size expectations, no sorting semantics beyond what the schema states. It also does not clarify whether this returns all templates or only ones visible to the caller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences with no padding, which is good, but the brevity comes at the cost of substance — the first sentence is misleading and the second is a raw path that duplicates nothing useful for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list operation with four parameters, no output schema, and no pagination metadata, the description should explain filtering, ordering, and return shape. It covers none of these, leaving the agent to infer behavior entirely from the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: sort and order carry descriptions, but app and the required project_id are undocumented in both schema and description. The description never mentions the app filter or the sort/order combination, so it adds nothing beyond the schema and leaves half the parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Get template' (singular) while the tool name and the endpoint GET /project/{project_id}/templates indicate a collection listing. The verb is imprecise and no scope or sibling differentiation is offered, so an agent cannot tell this apart from get_template or list_view_templates from the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given; the only context is the raw HTTP path. There is no indication of how this differs from get_template, list_template_permissions, or list_template_tasks, all of which are plausible alternatives in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_template_schedulesCRead-onlyIdempotent
Get Template Schedules. GET /project/{project_id}/templates/{template_id}/schedules.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only the endpoint path and no behavioral context such as return format, pagination, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, but it consists of a name restatement plus a raw endpoint. It is concise without being informative, and the endpoint line is somewhat redundant rather than explanatory.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with two required path parameters and no output schema, the description should at least indicate what is returned or how results are ordered. It provides only the endpoint, leaving the agent with little beyond the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters rely entirely on names. The URL path confirms that project_id and template_id are path parameters, which adds minor meaning, but it does not explain constraints, format, or expected values beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Get Template Schedules') and adds the exact endpoint path, making the scoped purpose understandable. It does not explicitly distinguish this from the sibling list_schedules or explain what a template schedule is, which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_schedules or get_schedule. The endpoint path implies it fetches schedules for a specific template, but no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_template_tasksARead-onlyIdempotent
List up to 1000 project tasks. Use list_recent_tasks or list_recent_template_tasks for supported cursor pagination. GET /project/{project_id}/templates/{template_id}/tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| order | No | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world. The description adds a genuinely useful behavioral fact annotations do not cover: a hard 1000-result cap and the absence of cursor pagination. It does not say whether results are truncated or error at the limit, which would complete the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: scope and cap first, pagination escape hatch second, endpoint third. Zero filler and correctly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no parameter documentation, so the description needs to be more self-sufficient. It covers scope, result cap, and alternatives, but leaves the return shape (what a task object contains) and the sort/order parameters unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. The endpoint path implies project_id and template_id, but 'sort' and 'order' are never mentioned — and 'sort' is a free-form string with no enum, so the schema offers no clue either. Half the parameters remain opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List ... project tasks') and pins the scope with the endpoint path /project/{project_id}/templates/{template_id}/tasks, which is what actually tells an agent this is template-scoped. The phrase 'project tasks' is slightly at odds with the tool name list_template_tasks, but the endpoint disambiguates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to list_recent_tasks and list_recent_template_tasks when cursor pagination is needed, implying this tool is for flat up-to-1000 retrieval. No explicit when-not conditions beyond that, but the alternative routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_terraform_aliasesARead-onlyIdempotent
list terraform aliass. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/aliases.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description adds valuable caveats about edition, license, permissions, and Community 404/empty-list responses that are not captured by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the purpose. The availability caveat and endpoint are useful, though the typo 'aliass' and raw endpoint notation slightly reduce polish.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list endpoint with rich annotations and no output schema, the description covers purpose, access caveats, and the route. It could do more on parameter meaning or pagination, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It does so only partially by exposing the GET path with project_id and inventory_id as path parameters, but it does not explain their meaning or constraints beyond their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing Terraform aliases. This is clearly distinct from siblings such as get_terraform_alias, create_terraform_alias, and list_terraform_states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes availability constraints and possible 404/empty-list responses, which helps set expectations. However, it does not explicitly say when to use this tool instead of get_terraform_alias or how it relates to list_terraform_states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_terraform_statesARead-onlyIdempotent
list terraform states. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/inventory/{inventory_id}/terraform/states.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world behavior, so the bar is lower. The description adds genuinely non-schema information: that results depend on Semaphore edition/license/permissions and that Community routes may return 404 or empty lists, which shapes how an agent should interpret a failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose first and caveat second, with no filler. The raw endpoint path is somewhat redundant for an agent but does anchor the parameter roles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description covers failure modes but says nothing about what the collection contains (state metadata? per-inventory) or pagination/bounding. Adequate but leaves an agent guessing at the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. The path template communicates that both project_id and inventory_id are path identifiers scoping the listing, which adds some meaning, but there are no format, validation, or ordering details beyond the integer + minimum 1 in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('list terraform states') and the REST path pins down the collection scope (per-inventory). It does not distinguish itself from siblings like get_latest_terraform_state or get_terraform_state, which an agent must infer from the names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition/license/permissions, possible 404 or empty list) implicitly tells the agent when calls may fail, but there is no explicit guidance on when to use this versus get_latest_terraform_state or get_terraform_state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersBRead-onlyIdempotent
Fetches all users. GET /users.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds only the underlying endpoint ('GET /users'), and says nothing about whether results are paginated, roughly how many records come back, or what access level is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no filler prose. The trailing 'GET /users' is mildly redundant for an agent that cannot make raw HTTP calls, but it costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the only place an agent could learn the shape of the response (user records, identifiers, fields), and it does not say. For a simple zero-parameter list tool this is a tolerable but real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is closed and empty, matching the description's parameterless framing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetches all users'), and the word 'all' implicitly contrasts with the single-user scope of get_user and the project-scoped list_project_users. It stops short of naming those siblings explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_user, get_current_user, or list_project_users, and no mention of prerequisites such as admin privileges. The agent must infer that this is the global, unfiltered listing from the word 'all' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewsCRead-onlyIdempotent
Get view. GET /project/{project_id}/views.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety needs no restating. The description adds nothing beyond the endpoint string: no mention of whether the whole collection is returned, ordering, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short with no padding, but the first sentence is ambiguous rather than front-loaded information, and the endpoint fragment is doing most of the work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single required param and no output schema, so little is required, yet the core ambiguity (list vs. single, project scope, what is returned) is left unresolved for a tool that collides with two sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only echoes {project_id} inside a path template. It adds no meaning about what the ID scopes (project-level views) or that it is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get view" restates the resource but uses singular phrasing for a tool named list_views and sits alongside a real get_view sibling, so the agent cannot tell whether this retrieves one view or enumerates all views in the project. Only the raw endpoint suffix hints at the collection semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus get_view or list_view_templates, and no prerequisites or exclusion conditions. The project-scoped path is the sole implicit cue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_view_templatesCRead-onlyIdempotent
Get View Templates. GET /project/{project_id}/views/{view_id}/templates.
| Name | Required | Description | Default |
|---|---|---|---|
| view_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds only a raw REST endpoint, with no word on whether results are paginated, filtered, or scoped/inherited relative to the view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences with the resource named first and the endpoint second. Nothing is padded, though the bare endpoint string is somewhat redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and annotations are present, but the description still fails to convey what gets returned (template objects? permissions? descriptions?) or how results relate to the view. For a tool with zero schema documentation, that leaves an agent guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. The endpoint path does at least map project_id and view_id to project and view scopes, but neither parameter's meaning (e.g., what a view is, whether IDs must exist) is explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' plus 'View Templates' identifies the resource, and the endpoint path clarifies these are templates associated with a specific view. However, it never states what a view template is or how it relates to the sibling list_templates / list_views tools, so an agent cannot easily distinguish it from those. Vague purpose overall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus list_templates, get_template, or list_views, and no preconditions stated. The agent must infer the use case 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.
list_workflow_run_approvalsARead-onlyIdempotent
Get workflow run approvals. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/approvals.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds non-obvious operational context: edition/license/permission dependencies and the possibility of 404s or empty lists on Community. It does not describe pagination or response shape, but for this low-complexity read endpoint the added warning is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus an endpoint path; the primary purpose and availability caveat are front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only three required path parameters, no output schema, and annotations covering safety traits, the description supplies the crucial availability caveats. A brief note on return contents would make it fully complete, but nothing essential for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The REST path template clarifies the hierarchical roles of project_id, workflow_id, and run_id, but it does not explain formats, constraints, or identification details beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get workflow run approvals') and backs it with the exact REST path. This clearly distinguishes it from mutation siblings like resolve_workflow_approval and from list_workflow_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds useful context that availability depends on edition, license, and permissions, and that Community routes may 404 or return empty lists. However, it never states when to choose this tool versus resolve_workflow_approval or other run-related tools, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflow_runsBRead-onlyIdempotent
Get workflow runs. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows/{workflow_id}/runs.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real behavioral detail beyond that: access is contingent on edition/license/permissions and some routes silently return empty lists or 404, which an agent must anticipate. What it omits is response shape and pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action first and the caveat second; the trailing endpoint path is compact and reinforces the parameter mapping. No filler, though the endpoint string is somewhat redundant for an agent that already has the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say at least something about what a run record contains or how results are paginated/ordered; instead it only mentions that lists may be empty. The permission/edition caveat is the strongest completeness contribution, so the definition is adequate but leaves notable gaps for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it only partially does so via the endpoint template GET /project/{project_id}/workflows/{workflow_id}/runs, which clarifies that both are path identifiers in a project→workflow hierarchy. It adds no format, range, or lookup guidance beyond that structural hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get workflow runs" names the resource but uses a weak generic verb and does not distinguish this list operation from the sibling get_workflow_run (single run) or list_workflow_run_approvals. An agent can infer it enumerates runs, but the description never states whether it returns all runs, recent runs, or filtered sets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition, license, permissions, 404s or empty lists on some Community routes) is genuinely useful context for deciding whether to call this at all. However, it gives no guidance on when to prefer this over get_workflow_run or list_workflows, so sibling selection 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.
list_workflowsBRead-onlyIdempotent
Get workflows. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. GET /project/{project_id}/workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior beyond that: results depend on edition/license/permissions and may silently come back as an empty list or 404 rather than an error, which an agent must know to interpret null results. No return shape or pagination details, though.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the caveat front-loaded before the endpoint, no filler. Slightly compressed to the point that the listing semantics are left implicit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only list tool with no output schema, so the description should at least signal what comes back or whether results are paginated. It covers availability risk but not return shape or ordering, leaving a meaningful gap for an agent that needs to consume the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, so the schema gives only type and minimum. The description partially compensates by exposing the route GET /project/{project_id}/workflows, which implies project_id scopes the listing to one project, but it adds nothing about valid values, format, or behavior for invalid IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get workflows" names the resource and the plural hints at a listing, but it essentially restates the tool name rather than stating a distinct verb+scope. It never distinguishes this from get_workflow (single) or list_workflow_runs, both of which sit right next to it in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition, license, permissions) and the warning that some Community routes return 404 or empty lists is useful context for when this call will succeed. However, there is no guidance on when to pick this over get_workflow or list_workflow_runs, and no prerequisites for project_id are stated beyond the endpoint path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingBRead-onlyIdempotent
PING test. GET /ping.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered externally. The description adds the HTTP verb/path, implying a lightweight, side-effect-free request, but says nothing about authentication requirements, rate limits, or what the result signifies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with no filler, and the identifying information is front-loaded. It is arguably too terse to be maximally useful, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output-schema ping tool the bar is low, but the description omits what a successful or failed ping indicates to the agent, which is the main thing a caller needs to interpret this tool's result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline of 4 applies. The description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies this as a ping/connectivity test and names the HTTP endpoint (GET /ping), which tells the agent it is a liveness probe rather than a data fetch. However, 'PING test' largely restates the tool name, and it does not say what a successful response actually confirms (server reachable, auth valid, etc.). It is distinguishably the only health-check tool among the siblings, but the purpose is only vaguely specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus normal API operations — e.g., to validate connectivity or credentials before a series of calls — nor any note on when not to use it. The agent must infer its intended role entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_subscriptionADestructive
refresh subscription. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /subscription/refresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent already knows this is an irreversible mutation. The description usefully adds the edition/license/permission gating and the 404/empty-list failure modes, but never says what 'refresh' actually mutates or what state gets replaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action, followed by the caveat and the route. Slightly telegraphic phrasing ('refresh subscription.' lowercase fragment) but no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a call with no inputs and no output schema, the main missing piece is the effect: what changes after a refresh and how the caller can tell it succeeded. The availability and 404 caveats are a genuine plus, but the core mutation is left opaque.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters and 100% schema coverage, so there is nothing for the description to disambiguate. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('refresh subscription') and grounds it with the underlying route POST /subscription/refresh, which distinguishes it from get_subscription, activate_subscription, and delete_subscription. It does not explicitly contrast with activate_subscription, which is the nearest ambiguous alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition/license/permissions, possible 404 or empty lists on Community) gives useful context for when the call can succeed, but nothing says when to prefer refresh over activate_subscription or get_subscription. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regenerate_global_runner_registration_tokenADestructive
Regenerate the one-time registration token of an unregistered global runner. POST /runners/{runner_id}/registration-token.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds the precondition that the runner must be unregistered, which is genuine value, but it does not state that regeneration invalidates the prior token or otherwise explain the destructive consequence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the purpose front-loaded and no filler; the endpoint reference is the only additional detail and it is useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive, non-idempotent mutation with no output schema should say what the operation returns (a new token) and what happens to the old one. The precondition is captured, but the return and side-effect behavior are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 0% schema description coverage, so the description should compensate. The embedded endpoint POST /runners/{runner_id}/registration-token does clarify that runner_id is the runner's identifier in the path, but adds nothing about format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Regenerate) and resource (one-time registration token of an unregistered global runner). The 'global' qualifier implicitly distinguishes it from the close sibling regenerate_project_runner_registration_token, but the alternative is never named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'unregistered' qualifier implies a precondition for use, but there is no explicit when-to-use vs when-not guidance and no reference to the project-runner variant. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regenerate_project_runner_registration_tokenADestructive
Regenerate the one-time registration token of an unregistered project runner. POST /project/{project_id}/runners/{runner_id}/registration-token.
| Name | Required | Description | Default |
|---|---|---|---|
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful context — the token is one-time and only applies to runners that are not yet registered — but it omits what regeneration does to any existing token and whether auth/permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and its critical precondition come first, the routing detail second. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating, non-idempotent tool with no output schema, so the description should say what comes back (the new token) and what happens on failure or to the prior token. The precondition is covered; the return and side-effect story is not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does by embedding the endpoint path POST /project/{project_id}/runners/{runner_id}/registration-token, which clarifies the role of both parameters, but adds no constraint or format detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (regenerate) plus resource (one-time registration token) and scope (unregistered project runner), which is enough to separate it from regenerate_global_runner_registration_token at the 'project' vs 'global' level. It never names the sibling explicitly, so differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'of an unregistered project runner' implies a precondition but doesn't state when an agent should call this versus creating a runner, fetching a token elsewhere, or using the global variant. Usage is inferred, not instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_taskCDestructive
Reject Task. POST /project/{project_id}/tasks/{task_id}/reject.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already state destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. The description adds only an HTTP endpoint and does not explain what gets rejected, whether the rejection is reversible, what permissions or task states are required, or what side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded, with no wasted filler. However, for a destructive, non-idempotent mutation, this level of terseness is under-specification rather than effective conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has two required parameters, no output schema, and destructive annotations, so the description should carry more behavioral and usage context. It provides only a restated name and endpoint, leaving critical information about task rejection semantics, preconditions, and effects entirely absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only places project_id and task_id in a URL path. It does not clarify that project_id identifies the project and task_id identifies the task within it, nor any constraints beyond what the schema already declares as integer minimum 1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says only "Reject Task. POST /project/{project_id}/tasks/{task_id}/reject." This largely restates the tool name and gives an HTTP endpoint, without explaining what rejecting a task actually means, what state it applies to, or how it differs from siblings like confirm_task, stop_task, or delete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use reject_task versus confirm_task, stop_task, delete_task, or wait_for_task. The description provides no prerequisites, exclusions, or decision criteria, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_workflow_approvalBDestructive
Resolve workflow approval. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/approvals/{node_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| run_id | Yes | ||
| node_id | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing the edition/license/permission gating and that some routes 404 or return empty lists. It does not spell out that resolving commits an approve/reject decision irreversibly, which matters given destructiveHint=true and idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded: the action comes first, then the caveat, then the endpoint. The endpoint string and the string-fields note are slightly terse but earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists and the tool is a destructive mutation with five undocumented parameters. Edition/permission caveats are covered, but the meaning of the path identifiers and the effect of the status value are absent, leaving gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It only says to supply API fields in the body and that JSON-encoded string fields stay strings; the four path identifiers (project_id, workflow_id, run_id, node_id) and the status enum are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resolve workflow approval') and pins it to a concrete POST endpoint, which clearly separates it from the read-only sibling list_workflow_run_approvals. It stops short of saying explicitly that it approves or rejects a pending approval node.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a useful availability constraint (edition, license, permissions, 404/empty-list behavior on Community), which tells the agent when the call may fail. However, it never states when to choose this over alternatives such as reject_task or what precondition (a pending approval) must hold.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_projectCDestructive
Restore Project. POST /projects/restore. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true the key facts are whether an existing project is overwritten, whether the restored project gets a new ID, and whether the caller needs admin rights — none of which are disclosed. The one piece of added behavior, 'JSON-encoded string fields must remain strings', is useful payload guidance but does not compensate for the missing destructive-operation semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource and endpoint, with no padding. The opening fragment duplicates the title, but everything else earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with a single deeply nested body and no output schema, the description is far too thin: it omits overwrite behavior, success/failure response, and the relationship to get_project_backup. The payload-type caveat is the only element that addresses the actual complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It partially does by telling the agent to supply API fields in the body and flagging that string-typed fields carrying JSON must stay strings (survey_vars, arguments, inventory), which is genuinely non-obvious. It still never says the body is a ProjectBackup shape, which fields are optional, or that keys/meta structure is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (Project) and the endpoint (POST /projects/restore), but 'Restore Project' largely restates the tool name and never says what restoring means operationally (rebuilding a project from a backup payload). Nothing distinguishes it from sibling operations like get_project_backup, which is the obvious counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no mention that the body should come from get_project_backup output, and no statement of preconditions or required permissions. An agent must already know the product to select this tool over create_project or update_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflowBDestructive
Run workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/run. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Optional edition-specific workflow execution options. | |
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false, covering the safety profile. The description adds useful context about edition-dependent availability and 404/empty-list outcomes, but does not explain the destructive impact or side effects of running a workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences with the primary purpose front-loaded and no wasted words. It includes endpoint and body-handling details efficiently, though the structure could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a write tool with no output schema and incomplete parameter documentation, the description covers availability and body handling but omits return values, specific permission requirements, and the workflow run's outcome. It is adequate but leaves notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), and the description compensates partially by noting that body fields are API-specific and JSON-encoded strings must remain strings. However, it provides no semantics for project_id and workflow_id beyond their names and schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Run workflow') and specifies the HTTP endpoint. It does not explicitly differentiate from siblings like stop_workflow_run or get_workflow_run, but the core action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions availability constraints but provides no guidance on when to use this tool versus alternatives. It lacks explicit conditions for selection among related tools like create_workflow or update_workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_app_activeCDestructive
set App Active. POST /apps/{app_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| app_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is known. The description adds only the serialization caveat ('JSON-encoded string fields must remain strings') and says nothing about what deactivating an app does (e.g., whether it stops running work) or what state is returned. Marginal value beyond the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, front-loaded with the action and endpoint, so it is compact. But 'set App Active' duplicates the tool name, and the 'JSON-encoded string fields' caveat is generic boilerplate that does not apply to this body's single boolean field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with a nested body object and no output schema, the description leaves key facts unstated: what the required 'active' boolean controls, the effect of disabling an app, and the response shape. Annotations cover safety, but the tool's core semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only says 'supply API fields in body' without naming the required 'active' boolean or explaining app_id. The serialization note is helpful but does not map to any actual param in this schema (body contains only a boolean). Significant compensation gap for a nested-object schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb and resource ('set App Active') plus the concrete endpoint (POST /apps/{app_id}/active), so the agent knows it toggles an app's active flag. However, the phrasing largely restates the tool name and never explains what 'active' means for an app or how it differs from siblings like update_app or get_app. It is adequate but not distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this vs update_app, delete_app, or the analogous set_global_runner_active/set_project_runner_active tools. The closest thing to guidance is a body-encoding note, which is a parameter hint rather than 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.
set_global_runner_activeBDestructive
Set global runner active state. POST /runners/{runner_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds the endpoint path and a body-formatting note, but says nothing about the practical consequence of toggling a runner offline (e.g., running jobs), which is the key behavioral risk here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by endpoint and body guidance. No filler, though the 'JSON-encoded string fields' remark is only marginally relevant given the body is a single boolean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema and annotations covering safety, the description is adequate but thin: it omits the effect of deactivation, permission requirements, and error behavior on an invalid runner_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning; it does partially by embedding runner_id in the path and noting body fields must match the API schema. The 'active' boolean itself is never explained (enable vs disable semantics), so compensation is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set global runner active state') and even names the endpoint, so the action is unambiguous. It does not, however, differentiate itself from the sibling set_project_runner_active, leaving the global-vs-project scope distinction to be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus set_project_runner_active, no prerequisites (permissions, whether the runner must be idle), and no note on what happens to in-flight tasks when deactivating. The agent must infer all selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_runner_activeCDestructive
Set project runner active state. POST /project/{project_id}/runners/{runner_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (destructiveHint=true, openWorldHint=true, readOnlyHint=false), so the description's burden is reduced. It adds the concrete endpoint and a serialization warning that JSON-encoded string fields must stay strings, which is genuinely useful pre-call context. However, it never says what deactivating a runner does to in-flight tasks or whether the change is reversible, which is exactly the risk flagged by destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the endpoint, then the serialization caveat. No filler. Slightly weakened by the endpoint restating what the name already implies, but it is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, non-idempotent-flagged mutation with no output schema and 0% parameter documentation, yet the description never covers permissions, side effects on running jobs, or what the response confirms. For a state-changing runner operation on a shared CI resource, it leaves the agent materially under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters. The path template implicitly maps project_id and runner_id to URL segments, and the body is mentioned as 'supply API fields in body', but the actual body property (`active`, a boolean) is never named or explained, nor is the effect of true vs false. Compensation for the coverage gap is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Set project runner active state', which is clearly a state toggle on a project-scoped runner. The embedded path POST /project/{project_id}/runners/{runner_id}/active disambiguates it from update_project_runner and from the sibling set_global_runner_active. It stops short of explicitly naming that sibling, so it is clear but not differentiated in prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus update_project_runner (full runner config) or set_global_runner_active (global scope). No prerequisites such as required permissions or whether the runner must be idle. The agent must infer everything from the tool name and the path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_schedule_activeCDestructiveIdempotent
Set Schedule Active. PUT /project/{project_id}/schedules/{schedule_id}/active. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| schedule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, so an important safety fact (this can deactivate/disable a schedule) is already flagged, yet the description adds nothing about impact, reversibility, or what happens to in-flight scheduled runs. The only added behavior note is a generic body-encoding caveat about JSON string fields, which is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no real padding; the endpoint and body-encoding caveat are both actionable. The middle clause about supplying API fields in body is somewhat boilerplate but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, world-affecting mutation with a nested body object, 0% schema coverage, and no output schema, the description is far too thin — it should at least state the effect of setting `active` true/false and any permission requirements. An agent cannot confidently call this correctly from the current text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters including a required nested `body.active` boolean, and the description only says "supply API fields in body" without explaining that `active` is the toggle or what value disables a schedule. The string-encoding note is helpful but does not compensate for the missing semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Set Schedule Active" largely restates the tool name and the PUT path clarifies the resource, but the description never says whether this enables, disables, or toggles the schedule (the `active` boolean is only visible in the schema). It also does nothing to distinguish itself from the several sibling setters (set_app_active, set_project_runner_active, set_global_runner_active).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this instead of update_schedule, delete_schedule, or validate_schedule, nor any prerequisite or authorization context. The agent must infer usage entirely from the name and endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_server_optionCDestructive
set Option. POST /options. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds nothing about what gets overwritten or what permissions are needed. For a destructive mutation, the absence of any consequence disclosure is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short, but the opening 'set Option' sentence is pure restatement and earns nothing. The encoding note is the only substantive sentence and is buried last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive, non-idempotent mutation with one undocumented parameter and no output schema needs far more than a three-word purpose and an encoding hint; valid keys and effects are unknown to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the body is a key/value $ref, but the description does add real meaning: the body carries API fields and JSON-encoded string fields must remain strings. It still never says which keys are valid or what value types are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'set Option. POST /options.' largely restates the tool name, adding only the HTTP endpoint. It never says what an 'Option' is server-wide, nor distinguishes this from set_user_option or get_server_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus the closely related set_user_option, nor of required admin privileges. The only usage-adjacent line concerns body encoding, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_template_default_inventoryCDestructive
Set Template Inventory. POST /project/{project_id}/templates/{template_id}/inventory/{inventory_id}/set_default.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| template_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare that this is not read-only, is destructive, is not idempotent, and is open-world. The description adds only that it is a POST endpoint and does not explain what gets changed, whether a previous default is replaced, what permissions are required, or what side effects an agent should expect from a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the action and endpoint, with no filler. However, the brevity results in under-specification for a destructive mutation tool rather than a genuinely well-structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a destructive three-parameter mutation with no output schema and no parameter descriptions, the definition is incomplete. It does not explain the effect of setting a default inventory, any prerequisites, or how an agent should verify success or handle failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with three required integer parameters. The endpoint path shows that project_id, template_id, and inventory_id are path parameters, but the description does not add meaning such as whether the inventory must already be attached, what happens if IDs are invalid, or what the default designation affects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action as 'Set Template Inventory' and the endpoint path includes 'set_default', so it is possible to infer that this makes an inventory the default for a template. However, the natural-language portion is essentially a restatement of the tool name, and it does not explicitly explain what 'default' means or how this differs from attach_template_inventory or detach_template_inventory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of attach_template_inventory, detach_template_inventory, or other template-management tools. The description gives the endpoint but no prerequisites, exclusions, or contextual selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_user_optionADestructive
Stores one option for the authenticated user. The key is an allowlisted suffix (e.g. nav.unpinnedItems); the server prepends the user namespace, so a request can never read or write another user's options or a global option. Unknown keys are rejected with 400. POST /user/options. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/destructive/non-idempotent profile; the description adds genuine value beyond them with the key allowlist, namespace prepending (explaining cross-user/global isolation), the 400 failure mode, and the note that JSON-encoded string fields must stay strings. It stops short of describing overwrite semantics or what success returns, which is the main gap for a destructiveHint=true tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with purpose, then semantics, error behavior and encoding caveat. No redundant restatement of the name or schema, and every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with no output schema and rich annotations, the description supplies scoping, validation and encoding rules that make correct invocation possible. The missing pieces are overwrite semantics and confirmation of what a successful store returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: the `key` is defined as an allowlisted suffix that the server namespaces, and the value is constrained to string type (including JSON-encoded strings). It still doesn't say whether `key` and `value` are both required or what the value's size/content limits are, so it isn't exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Stores one option for the authenticated user', plus the transport hint 'POST /user/options'. It implicitly separates itself from server-wide option writing by noting a request can never touch a global option, though it doesn't explicitly name set_server_option or get_user_options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for use: only allowlisted key suffixes are accepted, unknown keys return 400, and the server namespaces per user. It does not explicitly route the agent to alternatives (e.g. set_server_option for globals, get_user_options for reads), so usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_view_positionsCDestructive
Set View Positions. POST /project/{project_id}/views/positions. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Map numeric view IDs (JSON object keys) to integer positions. | |
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent knows this is a non-idempotent mutation. The description adds nothing about what mutation means here (reordering views, overwriting existing positions) or the consequences, leaving the destructive characteristic unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler. It is efficient, though sparse rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema and half its parameters undocumented, the description does far too little: no effect explanation, no permission notes, no return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 50% schema coverage, the description should compensate for the undocumented project_id, but it does not. The note about keeping JSON-encoded string fields as strings is oddly generic and adds little beyond what the body schema already states (mapping view IDs to integer positions).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Set View Positions" merely expands the tool name rather than stating purpose in different terms; the endpoint path adds no semantic clarity. It never distinguishes this from sibling update_view or explains what a "view position" means to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of update_view or other view-related tools, and no prerequisites or exclusions are given. 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.
stop_taskCDestructive
Stop a job. POST /project/{project_id}/tasks/{task_id}/stop. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| task_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds nothing beyond the endpoint path. It does not say whether stopping is graceful or a hard kill, what happens to the already-running process/output, or whether the 'force' flag changes that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and endpoint, with no filler. The final sentence about JSON-encoded string fields is somewhat boilerplate for this schema but does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with a nested body object and no output schema, the description should at minimum explain the force flag and the effect of stopping. Neither is covered, leaving the agent to call a destructive operation without knowing its consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. The URL template does clarify that project_id and task_id are path identifiers, but the only body field, 'force', is never explained, and the note that JSON-encoded string fields must remain strings does not apply to any documented parameter here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Stop a job') and gives the exact endpoint, so the action is unambiguous. However it calls the resource a 'job' while the parameters and siblings use 'task', and it never distinguishes itself from nearby tools such as stop_template_tasks, delete_task, reject_task or wait_for_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to stop a task versus deleting it (delete_task), rejecting it (reject_task), or waiting on it (wait_for_task). The agent is left to 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.
stop_template_tasksCDestructive
Stop all active tasks of template. POST /project/{project_id}/templates/{template_id}/stop_all_tasks. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing behavioral beyond that: it does not say whether tasks are killed or gracefully aborted, what the response contains, or how the `force` flag changes behavior — a notable gap on a destructive bulk operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the operation and scope front-loaded; nothing is padded. The final boilerplate sentence about JSON-encoded string fields is only marginally useful given the schema contains no string fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent bulk mutation with a nested body object, no output schema and zero schema description coverage, the description should at minimum explain what `force` does and what stopping tasks implies for their state. Those gaps leave the agent under-informed before an irreversible call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 parameters including a nested body object. The description only says to 'supply API fields in body' and that JSON-encoded string fields must remain strings, which is generic boilerplate and does not explain the sole body field `force` at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and a precisely scoped resource ('all active tasks of template') and includes the endpoint path, which makes the bulk-stop scope unambiguous. It never names the sibling stop_task, so the differentiation is inferred from the scope wording rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to use this versus stop_task, no prerequisites (permissions, task states it will terminate), and no caveats. The agent must infer that this is the bulk alternative to stop_task from the description text alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_workflow_runADestructive
stop workflow run. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. POST /project/{project_id}/workflows/{workflow_id}/runs/{run_id}/stop. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Optional edition-specific workflow execution options. | |
| run_id | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-idempotent and open-world, so the bar is lower; the description still adds real context by warning about edition/license/permission dependence and Community-edition 404/empty-list behavior. It stops short of saying what state the run ends in or what happens to in-flight jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, but the four fragments read like concatenated notes ('stop workflow run.', endpoint, body note) rather than a coherent sentence. Every part carries information, though 'Supply API fields in body' is close to filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and thin schema coverage, the description covers where the IDs go and the availability pitfalls but omits outcome semantics (run status after stop, behavior on already-finished runs, response shape). Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description must compensate. The endpoint template does map project_id/workflow_id/run_id to path positions, which is genuinely useful, but the body parameter is only described as 'supply API fields', which is too vague for an edition-specific options object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('stop workflow run') and the exact REST endpoint, so the target entity is unambiguous. It does not explicitly contrast with the nearby stop_task / stop_template_tasks siblings, so the agent must infer the workflow-run scope itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition, license, permissions, possible 404/empty responses) tells the agent when the call may fail, which is useful. But there is no explicit when-to-use guidance or routing to alternatives such as stop_task when the goal is to stop a task rather than a run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_environmentCDestructive
Sync Environment. POST /project/{project_id}/environment/{environment_id}/sync.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| environment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is technically present — but the description never says what is destroyed or overwritten, whether the operation is reversible, or whether it runs asynchronously. For a destructive, non-idempotent mutation, silence on effect and return behavior is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded with the operation name, so it is not padded. However, the second sentence is a raw endpoint string that consumes space without adding agent-relevant meaning, so brevity here comes from omission rather than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, open-world mutation with no output schema and two undocumented parameters, the description omits nearly everything an agent needs: effect of the operation, async/task semantics, and any recovery context. Only the target resource pair is communicated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and largely does not. Embedding {project_id} and {environment_id} in the URL path only confirms they are path-scoped identifiers; there is no meaning, format hint, or constraint offered beyond that, and constraints like minimum 1 are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description restates the tool name ('Sync Environment') and appends a raw HTTP route, adding no explanation of what syncing an environment actually accomplishes. An agent cannot tell from this whether it re-pulls a repository, refreshes variables, or triggers a task, nor how it differs from update_environment or get_environment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or prerequisite information. The sibling list contains update_environment, get_environment, and delete_environment, but nothing in the description steers the agent toward or away from them. The endpoint path is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_secret_storageCDestructive
Sync Secrets. POST /project/{project_id}/secret_storages/{storage_id}/sync. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| storage_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the agent knows this is a risky, non-repeatable, externally-touching write. The description adds nothing about what gets destroyed or overwritten (existing secret paths?), what the external call does, or what failure looks like. The only behavioral note, that JSON-encoded string fields must remain strings, is a formatting caution, not a disclosure of consequences for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments with the endpoint path front-loaded, so there is no wasted prose. But the terseness crosses into under-specification: the sentences do not earn their place by conveying the operational meaning an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should at least say what a sync returns or how to observe results, and for a destructive, open-world, non-idempotent operation over a complex nested body it should say far more. The endpoint path and body-format hint are useful but leave the core behavior undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three required parameters plus a deeply nested body with eleven properties (type enum, sync_paths array, sync_interval, etc.). The description only says to "supply API fields in body" and that JSON-encoded string fields must stay strings, which does not explain required vs optional body fields or the meaning of sync_paths/sync_interval. It fails to compensate for the near-total lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb and resource ("Sync Secrets") plus the exact endpoint, which tells an agent this triggers synchronization for a specific secret storage. However, it never explains what "sync" actually does (pull secrets from an external backend? push? reconcile?), and does not distinguish it from siblings like get_secret_storage, update_secret_storage, or delete_secret_storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus update_secret_storage or create_secret_storage, no prerequisites (does the storage need to exist? does it need sync_enabled?), and no statement of what conditions make sync appropriate. 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.
test_project_notificationADestructive
Sends a test notification to all enabled messengers for the project. POST /project/{project_id}/notifications/test.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and non-idempotent, so the agent knows this reaches outside the system and changes state. The description adds useful scope detail ('all enabled messengers for the project'), but does not say that each invocation delivers real messages to external recipients or that the effect cannot be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, endpoint second. No padding whatsoever.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with rich annotations and no output schema, the description covers the essentials. A brief note on the external side effect (real users receive messages) and the expected response would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry weight; it only ties the call to a project via 'for the project' and the POST path, without explaining that project_id must be an existing project or what happens for a project with no enabled messengers. The single self-naming parameter keeps this from being worse than a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Sends a test notification to all enabled messengers for the project' — and identifies the exact endpoint. No sibling tool shares this responsibility, so nothing further is needed for disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The wording implies the use case (verifying that messenger integrations are configured and reachable), but there is no explicit when-to-use guidance, no warning about how often to fire it, and no alternatives named such as inspecting integration values via list_integration_values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_access_keyCDestructiveIdempotent
Updates access key. PUT /project/{project_id}/keys/{key_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| key_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is carried structurally. The description usefully adds the PUT/replacement contract and a real gotcha ("JSON-encoded string fields must remain strings"), but it never explains what 'destructive' means here — e.g., that omitting optional body fields may clear them — which is the key behavioral risk for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and then the endpoint, with no filler. "Supply API fields in body" is slightly vague but not wasted, since it does tell the agent the payload must be assembled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, idempotent mutation with a complex required body and no output schema, yet the description says nothing about replacement semantics, credential fields, or what the caller gets back. Annotations cover the safety flags, but an agent still lacks enough guidance to construct a correct update safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is a nested AccessKeyRequest with many optional fields and enums, so the description needs to carry the load. It only offers the vague "Supply API fields in body" plus a narrow note about string encoding; required fields (name, type), the type enum, and the ssh/login_password shapes go entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Updates access key") and pins it to the concrete endpoint PUT /project/{project_id}/keys/{key_id}, so an agent knows exactly which object is affected. It does not explicitly distinguish itself from create_access_key or delete_access_key, but the action verb plus endpoint makes the boundary obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_access_key for new keys or get_access_key for reads. The only implicit guidance is the PUT verb, which hints at replacement rather than partial update, but that is never stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_appCDestructiveIdempotent
set App. PUT /apps/{app_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| app_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=true), so the bar is lower. The description adds the crucial caveat that JSON-encoded string fields must remain strings, but it does not explain PUT replacement semantics or what existing app data may be lost despite destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the action and endpoint, then add one format caveat. It is efficient, though the opening "set App" is overly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive nested-body mutation tool with no output schema and no parameter documentation, so the description needs to carry more weight. It omits replacement semantics, field-level meaning, and the consequences of a destructive update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and a nested body containing eight undocumented fields, the description must compensate but mostly does not. It says to supply API fields in body and that string fields must stay strings, which adds marginal guidance, but it never clarifies the meaning or effect of fields like priority, active, args, or path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"set App" is close to restating the tool name, but the PUT /apps/{app_id} endpoint does identify the resource and operation. It does not explain what an app is in this system or what aspects of it are being set, leaving the purpose only partially inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no indication of when to use this instead of siblings like set_app_active, delete_app, or get_app. An agent must infer usage from the tool name and endpoint alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_environmentCDestructiveIdempotent
Update environment. PUT /project/{project_id}/environment/{environment_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| environment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The PUT endpoint description implies full-replacement semantics, which adds real meaning on top of the annotations' destructive/idempotent flags, and the note about JSON-encoded string fields is a genuine behavioral quirk. However, it never states what is lost when fields are omitted (e.g. whether secrets or sync settings are wiped), which is the key concern for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and endpoint, with no filler. It is efficiently sized, though the endpoint restatement occupies space that could have carried payload guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with a 12-field body, nested secret objects, and no output schema, the description leaves far too much unspecified. An agent cannot tell how the secrets operation enum behaves or whether omitted fields are cleared, which matters a lot given destructiveHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body has twelve properties including a nested secrets array with create/update/delete operations, none of which are explained. The one hint — that JSON-encoded string fields must remain strings — points at the json/env distinction but doesn't compensate for an otherwise undocumented payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Update environment") plus the exact endpoint PUT /project/{project_id}/environment/{environment_id}, so the agent knows precisely which resource is mutated. It doesn't explicitly differentiate from siblings like create_environment or sync_environment, but the verb makes intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus create_environment, sync_environment, or update_secret_storage, nor any stated prerequisites or permissions. The only usage-like instruction is procedural ("Supply API fields in body"), not a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_global_roleBDestructiveIdempotent
update global role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /roles/{role_slug}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| role_slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveness, idempotency, and open-world behavior, so the bar is lower. The description adds meaningful operational context about edition/license restrictions and Community-edition 404/empty-list behavior, which is exactly the kind of runtime caveat annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the identity of the tool and its availability caveat. The endpoint and body-encoding notes are useful, though the sentence fragment 'update global role.' is slightly terse for an opener.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes a required nested body object, has no output schema, and has completely undocumented parameters. The description does not explain the body shape, required fields, replacement semantics implied by PUT, or response behavior, leaving significant gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It only says to supply API fields in the body and that JSON-encoded string fields must remain strings, without explaining role_slug, the required body fields, or how permissions is represented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('update global role'), and the 'global' qualifier implicitly separates it from update_project_role. It lacks an explicit contrast with siblings, which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability caveat (edition, license, permissions, Community 404s) gives useful context but does not say when to choose this tool over alternatives or what prerequisites are needed before calling it. No exclusions or routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_global_runnerCDestructiveIdempotent
Update global runner. PUT /runners/{runner_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| runner_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a destructive, idempotent, open-world mutation, so the safety profile is covered. The description adds only one caveat (JSON-encoded string fields must remain strings) and omits what a PUT actually replaces, whether omitted fields are cleared, or any permission requirements — notable gaps given destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no wasted text. Efficient, though terseness contributes to the semantic gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with a nested body of nine largely undocumented fields and no output schema needs substantially more explanation than this. The agent is told to 'supply API fields' without knowing what fields exist, which fields are optional, or how the update semantics work.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported at 0%, so the description must compensate. It only says 'supply API fields in body', neither enumerating the updatable fields (name, tags, active, webhook, is_default, max_parallel_tasks) nor noting that runner_id is a path parameter. The single hint about string-encoded fields is useful but far short of the need.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb and resource ('Update global runner') and maps it to the endpoint PUT /runners/{runner_id}, which helps an agent correlate with the API. But it does not distinguish this from the sibling update_project_runner, nor say what kinds of fields are being changed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus update_project_runner, set_global_runner_active, or create_global_runner. The 'global' scope is implied by the name only; no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_integrationCDestructiveIdempotent
Update Integration. PUT /project/{project_id}/integrations/{integration_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a destructive, idempotent, open-world write, and the description does not contradict them. It adds a little context (PUT semantics, string-encoding caveat), but for a destructiveHint=true operation it never says what the PUT overwrites or whether omitted fields are cleared, which is exactly the risk an agent needs spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded fragments with no filler; the endpoint and the encoding caveat come immediately. The opening "Update Integration" duplicates the tool name and could be dropped, but overall it is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with a deeply nested body schema and no output schema needs more: whether this is a full replace or a merge, which fields are required beyond name, and what happens to unmentioned settings. None of that is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is a large nested IntegrationRequest with fields like task_params, auth_header, auth_secret_id, and searchable, none explained. "Supply API fields in body" and "JSON-encoded string fields must remain strings" are useful hints but leave the majority of the parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update Integration" restates the tool name, but the added PUT path with project_id/integration_id makes clear it mutates a specific existing project integration. It does not distinguish this from close siblings such as update_integration_value, update_integration_matcher, or create_integration, so the agent must infer scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus update_integration_value/update_integration_matcher, nor any prerequisite (does the integration need to exist, does it need to be disabled first?). Usage is only implied by the word "update".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_integration_matcherCDestructiveIdempotent
Updates Integration Matcher. PUT /project/{project_id}/integrations/{integration_id}/matchers/{matcher_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| matcher_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds real value with the PUT semantics and the non-obvious caveat that JSON-encoded string fields must remain strings, but it does not say what state is overwritten/destroyed despite the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and endpoint, with the encoding caveat appended where it is needed. Efficient and free of filler, though the endpoint template could be trimmed since it duplicates the parameter names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with zero schema description coverage and no output schema, the description should explain permissions, overwrite behavior, and matcher field meaning. Instead it supplies only the HTTP path and one encoding note, leaving the agent under-informed for a mutating call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, yet it only calls out the 'body' generically and warns about string encoding. project_id, integration_id, matcher_id, and the body sub-fields (key/name/value/method/match_type/body_data_type) receive no explanatory semantics beyond the URL template.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb and resource ('Updates Integration Matcher') and the PUT path clarifies it targets an existing matcher on a project integration. It is clearly distinguishable from create_integration_matcher, delete_integration_matcher, and get_integration_matcher, but it never explains what a matcher is or which fields are meaningful to update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the create/delete/get matcher siblings, and no prerequisites (e.g., matcher must already exist, required permissions) are given. The endpoint path implies an existing resource but leaves the agent to infer the usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_integration_valueCDestructiveIdempotent
Updates Integration ExtractValue. PUT /project/{project_id}/integrations/{integration_id}/values/{value_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| value_id | Yes | ||
| project_id | Yes | ||
| integration_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description's 'PUT' framing is consistent with that. It adds one genuinely useful implementation caveat ('JSON-encoded string fields must remain strings'), but says nothing about whether omitted fields are cleared or what permissions are needed for a destructive, open-world mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the endpoint and body caveat come early. It is terse to the point of underspecification rather than verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, four-required-parameter mutation with zero schema descriptions and no output schema, the description should explain the extract-value concept and the replace semantics of the body. As written, an agent knows the endpoint but not what it is actually changing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It does map the ID parameters to the URL path, but 'Supply API fields in body' gives no meaning for the six body properties (key, name, variable, value_source, variable_type, body_data_type) or how the enums should be chosen.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (updates) and resource (Integration ExtractValue), and the URL template pins down that it targets one value under a project/integration. It is distinguishable from create_integration_value, get_integration_value, and delete_integration_value by the verb alone, though the term 'ExtractValue' itself is left unexplained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create_integration_value or update_integration, and no prerequisite such as needing an existing value_id from list_integration_values/get_integration_value. The agent must infer the update workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_inventoryCDestructiveIdempotent
Updates inventory. PUT /project/{project_id}/inventory/{inventory_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the endpoint and a useful note that JSON-encoded string fields must remain strings, but it does not disclose replacement semantics or what happens to omitted fields in this destructive PUT operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: operation, endpoint, then body instruction. Every sentence contributes, though the final sentence could be slightly clearer about which fields are JSON-encoded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive, idempotent update with no output schema and 0% schema description coverage. The description omits crucial details about update semantics, required body fields, and identifier roles, leaving an agent under-informed despite annotations covering the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, but it only says to supply API fields in the body and warns about JSON-encoded strings. It does not explain project_id, inventory_id, required body fields, or the meaning of nested InventoryRequest properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Updates inventory') and identifies the exact endpoint. It is clearly distinguishable from create_inventory/delete_inventory, though it does not explicitly contrast with siblings beyond the operation name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use the tool by naming the update operation, but provides no explicit guidance on prerequisites, when not to use it, or alternatives such as create_inventory. The endpoint is given, but no operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectCDestructiveIdempotent
Update project. PUT /project/{project_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, and openWorld=true, so the safety profile is covered. The description adds a genuinely useful constraint ('JSON-encoded string fields must remain strings' and that body must carry API fields), but it never explains what a destructive update replaces or what fields are lost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded and free of padding. The endpoint and body mechanic are stated efficiently, though the brevity borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with 0% schema coverage, no output schema, and a nested request body, the description is far too thin. It omits the body field semantics and the implication of destructive=true, which an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (only 'demo' is documented), so the description must compensate and does not. It never mentions project_id, the required 'name', or the body fields (type, alert, alert_chat, max_parallel_tasks), leaving the caller to infer everything from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb (update) and resource (project) and adds the underlying PUT endpoint, but 'Update project' largely restates the tool name. It never says what aspects of a project are updated or how this differs from neighboring tools like update_project_role, update_project_user, or update_project_runner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many other project-related mutators, nor any prerequisites or when-not-to-use conditions. The only instruction ('Supply API fields in body') is a call mechanic, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_roleBDestructiveIdempotent
update project role. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/roles/{role_slug}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| role_slug | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds meaningful context beyond those annotations by naming the PUT route, noting edition/license/permission dependencies, and warning that some Community routes return 404 or empty lists. It does not contradict the annotations, though it does not detail the exact effects of changing role permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and proceeds to availability constraints and endpoint details without padding. The sentences are reasonably compact, though the phrasing is somewhat fragmented and could be organized more cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers availability constraints and the endpoint, and annotations cover safety and idempotency. However, for a destructive nested-body mutation with no output schema and 0% parameter coverage, it leaves key gaps around body field meaning and the concrete effect of updating a role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden of explaining parameters. It says 'Supply API fields in body; JSON-encoded string fields must remain strings,' and the endpoint path implies project_id and role_slug, but it does not explain the required body fields slug, name, and permissions or the meaning of permissions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'update project role.' It also gives the endpoint PUT /project/{project_id}/roles/{role_slug}, which confirms the operation. It does not explicitly distinguish this from create_project_role, delete_project_role, or update_global_role, so it lacks full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides useful availability context: 'Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists.' However, it does not explicitly say when to use this instead of create_project_role, update_global_role, or get_project_role, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_runnerCDestructiveIdempotent
Update project runner. PUT /project/{project_id}/runners/{runner_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| runner_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and openWorld=true, so the safety profile is carried by structured data. The description adds the HTTP verb (PUT implies full-replacement semantics) and a field-encoding caution, but never states explicitly that omitted fields may be reset or what permissions are required for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, front-loaded and free of padding, but the middle sentence 'Supply API fields in body' spends words without adding information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, three-required-parameter mutation with no output schema, the description should say which body fields exist, which are optional, and whether unspecified fields are cleared. It omits all of that, leaving the agent to reverse-engineer PUT semantics and field requirements from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema description coverage is 0% for the three required parameters (project_id, runner_id, body), so the description must compensate and largely does not — 'Supply API fields in body' enumerates nothing. The 'JSON-encoded string fields must remain strings' note is a genuine but narrow hint aimed at the webhook/string fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Update project runner') and the PUT path pins it to project runners rather than global runners. It does not, however, distinguish this general update from narrower siblings like set_project_runner_active or update_global_runner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus set_project_runner_active (for the active flag) or update_global_runner (for non-project runners). The only usage remark is a mechanical note about supplying fields in the body.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_userCDestructiveIdempotent
Update user role. PUT /project/{project_id}/users/{user_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| user_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds PUT semantics and a real gotcha (JSON-encoded string fields must remain strings), but does not say what happens to the user's prior role or what permissions the caller needs for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded fragments with no filler; the verb and endpoint land first. The "JSON-encoded string fields must remain strings" line borders on boilerplate but carries an actual formatting warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with a required nested body and no output schema, the definition leaves the critical unknown unresolved: the shape and acceptable values of the role field. It also says nothing about the response, so an agent cannot predict the outcome of a state-changing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is a nested object whose only property, "role", is undocumented. The description says only "Supply API fields in body", which does not reveal whether role expects an ID or a name, or what values are valid, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update user role") and pins it to the concrete endpoint PUT /project/{project_id}/users/{user_id}, which distinguishes it from the global update_user and the role-definition update_project_role. It stops short of naming those siblings explicitly, so an agent must infer the differentiation from the path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is given. Nothing tells the agent to prefer this over update_user (global) or update_project_role (role definitions), nor what prerequisites (admin permission, existing membership) are required before calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_repositoryCDestructiveIdempotent
Updates repository. PUT /project/{project_id}/repositories/{repository_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| repository_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the description should clarify what is destroyed. 'PUT' hints at full replacement, but it never says existing fields are overwritten/cleared, nor that omitted fields may be reset, nor that required fields must be resupplied. The note about JSON-encoded string fields is only marginal additional behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the endpoint and body caveat are stated efficiently. Slightly clipped phrasing ('Updates repository') costs a bit of readability but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-read-only mutation with three required parameters and no output schema, the description is too thin: it does not say what state is replaced, whether the call is a full overwrite, or what the response contains. An agent could invoke it with incomplete body knowledge and unintentionally clobber repository settings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only offers the generic instruction to 'supply API fields in body' and a warning that JSON-encoded string fields stay strings — it never mentions the required name and git_url, the nullable ssh_key_id, git_branch, or that the body is a RepositoryRequest object. Most parameter meaning is left undisclosed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Updates repository') plus the HTTP method and path, which confirms it is a replacement-style update of an existing repository. However, 'Updates repository' largely restates the tool name, and nothing distinguishes it from siblings like create_repository, get_repository, or delete_repository beyond the path string.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus create_repository or when to prefer a narrower update. No prerequisites, no mention of what happens if the repository does not exist, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scheduleCDestructiveIdempotent
Updates schedule. PUT /project/{project_id}/schedules/{schedule_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| schedule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is carried by structured data. The description adds nothing about the destructive implication that an update may overwrite existing schedule configuration, and gives no permission or auth context. The string-encoding note is useful but does not address the main behavioral risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and endpoint, with no filler. The content is efficiently delivered even if it is under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive mutation with a large nested request body, 0% schema description coverage, and no output schema. The description should at least warn about replacement semantics, identify that body is the full ScheduleRequest payload, and point to set_schedule_active for active toggling. It does none of these, leaving the agent under-equipped to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for a fully undocumented ScheduleRequest body. It only says to 'supply API fields in body' and that JSON-encoded string fields must remain strings, which adds one useful encoding constraint but leaves the many body fields, enums, and nested task_params semantics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Updates schedule' and gives the PUT endpoint, so the verb and resource are clear. However, it does not differentiate this tool from close siblings such as set_schedule_active, validate_schedule, create_schedule, or delete_schedule, leaving the agent to infer the boundary from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus set_schedule_active for toggling active state, validate_schedule for checking a schedule, or update_template for template-level changes. The only context given is the HTTP endpoint, which does not tell the agent in which situations this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_secret_storageCDestructiveIdempotent
Update. PUT /project/{project_id}/secret_storages/{storage_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| storage_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description does not explain what is destructive, whether omitted body fields are cleared, or what permissions are needed. The only added behavioral note is that JSON-encoded string fields must remain strings, which is useful but narrow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but the opening "Update." is a wasted tautology. The endpoint and body-format sentence earn their place, but the overall structure is too sparse for the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex nested-object mutation with no output schema and no schema descriptions. The description provides only the endpoint and a body-string caveat, leaving an agent without enough context to safely perform the update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body contains many nested fields, so the description must compensate. It says to supply API fields in the body and warns that JSON-encoded string fields must stay strings, but it does not explain the body fields, replacement semantics, or which fields are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description's only prose purpose statement is the bare word "Update." and it identifies the resource mainly through the endpoint path. It does not explain that this modifies an existing secret storage's configuration, so it largely restates the tool name rather than distinguishing it from sibling operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the HTTP method and path and says to supply API fields in the body, but gives no guidance on when to use this instead of create_secret_storage, delete_secret_storage, or get_secret_storage. There are also no prerequisites or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_templateCDestructiveIdempotent
Updates template. PUT /project/{project_id}/templates/{template_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds useful transport context with the PUT endpoint and a non-obvious note that JSON-encoded string fields must remain strings. It still does not explain what a destructive update replaces, whether omitted fields are cleared, or what authorization is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with the operation stated first and the endpoint and body-format warning following. It is appropriately sized, though the generic 'Supply API fields in body' sentence adds limited value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the large and conditional body schema, destructive update behavior, and lack of an output schema, the description is not complete enough for reliable invocation. It omits required body semantics, conditional requirements, and the effect of the update on existing template configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only says to supply API fields in the body. It does not explain the complex body structure, app-dependent requirements such as inventory_id for Ansible or playbook defaults, or the meaning of nested fields like survey_vars and task_params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Updates template.' The PUT endpoint reinforces that this is an update operation on an existing template. However, it does not distinguish this tool from the sibling update_template_description or clarify how it differs from create_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as update_template_description or create_template. The description also omits prerequisites such as required permissions or when a full PUT update should be used instead of a more targeted update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_template_descriptionBDestructiveIdempotent
Update Template Description. PUT /project/{project_id}/templates/{template_id}/description. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=true, openWorldHint=true), so the bar is lower. The description adds the useful convention that request fields go in a body object and that JSON-encoded string fields must stay strings, but it does not disclose that the existing description is overwritten or what happens on invalid input. No direct contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and endpoint, then the payload convention. The opening restates the tool name verbatim, which is minor waste, but nothing else is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-body mutation tool with 0% schema coverage and no output schema, the description covers the mechanics of payload placement but omits what the body must contain, overwrite semantics, and error behavior. Adequate to attempt a call, not complete enough to call it safely without inspecting the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all three parameters rely on the description. The endpoint path maps project_id and template_id to their positions and 'Supply API fields in body' explains the nested body wrapper, which is real added meaning. However, it never says the body must contain the 'description' key or what format that string should be in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource (update a template's description), and the HTTP path PUT /project/{project_id}/templates/{template_id}/description reinforces exactly which resource field is being changed. It is distinguishable from sibling update_template (full template update) by the title alone, though the description never explicitly contrasts the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit statement of when to call this tool instead of update_template, nor any prerequisite (e.g. permission requirements, whether the template must exist). The endpoint path only implies that a project-scoped template ID is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_template_permissionCDestructiveIdempotent
Update Template Perm. PUT /project/{project_id}/templates/{template_id}/perms/{perm_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| perm_id | Yes | ||
| project_id | Yes | ||
| template_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety/idempotency profile is covered structurally. The description adds only "PUT", which hints at full-replacement semantics, but never states what gets overwritten or whether omitted fields are cleared—the key behavioral question for a destructive PUT.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short fragments, front-loaded with the action and endpoint, so there is no padding. However, the terseness comes at the cost of under-specification rather than density—each fragment is a stub rather than a fully earning sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, nested-body, four-required-parameter mutation with no output schema and 0% schema description coverage, the description is far too thin. An agent cannot determine the meaning of the body fields or the replacement semantics from this definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds little: "Supply API fields in body" and a note that JSON-encoded string fields must stay strings. It never explains the body's role_slug/permissions fields or the three path identifiers, leaving the nested required object undocumented across both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update Template Perm") and names the PUT endpoint it maps to. It is clear what is being modified, though the abbreviation "Perm" and the absence of any reference to sibling operations (create/delete/get/list_template_permission) leave differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus create_template_permission, delete_template_permission, or update_template_description. The description also doesn't mention prerequisites like needing an existing permission ID or required permissions to perform the update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_terraform_aliasBDestructiveIdempotent
update terraform alias. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/inventory/{inventory_id}/terraform/aliases/{alias_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| alias_id | Yes | ||
| project_id | Yes | ||
| inventory_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, and the description adds genuine context beyond them: edition/license gating and possible 404/empty responses. It still omits what the destructive behavior means in practice (partial vs. full replacement of the alias, permission errors, side effects on references).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and route, then the caveats and body note. There is no filler, though the availability sentence is somewhat generic boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent-flagged mutation with zero schema description coverage and no output schema, the description should clarify body fields, the effect of the update, and error behavior. It covers availability and the string-encoding constraint but leaves the core mutation semantics undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 required params, including a nested body object, so the description must carry the semantics. It only says 'supply API fields in body' and that JSON-encoded string fields stay strings; it never names the body fields (auth_key_id required, alias, project_id, inventory_id) or explains the path IDs, leaving the agent to read the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('update terraform alias') plus the exact PUT route, which separates it from create_terraform_alias, delete_terraform_alias and get_terraform_alias. It does not say what an alias is or which attributes are updatable, so it stops short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The availability note (edition/license/permissions, Community routes returning 404 or empty lists) is useful precondition context. However, it never says when to choose this over create_terraform_alias (new vs. existing alias) or list_terraform_aliases, so routing among siblings 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.
update_userCDestructiveIdempotent
Updates user details. PUT /users/{user_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=true, and openWorldHint=true, so the safety profile is largely covered. The description adds useful context by naming the PUT endpoint (consistent with idempotency) and warning that JSON-encoded string fields must remain strings, but it never says what 'destructive' means here — e.g. whether omitted fields are cleared in a full PUT replacement or left untouched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and endpoint before the body-format caveat. Only 'Supply API fields in body' is close to filler, since the schema already establishes a body object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with zero schema description coverage and no output schema, the description omits the most needed information: which fields can be changed, whether the update is a full replacement, and what the response contains. The annotations carry the safety profile, but the field-level semantics gap is not filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across the two parameters and none of the five body fields (name, admin, alert, email, username) carry descriptions. The description only says 'Supply API fields in body', which does not tell the agent which fields exist or what setting admin/alert actually does; the path string at least implies user_id is the target identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Updates user details') and anchors it to the API endpoint PUT /users/{user_id}. It does not distinguish this from close siblings such as update_user_password, set_user_option, or update_project_user, which an agent could easily confuse for user modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over update_user_password, set_user_option, or update_project_user, all of which appear in the sibling list. The reader is left to infer that this is the general-purpose user mutation, with no preconditions or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_user_passwordCDestructive
Updates user password. POST /users/{user_id}/password. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, openWorld=true, so the safety profile is covered. The description adds nothing beyond the route: no statement that the old password is invalidated, no auth/permission requirements, no rate limiting or session-invalidation effects. The 'JSON-encoded string fields must remain strings' note is generic boilerplate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and route. Little waste, though the trailing encoding sentence is generic filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with a nested body, zero schema descriptions, and no output schema. The description should at minimum enumerate the required body field and state the effect on the user's existing credentials; it does neither.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the body is a nested object with a password property. The description only says 'supply API fields in body' without naming password as the required body field or clarifying that user_id is the target account, so it fails to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Updates user password') and even the underlying route POST /users/{user_id}/password. It implicitly differentiates from the sibling update_user, though it never says so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus update_user or the TOTP/enable-disable siblings, and no prerequisites (e.g., admin rights). The only usage-adjacent content is the HTTP route and a body-format note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_viewCDestructiveIdempotent
Updates view. PUT /project/{project_id}/views/{view_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| view_id | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds useful context about the HTTP PUT method and body formatting, but it does not clarify whether this is a full replacement or partial update, what happens to omitted fields, or whether special permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action front-loaded and no extraneous content. It is efficient, although the body instruction remains somewhat cryptic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive update tool with 0% schema coverage and no output schema, the description is incomplete. Annotations cover the safety profile, but the agent still lacks explanation of body field semantics, partial-vs-full update behavior, and required permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three required parameters. The description maps project_id and view_id to the URL and mentions supplying API fields in the body, but it does not explain id, title, position, project_id in the body, or the relationship between body.id and view_id. The note about JSON-encoded string fields is too vague to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Updates view") and reinforces it with the concrete endpoint PUT /project/{project_id}/views/{view_id}. It is distinguishable from create_view, get_view, and delete_view by verb, though it does not explicitly contrast with set_view_positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use for updating an existing view but gives no explicit when-to-use guidance, no prerequisites, and no alternatives such as set_view_positions or create_view. The agent must infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workflowADestructiveIdempotent
Update workflow. Availability depends on Semaphore edition, license, and permissions; some Community routes return 404 or empty lists. PUT /project/{project_id}/workflows/{workflow_id}. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes | ||
| workflow_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, and the description adds real value: edition/license/permission gating, 404-on-Community caveat, and the 'JSON-encoded string fields must remain strings' constraint. These are behavioral traits not in the annotations. It stops short of describing what specifically gets overwritten on update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the operation name, then the caveats and endpoint. No wasted text, though the fragments could be tightened into clearer sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive update with no output schema and a large nested input at 0% coverage, the description covers the availability gotcha and the body-string quirk but omits the shape of the nested nodes/edges an agent must construct. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across a deeply nested WorkflowTemplate body, so the description must compensate. It does clarify that fields go in the body and flags a non-obvious JSON-string quirk, which is genuinely useful, but it leaves the node/edge/task_params structure undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('update_workflow') and reinforces it with the underlying PUT endpoint. It doesn't distinguish itself from siblings like delete_workflow, create_workflow, or run_workflow, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes availability depends on edition, license, and permissions, and warns that some Community routes return 404 or empty lists—useful availability context. However, it gives no explicit guidance on when to update vs. create/run a workflow or which alternative to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_scheduleCRead-onlyIdempotent
Validate Schedule Cron Format. POST /project/{project_id}/schedules/validate. Supply API fields in body; JSON-encoded string fields must remain strings.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real context beyond them: the operation is a POST despite being non-mutating, and body string fields must not be coerced. It says nothing about what a validation result looks like or whether errors are returned per-field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the purpose front-loaded and the endpoint second; nothing is padded. The final sentence is somewhat boilerplate but still conveys a request-construction constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a validation endpoint with no output schema, the description never says what comes back (boolean, normalized cron, or error list), which is the single most important thing an agent needs here. Combined with undocumented parameters, the definition is thin for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across two required parameters, so the description carries the full burden and only partly meets it. It tells the agent to put fields in the nested body object and keep JSON-encoded strings as strings, but never explains what cron_format accepts (field count, allowed syntax) or the role of project_id in validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (validate a schedule's cron format) and pins the endpoint POST /project/{project_id}/schedules/validate, so it is clearly distinct from the create/update/get schedule siblings. It stops short of explicitly contrasting itself with those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus create_schedule or update_schedule (e.g. 'use before creating a schedule to check a cron expression'), and no exclusions or prerequisites. Usage is only inferable from the verb 'validate'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_taskARead-onlyIdempotent
Poll a task until success, error, stopped, or timeout. Does not start or stop jobs. Output tail is optional; timeout leaves the job running. The initial status read and optional output read use SEMAPHORE_TIMEOUT separately from the polling budget.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| timeout | No | ||
| project_id | Yes | ||
| tail_lines | No | ||
| poll_interval | No | ||
| include_output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: timeout leaves the job running, output tail is optional, and the initial/status/output reads use SEMAPHORE_TIMEOUT separately from the polling budget.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core behavior, then the key constraints. Every sentence adds useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling tool with no output schema and rich annotations, the description covers the essential lifecycle (terminal states, timeout leaving the job running) and important timeout/read semantics. It is not fully complete because it does not describe return shape or the role of each parameter, but the core calling behavior is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies timeout behavior and optional output tail semantics, but it does not explain project_id, task_id, poll_interval, include_output, tail_lines defaults/ranges, or how the two timeout concepts map to parameters. Most of the 6 parameters remain ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Poll a task until success, error, stopped, or timeout.' It also states what the tool does not do ('Does not start or stop jobs'), which distinguishes it from create_task and stop_task. It does not explicitly name get_task or get_task_output, so the sibling differentiation is good but not complete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context (wait for a task to reach a terminal state) and a clear exclusion ('Does not start or stop jobs'). However, it does not route the agent to alternatives, such as using get_task for a single status check or get_task_output for non-polling output retrieval.
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.
213 tool updates
v0.1.0- First observed
activate_subscription - First observed
attach_template_inventory - First observed
clear_cluster_tasks - First observed
clear_global_runner_cache - First observed
clear_project_cache - First observed
clear_project_runner_cache - First observed
clear_server_cache - First observed
confirm_task - First observed
create_access_key - First observed
create_api_token - First observed
create_environment - First observed
create_global_role - First observed
create_global_runner - First observed
create_integration - First observed
create_integration_alias - First observed
create_integration_matcher - First observed
create_integration_value - First observed
create_inventory - First observed
create_project - First observed
create_project_integration_alias - First observed
create_project_role - First observed
create_project_runner - First observed
create_project_user - First observed
create_repository - First observed
create_schedule - First observed
create_secret_storage - First observed
create_task - First observed
create_template - First observed
create_template_permission - First observed
create_terraform_alias - First observed
create_user - First observed
create_view - First observed
create_workflow - First observed
delete_access_key - First observed
delete_api_token - First observed
delete_app - First observed
delete_environment - First observed
delete_global_role - First observed
delete_global_runner - First observed
delete_global_task - First observed
delete_integration - First observed
delete_integration_alias - First observed
delete_integration_matcher - First observed
delete_integration_value - First observed
delete_inventory - First observed
delete_project - First observed
delete_project_integration_alias - First observed
delete_project_role - First observed
delete_project_runner - First observed
delete_project_user - First observed
delete_repository - First observed
delete_schedule - First observed
delete_secret_storage - First observed
delete_subscription - First observed
delete_task - First observed
delete_template - First observed
delete_template_permission - First observed
delete_terraform_alias - First observed
delete_terraform_state - First observed
delete_user - First observed
delete_view - First observed
delete_workflow - First observed
detach_template_inventory - First observed
disable_user_totp - First observed
enable_user_totp - First observed
get_access_key - First observed
get_access_key_references - First observed
get_admin_info - First observed
get_app - First observed
get_cluster_status - First observed
get_current_user - First observed
get_environment - First observed
get_environment_references - First observed
get_global_role - First observed
get_global_runner - First observed
get_global_task - First observed
get_integration - First observed
get_integration_matcher - First observed
get_integration_matcher_references - First observed
get_integration_references - First observed
get_integration_value - First observed
get_integration_value_references - First observed
get_inventory - First observed
get_inventory_references - First observed
get_latest_terraform_state - First observed
get_project - First observed
get_project_backup - First observed
get_project_permissions - First observed
get_project_role - First observed
get_project_runner - First observed
get_project_task_stats - First observed
get_project_user - First observed
get_repository - First observed
get_repository_references - First observed
get_schedule - First observed
get_secret_storage - First observed
get_secret_storage_references - First observed
get_server_options - First observed
get_subscription - First observed
get_system_info - First observed
get_task - First observed
get_task_output - First observed
get_task_raw_output - First observed
get_template - First observed
get_template_permission - First observed
get_template_references - First observed
get_template_task_stats - First observed
get_terraform_alias - First observed
get_terraform_state - First observed
get_user - First observed
get_user_options - First observed
get_user_totp_qr - First observed
get_view - First observed
get_workflow - First observed
get_workflow_run - First observed
get_workflow_run_artifacts - First observed
leave_project - First observed
list_access_keys - First observed
list_api_tokens - First observed
list_apps - First observed
list_available_project_roles - First observed
list_cluster_tasks - First observed
list_environments - First observed
list_events - First observed
list_global_roles - First observed
list_global_runner_tags - First observed
list_global_runners - First observed
list_global_tasks - First observed
list_integration_aliases - First observed
list_integration_matchers - First observed
list_integration_values - First observed
list_integrations - First observed
list_inventories - First observed
list_project_events - First observed
list_project_integration_aliases - First observed
list_project_roles - First observed
list_project_runner_tags - First observed
list_project_runners - First observed
list_project_users - First observed
list_projects - First observed
list_recent_events - First observed
list_recent_project_events - First observed
list_recent_tasks - First observed
list_recent_template_tasks - First observed
list_repositories - First observed
list_repository_branches - First observed
list_repository_playbooks - First observed
list_schedules - First observed
list_secret_storages - First observed
list_task_ansible_errors - First observed
list_task_ansible_hosts - First observed
list_task_stages - First observed
list_tasks - First observed
list_template_permissions - First observed
list_template_schedules - First observed
list_template_tasks - First observed
list_templates - First observed
list_terraform_aliases - First observed
list_terraform_states - First observed
list_users - First observed
list_view_templates - First observed
list_views - First observed
list_workflow_run_approvals - First observed
list_workflow_runs - First observed
list_workflows - First observed
ping - First observed
refresh_subscription - First observed
regenerate_global_runner_registration_token - First observed
regenerate_project_runner_registration_token - First observed
reject_task - First observed
resolve_workflow_approval - First observed
restore_project - First observed
run_workflow - First observed
set_app_active - First observed
set_global_runner_active - First observed
set_project_runner_active - First observed
set_schedule_active - First observed
set_server_option - First observed
set_template_default_inventory - First observed
set_user_option - First observed
set_view_positions - First observed
stop_task - First observed
stop_template_tasks - First observed
stop_workflow_run - First observed
sync_environment - First observed
sync_secret_storage - First observed
test_project_notification - First observed
update_access_key - First observed
update_app - First observed
update_environment - First observed
update_global_role - First observed
update_global_runner - First observed
update_integration - First observed
update_integration_matcher - First observed
update_integration_value - First observed
update_inventory - First observed
update_project - First observed
update_project_role - First observed
update_project_runner - First observed
update_project_user - First observed
update_repository - First observed
update_schedule - First observed
update_secret_storage - First observed
update_template - First observed
update_template_description - First observed
update_template_permission - First observed
update_terraform_alias - First observed
update_user - First observed
update_user_password - First observed
update_view - First observed
update_workflow - First observed
validate_schedule - First observed
wait_for_task
TDQS
Scored across 213 tools
Most tools are distinguished by resource + scope (global vs project vs template), and several descriptions explicitly disambiguate near-duplicates (e.g. get_global_task warns to use get_task). However, there are genuine near-overlaps an agent can easily mix up: get_task_output vs get_task_raw_output, list_tasks vs list_recent_tasks vs list_global_tasks, list_integrations vs list_project_integration_aliases, and confirm_task/reject_task vs wait_for_task. With 213 tools, selection pressure is high and several boundaries are only clear after reading the full description.
The surface follows a very predictable verb_noun snake_case convention (list_/get_/create_/update_/delete_/set_) with clear resource nouns. Minor deviations exist in noun ordering for a few tools (detach_template_inventory, set_template_default_inventory, stop_template_tasks) and one-off verbs (ping, leave_project, test_project_notification), but overall it is highly readable.
213 tools is an extreme mismatch for any coherent agent-facing surface; this is a 1:1 dump of the Semaphore REST API, including edition-gated routes that return 404 in Community. Many tools (permissions, terraform aliases, TOTP, subscription, cluster) will rarely or never be needed, creating enormous selection cost.
Coverage is essentially exhaustive: full CRUD for projects, templates, tasks, repositories, inventories, integrations, runners, roles, users, views, workflows, and even reference lookups, task polling, and cron validation. No obvious lifecycle gap exists for the Semaphore domain.
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Manage Pipefork API projects, drafts, connections, secrets, and deployments through MCP.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for Zuul CI/CD with 25 tools for builds, pipelines, queue management (enqueue/dequeue/promote), infrastructure visibility, and autohold management. Supports stdio, HTTP, and SSE transports.MIT
- FlicenseCqualityDmaintenanceSchema-driven MCP server that exposes all Paperclip API operations as typed MCP tools over stdio or Streamable HTTP, supporting both authenticated and local_mode deployments.100-
- AlicenseNot gradedqualityCmaintenanceMCP server for the Mobilerun platform, exposing tools for device control, workflow automation, task management, and platform operations via a stateless HTTP or stdio interface with bearer-token authentication and policy-based access control.Apache 2.0

Daykeeper MCPofficial
AlicenseAqualityAmaintenanceA local stdio MCP adapter for the Daykeeper management API. It uses separately issued scoped credentials and exposes read-only tools by default; planning and mutations require explicit opt-in.8176 npmApache 2.0