unfour
Unfour
백엔드 개발자를 위한 로컬 우선 데스크톱 워크스페이스로, API 디버깅, SSH 터미널, 데이터베이스 관리를 결합하고 로컬 MCP 서버를 통해 AI 에이전트에 노출합니다.

Codex & GPT-5.6로 제작
Codex는 Rust 및 TypeScript 아키텍처 검토, Tauri 명령 구현 및 리팩터링, 테스트 추가, 빌드 실패 및 MCP 프로세스 수명 주기 문제 조사에 사용되었습니다.
GPT-5.6은 AI 지원 백엔드 문제 해결 워크플로우 설계, SSH 및 데이터베이스 권한 경계 분석, MCP 도구 설계 개선, 프로젝트 아키텍처 및 릴리스 프로세스 계획을 돕습니다.
Codex는 Unfour의 개발 도구 그 이상입니다. Unfour MCP 서버를 통해 API, SSH, 데이터베이스 기능을 사용하여 API 문제를 재현하고, 서비스 로그를 검사하고, 데이터베이스를 쿼리하고, 증거를 연관 지어 근본 원인을 식별할 수 있습니다.
민감한 작업은 여전히 개발자 통제 하에 있습니다. 작업 영역 범위, 자격 증명 처리, 호스트 신뢰, 확인, 도구 권한은 Codex가 액세스하고 실행할 수 있는 대상을 제한합니다. Codex를 연결한다고 해서 기본적으로 무제한 액세스 권한이 부여되는 것은 아닙니다.
[!WARNING] 소스 트리는 Community Stable
v0.5.0릴리스를 준비 중입니다. 서명되지 않았으며 여전히 릴리스 검증이 필요합니다. 설치 프로그램이 SmartScreen 또는 기타 운영 체제 보안 경고를 트리거할 수 있습니다.
Related MCP server: Workspace MCP
다운로드
GitHub Releases에서 게시된 빌드를 다운로드하세요. 최신 안정 버전은 v0.4.0이며, v0.5.0은 릴리스가 게시된 후 여기에 표시됩니다.
Windows: NSIS
.exe설치 프로그램.macOS 및 Linux 패키지는 실제 기기 스모크 테스트가 기록될 때까지 실험적이며 검증되지 않았습니다. 아직 지원되거나 검증된 것으로 간주하지 마십시오.
릴리스
SHA256SUMS.txt자산으로 다운로드한 설치 프로그램을 확인하세요.
Unfour란 무엇인가요?
Unfour는 백엔드 및 운영 작업을 위한 로컬 우선 데스크톱 워크스페이스입니다. API 요청, SSH 연결, 데이터베이스 연결, 로컬 활동, 작업 영역 레이아웃을 하나의 로컬 우선 애플리케이션에 유지하고 로컬 MCP 서버를 통해 AI 에이전트에 이러한 기능을 노출합니다. 이 기반은 이러한 도구 전반에 걸친 AI 지원 문제 해결 워크플로우를 지원합니다.
이 앱은 Tauri 2, React, TypeScript 및 Rust로 구축되었습니다. 프런트엔드는 작업대 UI를 담당하며, HTTP, SSH, 데이터베이스 드라이버, 로컬 스토리지, 자격 증명 참조와 같은 보안에 민감한 실행은 Rust 기능 크레이트와 명령 버스 뒤에 있습니다.
모듈
API 클라이언트 - HTTP 요청을 작성하고 전송하고, 저장된 요청을 컬렉션과 폴더로 구성하고, 공유 작업 영역 변수를 해석하고, 응답 본문/헤더/쿠키/타이밍을 검사하고, 저장된 사전 요청 및 사후 응답 스크립트를 실행하고, 스크립트 테스트 및 콘솔 출력을 검토하고, 편집된 기록을 유지합니다.
SSH 터미널 - SSH 연결 및 터미널 세션을 관리하고(분할 창, 검색, 클립보드 상황에 맞는 메뉴, 영구적인 편집된 명령 기록 및 입력 제안, 호스트 키 신뢰, 편집된 로그), SFTP를 통해 원격 파일을 탐색 및 전송하고, 연결/파일/작업 사이드바에서 다단계 SSH 작업(명령, 업로드, 다운로드)을 자동화합니다.
데이터베이스 - 데이터베이스 연결을 관리하고, 스키마를 탐색하고, 확인 인식 안전 검사(다중 문 현재 실행/모두 실행 포함)로 SQL을 실행하고, 테이블 행을 미리 보고 편집하며, 쿼리 출력을 검토합니다.
작업 영역 - 저장된 요청, 공유 환경/변수, 연결, 활동, 탭 및 레이아웃 상태를 로컬 작업 영역으로 범위를 지정하고, 제목 표시줄 활성 환경 전환을 지원합니다.
Codex 기반 API, SSH 및 데이터베이스 디버깅을 위한 MCP 통합 - 데스크톱 앱에서 사용하는 것과 동일한 명령 버스를 통해 MCP 클라이언트(예: Codex, Claude Code, Cursor)에 안전한 로컬 진단 도구를 노출하여 AI 에이전트가 동일한 API, SSH 및 데이터베이스 컨텍스트로 작업할 수 있도록 합니다.
스크린샷
앱 개요 — 모듈 전환기가 있는 사이드바 및 API 클라이언트 작업 영역

API 클라이언트 — 매개변수, 인증, 헤더, 본문 및 응답이 있는 요청 빌더

SSH 터미널 — 연결, 세션, 원격 파일 및 작업

데이터베이스 — 스키마 탐색 및 SQL 쿼리 출력

로컬 개발
요구 사항:
Node.js 및 pnpm.
안정적인 Rust 툴체인.
운영 체제에 맞는 Tauri 2 사전 요구 사항.
설치 및 실행:
pnpm install
pnpm tauri devpnpm install은 lefthook을 통해 Git 후크도 설치합니다. 커밋은 cargo fmt로 스테이징된 Rust 파일의 형식을 지정하고 ESLint로 스테이징된 TypeScript를 자동 수정합니다. LEFTHOOK=0 git commit으로 한 번 건너뜁니다.
일반적인 명령:
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 tests패키지 문서에 달리 명시되지 않는 한 리포지토리 루트에서 명령을 실행하세요. pnpm tauri dev는 기본적으로 Test 릴리스 채널을 사용하는 반면, 로컬 pnpm tauri build는 Stable을 기본으로 합니다. 격리된 Test 채널 번들은 pnpm tauri build:test를 사용하세요. 개발 데이터가 ~/.unfour-dev를 사용해야 하는 경우 UNFOUR_STORAGE_PROFILE=dev를 설정하세요. 이 스토리지 재정의는 릴리스 ID와 무관합니다. 공식 게시 가능한 Stable 아티팩트는 UNFOUR_RELEASE_CHANNEL=stable 및 정확한 UNFOUR_BUILD_COMMIT을 사용하여 CI에서만 만들어야 합니다.
프로젝트 레이아웃
경로 | 역할 |
| Tauri/Vite 데스크톱 앱 진입점 및 Tauri 어댑터 계층. |
| 전역 셸 구성 및 모듈 마운트 슬롯. |
| API 클라이언트 프런트엔드 모듈. |
| SSH 터미널 프런트엔드 모듈. |
| 데이터베이스 프런트엔드 모듈. |
| 공유 프런트엔드 작업 영역 상태. |
| 작업 영역 환경 및 변수 관리 UI. |
| 예약된 로컬 작업 영역 수명 주기 경계. |
| 공유 UI 기본 요소 및 상태 비저장 레이아웃 도우미. |
| 형식화된 Tauri 명령 래퍼 및 프런트엔드 명령 유형. |
| Rust 백엔드 기능 크레이트 및 어댑터. |
전체 패키지 및 크레이트 맵은 docs/architecture/project-structure.md를 참조하세요.
릴리스 상태
소스 트리는 Community Stable v0.5.0을 준비 중입니다. 최신 게시된 안정 버전은 v0.4.0입니다. 릴리스 준비 상태는 다음 문서에 설명되어 있습니다:
docs/testing/release-verification.mddocs/testing/manual-test-cases.mddocs/release/release-checklist.mddocs/release/distribution.mddocs/release/signing.md
Windows는 NSIS .exe 설치 프로그램을 배포합니다. 설치 프로그램은 서명되지 않았으며 SmartScreen을 트리거할 수 있습니다. macOS 및 Linux는 실제 기기 스모크 테스트가 완료될 때까지 실험적/검증되지 않은 상태로 유지됩니다. 대상 플랫폼에서 성공적으로 실행되었거나 현재 리포지토리 증거로 뒷받침되지 않는 한 릴리스 검사가 통과했다고 주장하지 마십시오.
문서
AGENTS.md- 코딩 에이전트를 위한 리포지토리 규칙.docs/agents/START_HERE.md- AI 에이전트를 위한 범위 지정된 온보딩 경로.docs/architecture/package-boundaries.md- 패키지 소유권 및 금지된 종속성 방향.docs/architecture/project-structure.md- 리포지토리, 패키지, 크레이트 및 호출 체인 맵.docs/architecture/data-storage.md- 작업 영역 데이터, SQLite, 자격 증명 참조 및 로컬 활동 규칙.docs/architecture/diagnostics.md- 로컬 구조화 로그, 편집, 보존, 진단 번들 및 개발자 로깅 지침.docs/architecture/security-model.md- 보안 태세, 편집, 호스트 키 정책 및 위험한 작업 규칙.docs/mcp/overview.md및docs/mcp/tools.md- 로컬 MCP 서버 동작.docs/testing/release-verification.md- 릴리스 검증 매트릭스.docs/release/release-checklist.md- 공개 릴리스 체크리스트.docs/user/USER_GUIDE.md- 사용자용 워크플로 가이드.
기여
풀 리퀘스트를 열기 전에 CONTRIBUTING.md, CODE_OF_CONDUCT.md 및 AGENTS.md의 패키지 경계 규칙을 읽어 주세요.
보안 문제는 공개 이슈가 아닌 SECURITY.md를 통해 신고해야 합니다.
라이선스
Apache License 2.0에 따라 라이선스가 부여됩니다.
Available Tools
72 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 disables the HTTP timeout; positive values are passed through to the HTTP layer. All MCP calls remain subject to the independent 120-second MCP safety deadline. | |
| 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?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, but the description adds substantial behavioral context: environment-dependent method restrictions, non-2xx response behavior, masking of sensitive headers/cookies/URL tokens/JSON body fields, and the distinction between HTTP timeout and the MCP safety deadline. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action and two modes appear in the first sentence, followed by the use case, environment restrictions, response behavior, and masking. Every sentence adds information; there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, no required parameters, and an output schema, the description covers the essential decision points: which mode to use, environment restrictions, response handling, and security masking. The output schema handles return values, so the description doesn't need to. The only minor gap is that it doesn't explicitly say what happens if both requestId and method/url are provided, but the schema's 'Omit when sending method/url directly' 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 the schema already documents all 11 parameters. The description adds value by explaining the two mutually exclusive modes (requestId vs method/url), the environment-dependent method restrictions, and the timeout semantics (0 disables HTTP timeout, 120s MCP deadline). It doesn't detail every parameter, but the schema already does that, and the description clarifies the key relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('sends') and resource ('API request through the Unfour command bus'), and distinguishes two modes: replaying a saved request by requestId or sending an ad-hoc request by method/url/headers/query/body. It also names a concrete use case ('reproduce API failures during agent troubleshooting'), which clearly separates it from sibling tools like list_requests or get_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 explicitly explains when to use the tool ('reproduce API failures during agent troubleshooting') and gives environment-specific guidance: dev allows all methods, test marks mutating methods as write risk, prod only allows GET/HEAD/OPTIONS. It also clarifies that non-2xx responses return structured data rather than MCP tool failure, which tells the agent how to interpret results. This is strong usage guidance.
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.delete_connectionDelete Database ConnectionADestructive
Soft-deletes a saved connection through CommandBus. Guarded policy requires confirmation bound to workspace, connection and revision; read-only policy rejects deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| deleted | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, but the description adds important behavior beyond them: the deletion is a soft delete, it goes through CommandBus, and a guarded confirmation policy applies. This meaningfully clarifies what the tool actually does.
Agents need to know what a tool does to the 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 filler. The primary purpose is front-loaded, and the policy constraint is stated efficiently in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details are not required, and annotations cover the destructive safety profile. However, for a policy-guarded delete, the agent still needs to know how to satisfy the confirmation requirement; the description mentions confirmation but does not map it to confirm/confirmation_text, and 'revision' is referenced without a corresponding parameter.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameters, but it does not explain confirm vs confirmation_text or state that connectionId is required. It hints at workspace and connection binding, but the two confirmation-related parameters remain ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (soft-delete) on a specific resource (a saved connection) and is consistent with the title 'Delete Database Connection.' The verb and resource make it distinct from sibling operations like update_connection or 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 gives clear policy context: confirmation is required, it must be bound to workspace/connection/revision, and read-only policy rejects deletion. This tells the agent when deletion will be permitted, though it does not explicitly name alternatives.
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 columns, available indexes, foreign keys and DDL, with runtime metadata capabilities, through the Unfour command bus. Does not read table data.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Optional schema name filter (e.g. 'public'). | |
| catalog | No | Optional database catalog. | |
| 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, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful boundary that it is metadata-only, but 'with runtime metadata capabilities, through the Unfour command bus' is vague rather than informative, and no auth or latency behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the scope and the exclusion front-loaded, which is efficient. The phrase 'with runtime metadata capabilities, through the Unfour command bus' is filler that does not carry actionable meaning and slightly dilutes the otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, a fully documented parameter schema, and read-only annotations, the description needn't explain return values or safety. It states the resource and the metadata-vs-data boundary, which is sufficient for correct invocation, though it stops short of describing any return-shape nuance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (including optional schema, catalog, and workspaceId) are already documented in the schema. The description adds no additional parameter meaning, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Describes a table') and enumerates the returned artifacts (columns, indexes, foreign keys, DDL), which lets an agent distinguish it from siblings like db.list_tables, db.query_readonly, and db.export_table. The closing clause 'Does not read table data' draws an explicit boundary against the data-reading siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The negative constraint 'Does not read table data' functions as an implicit when-not, steering the agent away from this tool for data retrieval. However, no alternative is named and there is no positive statement of when to prefer this over db.list_tables or db.query_readonly, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.export_tableExport Database TableA
Exports one table to a file in Unfour's managed exports directory. Optional columns, structured filters, and limit apply to the data portion. Data exports without limit require content-bound confirmation; omitted limit still means all matching rows. Returns file metadata; no destination path is accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional maximum number of data rows. Omit for all matching rows, which requires confirmation when content includes data. | |
| format | Yes | ||
| schema | No | ||
| catalog | No | ||
| columns | No | Optional columns to include in the data portion. Omit to export every column. | |
| confirm | No | ||
| content | Yes | ||
| filters | No | Optional structured row predicates combined with AND. Each value is a string, number, or null and is bound; this is not a raw WHERE clause. | |
| tableName | Yes | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| format | Yes | |
| rowCount | Yes | |
| bytesWritten | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent, open-world). The description adds real value beyond them: it discloses the managed-directory write target, that no destination path is accepted, the content-bound confirmation requirement for unbounded data exports, and that file metadata is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with zero redundancy; the scope and target directory are front-loaded, and the confirmation and return-value notes each carry distinct 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?
An output schema exists, so return values need no elaboration, and the description covers the key confirmation behavior. But for a 13-parameter tool at 23% schema coverage it omits meaningful parameter semantics, and the duplicate confirmation parameters (confirm/confirmationText/confirmation_text) are left unclarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 23% across 13 parameters, so the description is expected to compensate, and it covers columns, filters, limit, and content. It leaves format, catalog, schema, workspaceId, and the three confirmation-related parameters (confirm, confirmationText, confirmation_text) unexplained, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (exports), a specific resource (one table), and a specific destination (Unfour's managed exports directory), plus the constraint that no destination path is accepted. This is unambiguous and easily separable from siblings like db.query_readonly or db.execute.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 when the confirmation flow kicks in ('Data exports without limit require content-bound confirmation; omitted limit still means all matching rows'), which is useful operational context. However, it never states when to choose this over db.query_readonly or db.execute, nor any prerequisites, so guidance is only implied.
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_historyList Database Query HistoryARead-onlyIdempotent
Lists workspace-scoped query history (default 50, maximum 200). SQL literals and quoted tokens are masked; statements with comments, dollar quoting or sensitive markers are withheld. Returns execution summaries, never raw errors or result rows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| workspaceId | No |
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 readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds valuable behavioral details: default/max limit, masking of SQL literals, withholding of statements with comments or sensitive markers, and promise to return execution summaries rather than raw errors or rows. This goes beyond what annotations provide, enhancing the agent's understanding of data shape and privacy.
Agents need to know what a tool does to the 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 adding essential detail: the purpose, the key limits and masking behavior, and the nature of returned data. No fluff; the most critical info (workspace scoping, limits) is front-loaded, and the privacy constraints follow logically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list operation with a clear output schema (execution summaries) and minimal parameters, the description fully covers what an agent needs: the scope, the limits, what is excluded, and what is returned. There is no ambiguity about the function's behavior or output format.
Complex tools with many parameters or behaviors need more documentation. Simple 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%, but there are only two parameters. The description mentions 'default 50, maximum 200' which directly clarifies the 'limit' parameter, and implies workspace scoping for the workspaceId. However, it does not explicitly define field types or requirements, but given the simplicity, the baseline 3 is justified.
Input schemas describe structure but not intent. Descriptions should explain 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 workspace-scoped query history, distinguishing it from similar tools by naming workspace scoping, default/max limits, and filtering behavior. Identifies the resource (database query history) with a specific verb (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 description clearly states when to use this tool (to list query history) but does not explicitly contrast with alternatives like unfour.api.list_history or unfour.ssh.list_history. However, the workspace scoping and explicit masking behavior imply usage context.
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. Optional catalog and schema scope the listing. 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). | |
| schema | No | Optional schema name. pg_catalog and information_schema are excluded even when specified. | |
| catalog | No | Optional database catalog. Omit to use the connection's default database. | |
| 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?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds meaningful context beyond that: the operation runs through the 'Unfour command bus' and is restricted to saved connections, which is a real operational constraint. It adds little else (no pagination/return behavior), but that is largely carried by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then scoping parameters, then the connection constraint. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an output schema, rich annotations and fully documented parameters, the description only needs to establish scope and prerequisites, which it does. The one remaining gap is that it does not hint at result ordering or the effect of the limit parameter, but that is minor given the 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 100%, so the schema already documents limit, schema, catalog, workspaceId and connectionId in detail. The description only restates that catalog and schema scope the listing and that connectionId is required, adding no syntax or format information beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (tables and views) scoped to a saved database connection, which clearly separates it from siblings like unfour.db.describe_table and unfour.db.query_readonly. It does not explicitly name a sibling, but the resource scope makes the intent unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a clear precondition (requires a saved connectionId) and an explicit exclusion (does not accept ad-hoc connection strings), which tells the agent when this tool applies versus constructing a new connection. It stops short of naming an alternative tool for the ad-hoc case, so it is strong but not exhaustive.
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.db.update_connectionUpdate Database ConnectionA
Updates saved connection metadata through CommandBus. The ID must exist in the selected workspace. Omitted fields and stored credentials are preserved. Secret rotation is not exposed; the result contains only connectionId, workspaceId and source.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| name | No | ||
| port | No | ||
| driver | No | ||
| sslMode | No | ||
| database | No | ||
| readOnly | No | ||
| username | No | ||
| sqlitePath | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotations false, the description carries the behavioral burden and delivers: partial-update semantics ('Omitted fields and stored credentials are preserved'), a clear limitation ('Secret rotation is not exposed'), a precondition ('The ID must exist in the selected workspace'), and response scope. These go well beyond what the annotations express, giving the agent accurate expectations about side effects and return content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose first, then precondition, partial-update behavior, and the secret-rotation caveat with response shape. The only minor blemish is 'through CommandBus,' which adds implementation detail without helping an agent decide or invoke correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 11-parameter, 1-required mutation tool with zero parameter descriptions, the description covers the essentials: what is updated, the workspace precondition, merge semantics, the secrets limitation, and result scope. The presence of an output schema and self-documenting enums offsets the missing per-parameter prose. Only permission requirements and error behavior for a nonexistent connectionId are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies high-level semantics—connectionId must reference an existing item, omitted fields are preserved (explaining why all 11 params are optional), and no secret parameter exists. However, it does not explain individual parameters beyond what names/types/enums already convey, leaving host/port/driver/sslMode/database/readOnly/sqlitePath semantics to inference.
Input schemas describe structure but not intent. Descriptions should explain 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-plus-resource: 'Updates saved connection metadata through CommandBus.' Among siblings like create_connection, delete_connection, list_connections, and test_connection, the term 'saved connection metadata' clearly marks this as the modifier of existing connection configs and distinguishes it from query/execution tools. No ambiguity about what action is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: 'Updates saved connection metadata' and 'The ID must exist in the selected workspace' suggest the agent reaches for this when editing an existing connection. However, there are no explicit when-not-to-use rules, alternatives (e.g., ssh.update_connection for SSH connections, test_connection for connectivity), or exclusion conditions naming sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.cancel_rununfour.flow.cancel_runA
Request cancellation of a running Flow; remote effects are not rolled back.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description adds genuinely useful semantics beyond them: it is a *request* (may not be immediate) and 'remote effects are not rolled back', which is important consequence information an agent cannot infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler that still conveys the key action and the most important consequence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover safety. However, with 0% parameter coverage and no statement of prerequisites (run must be in 'running' status) or how cancellation is observed, the definition is only minimally adequate for a mutation-style operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with two parameters (required runId, optional workspaceId), so the description carries the burden. It only obliquely references 'a running Flow'; it never explains what runId identifies, that workspaceId scopes the lookup, or their formats. The gap is not compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Request cancellation of a running Flow'), which is clearly distinct from siblings like unfour.flow.run, unfour.flow.get_run, and unfour.flow.list_runs. It does not explicitly name those siblings, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'of a running Flow' implies the trigger condition (the run must be active) but the description never states when to reach for this tool versus the alternatives, nor any exclusion such as not calling it on an already-finished run. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.deleteunfour.flow.deleteADestructive
Delete a saved Flow definition while retaining its run history. Guarded workspaces require confirmation bound to the current revision.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | ||
| confirm | No | ||
| workspaceId | No | ||
| confirmationText | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| flowId | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the mutation/safety profile is covered. The description adds genuinely non-obvious behavior: run history is preserved across the delete, and guarded workspaces demand a revision-bound confirmation. It stops short of stating auth requirements or whether concurrent runs are affected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the destructive action and its scope, then the confirmation prerequisite. No filler and nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, and the destructive annotation is supplemented by the retention and confirmation notes. Still, for a 5-parameter mutation with zero schema description coverage, the description omits enough parameter-level detail to leave an agent guessing at 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?
Five parameters at 0% schema description coverage, so the description carries the full burden. It gestures at the confirmation concept but never maps it to the actual fields (confirm, confirmationText, confirmation_text) or explains flowId/workspaceId formats, leaving duplicate confirmation parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (a saved Flow definition), and adds a meaningful scope qualifier — run history is retained. This cleanly distinguishes it from siblings like unfour.flow.save, unfour.flow.get, and unfour.flow.run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 noting that guarded workspaces require confirmation bound to the current revision, which is a useful precondition. However, it gives no explicit when-to-use vs when-not guidance and does not mention what happens to running flows or how to recover from a mistaken deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.getunfour.flow.getBRead-onlyIdempotent
Read a saved Flow definition for use in Desktop Canvas or MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds only a target-consumer note ('for use in Desktop Canvas or MCP') and says nothing about auth requirements, errors for missing flows, or workspace scoping behavior. It clears the lower bar set by annotations but adds little.
Agents need to know what a tool does to the 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 tight sentence with the action front-loaded and zero filler. It is appropriately sized, though that brevity is also what leaves the parameter and usage gaps unaddressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A rich output schema exists (the full Flow definition structure), so return values need not be explained. But for a retrieval tool with two undocumented parameters and no guidance on when to prefer it over flow.list or flow.get_run, the description is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining the two parameters, yet it mentions neither flowId nor workspaceId. The schema supplies types and patterns but no meaning, and the description does nothing to clarify required vs optional or what workspaceId scoping implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (saved Flow definition), which cleanly distinguishes it from unfour.flow.get_run. However, it does not name or contrast with sibling tools like flow.list or flow.get_run, leaving the agent to infer the distinction. Clear purpose but no sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what it does but never says when to use it versus alternatives such as unfour.flow.list (enumerate) or unfour.flow.get_run (inspect execution). No conditions, prerequisites, or exclusions are given. Usage must be inferred entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.get_rununfour.flow.get_runCRead-onlyIdempotent
Read the complete redacted Flow run history shared with Desktop.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful context that results are redacted, but does not explain permissions, data scope boundaries, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words. It is concise, though the brevity contributes to missing parameter and usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a two-parameter retrieval tool with 0% schema description coverage and no usage guidance, the description is too incomplete to help an agent invoke it correctly beyond the basic action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, and the description does not explain runId or workspaceId at all. An agent must infer how to identify the target run and whether workspaceId is required or scoping.
Input schemas describe structure but not intent. Descriptions should explain 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: reading a Flow run's complete redacted run history. It is clearly distinguishable from list_runs and flow.get, though it does not explicitly name sibling alternatives. The phrase 'shared with Desktop' adds scope but is slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like unfour.flow.list_runs or unfour.flow.get. It implies retrieval of a run, but leaves context and exclusions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.listunfour.flow.listARead-onlyIdempotent
List saved Flow summaries; use get for the complete definition.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| flows | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds one useful behavioral note — that results are abbreviated summaries and that full definitions require `get` — but says nothing about result size, ordering, pagination, or whether the list is workspace-scoped or global.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the action, the returned artifact, and the alternative tool. Zero waste and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and the description adequately covers purpose plus the summary-vs-definition distinction. It remains incomplete on the two things an agent most needs for correct invocation: workspace scoping of the optional parameter and disambiguation from unfour.flow.list_runs.
Complex tools with many parameters or behaviors need more documentation. 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 optional parameter (workspaceId) with 0% schema description coverage, and the description never mentions it. The description does not explain whether omitting it lists flows across all workspaces or defaults to the current one — meaningful semantics that are left entirely undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list saved Flow summaries) and contrasts with the sibling get tool in the same sentence. However, the term 'Flow summaries' is not disambiguated from the closely named sibling unfour.flow.list_runs, which an agent could easily confuse with this tool given the schema's summary objects carry run-like fields (status, startedAt, finishedAt).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 one explicit routing rule: use `get` when you need the complete definition rather than a summary. This is clear when-to-use guidance for the list-vs-get choice, but it is silent on when to use this versus unfour.flow.list_runs, and states no exclusions or preconditions (e.g., workspace scoping) for the listing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.list_runsunfour.flow.list_runsBRead-onlyIdempotent
Read lightweight FlowRunSummary history without loading run details.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| flowId | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds useful payload context: it returns lightweight FlowRunSummary records and avoids loading full run details. It does not mention pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words. It is appropriately concise for the core purpose, even though other dimensions are under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover safety. But with four undocumented input parameters and no mention of required flowId, scoping, or pagination, the description is not complete enough to guide invocation beyond the bare schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has four parameters and 0% schema description coverage. The description mentions no parameter names, required flowId, workspace scoping, limit, or cursor, so it fails to compensate for the missing 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 states a specific verb ("Read"), resource ("FlowRunSummary history"), and scope ("without loading run details"). It implies contrast with detail-loading siblings like unfour.flow.get_run, but does not explicitly name an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Lightweight ... without loading run details" implies this tool should be used when summary-only history is sufficient. However, it does not explicitly state when to use it versus alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.rununfour.flow.runB
Start a Flow with initiator=mcp. Requires payload-bound confirmation even with full_access. Read-only/disabled policy blocks execution. Cancellation does not undo effects.
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | ||
| inputs | No | ||
| confirm | No | ||
| workspaceId | No | ||
| environmentId | No | ||
| confirmationText | No | ||
| secretInputNames | No | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful traits beyond the annotations: payload-bound confirmation is required even with full_access, policy can block execution, and cancellation does not undo effects. These are valuable operational facts for a non-destructive but open-world mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, front-loaded sentences with no wasted filler. Some phrasing ('payload-bound confirmation') is cryptic, but overall it is efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no coverage, and behavioral traits are decently covered. But for a tool with 8 parameters, nested objects, and 0% schema description coverage, the absence of parameter guidance leaves the definition 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% across 8 parameters (flowId, inputs, confirm, confirmationText, confirmation_text, workspaceId, environmentId, secretInputNames). The description mentions 'payload-bound confirmation' but never maps it to the confirm/confirmationText params nor explains any input semantics, leaving a major gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Start a Flow'), which is clearly distinguishable from siblings like unfour.flow.cancel_run and unfour.flow.get_run. It does not explicitly name those alternatives, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage context by noting the confirmation requirement and that read-only/disabled policy blocks execution, giving implicit preconditions. However, it never states when to use this versus alternatives such as unfour.flow.cancel_run or unfour.flow.get_run, nor exclusions for appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.flow.saveunfour.flow.saveB
Save a FlowDefinition using existing validation and revision checks. Empty id creates; updates require the current revision.
| Name | Required | Description | Default |
|---|---|---|---|
| definition | Yes | ||
| workspaceId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutation/idempotency profile is covered. The description usefully adds that validation runs and that updates enforce a current-revision check (optimistic concurrency), but it omits what happens on a stale revision or validation failure. Adds context beyond annotations without being rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the create/update behavior is front-loaded right after the purpose statement. Sized appropriately for a definition whose nested schema is large.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description states the validation and revision invariants. But it leaves workspaceId behavior, error handling on stale revisions, and permission needs unaddressed, which is thin for a mutation tool with a large nested input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description covers only the nested id and revision fields (empty id = create, revision must be current), leaving the top-level workspaceId and the bulk of the definition structure undocumented. The id/revision semantics are genuinely useful beyond the raw schema, but coverage of the actual two parameters is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Save) and resource (FlowDefinition) and adds the create-vs-update semantics, which clearly marks it as the write counterpart to flow.get, flow.delete, and flow.run. It does not explicitly name a sibling, but the save semantics distinguish it adequately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Empty id creates; updates require the current revision" gives a concrete usage condition and the precondition for the update path, which is more than nothing. However, it never contrasts with alternatives such as flow.run or flow.get, nor states when not to use it, so 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.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_connectionDelete SSH ConnectionBDestructive
Soft-deletes a saved connection through CommandBus. Guarded policy requires confirmation bound to workspace, connection and revision; read-only policy rejects deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| workspaceId | No | ||
| connectionId | Yes | ||
| confirmation_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| deleted | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds valuable behavioral details: it is a 'soft-delete' (not permanent), and it describes a 'Guarded policy' requiring confirmation bound to workspace, connection, and revision, plus read-only rejection. This goes beyond the annotations and gives the agent a better sense of 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 concise at two sentences and front-loaded with the core action. The policy details in the second sentence are relevant but could be streamlined. It avoids unnecessary fluff and is appropriately sized for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 4 parameters, no schema descriptions, and no parameter semantics, the description is insufficient. It hints at confirmation requirements but does not explain the confirmation flow, what confirmation_text should be, or whether workspaceId is always required. Even though an output schema exists, an agent cannot confidently call this tool without guessing parameter 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?
Schema coverage is 0%, so the description must compensate, but it only vaguely references 'confirmation' and 'workspace' without explaining individual parameters. It does not clarify the meaning of 'confirm' (boolean), 'confirmation_text', or how 'revision' maps to parameters. The description fails to provide the necessary semantic detail for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('soft-deletes') and resource ('saved connection'), making the primary purpose clear. It distinguishes from generic delete tools by mentioning 'through CommandBus' and 'soft-deletes', but it does not explicitly differentiate from siblings like unfour.db.delete_connection or unfour.ssh.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?
No explicit guidance on when to use this tool versus alternatives. It mentions policy constraints (confirmation, read-only rejection) but does not state scenarios like 'use this for SSH connections' or compare to unfour.db.delete_connection. The usage context is implied by the tool name only.
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_host_keyGet SSH Host FingerprintARead-onlyIdempotent
Reads only the stored host fingerprint for a saved connection in the selected workspace. Returns known and a nullable fingerprint without contacting the host, changing trust, or exposing raw known_hosts.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| known | Yes | |
| source | Yes | |
| fingerprint | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds critical behavioral specifics: it does not contact the host, does not change trust, and does not expose raw known_hosts. It also clarifies the return shape (known and nullable fingerprint), which goes beyond annotation coverage and adds real value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core purpose ('Reads only the stored host fingerprint') and then adds necessary clarifications without unnecessary words. It is concise and 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?
Given the output schema exists, the description need not detail return values, yet it already mentions the nullable fingerprint. It covers the tool's scope, side-effect-free nature, and prerequisites (saved connection, workspace), making it complete for an agent to use 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 mentions 'a saved connection' and 'selected workspace', indirectly referencing connectionId and workspaceId, but does not explicitly explain their roles, requiredness, or formats. It provides some context but is not fully adequate given the zero 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 reads only the stored host fingerprint for a saved connection, using a specific verb and resource. It distinguishes itself from siblings by emphasizing 'only' and explicitly noting it does not contact the host, which differentiates it from test_connection and other SSH tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool by highlighting that it avoids contacting the host, changing trust, or exposing raw known_hosts. This implicitly guides the agent to use it when a side-effect-free fingerprint lookup is needed, though it does not name alternative tools explicitly.
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.test_connectionTest SSH ConnectionA
Tests a saved SSH connection using the existing CommandBus connection test and host-key checks. Requires native SSH. Returns only success status and a safe generic message, never credentials or raw engine error text.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| source | Yes | |
| message | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and non-idempotent, and the description adds substantial context: it requires native SSH, runs host-key checks, returns only success status/generic message, and never exposes credentials or raw engine errors. This goes well beyond the structured annotation fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, followed by the key constraints. Every clause adds information; no filler or redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an output schema present and annotations covering side-effect posture, the description is largely sufficient: it names prerequisites, safety behavior, and output scope. It loses one point because parameter semantics for workspaceId are absent and no alternative tools are referenced.
Complex tools with many parameters or behaviors need more documentation. Simple 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 vaguely implies that connectionId refers to a saved SSH connection. workspaceId is not mentioned or explained, leaving a required contextual gap for the agent.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Tests'), a specific resource ('saved SSH connection'), and a concrete mechanism ('CommandBus connection test and host-key checks'). It clearly distinguishes this from db.test_connection and other SSH tools by scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'saved SSH connection' establishes clear context for when this tool applies, but the description does not explicitly name alternatives or state when not to use it. There are no exclusions, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfour.ssh.update_connectionUpdate SSH ConnectionA
Updates saved connection metadata through CommandBus. The ID must exist in the selected workspace. Omitted fields and stored credentials are preserved. Secret rotation is not exposed; the result contains only connectionId, workspaceId and source.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| name | No | ||
| port | No | ||
| keyPath | No | ||
| authKind | No | ||
| username | No | ||
| workspaceId | No | ||
| connectionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| workspaceId | Yes | |
| connectionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses substantial behavior beyond the annotations: the existence precondition, non-destructive partial-update semantics, the explicit exclusion of secret rotation, and the exact response shape ('only connectionId, workspaceId and source'). This is fully consistent with annotations (readOnlyHint=false, destructiveHint=false) — there is 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?
Four sentences, each carrying distinct information: purpose, precondition, update semantics, and capability/result boundary. Every sentence earns its place and the purpose is front-loaded. Slightly dense with unexplained terms ('CommandBus,' 'source') but appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, precondition, partial-update behavior, a capability exclusion, and result shape — substantial for a partial-update tool with an output schema. Gaps are the absence of routing guidance to siblings (create_connection, db.update_connection) and no clarification of what 'selected workspace' means or how it maps to the optional workspaceId parameter.
Complex tools with many parameters or behaviors need more documentation. 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 adds one cross-cutting semantic — 'omitted fields and stored credentials are preserved' — which is the most important behavior for these optional parameters. It does not explain individual fields such as authKind, keyPath, or how they interact, leaving the schema's bare types and enum to carry that weight. A 3 reflects partial compensation for a large coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Updates saved connection metadata.' This clearly differentiates it from sibling create/delete/test connection operations by name and description. The phrase 'through CommandBus' is unexplained jargon that adds little for an agent, and it does not explicitly contrast with unfour.db.update_connection, so a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: the precondition that the ID 'must exist in the selected workspace,' the partial-update guarantee that 'omitted fields and stored credentials are preserved,' and the capability boundary that 'secret rotation is not exposed.' These explain when and how the tool should be invoked, though no alternative sibling tool is named for cases like secret rotation or new connections.
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.
11 tool updates
v0.10.0- Changed
unfour.db.describe_table10 fields changed- added
Input schema / properties / catalogAdded value: +{ + "description": "Optional database catalog.", + "type": "string" +} - added
Output schema / properties / table / properties / capabilitiesAdded value: +{ + "additionalProperties": false, + "properties": { + "ddl": { + "type": "boolean" + }, + "foreignKeys": { + "type": "boolean" + }, + "indexes": { + "type": "boolean" + } + }, + "required": [ + "indexes", + "foreignKeys", + "ddl" + ], + "type": "object" +} - added
Output schema / properties / table / properties / columns / items / properties / autoIncrementAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / table / properties / columns / items / properties / defaultValueAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / table / properties / columns / items / properties / generatedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / table / properties / columns / items / requiredPrevious value: -[ - "name", - "dataType", - "nullable", - "primaryKey" -]New value: +[ + "name", + "dataType", + "nullable", + "primaryKey", + "defaultValue", + "generated", + "autoIncrement" +] - added
Output schema / properties / table / properties / ddlAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / table / properties / foreignKeysAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "referencedColumns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "referencedTable": { + "type": "string" + } + }, + "required": [ + "name", + "columns", + "referencedTable", + "referencedColumns" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / table / properties / indexesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "primary": { + "type": "boolean" + }, + "unique": { + "type": "boolean" + } + }, + "required": [ + "name", + "columns", + "unique", + "primary" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / table / requiredPrevious value: -[ - "name", - "kind", - "columns", - "columnCount" -]New value: +[ + "catalog", + "schema", + "name", + "kind", + "ddl", + "columnCount", + "columns", + "indexes", + "foreignKeys", + "capabilities" +]
- Added
unfour.db.export_table - Changed
unfour.db.list_tables2 fields changed- added
Input schema / properties / catalogAdded value: +{ + "description": "Optional database catalog. Omit to use the connection's default database.", + "type": "string" +} - added
Input schema / properties / schemaAdded value: +{ + "description": "Optional schema name. pg_catalog and information_schema are excluded even when specified.", + "type": "string" +}
- Added
unfour.flow.cancel_run - Added
unfour.flow.delete - Added
unfour.flow.get - Added
unfour.flow.get_run - Added
unfour.flow.list - Added
unfour.flow.list_runs - Added
unfour.flow.run - Added
unfour.flow.save
8 tool updates
v0.9.6- Changed
unfour.api.send_request1 field changed- changed
Input schema / properties / timeoutMs / descriptionPrevious value: -"Optional timeout in milliseconds. Omitted or null defaults to 60000ms; 0 means unlimited; positive values are used exactly."New value: +"Optional timeout in milliseconds. Omitted or null defaults to 60000ms. 0 disables the HTTP timeout; positive values are passed through to the HTTP layer. All MCP calls remain subject to the independent 120-second MCP safety deadline."
- Added
unfour.db.delete_connection - Added
unfour.db.list_history - Added
unfour.db.update_connection - Added
unfour.ssh.delete_connection - Added
unfour.ssh.get_host_key - Added
unfour.ssh.test_connection - Added
unfour.ssh.update_connection
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
Scored across 72 tools
The domain.action naming and detailed descriptions generally make each tool's purpose distinct, and cross-references such as run_diagnostic vs exec help. However, with 72 tools there are minor overlaps, e.g. generic connection.list vs ssh.list_connections/db.list_connections, and multiple history/list surfaces that could be confused.
All tools follow a consistent snake_case namespaced pattern: unfour.<domain>.<action>. Verbs are used predictably (list, get, create, update, delete, run, etc.), with only expected noun-style exceptions like current and health.
72 tools is far beyond a practical, well-scoped set for an agent. Even across several domains, this volume is excessive and many fine-grained CRUD/list operations could be consolidated or exposed through resource parameters.
Coverage is broad across workspaces, API requests/environments, SSH connections/tasks/files, database connections/tables/query/export, Flow runs, activity, and health. Minor gaps exist, such as no workspace create/delete tools and no explicit API folder CRUD, but core workflows are covered.
Maintenance
Related MCP Connectors
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 your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
1
Related MCP Servers
- AlicenseBqualityDmaintenanceProduction-grade MCP server that gives AI agents safe access to your local dev environment: filesystem, databases, processes, and OpenAPI specs.1541 npm3MIT
- FlicenseNot gradedqualityDmaintenanceSecure 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.-
- AlicenseNot gradedqualityCmaintenanceLocal-first MCP server that provides project context, verification gates, and structured tools for coding agents to discover knowledge, run diagnostics, and execute allowlisted commands within a repository.16 npmMIT
- AlicenseCqualityBmaintenanceLocal-first MCP runtime for coding agents with bounded workspace access, content-preconditioned writes, AST search, LSP navigation and diagnostics, and Git status/diff. Designed to give coding agents useful repository access without treating unrestricted shell access as the default integration boundary.133MIT