unfour
This MCP server exposes the local Unfour workspace through a command bus, letting you inspect and operate saved API, SSH, and database resources for troubleshooting.
Workspace: view/switch workspaces, list and manage workspace-global variables (secrets masked).
API Client: list collections, requests, environments, and history; inspect saved request details; send saved or ad-hoc HTTP requests; create/update/delete requests, collections, and environments.
Database: create/test/list saved database connections; list/describe tables; run read-only SQL; execute writes/DDL with confirmation safeguards; run EXPLAIN.
SSH: create/list saved connections; run diagnostic commands or execute shell commands; read/write/patch files; list directories; manage SSH tasks and task runs; inspect command history.
System/Activity: check health and list workspace activity events to understand what changed before a failure.
Safety: sensitive values are redacted/masked, destructive actions require confirmation, and prod/read-only policies restrict or block mutating operations.
Provides database integration for MySQL, allowing agents to list and describe tables, run read-only queries, execute EXPLAIN plans, and perform guarded writes against saved MySQL connections.
Provides database integration for PostgreSQL, allowing agents to list and describe tables, run read-only queries, execute EXPLAIN plans, and perform guarded writes against saved PostgreSQL connections.
Provides database integration for SQLite, allowing agents to list and describe tables, run read-only queries, and execute guarded writes against saved SQLite database files.
Unfour
A unified, local-first developer workspace for tracing backend failures from API requests through server logs and database state to verified fixes.
Unfour brings API testing, SSH, database tools, and MCP-assisted troubleshooting into one desktop application.

This source tree targets Unfour v0.9.4. Windows NSIS
installers are unsigned and may trigger SmartScreen or other operating-system
security warnings. UseSHA256SUMS.txt from the GitHub Release to verify
downloaded files.
Download
Download the latest Unfour release from GitHub Releases.
Windows is the primary distribution path: NSIS
.exeinstaller. It is unsigned and may trigger SmartScreen.macOS has Apple Silicon and Intel packages that have been verified on real devices, but they are not Apple-signed or notarized; Gatekeeper may block them.
Linux publishes an x86_64 (x64) AppImage only. It is Experimental and currently targets Ubuntu 22.04+; Ubuntu 20.04 is not supported. The published v0.9.0 AppImage predates this build baseline; new-artifact runtime verification is still pending.
.deband.rpmpackages are not formally supported or published.Verify downloaded installers with the release
SHA256SUMS.txtasset.
Related MCP server: devpulse-mcp
What Is Unfour?
Unfour helps backend developers investigate failures that span an API, a server, and its database. Troubleshooting is Unfour's core product loop: reproduce an issue with an API request, inspect server logs over SSH, check database state, identify the cause, and make and verify a fix.
A unified, local-first workspace keeps requests, connections, local activity, and layout together throughout the investigation. API testing, SSH terminals, and database tools provide the capabilities for each step in that loop.
MCP is an optional assisted layer: Codex and Cursor can use the local stdio MCP server to work with the same saved API, SSH, and database connections as the desktop app. Its workspace-scoped tools run through the shared command bus, subject to MCP policy and high-risk action confirmation checks. Troubleshooting remains user-directed. Unfour does not automatically correlate requests, logs, and database state or detect root causes, and it does not ship an automatic troubleshooting playbook or workflow runner.
Unfour is one application and one product. Its core desktop features are free and open source under Apache-2.0. An active Pro subscription unlocks Cloud Sync in the same application. Pro is an entitlement within Unfour, not a separate client, package, repository, or release.
The app is built with Tauri 2, React, TypeScript, and Rust. The frontend owns the workbench UI, while security-sensitive execution such as HTTP, SSH, database drivers, local storage, and credential references lives behind Rust capability crates and the command bus.
Troubleshooting Workflow
API error
↓
Inspect server logs over SSH
↓
Check related database state
↓
Identify the cause
↓
Repeat the request and verify the fixThe investigation stays in one workspace, while you remain in control of each request, SSH session, query, and verification step.
For Coding Agents
Codex or Cursor can use their own repository tools to inspect, change, and test code. Unfour complements those tools with controlled access to API behavior, SSH/server evidence, and database state through MCP, so the agent can help investigate the running backend and re-check it after a change.
Unfour does not edit the repository itself: the coding client owns code changes, while Unfour provides the runtime side of the investigation. You control the workspace, environment, risky actions, and final decision.
Modules
API Client - Compose and send HTTP requests, organize saved requests into collections and folders, resolve shared workspace variables, inspect response body/headers/cookies/timing, run saved pre-request and post-response scripts, review script tests and console output, and keep redacted history.
SSH Terminal - Manage SSH connections and terminal sessions (split panes, search, clipboard context menu, persistent redacted command history and typing suggestions, host-key trust, redacted logs), browse and transfer remote files over SFTP, and automate multi-step SSH tasks (command, upload, download) from the Connections / Files / Tasks sidebar.
Database - Manage database connections, browse schemas, run SQL with confirmation-aware safety checks (including multi-statement Run Current / Run All), preview and edit table rows, and review query output.
Workspace - Scope saved requests, shared environments/variables, connections, activity, tabs, and layout state to a local workspace, with title-bar active-environment switching.
MCP integration for Codex and Cursor - Expose safe local stdio diagnostic tools through the same command bus used by the desktop app. Codex and Cursor can use the same saved API, SSH, and database connections to reproduce issues, inspect logs and database state, and verify a fix. The user and Codex or Cursor work through the steps together; Unfour does not ship an automatic troubleshooting playbook or workflow runner.
Screenshots
App overview — sidebar with module switcher and the API Client workspace

API Client — request builder with params, auth, headers, body, and response

SSH Terminal — connections, sessions, remote files, and tasks

Database — schema browsing and SQL query output

Local Development
Requirements:
Node.js and pnpm.
A stable Rust toolchain.
Tauri 2 prerequisites for your operating system.
Install and run:
pnpm install
pnpm tauri devpnpm install also installs Git hooks through lefthook. A commit formats staged
Rust files with cargo fmt and auto-fixes staged TypeScript with ESLint.
Skip once with LEFTHOOK=0 git commit.
Common commands:
pnpm tauri build # create local Stable-channel Tauri bundles
pnpm tauri build:test # create isolated Test-channel Tauri bundles
pnpm run build # build the desktop frontend only
pnpm run check # frontend build + Rust check + large-file check
pnpm run lint # ESLint
pnpm run test # frontend unit tests (Vitest)
pnpm run test:e2e # Playwright smoke tests
pnpm run check:rust # cargo check --workspace
pnpm run check:rust:ssh # cargo check with the ssh-native feature
pnpm run test:rust # cargo test --workspace
pnpm run test:release-env # release/channel contract unit testsRun commands from the repository root unless a package document says otherwise.
pnpm tauri dev defaults to the Test release channel, while local
pnpm tauri build defaults to Stable. Use pnpm tauri build:test for an
isolated Test-channel bundle. Set UNFOUR_STORAGE_PROFILE=dev when development
data should use ~/.unfour-dev; this storage override is independent from
release identity. Only CI should create formal publishable Stable artifacts,
with UNFOUR_RELEASE_CHANNEL=stable and an exact UNFOUR_BUILD_COMMIT.
Project Layout
Path | Role |
| Tauri/Vite desktop app entry and Tauri adapter layer. |
| Global shell composition and module mount slots. |
| API Client frontend module. |
| SSH Terminal frontend module. |
| Database frontend module. |
| Shared frontend workspace state. |
| Workspace environments and variables management UI. |
| Reserved local workspace lifecycle boundary. |
| Shared UI primitives and stateless layout helpers. |
| Typed Tauri command wrappers and frontend command types. |
| Rust backend capability crates and adapters. |
See docs/architecture/project-structure.md for the full package and crate
map.
Release Status
This source tree targets Unfour v0.9.4. Release verification evidence is documented in:
docs/testing/release-verification.mddocs/testing/manual-test-cases.mddocs/release/release-checklist.mddocs/release/distribution.mddocs/release/signing.md
Windows is the primary distribution path and ships an unsigned NSIS .exe
installer that may trigger SmartScreen. macOS has Apple Silicon and Intel
packages verified on real devices, but they are not Apple-signed or notarized
and Gatekeeper may block them. Linux publishes an x86_64 (x64) AppImage only,
remains Experimental, and uses Ubuntu 22.04+ as its current runtime/test baseline.
Ubuntu 20.04 is not supported; compatibility with other distributions is not
guaranteed solely by their glibc version. .deb and .rpm packages are not
formally supported or published. Use the release SHA256SUMS.txt to verify
downloaded artifacts, and do not claim a release check passes unless it was run
successfully for the target platform or is backed by current repository evidence.
The published v0.9.0 Linux AppImage built successfully but failed to launch on
Ubuntu 20.04 because it requires Ubuntu 24.04-era GLIBC/GLIBCXX symbols. The
Ubuntu 22.04 build-baseline fix applies to future artifacts, not the immutable
v0.9.0 download. Ubuntu 22.04/24.04 runtime regression remains NOT VERIFIED
until a new artifact is built and tested; see
release verification.
Recorded v0.9.0 real-environment verification includes Windows install, launch, uninstall, and a previous-Stable-to-new-Stable update; macOS arm64/x64 install and run; GitHub browser OAuth and the Desktop callback/login; Creem Test checkout, webhook, entitlement, and billing portal; PostgreSQL and MySQL; SSH Terminal, SFTP, and SSH Tasks; and real Codex and Cursor MCP initialization, tool discovery, tool calls, and access to Unfour data/tools.
Historical live multi-device Cloud Sync verification exists, but the v0.9.0
unified-client multi-device regression remains NOT VERIFIED and will include
single-device coverage. Creem Production will be recorded after the first real
production transaction flow. MCP production-policy behavior, Linux AppImage
runtime integration, real MSIX/Store servicing, and macOS Gatekeeper trust
behavior also remain NOT VERIFIED; these limits do not reduce the verified
platform install/run results above.
Documentation
AGENTS.md- repository rules for coding agents.docs/agents/START_HERE.md- scoped onboarding path for AI agents.docs/architecture/package-boundaries.md- package ownership and forbidden dependency directions.docs/architecture/project-structure.md- repository, package, crate, and call-chain map.docs/architecture/data-storage.md- workspace data, SQLite, credential references, and local activity rules.docs/architecture/diagnostics.md- local structured logs, redaction, retention, diagnostic bundles, and developer logging guidance.docs/architecture/security-model.md- security posture, redaction, host-key policy, and dangerous-action rules.docs/mcp/overview.mdanddocs/mcp/tools.md- local MCP server behavior.docs/mcp/client-setup.md- installed-user setup for Codex and Cursor.docs/testing/release-verification.md- release verification matrix.docs/release/release-checklist.md- public release checklist.docs/user/USER_GUIDE.md- user-facing workflow guide.
Contributing
Please read CONTRIBUTING.md, CODE_OF_CONDUCT.md, and the package boundary
rules in AGENTS.md before opening a pull request.
Security issues should be reported through SECURITY.md, not a public issue.
Support Unfour
If Unfour is useful to you, you can support its continued open-source development through GitHub Sponsors.
Sponsorship is optional and does not include Unfour Pro or paid cloud services.
Built with Codex & GPT-5.6
Codex was used to review the Rust and TypeScript architecture, implement and refactor Tauri commands, add tests, and investigate build failures and MCP process lifecycle issues.
GPT-5.6 helped analyze SSH and database permission boundaries, refine MCP tool design, and plan the project architecture and release process.
The local Unfour MCP server lets Codex and Cursor use the same saved API, SSH, and database connections for diagnostic inspection and runtime re-checks. It follows the same command bus, workspace scope, credential handling, and confirmation controls as the desktop app. Codex and Cursor can participate in the troubleshooting loop through MCP, but connecting them does not automatically run a complete root-cause playbook.
License
Licensed under the Apache License 2.0.
Available Tools
56 toolsunfour.activity.listList Workspace ActivityARead-onlyIdempotent
Lists recent workspace activity events (workspace, connection, API, database, and SSH changes) through the Unfour command bus, newest first. Sensitive fields in event details are masked. Useful for diagnosing what changed before a failure started.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return (default 50, max 200). | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| activity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, plus has output schema. The description adds value by noting that sensitive fields are masked and that it uses the command bus, and the 'newest first' ordering. It does not contradict annotations; in fact, it reinforces them. Some behavioral aspects like pagination or default limit are covered by schema (default 50) but description adds masking which is beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action and scope, then a practical use case. No filler or redundant phrases. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a rich output schema and full parameter coverage, the description is sufficient. It mentions masking (a key behavior) and the diagnostic use case. Missing explicit note about pagination or default limit, but schema covers that. The tool is read-only with annotations, so no need to disclose mutations. Slightly could mention that it doesn't filter by connection type, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (limit, workspaceId) with good descriptions including defaults and active workspace semantics. The description adds no additional parameter details beyond what the schema provides, so baseline 3 is appropriate. It doesn't need to compensate for gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent workspace activity events, specifying the event types (workspace, connection, API, database, SSH) and the order (newest first). It distinguishes from siblings like unfour.connection.list or unfour.api.list_history by focusing on 'activity events' across all types via the command bus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when to use it ('useful for diagnosing what changed before a failure started'), implying a diagnostic context. It does not explicitly name alternatives or when-not to use, but the purpose clarity and sibling list implicitly distinguish it. Lacks explicit exclusions but provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.create_collectionCreate API CollectionA
Creates an API collection in local Unfour metadata through the command bus. Dev/test allow it; prod blocks by workspace policy. Returns the new collection id and summary.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only write, so no contradiction is present. The description adds useful behavioral context beyond the annotations: local metadata scope, command-bus execution, environment/production restrictions, and the returned id and summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The main action is front-loaded and each sentence adds useful information: what is created, where it is created, environment restrictions, and the return 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 fairly simple two-parameter create tool, the description captures the essential behavior, environment constraints, and return value. It is slightly incomplete on parameter guidance, but that is factored into the parameter semantics score.
Complex tools with many parameters or behaviors need more documentation. Simple 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 the name or workspaceId parameters at all. The property names are self-explanatory to some extent, but the description provides no added semantics over the input 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 has a specific verb and resource: "Creates an API collection in local Unfour metadata." This clearly distinguishes it from sibling tools like update_collection, delete_collection, and list_collections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 environment-based usage context: dev/test environments allow it, while prod blocks by workspace policy. It does not explicitly name alternatives, but the create operation is obvious enough from the title and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.create_environmentCreate API EnvironmentA
Creates an empty API environment in local Unfour metadata through the command bus. Dev/test allow it; prod blocks by workspace policy.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only, non-idempotent write, so the description's added context is valuable: it creates an 'empty' environment in 'local' metadata through the command bus. It does not contradict annotations and adds behavior beyond the structured hints, though it omits error or conflict 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 front-loaded sentences that state the verb and resource immediately. No filler or redundant restatement of the tool name; each clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple two-parameter create tool and an output schema, the description covers the action and policy context. However, the lack of parameter clarification and the absence of any guidance on how this environment relates to other API entities leaves notable gaps, especially with 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple 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 does not explain 'name' or 'workspaceId' at all. No meaning is added beyond the raw schema property names, leaving the agent to guess what workspaceId refers to or what naming constraints 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?
Description uses a specific verb ('creates') with a clear resource ('empty API environment') and scope ('local Unfour metadata'). It distinguishes from sibling tools like update_environment, delete_environment, and list_environments by indicating a create operation with an initial empty state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear usage context: dev/test environments allow creation, while prod blocks it by workspace policy. This provides an explicit when-not condition, though it does not name alternative tools such as update_environment for existing environments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.create_requestCreate API RequestA
Creates a saved API request record in the workspace through the Unfour command bus. This mutates local Unfour metadata only; it does not send traffic. Dev/test allow it by default, while prod blocks by workspace policy. Returns the new request id and a redacted summary.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| auth | No | ||
| body | No | ||
| name | Yes | ||
| query | No | ||
| method | Yes | ||
| headers | No | ||
| authJson | No | ||
| bodyKind | No | ||
| parentId | No | ||
| workspaceId | No | ||
| collectionId | No | ||
| parentFolderId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are limited to safety flags, but the description adds rich behavioral detail: it 'mutates local Unfour metadata only,' avoids sending traffic, explains production policy differences, and notes the return includes a new request ID and redacted summary. This significantly improves the agent's ability to predict side effects.
Agents need to know what a tool does to the 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-loaded with the core operation, and every sentence adds useful behavioral or contextual information. There is no filler or redundant repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description effectively covers tool behavior, environment constraints, and result shape, and the output schema may fill in return details. However, with 13 input parameters and no input schema descriptions, the record/model for required fields (name, method, url) and optional override (auth, body, headers, collection fields) still remains too vague for a complete 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%, yet the description gives no input guidance for the 13 parameters. Fields like auth vs authJson, body vs bodyKind, and parentId/collectionId/parentFolderId remain completely unexplained; the description must compensate but 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 clearly states the tool 'Creates a saved API request record in the workspace' and distinguishes it from a live request by explicitly confirming 'it does not send traffic.' This separates it from sibling tools like send_request and update_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear context for when the tool is usable ('Dev/test allow it by default') and when not ('prod blocks by workspace policy'). It also gives an implicit when-not by saying it does not send traffic, though it does not name an alternative tool explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.delete_collectionDelete API CollectionADestructive
Soft-deletes an API collection and cascades soft-deletion to its folders and requests through the command bus. Dev/test require a content-bound confirmation_text; prod blocks by policy.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workspaceId | No | ||
| collectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already signaling destructiveness (destructiveHint: true, readOnlyHint: false), the description goes beyond by disclosing what gets destroyed (cascading soft-deletion to folders and requests), distinguishing soft vs hard delete semantics, and revealing environment-dependent auth requirements (confirmation_text needed, prod policy block). This matches the 'what gets destroyed' and 'auth needs' categories for 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 sentences, zero fluff. The first sentence front-loads the core action and effect, the second delivers the environment/confirmation requirement. Every phrase earns its place, and the density is appropriate for the destructive nature of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with 5 parameters, the description efficiently covers the cascade scope, the soft-delete behavior, and environment rules. The presence of an output schema means return values don't need explanation. Minor gaps remain: the confirmationText/confirmation_text distinction isn't fully specified, and the 'content-bound' keyword format is left vague, but the key safety-relevant details are 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?
With 0% schema description coverage, the description carries the full burden for parameter meaning. It mentions 'confirmation_text' and its requirement in dev/test, which directly helps resolve the potentially confusing confirmationText vs confirmation_text distinction. However, it never explains 'confirm', 'workspaceId', or 'collectionId' (though collectionId is self-evident and required). The description partially compensates but leaves the two similar confirmation parameters ambiguous beyond a passing mention.
Input schemas describe structure but not intent. Descriptions should explain 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-action pair ('Soft-deletes an API collection') with resource scope ('cascades soft-deletion to its folders and requests'). It distinguishes itself from siblings like delete_request (different target resource) by clarifying the cascade behavior, which is unique to this tool among the siblings. The 'through the command bus' detail adds architectural precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear environmental context: 'Dev/test require a content-bound confirmation_text; prod blocks by policy.' This tells the agent when the tool can be used (dev/test with confirmation) versus when it cannot (prod), which is crucial for a destructive tool. However, it doesn't explicitly name alternatives or exclusions versus sibling tools, though the namespace and cascade detail imply when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.delete_environmentDelete API EnvironmentADestructive
Soft-deletes an API environment through the command bus. Guarded policy requires a content-bound confirmation_text; read-only policy blocks deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workspaceId | No | ||
| environmentId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description goes beyond this by adding that the deletion is a 'soft-delete', that a content-bound confirmation_text is required, and that read-only policies block the action. These are meaningful behavioral details not present in the annotations, though it doesn't discuss reversibility or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, immediately states the primary action, and includes policy caveats without fluff. Every word adds value, and the structure front-loads the most important 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 operation with 5 parameters, the description covers the core delete behavior and key policy constraints but omits any mention of return values (output schema exists), the purpose of the 'confirm' flag, or what happens to associated resources. It is adequate but leaves notable gaps for an operation 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 coverage is 0% and the description only hints at 'confirmation_text' without explaining the relationship between the two similar parameters 'confirmationText' and 'confirmation_text', nor the roles of 'confirm' or 'workspaceId'. The description adds minimal semantic value beyond the schema for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain 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 'Soft-deletes an API environment through the command bus,' clearly identifying the verb (delete), resource (API environment), and mechanism (soft-delete, command bus). It distinguishes itself from sibling delete tools by naming the specific resource type and it is not tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 useful usage context by mentioning the requirement for 'content-bound confirmation_text' and that 'read-only policy blocks deletion.' While it doesn't explicitly name alternative tools or say 'when not to use', the policy conditions offer clear guidance for when deletion is allowed, which is effectively usage direction for a guarded operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.delete_environment_variableDelete API Environment VariableADestructive
Deletes one API environment variable by environmentId and key through the command bus. Guarded policy requires confirmation; read-only policy blocks deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| confirm | No | ||
| workspaceId | No | ||
| environmentId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | |
| source | Yes | |
| deleted | Yes | |
| environmentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds extra behavioral context: 'Guarded policy requires confirmation; read-only policy blocks deletion.' This explains permission-related behavior beyond what annotations provide, though it does not detail what happens to dependent data or partial failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The core action and identifiers are front-loaded, followed by a brief policy note. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description is accurate and concise, it leaves several parameters unexplained (confirm, confirmationText, confirmation_text, workspaceId) and does not describe the output or any side effects. Given the tool's complexity and the absence of schema descriptions, more detail is needed for an agent to invoke 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 description coverage is 0%, so the description must compensate. It only explains environmentId and key, but the schema also has confirm, confirmationText, confirmation_text, and workspaceId with no descriptions. The mention of 'requires confirmation' hints at these fields but does not clarify which one to use or their semantics. This is insufficient for a 6-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description begins with a specific verb 'Deletes', names the exact resource 'API environment variable', and identifies the two key identifiers (environmentId and key). It clearly distinguishes this deletion operation from related sibling tools like delete_environment or delete_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance is provided. The purpose is implied through the verb, but there is no mention of when to choose this over similar operations or any prerequisites. The policy statement hints at conditions but does not directly guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.delete_requestDelete API RequestADestructive
Soft-deletes a saved API request through the Unfour command bus. Dev/test require a content-bound confirmation_text before deletion; prod blocks by policy. Returns the remaining request count and confirms softDelete=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| requestId | Yes | ||
| workspaceId | No | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though destructiveHint=true is already in the annotations, the description goes further by explaining that this is only a soft-delete, that confirmation_text is required in dev/test, that prod blocks the action, and that the response will indicate the remaining request count and softDelete=true. This gives the agent important behavioral context beyond the annotation flags.
Agents need to know what a tool does to the 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 only two sentences and packs in the key environmental constraints, behavioral nuance, and return-value information. There is no filler aside from the brief 'through the Unfour command bus' phrase, which does not meaningfully hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 explains the operation's outcome and environment-specific guardrails well, and there is an output schema. However, with 5 parameters and no schema-level descriptions, the omission of confirm and workspaceId makes it incomplete for reliable invocation without additional tooling or user clarification.
Complex tools with many parameters or behaviors need more documentation. 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, the description had to carry the parameter semantics load, but it only clarifies confirmation_text. It does not explain the role of confirm, workspaceId, or the dual confirmationText/confirmation_text fields, leaving meaningful ambiguity about what values should be supplied.
Input schemas describe structure but not intent. Descriptions should explain 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 begins with 'Soft-deletes a saved API request,' clearly identifying the action and the resource. It also distinguishes this from hard deletion and ties the behavior to the Unfour command bus, which differentiates the tool from sibling delete tools like delete_collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context on when this tool is usable: dev/test require a confirmation_text, while prod blocks deletion by policy. It does not explicitly mention alternative tools, but for a delete-specific operation the environmental conditions are the key guidance and they are stated clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.get_historyGet API Request History DetailARead-onlyIdempotent
Returns a single API history entry with request and response detail through the Unfour command bus. Sensitive headers, query parameters, and body fields are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| historyId | Yes | The API history entry ID. | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| history | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral disclosure: sensitive headers, query parameters, and body fields are masked. This is useful context beyond the structured annotations because it sets expectations about data redaction before invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the core action stated first and a single important behavioral caveat second. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup tool with complete parameter descriptions, full annotations, and an output schema, the description covers all necessary context: what is returned, that it is a single entry, and that sensitive fields are masked. No additional behavior or return-format explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both historyId and workspaceId are already documented in the input schema. The description adds no parameter-specific detail beyond indicating the tool handles a single history entry, which maps to historyId but does not meaningfully extend the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and identifies the resource ('a single API history entry') with clear scope ('request and response detail'). It also implicitly distinguishes itself from the sibling list_history tool by emphasizing the singular entry and detailed view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied through 'single API history entry' and 'detail,' which suggests this tool fits when a specific history entry's full details are needed. However, it does not explicitly name alternatives such as list_history or state when not to use this tool, so guidance remains inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.get_requestGet API Request DetailARead-onlyIdempotent
Returns a saved API request with sensitive headers, query parameters, body fields, and URL parameters redacted through the Unfour command bus.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | The saved API request ID. | |
| includeBody | No | Whether to include the request body preview. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| request | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds value by disclosing that sensitive data is redacted, which is a behavioral trait not covered by annotations. It also mentions the command bus, but that's minor. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the main purpose. No wasted words, and it includes the key detail about redaction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and annotations, the description is fairly complete. It covers the main purpose and the redaction behavior. It could mention the includeBody parameter's effect, but the schema already describes that. Overall, it's sufficient for a read-only retrieval 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 100%, so both parameters are documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a saved API request with redaction of sensitive fields, which is specific and distinguishes it from sibling tools like list_requests or send_request. However, it doesn't explicitly mention the 'get' action or the resource type beyond 'API request', but the title and name make that 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 implies usage for retrieving a saved request, but it doesn't explicitly state when to use this vs alternatives like list_requests or get_history. It doesn't mention any prerequisites or exclusions, so it's adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.list_collectionsList API CollectionsARead-onlyIdempotent
Lists API request collections for the active workspace through the Unfour command bus.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| collections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile. The description adds the active-workspace scoping and command-bus context, but offers no additional behavioral details such as ordering, pagination, or workspace membership 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?
The description is one focused sentence, front-loads the verb and resource, and contains no filler or redundant detail. It is appropriately sized for such a simple list 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?
Given the low complexity, full schema coverage, safe-reader annotations, and presence of an output schema, the description provides enough context for an agent to select and invoke the tool effectively. No major missing information stands out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% because workspaceId has an embedded explanation and is optional. The description adds little beyond what the schema already says, relying on the schema to carry parameter 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?
The description uses a specific verb ('Lists') and identifies the resource ('API request collections') plus its scope ('for the active workspace'). This distinguishes it clearly from sibling tools like list_requests or workspace.list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 active-workspace scoping implies when the tool is useful, and the workspaceId parameter is covered in the schema. However, it does not provide explicit guidance about when to choose this over related tools such as api.list_requests or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.list_environmentsList API EnvironmentsARead-onlyIdempotent
Lists API environments and their variables for the active workspace through the Unfour command bus. Sensitive variable values are masked; non-sensitive values (e.g. base URLs) are shown so requests using variables can be understood.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| environments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the masking behavior for sensitive variable values and confirms non-sensitive values like base URLs are shown, which is critical context beyond the annotations. This complements the readOnlyHint:true and destructiveHint:false annotations by explaining the safe, read-only nature of the tool and its variable-inspection 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?
Two sentences, zero fluff. The first sentence establishes purpose and scope while acknowledging the umbrella architecture, and the second adds critical security/behavioral context in a compact way. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 1 optional parameter and strong annotations, the description covers the essentials: what it does, what it returns (including masking behavior), and scope. It doesn't need to over-explain return structure since output schema exists, and the brief did not require listing sibling alternatives explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (single optional workspaceId), and the description adds behavioral nuance by clarifying the parameter controls workspace selection — though it doesn't explicitly call out the fallback behavior like 'active workspace' — which is a minor gap. The description explains the parameter's masking behavior via the tool's response semantics, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists') with a clear resource ('API environments and their variables') and scope ('active workspace'). It implicitly distinguishes itself from sibling tools like unfour.workspace.list_variables (workspace variables) and unfour.api.list_collections (collections), though it does not explicitly 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?
The description clearly implies read-only usage by stating it 'lists' environments and variables, and explains the masking behavior without explicitly stating when not to use it or naming alternatives like list_variables. The context of 'requests using variables can be understood' gives clear signals for API request/realm use cases, only stopping short of explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.list_historyList API Request HistoryARead-onlyIdempotent
Lists recent API request/response history for the active workspace through the Unfour command bus. Sensitive URL parameters are masked. Useful for diagnosing when a request started failing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of history entries to return (default 50, max 200). | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| history | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds valuable context: it mentions that sensitive URL parameters are masked, which is a behavioral trait not covered by annotations. It also notes the scope ('active workspace') and the command bus mechanism, which adds transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and includes a practical use case. Every sentence earns its place: the first states what it does, the second adds a security-relevant detail and a usage hint. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no nested objects, output schema exists), the description is fairly complete. It covers purpose, scope, security masking, and a use case. It could mention pagination or the output format, but the output schema likely covers that. The description is adequate for an agent to select and invoke 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 description coverage is 100%, so both parameters (limit and workspaceId) are already well-documented in the schema. The description adds minimal extra meaning: it mentions 'active workspace' which aligns with workspaceId, and 'recent' which implies a default limit. But it doesn't add syntax or format details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent API request/response history for the active workspace, with a specific verb ('lists') and resource ('API request/response history'). It distinguishes from siblings like unfour.api.get_history (which likely retrieves a single history entry) and unfour.ssh.list_history (which is for SSH, not API).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear use case: 'Useful for diagnosing when a request started failing.' It implies when to use (when debugging API request failures) but does not explicitly mention when not to use or alternatives. However, the sibling context and the tool's name make it clear this is for API history, not SSH history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.list_requestsList API RequestsARead-onlyIdempotent
Lists saved API requests for the active workspace through the Unfour command bus. Sensitive URL parameters are redacted.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. | |
| collectionId | No | Optional collection ID filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| requests | 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 clear. The description adds value by noting that sensitive URL parameters are redacted, which is a behavioral trait not covered by annotations. It also mentions the 'command bus' mechanism, adding context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste. It front-loads the core purpose and adds one key behavioral note (redaction). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no required fields, output schema present), the description is complete enough. It covers purpose, scope, and a key behavioral detail. The output schema handles return value documentation. The only minor gap is not explicitly stating the default behavior of workspaceId, but the schema already covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (workspaceId and collectionId) are already documented in the schema. The description adds minimal extra meaning beyond the schema, only implying that workspaceId defaults to the active workspace. This meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved API requests for the active workspace, with a specific verb ('lists') and resource ('saved API requests'). It distinguishes from siblings like unfour.api.get_request (single request) and unfour.api.list_collections (collections) by focusing on requests and mentioning the command bus context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing requests in the active workspace, with optional filters for workspace and collection. It doesn't explicitly state when not to use it or name alternatives, but the context of 'active workspace' and optional filters provides clear usage context. Sibling tools like unfour.api.get_request suggest alternatives for single-request retrieval, but this isn't stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.send_requestSend API RequestA
Sends either a saved API request by requestId or one ad-hoc request described by method/url/headers/query/body through the Unfour command bus. Use it to reproduce API failures during agent troubleshooting. Dev allows all HTTP methods; test allows sends but marks mutating methods as write risk; prod only allows GET/HEAD/OPTIONS. Non-2xx HTTP responses return structured status/body data rather than MCP tool failure. Sensitive headers, cookies, URL tokens, and JSON body fields are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL for ad-hoc sends. | |
| body | No | Optional request body for ad-hoc sends. | |
| name | No | Optional display name for ad-hoc request history. | |
| query | No | Optional query parameters as an object or array of {key,value,enabled}. | |
| method | No | HTTP method for ad-hoc sends, such as GET, POST, PUT, PATCH, DELETE. | |
| headers | No | Optional headers as an object or array of {key,value,enabled}. Sensitive values are redacted in results. | |
| bodyKind | No | Optional body kind for ad-hoc sends (json, text, form, xml). Defaults to json. | |
| requestId | No | Optional saved API request ID to replay. Omit when sending method/url directly. | |
| timeoutMs | No | Optional timeout in milliseconds. Omitted or null defaults to 60000ms; 0 means unlimited; positive values are used exactly. | |
| workspaceId | No | Optional workspace ID for ad-hoc requests. Uses the active workspace if omitted. | |
| environmentId | No | Optional per-call environment override. It is used for variable resolution and saved request scripts without changing the workspace active environment. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| error | No | |
| source | Yes | |
| status | No | |
| headers | No | |
| bodyType | No | |
| sizeBytes | No | |
| truncated | No | |
| durationMs | No | |
| statusText | No | |
| bodyPreview | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the sparse annotations: non-2xx responses return structured status/body data instead of MCP tool failure, sensitive headers/cookies/URL tokens/JSON body fields are masked, and environment-specific method restrictions are disclosed. This materially changes how an agent interprets results and plans calls, and nothing contradicts 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?
Four sentences, front-loaded with the core action and mode distinction, followed by the troubleshooting use case, environment restrictions, and behavior notes. It's dense but every sentence earns its place; the last sentence packs two behaviors (error handling and masking) into one clause, slightly reducing scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, two modes, environment-dependent behavior) and the existence of an output schema, the description covers the critical non-obvious behaviors: structured non-2xx responses, masking, and per-environment method rules. Minor gaps remain, such as not explaining that saved request scripts run or elaborating on the mutation implications, but annotations (readOnlyHint=false) partially cover that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already documented (e.g., timeoutMs defaults to 60000ms, requestId should be omitted when sending method/url directly). The description adds the two-mode framing and groups parameters as method/url/headers/query/body, but the schema already carries most of the semantic weight, so the description's added value is marginal.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Sends') and a clear resource (API requests) with two precise modes: replaying a saved request by requestId or sending an ad-hoc request via method/url/headers/query/body. This distinguishes it from the sibling CRUD tools (create_request, update_request, delete_request, get_request), which manage request definitions rather than execute 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?
The description gives an explicit use case ('Use it to reproduce API failures during agent troubleshooting') and explains environment-specific constraints (dev allows all methods, test marks mutating as write risk, prod restricts to GET/HEAD/OPTIONS). It doesn't explicitly name alternatives or say when not to use it, but the execution-vs-management distinction from siblings is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.set_environment_variableSet API Environment VariableA
Creates or updates one API environment variable by environmentId and key through the command bus. Empty values are allowed. Omitted isSecret/description preserve existing metadata, and returned secrets are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| enabled | No | ||
| isSecret | No | ||
| description | No | ||
| workspaceId | No | ||
| environmentId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| created | Yes | |
| variable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (not read-only) and idempotentHint=false. The description adds meaningful behavioral details beyond these: 'Empty values are allowed,' 'Omitted isSecret/description preserve existing metadata,' and 'returned secrets are masked.' These are not derivable from the schema or annotations and help the agent understand edge-case 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 concise sentences, front-loaded with the core action. Each sentence adds distinct value: the action, the empty-value edge case, and the preservation/masking behavior. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 7-parameter tool with an output schema, the description covers the most critical contextual aspects: create-or-update behavior, empty values, metadata preservation, and secret masking. Missing details like the role of 'enabled' and 'workspaceId' are minor, and the presence of an output schema reduces the need to describe return values. Overall, sufficient for an agent to call the tool correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explicitly names environmentId and key as locators, implies value via 'Empty values are allowed,' and explains behavior for isSecret/description when omitted. However, it does not address the 'enabled' or 'workspaceId' parameters, leaving some parameter semantics undocumented. It partially compensates but is not 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?
The description opens with a specific verb phrase, 'Creates or updates,' and names the exact resource, 'one API environment variable,' with the identifying keys (environmentId and key). This clearly distinguishes the tool from siblings like workspace.create_variable or api.update_environment, and the title reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what the tool does, but it does not explicitly state when to use this tool versus alternatives such as workspace.create_variable or api.update_environment. There is no mention of exclusions or conditions that would route an agent to a different tool. The naming and context make the use case inferable, but the description itself offers no explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.update_collectionUpdate API CollectionA
Renames an API collection in local Unfour metadata through the command bus. Dev/test allow it; prod blocks by workspace policy.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| workspaceId | No | ||
| collectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (not read-only, not idempotent, not destructive), the description adds that the update goes through a command bus and has environment restrictions. However, it does not elaborate on side effects, reversibility, or permission requirements, providing only moderate additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and well-structured, conveying the essential information without unnecessary detail or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 rename operation, the description covers the action, the fact it modifies local metadata, and environment constraints. Since an output schema is present, return value details are not needed. It could mention that only the name field is updated, but that is implied by 'renames'. Overall, it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description implies that 'name' is the new collection name and 'collectionId' identifies the target collection, but it does not explicitly define each parameter. The workspaceId is mentioned only in the context of environment blocking, giving some insight but not a full explanation. The schema lacks descriptions, so the tool description partially compensates but could be more explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool renames an API collection, which is a specific and unambiguous action. It also mentions the local metadata aspect and command bus, making the purpose distinct and easy to understand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context by noting that the operation is allowed in dev/test environments but blocked in production, and it operates on a specific workspace. This helps users decide when to invoke it, though it does not explicitly compare with alternative tools like update_request or create_collection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.update_environmentUpdate API EnvironmentA
Updates an API environment name and variables through the command bus. Sensitive variable values are masked in the result. Dev/test allow it; prod blocks by workspace policy.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| variables | Yes | ||
| workspaceId | No | ||
| environmentId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely useful behavioral context beyond the annotations (readOnlyHint: false, destructiveHint: false) by disclosing that sensitive variable values are masked in the result and that production is blocked by workspace policy. These additions help an agent reason about mutation side effects and output handling. No contradiction with annotations — 'Updates' is consistent with readOnlyHint: 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?
Three short, purposeful sentences: purpose, security/masking behavior, and policy constraint. Zero wasted words; each sentence earns its place and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema (reducing the need to document return values) and given the tool's moderate complexity, the description covers the most important operational nuances (masking, prod block). However, it leaves the key update-semantics question unanswered — whether passing a partial variables array replaces or merges existing variables — which is critical for a mutation tool like this. The 'through the command bus' detail adds minimal value.
Complex tools with many parameters or behaviors need more documentation. 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 schema description coverage at 0%, the description must compensate, and it partially does by naming 'name and variables' and adding the masking nuance relevant to variable values. However, it doesn't clarify the semantics of the `enabled` field on each variable, how `workspaceId` resolves, or whether the variables array is a full replace or a merge — a critical distinction for an update tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Updates an API environment name and variables' uses a specific verb, specific resource, and names the exact fields being modified. It clearly differentiates from sibling tools like create_environment, delete_environment, and list_environments by stating the scope of the update. The naming of specific fields (name, variables) removes ambiguity about what the update covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Dev/test allow it; prod blocks by workspace policy' provides explicit context on which environments support this operation, preventing wasted calls in production. However, it doesn't explicitly name alternatives or say 'use create_environment to create, this to update' — the sibling contrast is implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.api.update_requestUpdate API RequestA
Updates a saved API request record through the Unfour command bus. Omitted fields keep their existing values. This mutates local metadata only; dev/test allow it, prod blocks or requires future explicit policy. Returns the updated redacted request summary.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| auth | No | ||
| body | No | ||
| name | No | ||
| query | No | ||
| method | No | ||
| headers | No | ||
| authJson | No | ||
| bodyKind | No | ||
| parentId | No | ||
| requestId | Yes | ||
| workspaceId | No | ||
| collectionId | No | ||
| parentFolderId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: it states the update is partial (omitted fields keep values), confined to local metadata, subject to environment policies, and that the return is a redacted summary. These details are not present in annotations and help set expectations around side effects and limitations. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core action and immediately follow with key behavioral notes. Every sentence delivers new information without fluff, making it highly 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?
The tool is moderately complex (14 params) and lacks schema-level descriptions, so the description carries a heavy burden. It provides some completeness through partial-update semantics and return format, but misses field-level clarifications and any mention of error conditions or required authentication. Given the output schema exists, it partially compensates, but the description still leaves 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?
With 0% schema description coverage, the description must explain parameter meanings, but it only offers the generic behavior that omitted fields retain prior values. It does not describe what each of the 14 parameters (url, auth, body, method, etc.) represents or how they interplay. This is inadequate for an agent to correctly use the tool, leaving significant ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Updates a saved API request record') and names the resource type (API request) via the command bus. It distinguishes itself from sibling tools like create_request and delete_request by using 'update' and referencing existing records. The mention of partial updates via omitted fields further clarifies its 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?
The description provides context for when to use the tool by noting it updates saved requests and explicitly states environment constraints ('dev/test allow it, prod blocks or requires future explicit policy'). However, it does not explicitly compare with alternatives like create_request or delete_request, nor does it state when to avoid using it, such as for new records.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.connection.listList Unfour ConnectionsARead-onlyIdempotent
Lists safe connection summaries for the active workspace through the Unfour command bus.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional connection type filter. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| connections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the bar is lower. The description adds useful context with 'safe summaries' and 'active workspace', giving agent signals about output scope and safety beyond the structured 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 one short, focused sentence. It front-loads the core action and adds scope and result-nature information without unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, a strong annotation profile, and an output schema, the description is reasonably complete. It could be more explicit about which connection types are covered and how this tool relates to db/ssh-specific connection listings, but nothing critical 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?
The single parameter is fully described in the input schema with an enum, default value, and clear description. Since schema description coverage is 100%, the description does not need to repeat parameter details; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies an action and scope: listing connection summaries scoped to the active workspace. It uses a concrete verb and noun phrasing, but it does not explicitly distinguish this generic connection listing from sibling tools such as unfour.db.list_connections or unfour.ssh.list_connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit guidance about when to use this tool versus alternatives such as db.list_connections or ssh.list_connections. It also does not mention whether the optional type filter changes which sibling tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.create_connectionCreate Database ConnectionA
Creates a saved database connection through the Unfour command bus. Optional password input is stored in the OS credential store and only a credential reference is persisted; the tool never returns the password or credential reference.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| name | Yes | ||
| port | No | ||
| driver | Yes | ||
| sslMode | No | ||
| database | No | ||
| password | No | ||
| readOnly | No | ||
| username | No | ||
| sqlitePath | No | ||
| workspaceId | No | ||
| credentialRef | No | ||
| credentialLabel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important side effects: password storage in the OS credential store, persistence of only a reference, and never returning the credential. This adds valuable transparency not covered by 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 concise, consisting of two clear sentences. It efficiently conveys the core action and important security details without unnecessary 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?
Given the large set of sibling tools, the description lacks sufficient context for when to use this specific tool. It does not mention any prerequisites, edge cases, or the expected outcome/return, and it does not clarify the role of many parameters. This leaves the agent with incomplete information for decision-making.
Complex tools with many parameters or behaviors need more documentation. 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 lists 13 parameters with no descriptions, and the description only mentions 'optional password input'. It fails to explain the meaning or purpose of host, port, sslMode, database, username, sqlitePath, workspaceId, credentialRef, or credentialLabel, leaving the agent without essential context for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: creating a saved database connection. It also distinguishes it from sibling tools like listing or testing connections, leaving no ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when creating a new connection, but it does not explicitly mention when to prefer this over alternatives such as test_connection or list_connections. The 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.
unfour.db.describe_tableDescribe Database TableARead-onlyIdempotent
Describes a table's structure (columns, types, nullability, primary keys) for a saved database connection through the Unfour command bus. Does not read table data.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Optional schema name filter (e.g. 'public'). | |
| tableName | Yes | Required table name to describe. | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. | |
| connectionId | Yes | Required saved database connection ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | Yes | |
| source | Yes | |
| connectionId | 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. The description adds the nuance that it 'Does not read table data', which is useful clarification beyond the annotations. However, it provides no additional behavioral details beyond that, so the added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly states the primary action and a crucial negative constraint. It contains no redundancy and is efficient in conveying the tool's 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?
The tool has an output schema indicating it returns table structure, so the description need not explain return values. The description covers the purpose, the constraint, and the prerequisite of a saved connection. It is complete for an agent to call the tool correctly, though it lacks explicit error-handling context, which is not essential 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?
The schema description coverage is 100%, so all four parameters are already documented in the schema. The description does not add any parameter-specific meaning or alternatives, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'Describes a table's structure (columns, types, nullability, primary keys)' for a saved database connection, and clarifies it 'Does not read table data'. This is a specific verb-resource pair that clearly distinguishes it from data-querying siblings like unfour.db.query_readonly and unfour.db.list_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for schema inspection and explicitly states it does not read table data, which hints at when not to use it. However, it does not name specific alternative tools or provide explicit when-to-use guidance, so it falls short of full explicitness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.executeExecute Database SQLA
Executes one SQL statement against a saved database connection through the Unfour command bus. Use for INSERT/UPDATE/DELETE/DDL when an agent needs to repair dev/test data. Dev allows non-high-risk writes by default; test allows small writes but high-risk SQL requires confirm; prod blocks writes. DELETE/UPDATE without WHERE, DROP, TRUNCATE, ALTER, and multi-row destructive statements require a second call with the returned confirmation_text. Returns affectedRows, statementType, durationMs, and engine safety metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| limit | No | ||
| dryRun | No | ||
| schema | No | ||
| catalog | No | ||
| confirm | No | ||
| timeoutMs | No | ||
| transaction | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| rows | No | |
| dryRun | Yes | |
| safety | No | |
| source | Yes | |
| columns | No | |
| rowCount | No | |
| truncated | No | |
| durationMs | No | |
| transaction | No | |
| affectedRows | No | |
| connectionId | Yes | |
| statementType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides extensive behavioral context beyond the annotations: environment-specific write permissions (dev default, test confirmation, prod blocked), a mandatory second-call confirmation flow for dangerous SQL, and details on return values (affectedRows, statementType, durationMs, engine safety metadata). This significantly enriches the minimal annotation set and is critical for safe, correct usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Approximately 90 words across five sentences, each adding distinct value: purpose, usage scenario, environment rules, confirmation flow, and return payload. It is information-dense but efficient, with the core purpose 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 high-complexity mutation tool with no schema descriptions, the description covers the essential operational aspects: what it does, when to use it, safety guardrails, and the confirmation protocol. It could expand on high-risk SQL specifics or `dryRun`/`transaction` behavior, but given it has an output schema and the description handles the most critical safety aspects, it is largely 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?
With 0% schema description coverage, the description carries full responsibility for clarifying parameters. It clarifies the `confirmation_text`/`confirmationText` flow and implies `connectionId` and `sql`. However, it leaves the other nine parameters (dryRun, transaction, schema, catalog, etc.) unexplained, which is a significant gap given the total absence of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Executes'), a clear resource ('one SQL statement against a saved database connection'), and a mode ('through the Unfour command bus'). It clearly differentiates from siblings like `unfour.db.query_readonly` and `unfour.db.explain` by specifying it's for INSERT/UPDATE/DELETE/DDL and data repair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicitly states when to use the tool: 'Use for INSERT/UPDATE/DELETE/DDL when an agent needs to repair dev/test data.' It also sets expectations about behavior in dev/test/prod environments, which informs when the tool is applicable. However, it does not explicitly name the read-only alternatives like `unfour.db.query_readonly`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.explainExplain Database QueryARead-onlyIdempotent
Runs EXPLAIN for a read query against a saved database connection through the Unfour command bus. Use before optimizing slow SELECT/WITH queries. This is read-only in dev/test/prod; it returns structured columns/rows, durationMs, and truncation metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| limit | No | ||
| schema | No | ||
| catalog | No | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| sql | Yes | |
| rows | No | |
| source | Yes | |
| columns | No | |
| rowCount | No | |
| truncated | No | |
| durationMs | No | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it is read-only in dev/test/prod and returns structured columns/rows, durationMs, and truncation metadata, which adds valuable behavioral context beyond the annotations. There is no contradiction with the annotations (readOnlyHint, idempotentHint, destructiveHint all align). The description also implies non-destructiveness and clarifies expected outputs, though it could mention that it does not execute the query for side effects or that it requires an existing connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, at two sentences, and front-loads the action and use case. Every phrase adds value: the command bus, read-only guarantee, use-before-optimization guidance, and return value highlights. No filler or repetition of schema 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?
Given the tool's moderate complexity (7 params, but only 2 required) and the presence of an output schema (which explains return values), the description provides sufficient context for selection and core usage. It covers the purpose, use case, safety profile, and return format highlights. The main gap is the lack of parameter semantics, but the required parameters (connectionId, sql) are intuitive from the description, and the output schema handles return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the seven parameters. It mentions 'saved database connection' and 'read query', but does not explain parameters like limit, schema, catalog, timeoutMs, workspaceId, or connectionId. The description adds minimal semantic detail beyond the schema; it indicates connectionId and sql are key but does not explain their roles or optionality, so the agent may struggle with how to set these parameters for optimal use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs EXPLAIN for a read query against a saved database connection, which is a specific verb+resource combination. It distinguishes itself from siblings like unfour.db.query_readonly and unfour.db.execute by focusing on query optimization via EXPLAIN, making its purpose 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 explicitly says to use it 'before optimizing slow SELECT/WITH queries', giving a clear use case. However, it does not explicitly mention when NOT to use it or name alternative tools for other scenarios, such as unfour.db.query_readonly for actual data retrieval, though the context implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.list_connectionsList Database ConnectionsARead-onlyIdempotent
Lists saved database connections for the active workspace through the Unfour command bus. Returns safe summaries without passwords, tokens, or connection strings.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| connections | 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 valuable context: it returns 'safe summaries without passwords, tokens, or connection strings', which is important behavioral information beyond the annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The first sentence states the purpose and scope, the second adds a critical safety detail. Perfectly front-loaded and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 optional param, no required params, output schema exists). The description covers the purpose, scope, and a key safety behavior. It doesn't describe the output format, but the output schema exists, so that's not required. Complete enough for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter (workspaceId), so the schema already documents it. The description adds the context that it uses the active workspace if omitted, which is helpful but not extensive. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved database connections for the active workspace, using a specific verb ('Lists') and resource ('saved database connections'). It distinguishes from siblings like unfour.connection.list and unfour.ssh.list_connections by specifying 'database' and 'active workspace'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it's for listing database connections in the active workspace, and the optional workspaceId parameter allows targeting a different workspace. It doesn't explicitly state when not to use it or name alternatives, but the context is clear enough given the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.list_tablesList Database TablesARead-onlyIdempotent
Lists tables and views for a saved database connection through the Unfour command bus. Requires a saved connectionId; does not accept ad-hoc connection strings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tables to return (default 200, max 500). | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. | |
| connectionId | Yes | Required saved database connection ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| tables | Yes | |
| truncated | Yes | |
| totalTables | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, openWorld, idempotent, and destructive=false, covering the main behavioral aspects. The description adds that it lists tables and views, which is consistent but does not provide additional behavioral 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 composed of two clear and concise sentences. It efficiently states the purpose in the first sentence and a key constraint in the second, with no redundant or ambiguous wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not explain return values. It adequately captures the main use case (listing tables/views for a saved connection) and the essential input constraints, making it complete for the tool's simple purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions). The description adds a semantic nuance by stating that connectionId must be a saved connection and not an ad-hoc string, which clarifies the expected input format beyond the schema's own 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 clearly states the action (lists), the resource (tables and views), and the context (saved database connection). It also explicitly notes that ad-hoc connection strings are not accepted, which helps distinguish it from potential alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that a saved connection is required and that ad-hoc connection strings are not accepted, providing clear conditions for use. However, it does not explicitly mention alternatives or when not to use this tool, though the constraints are sufficiently indicative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.query_readonlyExecute Read-Only SQL QueryARead-onlyIdempotent
Executes a read-only SQL query against a saved database connection through the Unfour command bus. Only SELECT, WITH, SHOW, DESCRIBE, DESC, and EXPLAIN statements are allowed. Write operations, DDL, and multi-statement queries are rejected. Optional catalog, schema, and timeoutMs match unfour.db.execute and unfour.db.explain.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Required SQL query. Only read-only statements are allowed. | |
| limit | No | Maximum number of rows to return (default 100, max 1000). | |
| schema | No | Optional schema to resolve unqualified names against. | |
| catalog | No | Optional catalog (database) to run the query against. | |
| timeoutMs | No | Optional per-statement timeout in milliseconds. | |
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. | |
| connectionId | Yes | Required saved database connection ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| rows | No | |
| source | Yes | |
| columns | No | |
| rowCount | No | |
| truncated | No | |
| durationMs | No | |
| connectionId | 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 the specific allowed statement types and the rejection of write/DDL/multi-statement queries, which is useful behavioral context beyond the annotations. It doesn't mention return format, but the output schema exists, so that's covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste. The core purpose and constraints are front-loaded, and the sibling reference is concise. 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?
Complete for a read-only query tool. The description covers allowed statements, rejected operations, and parameter alignment with siblings. The output schema exists, so return values are documented. An agent has everything needed 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 description coverage is 100%, so the schema already documents all 7 parameters. The description adds the note that optional catalog, schema, and timeoutMs match unfour.db.execute and unfour.db.explain, which is a small addition. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Executes'), a resource ('read-only SQL query against a saved database connection'), and the allowed statement types. It clearly distinguishes this from unfour.db.execute and unfour.db.explain by naming them as siblings and noting the matching optional parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicitly lists which SQL statements are allowed and which are rejected, and it references sibling tools (unfour.db.execute and unfour.db.explain) for the optional parameters. This gives clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.db.test_connectionTest Database ConnectionARead-onlyIdempotent
Tests connectivity to a saved database connection through the Unfour command bus. Returns whether the connection succeeded and the server version when available.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Optional workspace ID. Uses the active workspace if omitted. | |
| connectionId | Yes | Required saved database connection ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| source | Yes | |
| message | Yes | |
| connectionId | Yes | |
| serverVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions the return value (success and server version), which is informative. Combined with annotations (readOnly, idempotent, non-destructive), it gives a clear picture of the tool's behavior, though it doesn't explicitly state the lack of side effects beyond the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and directly states the action and expected output. No unnecessary details or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 test tool, the description sufficiently covers what the tool does and what it returns. It does not require extensive elaboration, and the provided information is complete in 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?
The description does not add any details about the parameters beyond what the input schema already provides. Since the schema has clear descriptions for both workspaceId and connectionId, the description adds no extra meaning, aligning with the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: testing connectivity to a saved database connection. The action is specific and unambiguous, and the tool name reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly contrast this tool with related alternatives (e.g., create_connection, list_connections). While the name implies its role, there is no guidance on when to prefer it over other connection-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.cancel_task_runCancel SSH Task RunB
Cancels an active SSH task run through the command bus.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with annotations (a mutating operation where readOnlyHint=false). It adds 'active' scoping (only running tasks can be canceled) and 'command bus' mechanism, but doesn't disclose what happens if the run has already completed or failed, nor the non-idempotent behavior hinted by idempotentHint=false. 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?
A single, tightly worded sentence that front-loads the verb and object with zero filler. Every word earns its place, and the sentence is appropriately sized for this simple cancellation 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 2-parameter cancel operation with an output schema available, the description is minimally adequate. It identifies the action, target, and mechanism, but omits useful context like behavior on already-finished runs. The presence of an output schema mitigates some gaps, though the description could have mentioned cancellation semantics without bloating the 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?
Schema description coverage is 0%, so the description carried the full burden for explaining parameters but says nothing at all about them. The parameter names runId and workspaceId are reasonably self-explanatory, which is the only saving grace, but no additional semantic detail is provided for the two-parameter 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?
The description uses a specific verb ('Cancels') with a clear object ('active SSH task run') and states the mechanism ('through the command bus'). This clearly differentiates cancellation of a run from sibling operations like clearing runs or reading run logs, though it doesn't explicitly contrast with the similar-sounding clear_task_runs sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Given siblings like unfour.ssh.clear_task_runs and unfour.ssh.run_task, an agent could easily confuse 'cancel a run' with 'clear runs' — explicit when/when-not guidance would be valuable, but none is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.clear_task_runsClear SSH Task RunsADestructive
Deletes saved SSH task run records and local log files for one task or the workspace. Guarded policy requires content-bound confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | ||
| confirm | No | ||
| workspaceId | No | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose destructiveHint=true and readOnlyHint=false. The description adds the important detail that both data records and local log files are removed, and that a guarded confirmation policy is mandatory. This goes beyond the raw annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no superfluous text. The first sentence establishes the core action and scope, the second sentence gives a critical policy 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?
Given the destructive nature and five parameters, the description covers the basic scope and safety requirement but omits the relationship between taskId and workspaceId and the precise confirmation flow. The output schema is provided, so return values are not needed in the description, but enough ambiguity remains to warrant a middling score.
Complex tools with many parameters or behaviors need more documentation. Simple 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 provides only high-level hints about the parameters ('one task or the workspace' and 'content-bound confirmation'). The meaning of five parameters, including the duplicate confirmationText/confirmation_text fields and how to satisfy the guard, are left unresolved.
Input schemas describe structure but not intent. Descriptions should explain 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, 'Deletes', names the destroyed resources ('SSH task run records and local log files'), and defines scope ('for one task or the workspace'). It clearly distinguishes this tool from siblings like cancel_task_run or delete_task, which affect different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool: when permanently removing saved run history and logs for a task or workspace. The 'Guarded policy requires confirment' clause provides a usage constraint, but it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.create_connectionCreate SSH ConnectionA
Creates a saved SSH connection through the Unfour command bus. Optional secret input is stored in the OS credential store by the SSH engine and only a credential reference is persisted; the tool never returns the secret or credential reference.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| port | No | ||
| secret | No | ||
| keyPath | No | ||
| authKind | Yes | ||
| username | Yes | ||
| workspaceId | No | ||
| credentialRef | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: optional secret input is stored in the OS credential store, only a credential reference is persisted, and the tool never returns the secret or credential reference. This meaningfully discloses side effects and data handling. It does not mention all possible side effects, but the added detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and contains no filler. Every sentence contributes meaningful information about creation and credential handling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has nine parameters, four required fields, and zero schema-level descriptions, the description is not complete enough for reliable invocation. It covers credential storage well but omits guidance on authKind selection, keyPath vs. secret, port defaults, workspaceId usage, and the meaning of credentialRef as an input. The presence of an output schema reduces the need to explain return values, but parameter context remains a major 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 the description must compensate for the nine undocumented parameters. It only clarifies the behavior of 'secret' and 'credentialRef', leaving host, username, authKind, port, keyPath, and workspaceId unexplained. This is insufficient for an agent to correctly populate the 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 the tool's action: 'Creates a saved SSH connection through the Unfour command bus.' The verb 'creates' plus the resource 'saved SSH connection' precisely identifies the tool's function and distinguishes it from siblings like unfour.ssh.list_connections or unfour.db.create_connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for persisting an SSH connection, but it does not explicitly state when to use this tool versus alternatives such as unfour.ssh.exec for ad-hoc commands or unfour.db.create_connection for database connections. There is clear context but no explicit when/when-not guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.delete_taskDelete SSH TaskBDestructive
Soft-deletes a saved SSH task. Guarded policy requires content-bound confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| confirm | No | ||
| workspaceId | No | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is known. The description adds 'soft-deletes' and 'Guarded policy requires content-bound confirmation,' which provides extra context about the deletion being reversible and requiring confirmation. However, it doesn't detail what happens to associated data or the exact confirmation mechanism. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (two sentences) and front-loaded with the main action. It is concise, but the second sentence about 'Guarded policy' is vague and could be more specific. Overall, it is efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, 0% schema coverage, and a destructive action, the description is insufficient. It does not explain the confirmation parameters, the workspaceId requirement, or the soft-delete behavior in detail. The output schema exists but the description doesn't clarify what the response will be. The tool is complex enough that more detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. The description only mentions 'content-bound confirmation' but does not explain the purpose of taskId, confirm, workspaceId, confirmationText, or confirmation_text. The presence of both confirmationText and confirmation_text is confusing and unexplained. The description fails to clarify which parameters are required or how 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 clearly states the action: 'Soft-deletes a saved SSH task.' It specifies the resource (SSH task) and the operation (delete), and the 'soft-deletes' qualifier adds nuance. It distinguishes from siblings like 'clear_task_runs' and 'cancel_task_run' by focusing on deleting a saved task, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Guarded policy requires content-bound confirmation,' which implies a usage condition (confirmation needed) but does not explicitly state when to use this tool versus alternatives like 'clear_task_runs' or 'cancel_task_run'. It provides some context but lacks explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.duplicate_taskDuplicate SSH TaskB
Duplicates a saved SSH task and its steps through the command bus.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false and carry no safety or behavioral signal. The description adds some context ('through the command bus', copies steps) but does not disclose side effects, whether a new task ID is generated, permissions needed, or what happens to the original task. This is minimal beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence. Every word contributes to defining the operation and its scope without unnecessary 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 the low parameter coverage and false annotations, the description is too sparse for a mutation tool. It does not clarify required vs optional inputs, return behavior, or how duplicates are saved—leaving the agent to infer critical operational details despite an output schema being 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%, and the description does not explain taskId or workspaceId. While taskId is reasonably inferable, workspaceId's role is unspecified, and no compensation is provided for the lack of parameter metadata.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Duplicates a saved SSH task') and explicitly scopes the scope of duplication ('and its steps'). It clearly distinguishes from sibling tools like save_task, run_task, and 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?
The verb 'duplicates' implies the use case—copying an existing task—but there is no explicit guidance on when to choose this over save_task, get_task, or other related tools. 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.
unfour.ssh.execExecute SSH CommandA
Executes one non-interactive SSH command on a saved connection. Use for dev/test repair loops after diagnostics identify a fix. Dev allows ordinary commands; test allows safe diagnostics and guarded commands; prod only allows read-only diagnostic commands. High-risk commands such as rm -rf, restart/shutdown, kill, docker/kubectl delete, and curl-pipe-shell require confirm with the returned confirmation_text.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| env | No | ||
| command | Yes | ||
| confirm | No | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals important behavioral constraints: environment tier permissions, high-risk command examples, and the requirement to use a returned confirmation_text for guarded commands. These details add real safety context and do 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?
Three sentences, front-loaded with purpose, then usage context, then safety/confirmation behavior. The high-risk command list is long but directly actionable, so 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 an arbitrary command executor, the description covers environment gating, typical usage, and confirmation flow. It would be stronger with explicit mention of workspaceId/cwd/env/timeout behavior, but the presence of an output schema reduces the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. 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, the description needed to compensate for all 9 parameters, but it only clarifies command, connectionId implicitly, and confirmation_text. Parameters like cwd, env, timeoutMs, workspaceId, confirm, and the duplicate confirmationText/confirmation_text are left unexplained, making the schema's 0% coverage a significant 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 opens with a specific verb+resource: 'Executes one non-interactive SSH command on a saved connection.' This clearly differentiates it from diagnostic siblings like run_diagnostic and file-based tools like read_file/write_file/list_dir.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an explicit use case ('Use for dev/test repair loops after diagnostics identify a fix') and environment-specific guidance for dev/test/prod. It does not explicitly state when not to use the tool or name alternative siblings, so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.get_taskGet SSH TaskARead-onlyIdempotent
Returns one SSH task with steps and local connection binding. Sensitive fields inside step configuration are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so safety is covered. The description adds valuable behavior beyond annotations by revealing that the returned object includes steps and local connection binding, and that sensitive step-configuration fields are masked. No contradiction 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?
The description is two concise sentences with no filler. It front-loads the primary purpose in the first sentence and adds the essential security note in the second. Every word contributes 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 there is an output schema and the annotations describe the read-only, idempotent nature, the description is sufficiently complete for a get-by-id operation. It addresses the notable extra context (masking, binding, steps) without redundant return-format details. It could clarify workspaceId behavior, but the tool is simple enough to remain functional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the parameters at all. While 'Returns one SSH task' implies taskId is the selector, the optional workspaceId is entirely unexplained, leaving a semantic gap for that parameter.
Input schemas describe structure but not intent. Descriptions should explain 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 'Returns one SSH task with steps and local connection binding,' which is a specific verb+resource+scope statement. It clearly differentiates from sibling tools like list_tasks (plural listing) and read_task_run_log by focusing on task configuration details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when a single SSH task's full details are needed, including steps and binding. It does not explicitly state when not to use it or name alternatives, but the context 'one SSH task' is sufficient to separate it from list/run/delete operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.list_connectionsList SSH ConnectionsARead-onlyIdempotent
Lists saved SSH connections for a workspace through the Unfour command bus. Returns connection id, name, host, port, username, and environment; never returns passwords, private keys, passphrases, or credential references.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only and idempotent, but the description adds crucial behavioral detail by explicitly stating that passwords, private keys, passphrases, and credential references are never returned. It also lists the exact fields that are returned, offering valuable transparency beyond the structured 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 concise sentences that immediately state the action and provide useful details without any fluff. It is well-structured and front-loaded, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema plus safety annotations, the description is complete enough. It covers the purpose, the return contents, and the critical security behavior, providing all necessary context for an agent to invoke the tool 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?
The description references the workspace scoping in the phrase 'for a workspace', which implicitly points to the workspaceId parameter, but it does not explicitly detail the parameter's optionality or type beyond what the schema provides. With 0% schema description coverage, the description only partially compensates for the missing 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?
The description uses a specific verb 'Lists' with a clear resource ('saved SSH connections') and scope ('for a workspace'), making it easy to understand the tool's function. It also distinguishes itself from sibling tools that create or manage connections by focusing on the read-only list 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 clearly implies the tool is used when you need to list the saved SSH connections for a workspace. It does not explicitly mention alternatives or exclusions, but the purpose is self-evident and distinct from sibling tools, providing adequate usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.list_dirList SSH DirectoryARead-onlyIdempotent
Lists a bounded remote directory through SSH and returns structured entry summaries when the remote find utility is available. Safe in dev/test/prod.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description only needs to add extra context. It does so by noting the operation is 'bounded' and that results are structured only when the remote find utility is available, which are useful behavioral details beyond the annotations. The description 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 two sentences long, front-loaded with the main action, and contains no wasted words. It efficiently communicates the core purpose and a key behavioral condition without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema covers return structure, the description lacks clarity on parameter usage, the meaning of 'bounded,' and what happens when the find utility is unavailable. These gaps are significant given 0% schema description coverage and the tool's reliance on a remote utility. The description could be more complete with explicit parameter notes and fallback 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?
The schema description coverage is 0%, so the description must compensate by explaining key parameters like path and limit. It does not mention any parameter meanings or usage requirements. The only hint is 'bounded' possibly hinting at limit, but it is not explicit. This is insufficient for a 5-parameter tool with zero schema explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Lists a bounded remote directory through SSH and returns structured entry summaries when the remote find utility is available.' It uses a specific verb (lists), identifies the resource (remote directory), and adds a conditional detail about the find utility, distinguishing it from general exec or file 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?
The description implies this tool is for listing directories, but it does not explicitly state when to use it over alternatives like exec or read_file. It does mention 'Safe in dev/test/prod,' which hints at safe execution contexts, but lacks explicit when-not and alternative guidance. This is adequate but not thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.list_historyList SSH Command HistoryARead-onlyIdempotent
Lists structured SSH command history for the current MCP workspace. Returns connection, command, executedAt, and cwd/exitCode/durationMs when recorded. Results are workspace-scoped and never include terminal buffers or full session logs. Sensitive commands are excluded or replaced with [redacted command]. Use this to inspect recent host activity, then draft a reusable SSH Task for the user to confirm. Do not call unfour.ssh.save_task unless the user explicitly asks to save the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of history entries to return (default 50, max 200). | |
| query | No | Optional substring filter matched against the stored command text. | |
| since | No | Optional inclusive RFC 3339 lower bound on executedAt. | |
| until | No | Optional inclusive RFC 3339 upper bound on executedAt. | |
| workspaceId | No | Optional workspace ID. Uses the active MCP workspace if omitted. History from other workspaces is never returned. | |
| connectionId | No | Optional saved SSH connection ID. Unknown or out-of-workspace connections return an empty list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| history | Yes | |
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool safe (readOnlyHint=true, destructiveHint=false), and the description adds meaningful behavioral disclosure beyond those flags: sensitive commands 'are excluded or replaced with [redacted command]', results are 'workspace-scoped', and fields are returned 'when recorded'. The redaction behavior and scope guarantees are exactly the kind of non-obvious context agents need and are not inferable from 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?
Four tight sentences and roughly 90 words cover purpose, return shape, scope guarantees, redaction policy, and the follow-up workflow. The first sentence front-loads the core purpose, and no sentence is wasted on restating annotations or schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 6 optional (100% schema-documented) parameters, an output schema, and rich annotations, the description covers the remaining gaps: what fields come back, what is excluded (terminal buffers, session logs), redaction behavior, and the recommended post-step (drafting a task). No material behavioral question is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the rubric baseline is 3. All six parameters are individually documented with type, constraints (max 200, RFC 3339 format), and edge-case behavior ('Unknown or out-of-workspace connections return an empty list'). The description adds workspace-scoping and redaction context, but no parameter-level semantics that meaningfully exceed what the schema already provides, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+scope: 'Lists structured SSH command history for the current MCP workspace,' and enumerates the returned fields (connection, command, executedAt, cwd/exitCode/durationMs). It clearly differentiates from close siblings like unfour.api.list_history and unfour.activity.list by scoping to SSH commands and explicitly ruling out terminal buffers/session logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is present: 'Use this to inspect recent host activity, then draft a reusable SSH Task for the user to confirm,' along with a pointed when-not instruction: 'Do not call unfour.ssh.save_task unless the user explicitly asks to save the draft.' It could be stronger by naming read-alternatives (e.g., when to prefer activity.list), but the primary workflow and one key guardrail are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.list_task_runsList SSH Task RunsARead-onlyIdempotent
Lists saved run summaries for one SSH task without exposing local log paths.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by clarifying the return specifically contains 'saved run summaries' and explicitly excludes 'local log paths', which is a meaningful behavioral detail beyond the annotations. It does not repeat the annotation info but enriches the agent's understanding of the data 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?
The description is a single sentence of 15 words, immediately front-loading the action ('Lists') and object ('saved run summaries') and adds one critical exclusion at the end. Every word earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 this is a read-only list operation with a wealth of sibling context (like list_tasks, exec, read_file), the description provides solid coverage of the core purpose. The presence of an output schema (even though not shown) reduces the need to describe return values. The only gap is the lack of parameter semantics, but for a simple listing tool with two parameters, the description adequately serves an agent's basic need without padding.
Complex tools with many parameters or behaviors need more documentation. 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, the description fails to explain the purpose of 'taskId' and 'workspaceId'. While 'taskId' might be inferable from the tool name, 'workspaceId' is optional and its role is unclear. The description does not clarify whether workspaceId is needed for filtering or required in any context, and no parameter details are provided to compensate for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific language: 'Lists saved run summaries for one SSH task' with the verb 'Lists', a specific resource ('saved run summaries'), and scope ('for one SSH task'). It also differentiates from siblings by noting it does not expose 'local log paths', which is useful given the related tool `unfour.ssh.read_task_run_log`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clearly implies a read-only, non-destructive listing use case with 'saved run summaries'. It gives context that local log paths are not exposed, which helps the agent know this is not the tool for retrieving full logs. However, it does not explicitly name an alternative or state when NOT to use it in favor of a sibling tool, though it comes close.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.list_tasksList SSH TasksBRead-onlyIdempotent
Lists saved SSH task summaries for a workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds that it lists 'summaries' which implies a high-level view, but does not disclose what fields are included, whether it returns all tasks or paginated, or any specifics about the output format. With annotations covering the safety, the description provides minimal additional behavioral context, so 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?
The description is a single sentence, very concise, and directly states the purpose. No fluff or redundant information. It's appropriately brief for a simple list 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?
Given the tool's simplicity (one parameter, read-only list operation), the description might be sufficient. However, there is an output schema (not shown) that could provide details, and the description does not mention any pagination, filtering, or ordering. It also doesn't clarify the difference between 'task summaries' and other task-related tools. The presence of sibling tools like list_task_runs suggests there is nuance missing, so it's 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?
There is one parameter, workspaceId, and the schema coverage is 0% (the property description is empty). The description says 'for a workspace' which implies workspaceId is needed, but it doesn't clarify the semantics of the workspaceId (e.g., where to find it, if it's optional, or if it filters by workspace). With no param descriptions in the schema, the description should compensate, but it provides only a vague hint. Since it's the only parameter and the description mentions workspace, it adds minimal value, but not enough for a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists saved SSH task summaries for a workspace, using the verb 'list' with a specific resource (SSH task summaries) and a scope (workspace). However, it does not differentiate from sibling tools like unfour.ssh.list_task_runs or unfour.ssh.get_task, so it could be confused with those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. The description does not mention that this tool is for listing task summaries (metadata) as opposed to task runs or individual task details, nor does it mention any preconditions or context. Sibling tools list_task_runs, get_task, and others exist but the description offers no differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.patch_filePatch SSH FileA
Applies a small search/replace patch to a remote file through SSH and returns a diff summary without file content. Dev allows single-match project-file patches; test, system paths, or multi-match replacements require confirmation; prod is blocked by policy.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| search | Yes | ||
| confirm | No | ||
| replace | Yes | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (all hints false), so the description carries the burden of disclosing behavior. It states it returns a diff without file content, and explains confirmation requirements and prod blockage. This adds useful behavioral context beyond the annotations, though it doesn't detail side effects or error 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?
The description is two sentences, front-loaded with the primary purpose and then environment-specific rules. No filler or redundancy; every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 params, output schema, environmental constraints), the description provides a solid high-level overview but lacks parameter semantics and fails to address edge cases like searches with no match or multiple matches beyond confirmation. The output schema covers return values, but the description doesn't explain the confirmation flow or the distinction between confirmationText and confirmation_text 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 description does not explain any of the 9 parameters beyond indirectly mentioning search and replace. It fails to clarify the meaning of confirm, confirmationText, confirmation_text, timeoutMs, workspaceId, or connectionId, leaving the agent without guidance for these 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 clearly states the tool applies a small search/replace patch to a remote file via SSH and returns a diff summary. It uses a specific verb (applies) and resource (remote file via SSH), and distinguishes itself from sibling tools like unfour.ssh.write_file and unfour.ssh.read_file by focusing on patching rather than full writes or reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 environment-specific usage rules: dev allows single-match patches, test/system/multi-match require confirmation, prod is blocked. This gives clear context on when it's appropriate and when confirmation is needed, though it doesn't explicitly contrast with alternatives like write_file or exec.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.read_fileRead SSH FileARead-onlyIdempotent
Reads a bounded remote file slice or tail through SSH. Useful for logs and config inspection. Dev/test/prod allow ordinary reads; output is capped and line-redacted by the SSH engine. Sensitive paths may still be blocked by connection or OS permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| offset | No | ||
| tailLines | No | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context beyond these: 'output is capped and line-redacted by the SSH engine' and 'Sensitive paths may still be blocked by connection or OS permissions.' This gives the agent crucial expectations about limits and failure modes.
Agents need to know what a tool does to the 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 sentences, front-loaded with the primary action, and every sentence adds distinct value (use cases, environment allowance, output/security behavior). No wasted words or repetition of schema/annotation 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?
Given 7 parameters and 0% schema description coverage, the description could have been more thorough about parameter semantics. However, the existence of an output schema covers return value details, and the description explains output caps, redaction, and permission issues. It is reasonably complete for a read-only tool, but not fully exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple 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 hints at parameter roles via 'bounded remote file slice or tail' (limit/offset/tailLines) and 'through SSH' (connectionId), but it does not explain timeoutMs, workspaceId, or provide per-parameter detail. The compensation is partial, warranting a mid-range score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Reads a bounded remote file slice or tail through SSH' and explicitly mentions use cases ('logs and config inspection'). It distinguishes itself from siblings like write_file, exec, and read_task_run_log by specifying the bounded file read behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear context: 'Useful for logs and config inspection' and notes that 'Dev/test/prod allow ordinary reads.' However, it does not explicitly mention when not to use it or compare to similar tools like read_task_run_log, so it lacks full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.read_task_run_logRead SSH Task Run LogARead-onlyIdempotent
Reads a capped SSH task run log. The SSH engine redacts configured secret inputs and the MCP response omits the local log path.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate a safe read-only operation, and the description adds valuable behavioral details: the log is capped, configured secret inputs are redacted, and the local log path is omitted from the response. This exceeds the annotation-only baseline without contradicting 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?
The description is extremely concise: two short sentences, each adding distinct information. There is no filler or repetition of the structured 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?
Given the tool's low complexity, the required runId, and the presence of an output schema, the description covers the primary behavioral aspects. Minor gaps remain around the meaning of 'capped' and the role of workspaceId, but these are modest for a simple read-only log 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 should compensate by explaining the parameters. It does not explain how runId or workspaceId should be used. The parameter names are somewhat self-explanatory, but the description adds no semantic detail about 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 uses a specific verb and resource: 'Reads a capped SSH task run log.' This clearly distinguishes it from sibling tools like listing or running tasks, and the title aligns exactly with the described 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 intended use case is implied by the name and description: retrieve the run log for an SSH task run. However, there is no explicit guidance about when to use this rather than related tools such as list_task_runs or get_task, and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.reorder_tasksReorder SSH TasksA
Reorders all active SSH tasks in a workspace. taskIds must contain the exact active task set.
| Name | Required | Description | Default |
|---|---|---|---|
| taskIds | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent write operation. The description adds useful context by stating it reorders all active tasks and requires the exact task set. However, it does not disclose failure behavior, stale-task handling, or workspaceId 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?
Exactly two sentences with no filler; the core operation and the critical constraint are both present and front-loaded. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description captures the main invariant and scope well, and an output schema is present, so the return value need not be described. Minor gaps remain around workspaceId semantics and edge cases like stale taskIds, but overall the tool is adequately specified for selection and 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?
With 0% schema description coverage, the description supplies the essential meaning for taskIds: it must be the exact active task set and its order determines the new order. However, workspaceId is left undefined in both the schema and description, so the description 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?
Clearly states it reorders active SSH tasks in a workspace, with a precise scope and the key constraint that taskIds must be the exact active set. This distinguishes it from sibling task tools like delete_task, run_task, and save_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the agent must obtain the current active task set before calling, but it does not explicitly say when to prefer this tool over other task operations or when not to use it. Usage guidance is mostly implicit through the 'exact active task set' constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.run_diagnosticRun SSH Diagnostic CommandARead-onlyIdempotent
Runs a single read-only diagnostic command on a saved SSH connection through the Unfour command bus and returns captured stdout/stderr. Safe in dev/test/prod for allowlisted diagnostics. For broader command execution use unfour.ssh.exec, which applies environment policy and high-risk confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds valuable context about being read-only and restricted to allowlisted diagnostics, which aligns with annotations. No contradictions; only minor gap is not detailing exact behavior on failures or non-allowlisted commands.
Agents need to know what a tool does to the 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, first states action and result, second provides safety and alternative. Zero fluff, all information earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations covering safety, the description covers purpose, scope, restrictions, and alternatives. Even with moderate tool complexity, it is complete for the agent to decide correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple 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. It mentions connectionId and command implicitly via 'saved SSH connection' and 'diagnostic command', but doesn't explain timeoutMs or workspaceId. Baseline 3 is appropriate since it adds some meaning but not full compensation for all 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 'Runs a single read-only diagnostic command' on a saved SSH connection, with specific output ('returns captured stdout/stderr'). It distinguishes itself from unfour.ssh.exec by explicitly contrasting scope ('allowlisted diagnostics' vs broader execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 says 'Safe in dev/test/prod for allowlisted diagnostics' and directs users to unfour.ssh.exec for broader execution, naming the alternative and clarifying when to use this tool vs not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.run_taskRun SSH TaskA
Starts a saved SSH task on its selected saved connection. Production/read-only policy blocks execution; guarded policy requires content-bound confirmation because a task may execute commands or transfer files.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | No | ||
| taskId | Yes | ||
| confirm | No | ||
| workspaceId | No | ||
| connectionId | No | ||
| confirmationText | No | ||
| secretInputNames | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and idempotentHint=false. The description enhances this by clarifying the execution policy behavior: blocked on production/read-only and requiring content-bound confirmation on guarded systems because tasks may execute commands or transfer files, adding genuine value about side effects without contradicting 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 sentences with essential information about execution policy and safety delivered efficiently. Each sentence serves a purpose, though the 'selected saved connection' phrasing is slightly 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 task-runner with nested objects and an output schema, the description gives appropriate context about side effects and policy restrictions. The existence of an output schema reduces the need to document return values, and the description covers the ambiguity of what 'saved task' means in terms of policy constraints effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description focuses on the tool's behavior rather than explaining individual parameters. The description clarifies the 'inputs' concept generally by noting tasks may execute commands or transfer files, but with 8 parameters and no explanation of confirm vs confirmationText vs confirmation_text (a likely inconsistency worth mentioning) or secretInputNames, the description could have compensated more for the lack of schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a saved SSH task on its selected saved connection, using the specific verb 'starts' with the resource being the saved SSH task/connection. It partially distinguishes from siblings by explaining the policy implications (production/read-only blocks execution, guarded needs confirmation), which relates to when operations proceed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While it doesn't name alternatives explicitly, the policy language tells the agent when execution will be blocked or need confirmation, which is crucial for an agent deciding to call this. It provides useful context about the execution context even though it could be more explicit about when to use this versus other SSH sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.save_taskSave SSH TaskA
Creates or updates a saved SSH task through the command bus. On update, omitted description and defaultConnectionId keep their current values; pass null for defaultConnectionId to clear it. Step types and configuration are validated by the SSH engine.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| steps | Yes | ||
| taskId | No | ||
| description | No | ||
| workspaceId | No | ||
| defaultConnectionId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: on update, omitted description and defaultConnectionId retain current values, null clears defaultConnectionId, and step types/configuration are validated by the SSH engine. This meaningfully explains side effects and update behavior. No contradiction with annotations 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 sentences, front-loaded with the core action, and every sentence carries useful information. No filler or repetition of schema 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?
The tool has create/update behavior, nested step objects, and several optional parameters, and the description captures the key update semantics and validation. However, the create/update identification mechanism (taskId) and step configuration contract remain underspecified, so the description is not fully complete for an agent needing to construct valid requests.
Complex tools with many parameters or behaviors need more documentation. Simple 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 explains update behavior for description and defaultConnectionId and the validation of step types/config. It does not clarify how taskId identifies a task for update, the role of workspaceId, or the structure of configJson and step id/configVersion 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 clearly identifies the tool as creating or updating a saved SSH task, with a specific resource and action. The partial-update semantics and validation detail further distinguish it from sibling task operations like duplicate_task, delete_task, and reorder_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?
The description gives clear context for when to use this tool: creating or updating a saved SSH task. It does not explicitly mention alternatives or exclusion criteria, but the create/update framing is strong enough to guide selection among task-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.write_fileWrite SSH FileA
Writes or appends a remote file through SSH. Dev allows ordinary project paths; test and high-risk paths require confirmation; prod is blocked by policy. The returned result contains only path/mode/byte counts and command status, never file content.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| path | Yes | ||
| confirm | No | ||
| content | Yes | ||
| timeoutMs | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive hints, it discloses that prod is blocked by policy and that the result never contains file content, only path/mode/byte counts and command status. This is valuable behavioral context not present in 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 concise sentences: action, policy, and output shape. Each sentence earns its place with no tautology 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?
The policy and output coverage are good, but the high parameter count and ambiguous confirmationText/confirmation_text fields are not addressed. The output schema reduces the need to document return values, yet the description still leaves a real gap in 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% for 9 parameters, and the description does not compensate. It does not explain content format, confirmation flow, confirmationText vs confirmation_text, timeoutMs, workspaceId, or connectionId; 'writes or appends' only loosely maps to the mode enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence states a specific verb+resource ('Writes or appends a remote file through SSH') and the description adds mode and environment scope. This clearly distinguishes the tool from read/list/exec siblings and, by contrast with patch_file, indicates full-file write/appending behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit environment-based usage policy: dev allows ordinary paths, test/high-risk paths require confirmation, prod is blocked by policy. It omits a named alternative such as patch_file, so it misses the explicit 'use X instead' bar for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.system.healthUnfour System HealthARead-onlyIdempotent
Returns command-bus and storage readiness for diagnostics through the Unfour command bus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| appName | Yes | |
| storageReady | Yes | |
| commandBusReady | Yes | |
| aiReservedCapabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint information, and the description aligns with those by saying it only returns readiness. It adds that the scope covers command-bus and storage, which is useful context. It does not add further behavioral detail, but the annotations and output schema reduce the burden on the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that communicates the main purpose efficiently. Some words, such as 'through the Unfour command bus', are slightly redundant with the tool name and title, but overall it is economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, idempotent tool with annotations and an output schema available, the description is complete enough for an agent to select and invoke it correctly. It clearly identifies the health-check purpose and the primary domains 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?
The tool has zero parameters and an empty input schema, so there are no parameter semantics to document. The description does not need to explain parameters, and the schema fully captures the interface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns command-bus and storage readiness, and the title 'Unfour System Health' reinforces that it is a health/diagnostics check. It is distinguishable from sibling tools such as unfour.ssh.run_diagnostic and unfour.db.test_connection. It is clear but does not fully explain what 'readiness' means or what form the data takes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'for diagnostics' implies that this tool is appropriate for diagnostic use cases. However, it does not explicitly say when to use this tool versus other diagnostic sibling tools like unfour.ssh.run_diagnostic or unfour.db.test_connection, nor does it state any exclusions. The usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.create_variableCreate Workspace VariableC
Creates one workspace-global variable through the command bus. Returned values are masked when secret or sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| isSecret | No | ||
| isEnabled | No | ||
| sortOrder | No | ||
| description | No | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutating operation (readOnlyHint=false), and the description adds one extra behavioral detail: returned values are masked when secret or sensitive. However, it omits other relevant behaviors like idempotency, potential errors, or permissions. The masking note is useful but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences that state the purpose and a key behavioral note. It's front-loaded and avoids redundancy, though it could elaborate on parameters or usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters with zero schema descriptions, the description provides almost no contextual guidance. It doesn't explain parameter semantics, required vs optional, or how workspaceId is used. While output is implicitly described, the lack of parameter context makes it 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?
The input schema has 7 parameters with no descriptions, and the tool description provides no explanation of any parameter. With 0% schema coverage, the description completely fails to compensate, leaving key, value, isSecret, isEnabled, sortOrder, description, and workspaceId 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 clearly states the action: 'Creates one workspace-global variable' with the specific verb 'creates' and resource 'variable'. It distinguishes itself from sibling tools like update_variable and delete_variable by the explicit creation action, though it does not explicitly differentiate from replace_variables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like update_variable or replace_variables. The description provides no context about prerequisites, scenarios, or when not to use it, leaving the agent to infer from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.currentCurrent Unfour workspaceARead-onlyIdempotent
Returns the active local workspace through the Unfour command bus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| source | Yes | |
| mcpPolicy | Yes | |
| workspaceId | Yes | |
| workspaceName | Yes | |
| workspaceRoot | Yes | |
| environmentType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool read-only, idempotent, and non-destructive, and the description does not contradict those. It adds modest context by noting 'active local workspace' and the command-bus mechanism, but it does not disclose extra behavioral details such as fallbacks, errors, or scope limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler, repetition, or unnecessary qualifiers. 'Returns the active local workspace' is the core message, and the rest is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no-parameter query tool with strong annotations and an output schema present. The description is sufficient for the agent to understand the tool's basic purpose and safely invoke 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 and the input schema is empty, so there is no parameter semantics burden on the description. The baseline of 4 applies because there is nothing additional the description needs to clarify about arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the active local workspace, using a specific verb and resource. It is not tautological, but it does not explicitly contrast itself with the sibling unfour.workspace.list, relying mostly on the name and 'active local' wording to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 it should be used when the active/current local workspace is needed. However, it provides no explicit when-to-use or when-not-to-use guidance and does not mention alternatives like unfour.workspace.list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.delete_variableDelete Workspace VariableADestructive
Soft-deletes one workspace-global variable. Guarded policy requires the content-bound confirmation handshake.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| variableId | Yes | ||
| workspaceId | No | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, so the description adds value by clarifying the operation is a 'soft-delete' rather than a hard delete. It also reveals a 'content-bound confirmation handshake' required by guarded policy, which is meaningful behavioral context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. It front-loads the core action and then adds the critical confirmation requirement. It is well-sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, soft-delete behavior, and confirmation policy, but important gaps remain: the exact confirmation parameter requirements are ambiguous, and the 0% schema coverage means the description needed to explain parameter roles more thoroughly. The output schema exists, so return values don't need explanation, but parameter clarity 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%, and the description does not sufficiently compensate. It hints at the confirmation handshake but does not clarify the roles of 'confirm', 'confirmationText', 'confirmation_text', or 'workspaceId'. The presence of two similarly named confirmation fields without disambiguation is particularly problematic.
Input schemas describe structure but not intent. Descriptions should explain 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: 'Soft-deletes one workspace-global variable.' This clearly differentiates the tool from siblings like create_variable, update_variable, and replace_variables. The scope ('workspace-global') and soft-delete semantics add precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a workspace-global variable should be deleted, but it does not explicitly say when to use this over alternatives or when not to. No exclusions or alternative tool references are provided, leaving usage context mostly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.listList Unfour workspacesARead-onlyIdempotent
Lists all local workspaces through the Unfour command bus, marking which one is active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| source | Yes | |
| workspaces | Yes | |
| activeWorkspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral value by noting that results are obtained 'through the Unfour command bus' and that the active workspace is marked, which is not present in 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 a single, tightly worded sentence that front-loads the main action ('Lists all local workspaces') and adds only the essential detail about marking the active workspace. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, zero parameters, strong annotations, and presence of an output schema, the description is sufficient. It tells the agent what the tool does, the scope of results, and one meaningful output detail (active marker) without unnecessary elaboration.
Complex tools with many parameters or behaviors need more documentation. 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 baseline of 4 applies. The description does not need to explain parameter behavior because there are no inputs to interpret.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'lists all local workspaces', which is a specific verb and resource scope. It also notes the active-workspace marker, distinguishing it from the sibling unfour.workspace.current, which focuses on a single workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'all local workspaces' provides clear context for when to use this tool: when the agent needs a full list rather than only the current workspace. It does not explicitly mention exclusions or alternatives, but the sibling list makes the intended usage reasonably inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.list_variablesList Workspace VariablesARead-onlyIdempotent
Lists workspace-global variables through the command bus. Secret variables and sensitive keys are masked before returning to the MCP client.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds valuable info about masking secret variables and sensitive keys, which is not covered by annotations. This improves transparency about the tool's output 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 concise sentences provide the core purpose and one key behavior (masking). No fluff or irrelevant 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?
Given the simple read-only operation and presence of an output schema, the description is adequate but lacks param semantics (e.g., whether workspaceId is optional, default behavior) and does not describe any pagination or grander behavior. It covers the essentials but leaves some 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% and the description does not explain the 'workspaceId' parameter at all. While not required, its purpose is unclear beyond the implied workspace context, leaving the agent to guess whether it is mandatory or how to format 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?
The description clearly states it lists workspace-global variables, using a specific verb and resource scope. It distinguishes from sibling tools like unfour.workspace.create_variable or delete_variable, and clarifies it operates on workspace-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the scope (workspace-global) but does not explicitly contrast with alternatives or state when to use this tool versus other list tools (e.g., connection lists). It gives enough context via the name and scope, but lacks explicit guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.replace_variablesReplace Workspace VariablesA
Replaces the complete workspace-global variable set through the command bus. Omitted existing variables are soft-deleted. For items that include an existing id, omitted optional fields keep their current values. Returned values are masked when secret or sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| variables | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, but description adds significant behavioral detail: soft-deletion of omitted variables, merge behavior for existing ids, and masking of sensitive returned values. These traits go well beyond what annotations disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each packed with information: core action, behavior for omitted variables, behavior for existing ids, and output masking. No fluff, well-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?
Despite having an output schema (not shown) and all-false annotations, the description covers the critical behaviors: replace-all scope, soft-delete, field merging, and sensitive masking. This is sufficient for an agent to understand and correctly invoke the 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% and the description does not explain the variables array fields individually. It adds meaning for id (existing id merge) and isSecret (masking), but doesn't cover key, value, isEnabled, sortOrder, description. Partial compensation but not enough for zero coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Replaces' with resource 'complete workspace-global variable set'. Clearly distinguishes from sibling tools that handle individual variables (create/update/delete). The description's focus on the entire set makes the purpose 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?
Implies usage for bulk replacement of the entire variable set, and clarifies that omitted variables are soft-deleted, which sets expectations. However, it doesn't explicitly mention alternatives or when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.workspace.update_variableUpdate Workspace VariableA
Updates one workspace-global variable through the command bus. Omitted optional fields keep their current values. Returned values are masked when secret or sensitive.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes | ||
| isSecret | No | ||
| isEnabled | No | ||
| sortOrder | No | ||
| variableId | Yes | ||
| description | No | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond annotations: partial-update semantics ('Omitted optional fields keep their current values') and output masking ('Returned values are masked when secret or sensitive'). These are not evident from annotations (readOnlyHint=false, etc.) and help the agent understand side effects and 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 concise (two sentences) with no redundant wording. It front-loads the core purpose and immediately adds the key behavioral notes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and an output schema present, the description provides high-level behavior but leaves parameter details entirely to the schema. It covers partial update and masking, which are crucial, but does not mention required identifiers, permission prerequisites, or error scenarios. Given the tool's moderate complexity, it is minimally adequate but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the description does not mention any of the 8 parameters or their meanings. While the schema provides types and required flags, the description fails to clarify the role of fields like key, value, isSecret, isEnabled, or how variableId identifies the target. The description offers no additional insight beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Updates one workspace-global variable') and the resource ('workspace-global variable'), distinguishing it from sibling tools like create_variable and delete_variable. The mention of 'one' distinguishes it from batch operations like replace_variables, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating a single workspace variable, but does not provide explicit guidance on when to use this tool versus siblings like replace_variables or create_variable. No exclusions or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.9.3- Changed
unfour.api.send_request3 fields changed- changed
Input schema / properties / timeoutMs / descriptionPrevious value: -"Optional timeout in milliseconds. Maximum 60000ms (60 seconds)."New value: +"Optional timeout in milliseconds. Omitted or null defaults to 60000ms; 0 means unlimited; positive values are used exactly." - added
Input schema / properties / timeoutMs / minimumAdded value: +0 - changed
Input schema / properties / timeoutMs / typePrevious value: -"number"New value: +[ + "integer", + "null" +]
3 tool updates
v0.9.1- Added
unfour.api.delete_environment_variable - Changed
unfour.api.send_request1 field changed- changed
Input schema / properties / environmentId / descriptionPrevious value: -"Optional environment ID (currently uses the workspace default environment)."New value: +"Optional per-call environment override. It is used for variable resolution and saved request scripts without changing the workspace active environment."
- Added
unfour.api.set_environment_variable
4 tool updates
v0.6.0- Changed
unfour.db.describe_table1 field changed- added
Output schema / properties / table / properties / catalogAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
unfour.db.execute2 fields changed- added
Output schema / properties / transactionAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / truncatedAdded value: +{ + "type": "boolean" +}
- Changed
unfour.db.list_tables1 field changed- added
Output schema / properties / tables / items / properties / catalogAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Changed
unfour.db.query_readonly3 fields changed- added
Input schema / properties / catalogAdded value: +{ + "description": "Optional catalog (database) to run the query against.", + "type": "string" +} - added
Input schema / properties / schemaAdded value: +{ + "description": "Optional schema to resolve unqualified names against.", + "type": "string" +} - added
Input schema / properties / timeoutMsAdded value: +{ + "description": "Optional per-statement timeout in milliseconds.", + "type": "integer" +}
54 tool updates
v0.1.0- First observed
unfour.activity.list - First observed
unfour.api.create_collection - First observed
unfour.api.create_environment - First observed
unfour.api.create_request - First observed
unfour.api.delete_collection - First observed
unfour.api.delete_environment - First observed
unfour.api.delete_request - First observed
unfour.api.get_history - First observed
unfour.api.get_request - First observed
unfour.api.list_collections - First observed
unfour.api.list_environments - First observed
unfour.api.list_history - First observed
unfour.api.list_requests - First observed
unfour.api.send_request - First observed
unfour.api.update_collection - First observed
unfour.api.update_environment - First observed
unfour.api.update_request - First observed
unfour.connection.list - First observed
unfour.db.create_connection - First observed
unfour.db.describe_table - First observed
unfour.db.execute - First observed
unfour.db.explain - First observed
unfour.db.list_connections - First observed
unfour.db.list_tables - First observed
unfour.db.query_readonly - First observed
unfour.db.test_connection - First observed
unfour.ssh.cancel_task_run - First observed
unfour.ssh.clear_task_runs - First observed
unfour.ssh.create_connection - First observed
unfour.ssh.delete_task - First observed
unfour.ssh.duplicate_task - First observed
unfour.ssh.exec - First observed
unfour.ssh.get_task - First observed
unfour.ssh.list_connections - First observed
unfour.ssh.list_dir - First observed
unfour.ssh.list_history - First observed
unfour.ssh.list_task_runs - First observed
unfour.ssh.list_tasks - First observed
unfour.ssh.patch_file - First observed
unfour.ssh.read_file - First observed
unfour.ssh.read_task_run_log - First observed
unfour.ssh.reorder_tasks - First observed
unfour.ssh.run_diagnostic - First observed
unfour.ssh.run_task - First observed
unfour.ssh.save_task - First observed
unfour.ssh.write_file - First observed
unfour.system.health - First observed
unfour.workspace.create_variable - First observed
unfour.workspace.current - First observed
unfour.workspace.delete_variable - First observed
unfour.workspace.list - First observed
unfour.workspace.list_variables - First observed
unfour.workspace.replace_variables - First observed
unfour.workspace.update_variable
TDQS
Tools are grouped by clear domain prefixes (workspace, api, db, ssh, system, activity), making most purposes obvious. However, unfour.connection.list is ambiguous compared to db.list_connections and ssh.list_connections, and unfour.api.send_request vs unfour.db.execute could be confused by agents unfamiliar with the domain.
Nearly all tools follow the pattern unfour.<domain>.<verb>_<noun> (e.g., create_variable, list_connections, delete_request). Minor deviations exist: bare verbs like execute, explain, and exec, plus noun-like names such as workspace.current and system.health, but the overall style is predictable and readable.
With 54 tools, the server feels overloaded. The broad scope (workspace, API, database, SSH, tasks, activity) justifies some size, but the count is in the 'too many' range and may overwhelm agents. Several tools could be consolidated (e.g., multiple list_* and get_* tools per domain).
The tool set provides solid CRUD coverage for most resources: workspace variables, API collections/requests/environments, database connections/query/explain, SSH connections/files/commands/tasks, plus history and activity. Minor gaps exist, such as no explicit API folder management and no ad-hoc DB connection support, but agents can generally accomplish their goals.
Maintenance
Related MCP Connectors
- OctopadOAuthapp.octopad
The back-office workspace for your team's AIs: tasks, knowledge and context shared over MCP.
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseBqualityDmaintenanceProduction-grade MCP server that gives AI agents safe access to your local dev environment: filesystem, databases, processes, and OpenAPI specs.15263MIT
- AlicenseAqualityDmaintenanceZero-config MCP server that gives AI coding assistants a real-time diagnostic snapshot of your local dev environment. Detects framework, running services, recent errors, git state, and provides a health diagnosis in one call.3111MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that gives your AI assistant full awareness of your local dev environment — running processes, Docker containers, git state, open ports, log files, and more.01MIT
- FlicenseNot gradedqualityCmaintenanceSecure local development platform that exposes controlled developer capabilities (FS, Git, search, command execution) to AI assistants via MCP with deny-by-default security and audit logging.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zyqzyq/Unfour'
If you have feedback or need assistance with the MCP directory API, please join our Discord server