Skip to main content
Glama
runwhen-contrib

RunWhen Platform MCP

RunWhen Platform MCP banner

RunWhen Platform MCP

RunWhen Platform MCP lets your coding agent (such as Cursor, Claude, Continue, or Copilot) talk to the RunWhen platform — workspace chat, issues, SLXs, run sessions, and the Tool Builder — over the Model Context Protocol (MCP).

PyPI version Python 3.10+ License: Apache-2.0 MCP

GitHub · PyPI · Tools (below)


Table of contents


Related MCP server: bricks-and-context

Key features

  • Workspace chat: Ask the RunWhen AI assistant about your infrastructure. It has access to issue search, task/SLX search, run sessions, resource discovery, knowledge base, graphing, and Mermaid diagrams. Supports selecting an assistant (persona) via persona_name.

  • Task authoring (Tool Builder): Write bash or Python scripts locally, validate them against the RunWhen contract, run them against live infrastructure, and commit them as SLXs. Use get_workspace_context to load RUNWHEN.md conventions before writing.

  • Direct data access: List workspaces, issues, SLXs, run sessions; get runbooks and config index; search tasks and resources. Plus create and update chat rules and commands.

Requirements

  • Python 3.10 or newer

  • RunWhen account and API token (see Getting a token)

  • Any MCP client (Cursor, Claude Desktop, Continue, etc.)

Getting started

  1. Install the server:

    pip install runwhen-platform-mcp

    Or from source (use a venv and then point your MCP client at the venv’s runwhen-platform-mcp):

    git clone https://github.com/runwhen-contrib/runwhen-platform-mcp.git
    cd runwhen-platform-mcp
    python3 -m venv .venv
    source .venv/bin/activate   # Windows: .venv\Scripts\activate
    pip install -e .
  2. Set environment variables (see Configuration): RW_API_URL, RUNWHEN_TOKEN, and optionally DEFAULT_WORKSPACE.

  3. Add the server to your MCP client using the config below. Replace your-jwt-token and your-workspace with your RunWhen token and workspace name.

Add the following to your MCP client config:

{
  "mcpServers": {
    "runwhen": {
      "command": "runwhen-platform-mcp",
      "env": {
        "RW_API_URL": "https://papi.beta.runwhen.com",
        "RUNWHEN_TOKEN": "your-jwt-token",
        "DEFAULT_WORKSPACE": "your-workspace"
      }
    }
  }
}

If you installed from source into a venv, use the full path to the venv’s runwhen-platform-mcp as command (e.g. /path/to/runwhen-platform-mcp/.venv/bin/runwhen-platform-mcp). Find it with which runwhen-platform-mcp after activating the venv.


MCP client configuration

Configure the RunWhen MCP server in your client as shown below. Use the JSON block from Getting started; only the location of the config differs by client.

Cursor

Go to Cursor SettingsMCPNew MCP Server (or edit .cursor/mcp.json). Paste the config from Getting started. If you use a venv, set command to the full path to .venv/bin/runwhen-platform-mcp.

VS Code (GitHub Copilot)

VS Code supports MCP servers through GitHub Copilot. Add the config to your workspace or user settings:

  • Workspace: .vscode/mcp.json in your project root

  • User: settings.json"mcp.servers" key

Windows with venv

git clone https://github.com/runwhen-contrib/runwhen-platform-mcp.git
cd runwhen-platform-mcp
python -m venv .venv
.venv\Scripts\activate
pip install -e .

Then add to .vscode/mcp.json:

{
  "mcpServers": {
    "runwhen": {
      "command": "C:\\path\\to\\runwhen-platform-mcp\\.venv\\Scripts\\runwhen-platform-mcp.exe",
      "env": {
        "RW_API_URL": "https://papi.beta.runwhen.com",
        "RUNWHEN_TOKEN": "your-jwt-token",
        "DEFAULT_WORKSPACE": "your-workspace"
      }
    }
  }
}

Replace C:\\path\\to\\ with the actual path where you cloned the repo. To find the exact path, run where runwhen-platform-mcp in a terminal with the venv activated.

Tip: On Windows, pip installs console scripts as .exe files in .venv\Scripts\. Always use the full absolute path with backslashes in the MCP config.

macOS / Linux with venv

{
  "mcpServers": {
    "runwhen": {
      "command": "/path/to/runwhen-platform-mcp/.venv/bin/runwhen-platform-mcp",
      "env": {
        "RW_API_URL": "https://papi.beta.runwhen.com",
        "RUNWHEN_TOKEN": "your-jwt-token",
        "DEFAULT_WORKSPACE": "your-workspace"
      }
    }
  }
}

Claude Desktop

Add the config to:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/claude/claude_desktop_config.json

Use the same mcpServers.runwhen block as in Getting started.

Other MCP clients

Any client that supports MCP over stdio can use this server. Register a local MCP server with:

  • Command: runwhen-platform-mcp (or full path to the venv’s runwhen-platform-mcp if you installed from source)

  • Env: RW_API_URL, RUNWHEN_TOKEN, and optionally DEFAULT_WORKSPACE

See your client’s docs for where to add MCP servers (e.g. Continue, Codex, Gemini CLI, etc.).

Remote (HTTP) access

The MCP server supports streamable HTTP so your editor can connect over HTTPS without a local Python install.

RunWhen-hosted MCP (beta)

RunWhen operates a shared endpoint for the beta environment:

https://mcp.beta.runwhen.com/mcp

Use your RunWhen beta JWT or Personal Access Token (same as local mode) in the Authorization header. Official docs: RunWhen MCP Server — Remote server (HTTP).

Example mcpServers block (all remote clients below use this shape):

{
  "mcpServers": {
    "runwhen": {
      "url": "https://mcp.beta.runwhen.com/mcp",
      "headers": {
        "Authorization": "Bearer your-runwhen-token"
      }
    }
  }
}

Important: Use /mcp with no trailing slash. The server redirects /mcp//mcp, which can break some MCP clients.

Workspace: Pass workspace_name on tools that support it when you need a specific workspace. RunWhen’s hosted service is configured for the beta API; self-hosted deployments often set DEFAULT_WORKSPACE in server environment variables.

Self-hosted remote MCP

To run the server yourself (Docker, Kubernetes, etc.), set url to your own hostname (for example https://mcp.your-domain.com/mcp) and the same Bearer token pattern. See Running the server in HTTP mode yourself below.

Cursor (remote)

  1. Open Cursor SettingsMCPNew MCP Server, or edit .cursor/mcp.json in your project (or user config, depending on how you scope MCP).

  2. Add the mcpServers.runwhen block above (https://mcp.beta.runwhen.com/mcp for hosted beta, or your self-hosted URL) and Bearer token.

  3. Reload MCP / restart Cursor if the client does not pick up changes immediately.

Remote MCP support depends on your Cursor version; if url + headers are not accepted, use the local command install instead.

VS Code (GitHub Copilot) (remote)

  1. Add the same mcpServers entry to .vscode/mcp.json (workspace) or to user settings.json under the key your VS Code build uses for MCP servers (for example mcp.servers — check VS Code MCP documentation for the current schema).

  2. Use url and headers as in the JSON block above.

Availability of remote MCP in VS Code evolves with Copilot; confirm in release notes if url-based servers are enabled for your version.

Claude Desktop (remote)

  1. Edit the Claude Desktop config file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/claude/claude_desktop_config.json

  2. Merge the mcpServers.runwhen object from the JSON block above (hosted or self-hosted URL) into the top-level mcpServers map (alongside any other servers you already have).

  3. Fully quit and restart Claude Desktop.

Other MCP clients

Any client that supports remote or HTTP MCP (streamable HTTP) can use the same url + headers pattern. For a local-only client, use the stdio command + env setup in Getting started.

Running the server in HTTP mode yourself:

Using Docker:

docker run -p 8000:8000 \
  -e RW_API_URL=https://papi.beta.runwhen.com \
  ghcr.io/runwhen-contrib/runwhen-platform-mcp:latest

Or locally:

export MCP_TRANSPORT=http
export MCP_HOST=0.0.0.0
export MCP_PORT=8000
export FASTMCP_STATELESS_HTTP=true
export RW_API_URL=https://papi.beta.runwhen.com
runwhen-platform-mcp

The server exposes:

  • /mcp/ — Streamable HTTP MCP endpoint (POST for tool calls, GET for SSE)

  • /health — Health check (200 OK with version info)

  • /livez — Kubernetes liveness probe

Authentication in HTTP mode: Each client sends credentials with the request — typically Authorization: Bearer <token> (JWT or Personal Access Token). The server validates tokens against the RunWhen API. No RUNWHEN_TOKEN env var is required on the server when clients supply Bearer tokens; each user authenticates with their own token.

OAuth (browser sign-in) — When the server is configured with MCP_BASE_URL plus RunWhen OAuth client credentials (see OAuth for remote HTTP deployments below), MCP clients that support remote OAuth can complete sign-in in the browser instead of embedding a long-lived token. Bearer authentication remains supported for clients that do not use OAuth. Hosted beta exposes discovery at https://mcp.beta.runwhen.com/.well-known/oauth-authorization-server.

Variable

Required

Description

MCP_TRANSPORT

Yes

Set to http to enable remote mode (default: stdio).

MCP_HOST

No

Bind address (default: 0.0.0.0).

MCP_PORT

No

Listen port (default: 8000).

FASTMCP_STATELESS_HTTP

No

Set to true for horizontal scaling behind a load balancer.

MCP_ALLOWED_HOSTS

No

Comma-separated Host allowlist for FastMCP's HostOriginGuardMiddleware. Only needed when the public hostname differs from MCP_BASE_URL's hostname (which is auto-added). Without a match, external requests are rejected with 421 Misdirected Request.

MCP_HOST_ORIGIN_PROTECTION

No

Set to false to disable the Host/Origin guard middleware (defer to the ingress). Defaults to enabled.

RW_API_URL

Yes

RunWhen API base URL. Used for token verification and API calls.

Note — 421 Misdirected Request troubleshooting. FastMCP 3.4+ ships a Host/Origin guard middleware whose default allow-list is loopback-only (127.0.0.1, localhost, ::1). Any request whose Host header doesn't match returns 421 Misdirected Request — including OAuth handshakes, which surfaces in Cursor as [Shared MCP process] Streamable HTTP error: Error POSTing to endpoint: Misdirected Request. This server automatically appends the MCP_BASE_URL hostname to the allow-list, so the OAuth-configured install works out of the box. If the public hostname on your ingress differs from MCP_BASE_URL (rare), set MCP_ALLOWED_HOSTS explicitly.

OAuth for remote HTTP deployments

Enable interactive OAuth alongside Bearer tokens by registering a confidential OAuth client with your RunWhen environment and pointing the MCP server at it.

  1. MCP_BASE_URL — Public origin of this MCP server (no path), e.g. https://mcp.beta.runwhen.com. Required for OAuth redirects and discovery (/.well-known/oauth-authorization-server is served from this base).

  2. RunWhen OAuth client — Create a confidential client whose authorization server matches your RW_API_URL (OpenID configuration at {RW_API_URL}/.well-known/openid-configuration). Register the redirect URI:

    • {MCP_BASE_URL}/auth/callback
      Example: https://mcp.beta.runwhen.com/auth/callback

  3. Token endpoint auth — Use client secret post (client_secret_post), matching the server’s OIDC proxy configuration.

  4. Set on the MCP server:

    • MCP_PAPI_OAUTH_CLIENT_ID — client ID from step 2

    • MCP_PAPI_OAUTH_CLIENT_SECRET — client secret from step 2

If these are unset, the server runs in JWKS + PAT/JWT verification only mode (Bearer tokens still work; no browser OAuth).

Legacy Auth0 path — Older deployments may set MCP_AUTH0_CONFIG_URL, MCP_AUTH0_CLIENT_ID, MCP_AUTH0_CLIENT_SECRET, and MCP_AUTH0_AUDIENCE instead of the RunWhen-native client variables above. Prefer RunWhen OAuth when available.

The consent screen shown during OAuth uses RunWhen branding (runwhen_platform_mcp/consent_ui.py).

Multiple environments

If you work across multiple RunWhen environments (e.g. beta and production, or separate workspaces), you can register multiple MCP servers. Important: only enable one at a time unless you specifically need cross-environment workflows — multiple active servers with identical tool names confuse LLM agents.

Use MCP_SERVER_LABEL to give each server a clear identity:

{
  "mcpServers": {
    "runwhen": {
      "command": "runwhen-platform-mcp",
      "env": {
        "RW_API_URL": "https://papi.app.runwhen.com",
        "RUNWHEN_TOKEN": "your-prod-token",
        "DEFAULT_WORKSPACE": "my-prod-workspace",
        "MCP_SERVER_LABEL": "prod"
      }
    },
    "runwhen-beta": {
      "command": "runwhen-platform-mcp",
      "env": {
        "RW_API_URL": "https://papi.beta.runwhen.com",
        "RUNWHEN_TOKEN": "your-beta-token",
        "DEFAULT_WORKSPACE": "my-beta-workspace",
        "MCP_SERVER_LABEL": "beta"
      }
    }
  }
}

The server includes its label, environment, and workspace in its name and instructions so agents can route tool calls to the correct instance. See mcp-multi-env.json for a full example.


Your first prompt

After the server is connected, try:

What workspaces do I have access to?

or:

Summarize the current issues in my workspace.

Your client should call list_workspaces or get_workspace_issues and show the result. For the full chat experience, try:

Using workspace chat, what tasks are watching my production namespace?

Tools

The server exposes these tools, grouped by use case.

  • Workspace intelligence (10 tools)

    • workspace_chat — Ask the RunWhen AI assistant about your infrastructure (issues, tasks, run sessions, resources, knowledge base). Optional persona_name to select an assistant.

    • list_workspaces — List workspaces you have access to.

    • get_workspace_chat_config — Get resolved chat rules and commands (metadata). Optional persona_name.

    • get_workspace_issues — Current issues; optional severity filter (1–4).

    • get_workspace_slxs — List SLXs (health checks and tasks).

    • get_run_sessions — Recent run session results.

    • get_workspace_config_index — Workspace config and resource relationships.

    • get_issue_details — Details for a specific issue by ID.

    • get_slx_runbook — Runbook definition for an SLX.

    • search_workspace — Search tasks, resources, and config by keyword.

  • Chat rules and commands (8 tools)

    • list_chat_rules — List chat rules (optional filters: scope_type, scope_id, is_active).

    • get_chat_rule — Get a chat rule by ID (full content).

    • create_chat_rule — Create a rule (name, ruleContent, scopeType, scopeId, isActive).

    • update_chat_rule — Update a rule by ID.

    • list_chat_commands — List chat commands (slash-commands).

    • get_chat_command — Get a command by ID (full content).

    • create_chat_command — Create a command (name, commandContent, scopeType, scopeId). Supports scheduling via cron_schedule, sink_configs, run_as_user, and assistant_name.

    • update_chat_command — Update a command by ID (including schedule fields).

    • update_chat_command — Update a command by ID.

  • AI assistants (personas) (5 tools)

    • list_assistants — List AI assistants (personas) in a workspace.

    • get_assistant — Get a single assistant's full config by short name.

    • create_assistant — Create an assistant (its short_name is the persona_name for workspace_chat). Upsert.

    • update_assistant — Partially update an existing assistant (fetch-merge-write).

    • delete_assistant — Soft-delete an assistant. Persona-scoped rules/commands are not removed automatically.

  • CodeBundle Registry (3 tools)

    • search_registry — Search the public CodeBundle Registry for reusable automation. Always check before writing custom scripts.

    • get_registry_codebundle — Get full details of a specific codebundle (tasks, SLIs, env vars, source URL).

    • deploy_registry_codebundle — Deploy a registry codebundle as an SLX. Generates native codebundle YAML (different from commit_slx which embeds inline scripts).

  • Task authoring — Tool Builder (9 tools)

    • get_workspace_context — Load RUNWHEN.md from the project. Call before writing scripts so the agent follows your conventions.

    • validate_script — Validate a script against the RunWhen contract (main, issue format, FD 3 for bash).

    • run_script — Run a script on a RunWhen runner; returns run ID.

    • get_run_status — Status of a run (RUNNING, SUCCEEDED, FAILED).

    • get_run_output — Parsed output (issues, stdout, stderr, report).

    • run_script_and_wait — Run script and wait for full results (run + poll + output).

    • commit_slx — Commit a tested script as an SLX (task + optional SLI; supports sli_script or cron_schedule).

    • get_workspace_secrets — List secret keys (e.g. kubeconfig).

    • get_workspace_locations — List runner locations. Location auto-resolves for run_script, commit_slx, etc.; this tool is only needed when multiple workspace runners exist and you need to choose.


Configuration

Environment variables

Variable

Required

Description

RW_API_URL

Yes

RunWhen API base URL (e.g. https://papi.beta.runwhen.com). Agent URL is derived (subdomain papiagentfarm).

RUNWHEN_TOKEN

Yes

RunWhen API token (JWT or Personal Access Token). Used for both API and Agent.

DEFAULT_WORKSPACE

No

Default workspace so tools don’t need workspace_name every time.

MCP_SERVER_LABEL

No

Human-readable label for this server instance (e.g. prod, beta). Included in server name and instructions for multi-environment setups. Auto-derived from RW_API_URL if not set.

RUNWHEN_CONTEXT_FILE

No

Override path to RUNWHEN.md; otherwise auto-discovered from cwd.

RUNWHEN_REGISTRY_URL

No

CodeBundle Registry URL (default: https://registry.runwhen.com). Public API, no auth required.

RUNWHEN_AIRGAP

No

Set to true for airgapped environments. search_registry / get_registry_codebundle return a structured "registry disabled" response instead of attempting an outbound HTTPS call to the registry.

RUNWHEN_REGISTRY_TIMEOUT_S

No

HTTP timeout (seconds) for registry calls. Default 10. Lowered from the PAPI default so an unreachable registry fails fast and is reported gracefully.

RUNWHEN_SCRIPT_SOFT_MAX_BYTES

No

Soft warning threshold for script payload size. Default 10240 (10KB). Scripts above this size produce an advisory warning in validate_script / run_script_and_wait — MCP HTTP intermediaries often truncate base64 payloads above ~13KB.

RUNWHEN_SCRIPT_HARD_MAX_BYTES

No

Hard cap for script payload size. Default 65536 (64KB). commit_slx / run_script* reject scripts above this with an error and suggest using a registry codebundle, script_gzip_base64, or script_path.

MCP_GENERIC_CODECOLLECTION_REPO_URL

No

Force a specific rw-generic-codecollection mirror URL for Tool Builder runbooks + SLIs, overriding workspace auto-detection. Typically only needed when the workspace lookup should be bypassed (e.g. testing a fork). See Tool Builder repo resolution below.

MCP_GENERIC_CODECOLLECTION_REF

No

Git ref for the generic codecollection mirror (default: main).

MCP_TOOL_BUILDER_RUNBOOK_*

No

Override Tool Builder runbook code bundle (REPO_URL, REF, PATH).

MCP_TOOL_BUILDER_SLI_*

No

Override Tool Builder SLI code bundle (REPO_URL, REF, PATH).

MCP_CRON_SLI_*

No

Override cron-scheduler SLI code bundle (REPO_URL, REF, PATH; default repo: rw-workspace-utils).

MCP_POLL_INTERVAL_S

No

Seconds between script run status polls (default: 5).

MCP_MAX_POLL_DURATION_S

No

Max seconds to wait for a script run (default: 300).

MCP_ARTIFACT_SETTLE_DELAY_S

No

Delay before fetching run artifacts (default: 2).

MCP_GENERIC_SLX_ICON

No

Default SLX icon URL when none is provided at commit time.

HTTP / OAuth only (when MCP_TRANSPORT=http; see OAuth for remote HTTP deployments):

Variable

Required

Description

MCP_BASE_URL

For OAuth

Public URL of the MCP server (origin only).

MCP_PAPI_OAUTH_CLIENT_ID

For OAuth

RunWhen OAuth client ID (preferred).

MCP_PAPI_OAUTH_CLIENT_SECRET

For OAuth

RunWhen OAuth client secret (preferred).

MCP_AUTH0_*

Legacy

Auth0 OIDC alternative if RunWhen OAuth client vars are not used.

See .env.example in the repo.

Airgap deployments

The MCP is designed to run in airgapped clusters with minimal configuration. In most installs the only variable operators need to set is:

RUNWHEN_AIRGAP=true

This turns off the CodeBundle Registry (search_registry / get_registry_codebundle return a structured "registry disabled" response instead of attempting an outbound HTTPS call).

Every other airgap-sensitive knob has a workspace-aware default and only needs to be set for override / debugging purposes.

How Tool Builder resolves code-bundle URLs

commit_slx and render_codecollection_skill embed a codeBundle.repoUrl into every runbook / SLI they produce. PAPI clones that URL on ingestion to index tasks, so it must be reachable from the PAPI cluster — on airgap installs that means the internal mirror registered with the platform (e.g. http://rw-airgap-cc-catalog-svc.<namespace>:8080/git/rw-generic-codecollection.git), not github.com.

The MCP resolves the URL for rw-generic-codecollection (Tool Builder runbook + SLI) and rw-workspace-utils (cron-scheduler SLI) in this order:

  1. Explicit call argumentgeneric_runtime_repo_url on render_codecollection_skill.

  2. Env overrideMCP_GENERIC_CODECOLLECTION_REPO_URL / MCP_TOOL_BUILDER_*_REPO_URL / MCP_CRON_SLI_REPO_URL (see table below).

  3. Workspace lookup — the MCP queries GET /api/v3/codecollections (the same list the platform UI's picker uses) and, if the workspace has an entry named rw-generic-codecollection (or rw-workspace-utils), uses that URL. Results are cached in-process for 5 minutes.

  4. Hardcoded github.com default.

Both commit_slx and render_codecollection_skill return generic_repo_url + generic_repo_resolved_from (explicit / env / workspace / default) in their response so you can see which source won at a glance.

Airgap operators typically need no code-bundle env vars — once the internal mirror is registered with PAPI (which the platform-airgap install does automatically), the workspace lookup finds it on every commit_slx / render_codecollection_skill call.

Airgap env-var reference

Set only what you need to override.

Variable

When to set

Description

RUNWHEN_AIRGAP

Always in airgap.

Set to true. Disables outbound registry calls (search_registry, get_registry_codebundle).

RW_API_URL

Always.

Internal PAPI URL, e.g. http://papi.<namespace>.svc.cluster.local or https://papi.<airgap-domain>. Agent URL is auto-derived (papiagentfarm).

RUNWHEN_APP_URL

If RW_API_URL is an internal .svc.cluster.local URL.

Public UI origin used in workspace_chat responses so the returned chatUrl opens in the browser.

MCP_BASE_URL

HTTP transport with OAuth.

Public origin of the MCP server (e.g. https://mcp.<airgap-domain>) — used for OAuth discovery + redirect.

MCP_GENERIC_CODECOLLECTION_REPO_URL

Rarely.

Force a specific rw-generic-codecollection mirror URL for both Tool Builder runbooks and SLIs. Only needed when you want to bypass the workspace lookup (e.g. targeting a fork or a URL not yet registered with PAPI).

MCP_GENERIC_CODECOLLECTION_REF

Rarely.

Git ref for the generic codecollection mirror. Default: main.

MCP_TOOL_BUILDER_RUNBOOK_REPO_URL / _REF / _PATH

Rarely.

Per-bundle override for Tool Builder runbook. _PATH defaults to codebundles/tool-builder/runbook.robot. Takes precedence over MCP_GENERIC_CODECOLLECTION_*.

MCP_TOOL_BUILDER_SLI_REPO_URL / _REF / _PATH

Rarely.

Per-bundle override for Tool Builder SLI. _PATH defaults to codebundles/tool-builder/sli.robot. Takes precedence over MCP_GENERIC_CODECOLLECTION_*.

MCP_CRON_SLI_REPO_URL / _REF / _PATH

Rarely.

Per-bundle override for the cron-scheduler SLI (rw-workspace-utils). The workspace lookup auto-selects the mirror by default, so only set this to force a fork.

MCP_GENERIC_SLX_ICON

Optional.

Default SLX icon shown in the platform UI. Point at an internal HTTPS/GCS-equivalent URL if the default asset host isn't reachable.

MCP_SERVER_LABEL

Optional.

Human-readable label baked into the MCP server name (e.g. airgap, beta). Helps agents distinguish which server targets which environment when several are configured side-by-side.

Getting a token

  • Personal Access Token (recommended, up to 180 days): RunWhen UI → ProfilePersonal Tokens.

  • Email/password (short-lived): POST {RW_API_URL}/api/v3/token/ with {"email": "...", "password": "..."}.

  • Browser: Dev Tools → Network → copy Authorization: Bearer ... from any API request.

Access control and "Run with Assistant"

Workspace roles: readonly, readandrun, readandrunwithassistant, readwrite, admin.

  • Read and Run with Assistant (readandrunwithassistant): Run tasks only when tied to an assistant (persona) you’re allowed to use. Applies to run sessions (e.g. Run button in the UI), not Tool Builder script runs.

  • Workspace chat: Use persona_name in workspace_chat / get_workspace_chat_config to use chat in the context of an assistant you’re allowed to use.

  • Tool Builder run (run_script, run_script_and_wait): Uses author/run API; currently admin only. No "run with assistant" for MCP script execution today.

  • commit_slx: Requires admin or readwrite.


Concepts

How it works

  • Workspace chat: The server forwards workspace_chat to the RunWhen Agent (AgentFarm), which has many internal tools. You ask in natural language; optional persona_name selects the assistant.

  • Tool Builder flow: Search registry (search_registry) → load context (get_workspace_context) → write script → validate → get secrets/locations → test with run_script_and_wait → iterate → commit_slx → verify with get_workspace_slxs.

  • Knowledge base: Full CRUD via list_knowledge_base_articles, create_knowledge_base_article, update_knowledge_base_article, delete_knowledge_base_article. Search also works inside workspace_chat.

  • CodeBundle Registry: Search for existing automation before building custom. The registry at registry.runwhen.com is public and requires no authentication.

Infrastructure context (RUNWHEN.md)

Put a RUNWHEN.md in your project root with infrastructure rules (DBs, naming, severity, etc.). The server discovers it by walking up from the current working directory. Agents should call get_workspace_context before writing scripts.

  • Template: runwhen_platform_mcp/docs/RUNWHEN.md.template

  • Example: runwhen_platform_mcp/docs/RUNWHEN.md.example

  • Flow and SLI patterns: runwhen_platform_mcp/docs/tool-builder-flow.md


What’s in this repo

Component

Path

Description

MCP server

runwhen_platform_mcp/

Python package; run via runwhen-platform-mcp or python -m runwhen_platform_mcp.server.

Docs

runwhen_platform_mcp/docs/

Tool Builder flow, RUNWHEN.md template/example.

Tests

tests/

Pytest tests; run with pytest tests/ -v (see requirements-dev.txt).

Skills

skills/

Reusable AI workflow skills (SKILL.md). Filesystem-discovered by Cursor / Copilot / Claude via .github/skills/ & .claude/skills/ symlinks, AND exposed to every MCP client as runwhen-skill://<name> resources (plus list_skills / get_skill tool fallbacks for clients that under-surface resources).

Rules & agents

rules/, agents/

Optional Cursor rules and agent personas.

Docker

Dockerfile

Container image for remote HTTP deployment. Published to ghcr.io/runwhen-contrib/runwhen-platform-mcp.

Cursor plugin

.cursor-plugin/, mcp.json

Plugin metadata and example MCP config.

Copilot instructions

.github/copilot-instructions.md

Always-on instructions for GitHub Copilot.

The MCP server is client-agnostic; client-specific pieces (.cursor-plugin/, .github/copilot-instructions.md) are optional.


Skills (progressive disclosure for any MCP client)

skills/<name>/SKILL.md files are RunWhen's progressive-disclosure surface — short, task-focused guides agents load on demand instead of bundling everything into tool docstrings.

How each agent type sees them:

Client

Discovery path

Mechanism

Cursor / Claude Code / Copilot

.cursor-plugin/, .claude/skills/, .github/skills/ (symlinks to skills/)

Native filesystem skill loading

Goose, Continue, Cline, OpenAI Codex CLI, any other compliant MCP client

runwhen-skill://<name> MCP resources

Standard MCP resources/list + resources/read

Clients that surface tools only (some OpenAI / Gemini function-callers)

list_skills() + get_skill(name) tool shims

Fallback path with identical content

The single source of truth is skills/<name>/SKILL.md. Frontmatter description is the trigger an agent reads to decide whether to load the body — keep it 1-2 sentences with explicit "Use when:" clauses.

Authoring rule of thumb: if you find yourself growing a tool docstring past ~30 lines, lift the content into a new skill and reference its URI from the docstring instead. Tool-side guidance should be short; depth goes in skills.


Development and testing

pip install -e .
pip install -r requirements-dev.txt
pytest tests/ -v

Local MCP against staging (no container rebuild)

To iterate on MCP server code against a live environment (e.g. staging) without pushing Docker images, run the server in stdio mode from your checkout and point Cursor (or any MCP client) at the local binary:

cd runwhen-platform-mcp
pip install -e .
export RW_API_URL="https://papi.staging.shared.runwhen.com"
export RUNWHEN_TOKEN="<your PAT or JWT>"
export DEFAULT_WORKSPACE="stg-test"   # optional default
runwhen-platform-mcp

Cursor mcp.json example (use the venv binary path after pip install -e .):

{
  "mcpServers": {
    "runwhen-staging-local": {
      "command": "/path/to/runwhen-platform-mcp/.venv/bin/runwhen-platform-mcp",
      "env": {
        "RW_API_URL": "https://papi.staging.shared.runwhen.com",
        "RUNWHEN_TOKEN": "<PAT or JWT>",
        "DEFAULT_WORKSPACE": "stg-test"
      }
    }
  }
}

Changes to runwhen_platform_mcp/server.py take effect after restarting the MCP server in Cursor (disable/re-enable the server or reload the window). Only deploy a remote HTTP MCP container when you need OAuth or a shared team endpoint.

Token: RunWhen UI → Profile → Personal Tokens, or POST {RW_API_URL}/api/v3/token/.

Optional Git hooks (Ruff check + format, same as CI):

pip install pre-commit   # or install with: pip install -e ".[dev]"
pre-commit install
pre-commit run --all-files   # first-time / manual check

CI runs tests on push and PRs to main (.github/workflows/ci.yaml).

Optional repository secrets RUNWHEN_MCP_URL (full streamable HTTP MCP URL, e.g. https://mcp.<env>.runwhen.com/mcp, no trailing slash) and RUNWHEN_TOKEN (same Bearer token as MCP clients) enable a remote MCP HTTP smoke step that exercises initialize, tools/list, list_workspaces, and get_workspace_issues for workspace t-oncall (the workflow sets RW_SMOKE_WORKSPACE=t-oncall). If either secret is unset, that step is skipped with a notice.


PyPI and container images

PyPI — On every push to main (including merges), .github/workflows/pypi.yaml publishes to PyPI via runwhen-contrib/github-actions/publish-pypi with date-based versioning (YYYY.MM.DD.N). Configure PYPI_TOKEN (and optionally SLACK_BOT_TOKEN / slack_channel) in repo secrets.

Docker (GHCR and GCP) — Pull requests that touch image-related paths (see .github/workflows/docker.yaml) build and push a preview image (pr-{branch}-{sha}). Pushes to main use .github/workflows/release.yml: the workflow runs on each merge to main, and a new image is built and pushed only if that merge changes the same image-related paths (package code, Dockerfile, pyproject.toml, requirements.txt, or docker.yaml). README-only (or other non-image) merges skip the Docker job so latest and version tags are not republished for doc-only changes. Run Actions → Release → Run workflow to force a full run including Docker regardless of paths.


License

Apache-2.0

Available Tools

47 tools
commit_slxCommit SlxA

Commit a tested script as an SLX to the workspace Git repo.

Skills:

  • runwhen-skill://build-runwhen-task (authoring workflow)

  • runwhen-skill://discover-secrets (secret_vars mapping)

  • runwhen-skill://discover-locations (location selection)

  • runwhen-skill://configure-hierarchy (hierarchy/resource_path)

Creates a new SLX with the script as a Task (runbook) and/or SLI. The script should already be tested via run_script or run_script_and_wait.

This writes slx.yaml + runbook.yaml (for tasks) or slx.yaml + sli.yaml (for SLIs) to the workspace repository.

Script-source parameter matrix (provide exactly one task variant; SLI variants mirror the names):

Variant

Best for

Mode

script

Small scripts <~5KB, readable

any

script_base64

Any size; safe JSON escaping

any

script_gzip_base64

>5KB; 3-5x denser than b64

any

script_path

Local file, raw text

stdio only

script_base64_path

Local file with base64 blob

stdio only

For very large scripts (combined task+SLI >~50KB) prefer publishing as a registry codebundle and using deploy_registry_codebundle.

To commit BOTH a task AND an SLI on the same SLX:

  1. Custom SLI script (preferred): set task_type="task" and provide a separate lightweight sli_script that emits ONE float between 0 and 1 (e.g. failing_pods / total_pods). The SLI script MUST be its own small probe — DO NOT duplicate the task body. The server rejects identical task+SLI content.

  2. Cron-scheduler SLI: set task_type="task" and provide cron_schedule with a cron expression (e.g. "0 */2 * * *"). The SLI will trigger the task's runbook on that schedule. No sli_script needed.

Output contracts (the two scripts are NOT interchangeable):

  • Task (interpreter, task_type='task'): returns/writes a List[Dict] of issues with keys 'issue title', 'issue description', 'issue severity' (1-4), 'issue next steps'.

  • SLI (sli_interpreter, implied task_type='sli'): returns/writes ONE float between 0 and 1.

Script-content footguns:

  • Bash scripts must NOT include main "$@" at the bottom. The runner sources the script and invokes main() itself with FD 3 wired to a run_output.json file. A trailing main "$@" triggers a preflight invocation with FD 3 read-only, producing misleading "Bad file descriptor" errors. Just define main() and stop there.

  • secret_vars entries are injected at runtime as env vars whose VALUE is a FILE PATH on the runner — not the secret value itself. Tools that read paths natively (kubectl/KUBECONFIG, gcloud/ GOOGLE_APPLICATION_CREDENTIALS) work unchanged. For tokens/passwords the script must cat "$VAR" (bash) or open(os.environ["VAR"]).read() (python) to get the actual value.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo'logs-bulk', 'config', or 'logs-stacktrace'.logs-bulk
tagsNoResource tags ({name, value} dicts).
aliasYesHuman-readable display name (e.g. 'Pod Health Check').
accessNo'read-write' or 'read-only'.read-write
branchNoGit branch to commit to.main
ownersNoOwner emails (defaults to current user).
scriptNoThe full script source code (not base64).
env_varsNoEnvironment variables baked into the SLX config.
locationNoRunner location (use get_workspace_locations).
slx_nameYesShort SLX name (lowercase-kebab-case, e.g. 'k8s-pod-health').
hierarchyNoTag names for hierarchical grouping.
image_urlNoIcon URL for the SLX.
statementYesSLX statement (e.g. 'All pods should be running').
task_typeNo'task' (runbook) or 'sli' (indicator).task
sli_scriptNoOptional SLI script (returns float 0-1).
task_titleNoHuman-readable task title.
interpreterNo'bash' or 'python'.bash
script_pathNoLocal file path for main script. **stdio mode only.** Mutually exclusive with the other script_* params.
secret_varsNoSecret mappings baked into the SLX config.
runtime_varsNoPer-run task parameters that the END USER fills in when invoking the committed task (e.g. log queries, time windows, filters). Distinct from env_vars (set once by the task author — cluster, namespace, context) and secret_vars (credentials injected as file paths). Task-only — never valid for SLIs. Each entry requires: name (str), description (str), default (str), validation (dict with type='regex'+'pattern' or type='enum'+'values'). Names must be unique and must not overlap with env_vars or secret_vars.
cron_scheduleNoCron expression to schedule the task (e.g. '0 */2 * * *').
resource_pathNoResource path for search indexing.
script_base64NoUTF-8 main script as standard base64.
codebundle_refNoGit ref for the codebundle (auto-resolved if omitted).
commit_messageNoCustom commit message.
workspace_nameYesThe workspace to commit to (e.g. 't-oncall').
sli_interpreterNoInterpreter for the SLI script.
sli_script_pathNoLocal file path for SLI script. **stdio mode only.** Mutually exclusive with the other sli_script_* params.
interval_secondsNoFor SLIs, how often to run in seconds.
sli_script_base64NoUTF-8 SLI script as standard base64.
script_base64_pathNoLocal file path to a file containing the base64-encoded main script. **stdio mode only.**
script_gzip_base64NoUTF-8 main script as base64(gzip(...)). Best inline option for scripts >5KB — 3-5x denser than 'script_base64'.
sli_interval_secondsNoHow often the SLI runs in seconds.
sli_script_base64_pathNoLocal file path to a file containing the base64-encoded SLI script. **stdio mode only.**
sli_script_gzip_base64NoUTF-8 SLI script as base64(gzip(...)). Best inline option for SLI scripts that exceed simple-metric size.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure and does so richly: exact files written, output contracts for task vs SLI, a server-side rejection rule (identical task+SLI content), and two behavioral footguns (bash trailing main "$@" causing FD 3 errors; secret_vars injected as file paths rather than values). This is the kind of context an agent cannot get from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Long, but front-loaded with the purpose and organized into scannable sections, tables, and bullets that each carry load for a 35-parameter tool. Some prose (e.g. repeated SLI-variant explanations) could be tightened, but the density is largely justified by the operation's complexity.

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

Completeness5/5

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

Given a 35-param mutation tool with no annotations and an output schema (so return values need not be explained), the description is complete: it covers prerequisites, variant selection, dual-commit recipes, output contracts, and runtime footguns, leaving no obvious gap an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the schema baseline is 3, but the description adds real meaning beyond it: the script-source matrix (size/density/mode trade-offs), the runtime_vars vs env_vars vs secret_vars distinction, and which variants are stdio-only. It stops short of documenting a few params directly (branch, owners, interval_seconds), leaving that to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Commit a tested script as an SLX to the workspace Git repo') and clarifies what gets written (slx.yaml + runbook.yaml/sli.yaml). Clearly distinguishes itself from commit siblings like run_script and deploy_registry_codebundle, whose relationship is spelled out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicit prerequisites ('script should already be tested via run_script or run_script_and_wait'), a decision matrix mapping each script-source variant to a use case and mode, an alternative path for large scripts (registry codebundle + deploy_registry_codebundle), and two named recipes for committing task+SLI together.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_assistantCreate AssistantA

Create a new AI assistant (persona) in a workspace.

Skill: runwhen-skill://create-ai-assistant (full setup workflow).

An assistant is a persona that tailors how the RunWhen AI investigates and acts — e.g. an "Azure DevOps Helper" focused on a specific tech stack. The short_name you choose becomes the persona_name for workspace_chat.

After creating the assistant, shape its behavior by attaching persona-scoped rules and commands:

create_chat_rule(scope_type="persona", scope_id=short_name, ...)
create_chat_command(scope_type="persona", scope_id=short_name, ...)

This is an UPSERT — calling it again with an existing short_name REPLACES the assistant's full configuration (omitted fields reset to defaults). To change a few fields on an existing assistant, use update_assistant.

ParametersJSON Schema
NameRequiredDescriptionDefault
avatar_urlNoOptional avatar image URL (e.g. '/personas/Man1-Happy.svg').
run_configNoRun configuration: allow/disallow/budget settings (advanced).
short_nameYesAssistant short name (lowercase-kebab-case, e.g. 'azure-devops'). Workspace prefix optional (e.g. 'my-ws--azure-devops'). This is the value you pass as persona_name to workspace_chat.
descriptionNoWhat this assistant specializes in (e.g. tech stack, team).
display_nameNoHuman-readable display name (e.g. 'Azure DevOps Helper').
filter_scopeNoOptional scope filter for results (advanced).
search_filtersNoVector-search filter operators (e.g. {'codebundleTaskTags': ['kubernetes'], 'slxGroup': ['my-group']}).
workspace_nameYesThe workspace to create the assistant in.
filter_stop_wordsNoWords stripped from search queries before matching.
run_confidence_thresholdNoConfidence threshold for automatic task runs (0-1).
filter_codebundle_task_tagsNoOnly surface tasks tagged with these (e.g. ['azure', 'devops']). Empty/omitted means no tag filter.
filter_confidence_thresholdNoConfidence threshold for filtering results (0-1).
filter_issue_selection_strategyNoIssue selection strategy (e.g. 'MOST_SEVERE').MOST_SEVERE

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does the important part: it flags this is an UPSERT where a repeat call with an existing short_name REPLACES the entire configuration and resets omitted fields to defaults — a critical destructive behavior that no structured field conveys. It omits permission/auth requirements and any failure modes, but the key mutation semantics are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action, then procedurally organized (definition, follow-up calls, UPSERT warning). The persona explanation and skill pointer take space but each earns it; only the example persona sentence is slightly expendable.

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

Completeness5/5

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

For a 13-parameter creation tool with an output schema, the description covers the essentials an agent needs: what is being created, the identity linkage to workspace_chat, the setup follow-ups, and the dangerous upsert semantics. Return values are covered by the output schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds meaning by linking short_name to the persona_name consumed by workspace_chat and distinguishing it from display_name. Advanced params like run_config, search_filters, and filter_* are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The first sentence gives a specific verb+resource (create a new AI assistant/persona in a workspace) and then explains what an assistant actually is, so the agent knows the domain concept without opening the schema. It also explicitly differentiates itself from the sibling update_assistant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It names the alternative ('To change a few fields on an existing assistant, use update_assistant'), points at the full setup workflow skill, and describes the follow-up sequence (create_chat_rule / create_chat_command with scope_type='persona'). When to use, when not to, and what to do next are all explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_chat_commandCreate Chat CommandA

Create a chat command (slash-command). Name must be alphanumeric, underscore, or hyphen only.

Skill: runwhen-skill://manage-commands (scoping, scheduling, sinks).

Commands are invoked in chat as /label.

To run a command on a schedule, set cron_schedule plus sink_configs, run_as_user, and assistant_name. Results are delivered to each sink (email or Slack) when the cron fires.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCommand name (alphanumeric, underscore, or hyphen only).
max_runsNoMaximum scheduled runs before the schedule stops (omit for unlimited).
scope_idNoScope ID (null for platform; workspace name for workspace).
is_activeNoWhether the command is active.
scope_typeYesOne of platform, org, workspace, persona, user.
descriptionNoOptional description for the command.
run_as_userNoEmail of the user the scheduled session runs as. Required when cron_schedule is set.
sink_configsNoDelivery targets when cron_schedule is set. Each entry: {type: 'email'|'slack', mode: 'user'|'all-workspace-users'|'channel'|'webhook', target: '...'}.
cron_scheduleNoCron expression to run this command on a schedule (e.g. '0 8 * * 1-5'). When set, also provide sink_configs, run_as_user, and assistant_name.
assistant_nameNoPersona for scheduled runs (workspace prefix optional). For persona-scoped commands, must match scope_id (full form after PAPI). For workspace-scoped commands, use the short name (persona_name for chat).
workspace_nameYesThe workspace to create the command in (e.g. 't-oncall').
command_contentYesMarkdown content of the command.
schedule_pausedNoWhen true, the cron does not fire (independent of is_active).
auto_approve_readonlyNoWhen true, scheduled runs auto-approve read-only task execution (write tasks still require approval).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the scheduled-run behavior and its dependency set (cron fires → results delivered to each sink), which is genuinely useful. It stops short of permissions/authorization requirements, what happens on name collision, or side effects, so the mutation semantics remain only partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action and naming rule, then the skill reference, then the scheduling clause. The final sentence largely duplicates the cron_schedule parameter description, so it is slightly redundant but still tight overall.

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

Completeness4/5

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

For a 14-parameter create tool with an output schema available, the description covers the primary workflow, the naming rule, and the scheduled-run path, and it routes to a skill for deeper scoping/scheduling detail. Missing only permissions and error/collision behavior, which keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 14 parameters in detail. The description restates the cron_schedule dependency chain rather than adding format or edge-case detail beyond the schema (e.g., valid cron dialect, sink config shape). Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (Create) and resource (chat command / slash-command), and the naming constraint plus the invocation syntax [/label](cmd://name) make it unmistakable. The verb alone cleanly distinguishes it from sibling CRUD tools (get_chat_command, update_chat_command, list_chat_commands, delete-style operations).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It gives one concrete usage conditional ("To run a command on a schedule, set cron_schedule plus sink_configs, run_as_user, and assistant_name") and points to a skill for scoping/scheduling/sinks. However, it never says when to prefer this over siblings like update_chat_command, nor any prerequisites (permissions, existing scope) for creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_chat_ruleCreate Chat RuleC

Create a chat rule. Uses AgentFarm internal API.

Skill: runwhen-skill://manage-rules (scoping + wording guidance).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the rule.
scope_idNoScope ID (null for platform; workspace name for workspace).
is_activeNoWhether the rule is active.
scope_typeYesOne of platform, org, workspace, persona, user.
rule_contentYesMarkdown content of the rule.
workspace_nameYesThe workspace to create the rule in (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden, yet it only says it uses an internal API. It is silent on required permissions, whether creation is idempotent, and any side effects. The skill reference is the only behavioral clue, and it is not elaborated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Two short sentences with the action front-loaded and zero filler. It is efficient, though arguably terse given the tool's 6 parameters and lack of annotations.

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

Completeness2/5

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

An output schema and full parameter coverage handle returns and inputs, but for a create/mutation tool with no annotations the description should disclose auth requirements and side effects. It leaves the agent without the behavioral context needed to invoke safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema, establishing a baseline of 3. The description adds no syntax, format, or relational detail beyond that, so it neither compensates nor detracts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb+resource combination ('Create a chat rule') that an agent can grasp immediately, and the AgentFarm API note localizes it. However, it does nothing to distinguish itself from the sibling create_chat_command or explain why one creates a rule versus updates one via update_chat_rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no named alternatives. The pointer to 'runwhen-skill://manage-rules (scoping + wording guidance)' hints at supporting context but does not tell the agent when this tool is the right choice versus update_chat_rule or create_chat_command.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_knowledge_base_articleCreate Knowledge Base ArticleA

Create a new Knowledge Base article in a workspace.

Skill: runwhen-skill://manage-knowledge (article scoping + lifecycle).

KB articles are indexed into the Knowledge Overlay Graph and become searchable by the workspace AI assistant and other tools.

Content should be informative operational knowledge — architecture notes, troubleshooting guides, runbook context, dependency documentation, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoHuman-readable article title (max 255 chars). Strongly recommended: title is the primary field for title-weighted KB search and the workspace global-note catalog. If omitted the note is stored title-less and under-performs on retrieval.
contentYesThe article content (plain text or markdown, max 20000 chars).
resource_pathsNoCanonical resource paths (e.g. ['kubernetes/namespace/prod']).
workspace_nameYesThe workspace to create in (e.g. 't-oncall').
abstract_entitiesNoEntity tokens for indexing (e.g. ['oom-killed', 'memory-limits']).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses a post-creation side effect: articles are indexed into the Knowledge Overlay Graph and become searchable by the workspace AI assistant and other tools. It omits permission/auth requirements, duplicate-title handling, and what happens to existing content, leaving meaningful gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

The purpose is front-loaded in the first sentence, followed by the skill reference, indexing behavior, and content guidance. Reasonably sized with little waste, though the inline 'Skill:' reference is slightly cryptic without further context.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description covers purpose, indexing effect, and content expectations for an unannotated create tool. Residual gaps are the missing permission/auth and duplicate-handling behavior, which a mutation tool would ideally state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 100%, and the schema already documents every parameter in detail (including the title recommendation and char limits), so the baseline is 3. The description adds content-topic examples but no field-level semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('Create a new Knowledge Base article') with the scope ('in a workspace'), which is clearly distinguishable from update/delete/get siblings. It stops short of naming the alternative create/update/delete tools or when each applies, so it is clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description offers content guidance ('architecture notes, troubleshooting guides, runbook context') and references a skill for scoping/lifecycle, which implies usage. However it never says when to create vs use update_knowledge_base_article or when creation is inappropriate, so the when/when-not routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_assistantDelete AssistantA

Delete (soft-delete) an AI assistant (persona) from a workspace.

Persona-scoped rules and commands attached to this assistant are not removed automatically — clean them up separately if no longer needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
assistant_nameYesAssistant short name to delete (e.g. 'azure-devops'). Workspace prefix optional.
workspace_nameYesThe workspace the assistant belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and does so unusually well for a mutation: it reveals the operation is a soft-delete (recoverable/not a hard purge) and that attached persona-scoped rules and commands are NOT cascade-deleted. It omits auth/permission requirements and whether confirmation is needed, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two sentences, zero filler, with the destructive/soft-delete nature front-loaded and the non-cascading caveat immediately after. Every clause carries information an agent needs.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the two required params are fully covered by the schema. The description supplies the two most important behavioral facts (soft-delete, no cascade) for a low-complexity deletion tool; only permission/auth context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% for both parameters, so the schema already documents workspace_name and assistant_name (including the optional workspace prefix). The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource ('Delete (soft-delete) an AI assistant (persona)') and scopes it to a workspace, which cleanly separates it from create_assistant and update_assistant. It does not explicitly name any sibling or contrast behavior, so it stops just short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied by 'if no longer needed', with no explicit statement of when to prefer this over update_assistant or how to handle the case where the assistant is still referenced. It does at least flag the follow-up cleanup of persona-scoped rules and commands, which is genuine usage-relevant context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_knowledge_base_articleDelete Knowledge Base ArticleB

Delete a Knowledge Base article.

Removes the article from the workspace and the Knowledge Overlay Graph index.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYesThe UUID of the KB article to delete.
workspace_nameYesThe workspace (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that deletion cascades to the Knowledge Overlay Graph index, a non-obvious side effect, but omits irreversibility, permission requirements, and whether a confirmation or soft-delete occurs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two short sentences, front-loaded with the action and immediately followed by the scope of the effect. No filler text.

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

Completeness4/5

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

For a two-param destructive tool with full schema coverage and an output schema, the description is nearly sufficient, especially since it explains the index side effect. It stops short of confirming irreversibility or auth needs, which matters for a delete operation with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, documenting both note_id (UUID of the article) and workspace_name (e.g. 't-oncall'), so the schema does the heavy lifting. The description adds no parameter-level meaning beyond that, which is the expected baseline here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb (Delete) and resource (Knowledge Base article) and adds the scope of removal via the Knowledge Overlay Graph index. Siblings like create_knowledge_base_article and update_knowledge_base_article are implicitly distinguished by verb, though the description never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

It states what deletion does but gives no when-to-use guidance, no prerequisites, and no pointer to alternatives (e.g. use update_knowledge_base_article to modify rather than delete). The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_slxDelete SlxA

Soft-delete an SLX from the workspace via the v4 short-name endpoint.

Uses DELETE /api/v4/workspaces/{ws}/slxs/{slx_short_name}, which tombstones the SLX row (deleted_by / deleted_at) and lets the corestate reconcile loop clean up the corresponding runbook and SLI rows. This is the same endpoint the UI hits, so behaviour matches what users see in the platform.

Deletion is workspace-global — it is not scoped to a Git branch. The v4 endpoint tombstones the SLX row in PAPI; there is no per-branch variant. Callers previously wired to a Git-oriented delete path should stop passing branch / commit_message (both removed) and rely on the workspace-scoped soft delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
slx_nameYesShort name of the SLX to delete (e.g. 'k8s-pod-health').
workspace_nameYesThe workspace to delete from (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses that this is a SOFT delete (tombstone via deleted_by/deleted_at), that a reconcile loop cleans up runbook and SLI rows, and that behavior matches the UI endpoint. It omits permission/auth requirements and whether the tombstone can be reversed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

The core action is front-loaded in the first sentence and the paragraphs are logically ordered (endpoint, mechanism, scope, migration). There is mild redundancy, since tombstoning and workspace-global scope are restated in the third paragraph.

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

Completeness4/5

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

For a soft-delete mutation with no annotations, the description covers mechanism, side effects, and scope, and an output schema exists so return values need not be explained. It would be fully complete with a note on required permissions (or that none beyond workspace access are needed).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the two parameters are already documented and baseline would be 3. The description adds meaning beyond the schema by stating that branch and commit_message have been removed, which head off a caller passing obsolete arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The first sentence gives a precise verb+resource+scope ('Soft-delete an SLX from the workspace via the v4 short-name endpoint'), and the endpoint is spelled out. The note that deletion is workspace-global and not Git-branch-scoped implicitly separates it from Git-oriented siblings like commit_slx.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It gives clear context for use (soft delete, workspace-global scope) and a migration caveat telling prior Git-path callers to drop branch/commit_message. It stops short of naming a sibling alternative or an explicit 'use this when / not when' rule, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deploy_registry_codebundleDeploy Registry CodebundleA

Deploy a registry codebundle as an SLX to a workspace.

Unlike commit_slx (which embeds inline scripts via the Tool Builder codebundle), this deploys a pre-built codebundle from its own codecollection repository. The runbook.robot / sli.robot live in the codebundle's git repo — no inline script is needed.

Use search_registry + get_registry_codebundle to find the right codebundle, then call this tool with the values from the registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoGit branch/tag for the codecollection.main
dataNo'logs-bulk', 'config', or 'logs-stacktrace'.logs-bulk
tagsNoResource tags ({name, value} dicts).
aliasYesHuman-readable display name (e.g. 'Namespace Health').
accessNo'read-only' or 'read-write'.read-only
branchNoWorkspace config branch.main
ownersNoOwner emails (defaults to current user).
locationYesRunner location (use get_workspace_locations).
repo_urlYesGit URL of the codecollection.
slx_nameYesShort SLX name (lowercase-kebab-case).
hierarchyNoTag names for hierarchical grouping.
image_urlNoIcon URL for the SLX.
statementYesSLX statement (e.g. 'All pods should be running').
deploy_sliNoAlso deploy the SLI (health indicator).
config_varsNoCodebundle config variables.
secret_varsNoSecret mappings (e.g. {'kubeconfig': 'kubeconfig'}).
resource_pathNoResource path for search indexing.
commit_messageNoCustom commit message.
deploy_runbookNoDeploy the runbook (task).
workspace_nameYesTarget workspace (e.g. 't-oncall').
codebundle_pathYesPath to codebundle dir (e.g. 'codebundles/k8s-namespace-healthcheck').
sli_descriptionNoDescription for the SLI metric.
sli_interval_secondsNoSLI run interval in seconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the deployment mechanism (runbook.robot/sli.robot live in the codebundle's git repo, no inline script), which is non-obvious context beyond the schema. However, it omits key behavioral traits for a mutating deployment tool: required permissions, whether the deploy commits to workspace config, and side effects of the deploy_runbook/deploy_sli toggles.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three short, front-loaded paragraphs with zero filler: purpose first, differentiation second, workflow third. Every sentence earns its place.

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

Completeness4/5

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

For a complex 23-parameter mutation with an output schema available, the description covers purpose, the sibling distinction, and the discovery workflow adequately, and need not explain return values. It stops short of describing deployment side effects, which matters given the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so all 23 parameters are already self-documenting. The description adds no per-parameter meaning beyond pointing the agent to the registry as the source of values, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific verb+resource ('Deploy a registry codebundle as an SLX to a workspace') and explicitly distinguishes itself from the sibling commit_slx by contrasting the deployment mechanism (pre-built codecollection repo vs inline Tool Builder scripts). An agent can select this tool over commit_slx without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It names the alternative ('Unlike commit_slx...'), states the distinguishing condition, and provides a concrete pre-call workflow: 'Use search_registry + get_registry_codebundle to find the right codebundle, then call this tool with the values from the registry.' This is explicit when-to-use and how-to-source-inputs guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assistantGet AssistantB

Get a single AI assistant (persona) by its short name (full config).

ParametersJSON Schema
NameRequiredDescriptionDefault
assistant_nameYesAssistant short name (e.g. 'azure-devops'). Workspace prefix optional.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Get' implies a read, and 'full config' hints that the complete configuration is returned, but it says nothing about required permissions, error behavior for unknown assistants, or rate limits. This is thin for an un-annotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

A single tightly constructed sentence with the action, resource, lookup key, and return depth front-loaded. There is no filler, and every clause earns its place.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the schema fully documents both parameters. The description is adequate for a simple two-parameter read tool but omits any usage routing or behavioral context that an agent would need when weighing this against its many siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, with both assistant_name and workspace_name documented, so the baseline is 3. The description's 'short name' wording mirrors the schema's documented example format and adds no new syntax or format detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (Get) and resource (a single AI assistant/persona) and clarifies the lookup key (short name) plus the depth of the return (full config). It implicitly distinguishes itself from list_assistants by specifying 'a single', but never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no mention of prerequisites, and no named alternative. The 'by its short name' phrasing weakly implies a lookup-when-you-know-the-name pattern, but nothing tells the agent when to choose this over list_assistants or get_workspace_context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chat_commandGet Chat CommandB

Get a single chat command by ID (full content).

ParametersJSON Schema
NameRequiredDescriptionDefault
command_idYesThe command ID to retrieve.
workspace_nameYesThe workspace the command belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only adds '(full content)'. It says nothing about read-only safety, workspace scoping requirements, permissions, or error behavior when an ID is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

A single front-loaded sentence with no filler; the key scoping information appears before the parenthetical detail.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and both parameters are fully documented in the schema. Only the absence of any behavioral/permission context keeps this from being complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so both command_id and workspace_name are already documented in the schema. The description adds no format or constraint detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (get), a specific resource (chat command), and scoping (single, by ID) plus a cue about response depth ('full content'). This differentiates it from list_chat_commands, though it doesn't name that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied: retrieve by ID when the full command content is needed, versus a listing. No explicit when-to-use/when-not or named alternative such as list_chat_commands is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chat_ruleGet Chat RuleA

Get a single chat rule by ID (full content).

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesThe rule ID to retrieve.
workspace_nameYesThe workspace the rule belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It adds one useful behavioral detail ('full content'), distinguishing the response from a summary, but says nothing about permissions, rate limits, or error behavior for a missing/unknown rule_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

A single short sentence with zero waste, front-loading the resource and its scoping qualifier. Nothing could be removed without losing meaning.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and both required parameters are fully documented in the schema. For a simple two-parameter read tool this is nearly complete; only auth/permission context is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% – both rule_id and workspace_name are documented in the schema, including an example workspace value. The description adds nothing beyond the schema, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (Get), resource (chat rule), and scope (single, by ID), and adds that it returns full content. This distinguishes it implicitly from list_chat_rules, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied by the word 'single' – an agent can infer this is for fetching one known rule versus listing many. There is no explicit when-to-use guidance, no mention of prerequisites, and no routing to list_chat_rules or update_chat_rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issue_detailsGet Issue DetailsA

Get detailed information about a specific issue (structured JSON).

NOTE: Prefer workspace_chat for investigative questions about an issue (e.g. root cause, related resources, next steps). Use this tool only when you already have an issue ID and need raw JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYesThe issue ID to look up.
workspace_nameYesThe workspace the issue belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the return shape ('structured JSON') and the precondition of already having an issue ID, but says nothing about permissions, error behavior, or freshness of the data. For a low-risk read lookup this is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two short, front-loaded parts: the capability statement first, then the routing note. Every sentence carries information an agent needs and nothing is padded.

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

Completeness5/5

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

With both parameters fully documented, an output schema present to describe return values, and explicit routing against the nearest competing tool, an agent has everything required to select and call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, with issue_id and workspace_name each documented in the schema (including a workspace naming example). The description adds no format or syntax detail beyond restating the 'already have an issue ID' precondition, so the schema does the heavy lifting and baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Get detailed information about a specific issue') and immediately distinguishes itself from the sibling workspace_chat by scope. An agent can tell exactly which capability this is without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicitly routes the agent: prefer workspace_chat for investigative questions (root cause, related resources, next steps) and use this tool only when an issue ID is already in hand and raw JSON is needed. Both the when and the when-not plus the named alternative are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_knowledge_base_articleGet Knowledge Base ArticleB

Get a specific Knowledge Base article by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYesThe UUID of the KB article to retrieve.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing beyond a safe-read implication. It says nothing about required permissions, what happens on an invalid/missing note_id, or whether access is scoped to the workspace. For a zero-annotation tool this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

A single front-loaded sentence with zero wasted words. It is efficient, though its brevity verges on under-specification for a tool with no annotations.

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

Completeness3/5

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

An output schema exists, so return-shape explanation is not required, and the two required parameters are fully documented in the schema. Still, with no annotations the description omits access-scoping and failure behavior that an agent would benefit from knowing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents note_id as a UUID and workspace_name as the query workspace. The description adds no format, scoping, or default information beyond that, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb ('Get') and resource ('Knowledge Base article') scoped to a lookup by ID. The 'by ID' qualifier implicitly separates it from list_knowledge_base_articles and search_workspace, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The 'by ID' phrasing implies usage (call this when you already have an article UUID rather than a search query), which is adequate routing context. However, no PREREQUISITES or explicit alternatives are stated, so the agent must infer when to prefer this over list_knowledge_base_articles.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_registry_codebundleGet Registry CodebundleA

Get full details of a specific codebundle from the registry.

Use after search_registry to get complete information including configuration templates, environment variables, and deployment instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault
codebundle_slugYesThe codebundle slug (e.g. 'k8s-podresources-health').
collection_slugYesThe codecollection slug (e.g. 'rw-cli-codecollection').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It implies a read-only lookup and names the payload contents (configuration templates, environment variables, deployment instructions), but says nothing about permissions, auth, rate limits, or failure behavior. Adequate for a simple fetch, but thin given zero 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.

Conciseness4/5

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

Two short sentences; the core action is front-loaded and the follow-up sentence carries useful sequencing information rather than filler. Nothing is redundant, though it is slightly terse given no annotations.

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

Completeness4/5

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

An output schema exists, so the description need not enumerate return fields, and it still previews the kind of content returned. Combined with the search-then-get workflow guidance, an agent has enough to invoke it correctly; only permission/error behavior is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% and both required slugs are documented with concrete examples ('k8s-podresources-health', 'rw-cli-codecollection'), so the schema does the heavy lifting. The description adds no additional parameter meaning beyond what the schema already provides, which is the defined baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('Get full details of a specific codebundle from the registry'), which is clearly distinct from the sibling search_registry and deploy_registry_codebundle. It does not name those siblings explicitly, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Explicitly positions the tool in a workflow: 'Use after search_registry to get complete information.' That tells the agent when to reach for this rather than the search tool. It stops short of stating when NOT to use it (e.g., to deploy, use deploy_registry_codebundle), so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_run_outputGet Run OutputA

Get the output artifacts from a completed script run.

Returns parsed, human-readable results including:

  • issues: list of issues found by the script (title, severity, details, nextSteps)

  • stdout: script stdout output

  • stderr: script stderr output

  • status: run status (SUCCEEDED, FAILED, RUNNING)

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run ID returned by run_script.
fetch_logsNoDownload and parse artifact contents.
workspace_nameYesThe workspace the run belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose that results are 'parsed, human-readable' and enumerates the returned fields. It does not state that this is a read-only operation, note any auth/permission needs, or explain the fetch_logs download behavior, leaving meaningful behavioral gaps for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loads the core purpose in the first sentence, then uses a compact bullet list for the return fields. Efficient overall, though enumerating return fields is somewhat redundant given an output schema exists.

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

Completeness4/5

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

For a simple read tool with a full output schema, the description is largely sufficient; it needn't explain return values and even does so. The main gap is the absence of guidance on how it relates to get_run_status and the run_script family.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents run_id, fetch_logs, and workspace_name, establishing a baseline of 3. The description adds no parameter-level detail beyond that, so it neither compensates nor detracts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('Get the output artifacts from a completed script run'), which distinguishes it from nearby siblings like get_run_status and get_run_sessions. It never explicitly names or contrasts those siblings, so differentiation relies on inference from the resource noun rather than a direct comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

'from a completed script run' implies usage after a run finishes, giving implied context. However, it names no alternative (e.g., get_run_status vs this tool) and states no when-not condition, so the agent must infer routing. The 'completed' framing is also muddied by listing RUNNING as a possible status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_run_sessionsGet Run SessionsA

Get recent run sessions for a workspace (structured JSON).

Run sessions are executions of SLX runbooks — they contain the output of health checks, troubleshooting tasks, and automation runs.

NOTE: For investigative questions like "what ran recently for service X?" or "show me recent failures", prefer workspace_chat — it can search, filter, and correlate run sessions with issues and resources. Use this tool only when you need raw JSON for programmatic processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax run sessions to return.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the return shape ('structured JSON') plus the semantic scope ('recent'). It covers safety implicitly via the read-only framing and the alternative-selection rule. It does not state ordering, what window 'recent' covers, or the default limit behavior, which is what keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the purpose sentence, then a compact domain gloss, then the routing note. Every block earns its place, though the parenthetical '(structured JSON)' is restated later in the NOTE, a minor redundancy.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers purpose, domain meaning, and routing. It is nearly complete for a low-parameter read tool; only the ambiguity of 'recent' and any pagination behavior leave a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so both parameters (limit, workspace_name) are already documented in the schema, which sets the baseline at 3. The description adds no syntax, format, or ordering detail about `limit` or the workspace identifier, so it earns no credit above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Get recent run sessions for a workspace') and then defines the domain object ('executions of SLX runbooks — output of health checks, troubleshooting tasks, automation runs'). It explicitly distinguishes itself from the sibling workspace_chat, so an agent can tell the two apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Gives an explicit when-not ('For investigative questions like "what ran recently for service X?" ... prefer workspace_chat') with a rationale (it can search, filter, correlate) and an explicit when-to-use ('only when you need raw JSON for programmatic processing'). This is a textbook routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_run_statusGet Run StatusA

Check the status of a script run.

Poll this after run_script to check if execution has completed. Status values: RUNNING, SUCCEEDED, FAILED.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYesThe run ID returned by run_script.
workspace_nameYesThe workspace the run belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It usefully reveals the polling pattern and the terminal status values (RUNNING, SUCCEEDED, FAILED), but omits permission requirements, error behavior for an invalid run_id, and rate limits, leaving notable behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three short, front-loaded sentences with zero filler; the core purpose leads and the polling guidance and status values follow logically. Every sentence earns its place.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description supplies the polling workflow and status vocabulary an agent needs. It is nearly complete for a simple status-check tool, with only minor gaps around error handling and auth.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so both run_id and workspace_name are already documented in the schema. The description adds no additional parameter meaning beyond what the schema provides, which is the baseline expectation when the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource ('Check the status of a script run'), making the tool's function immediately clear. It references the related run_script tool as a precondition but does not explicitly distinguish itself from adjacent siblings like get_run_output or run_script_and_wait, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It gives clear contextual guidance: 'Poll this after run_script to check if execution has completed,' establishing when the tool fits in the workflow. However, it does not name alternatives such as run_script_and_wait (which suggests waiting outright) or state when-not to poll, so it lacks explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_skillGet SkillB

Return the full body of a skill by name.

Returns {name, description, uri, body, path} on success or {error, available} when the name is unknown so the agent can self- correct without a second round-trip.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSkill name (e.g. 'build-runwhen-task'). Call list_skills first if you don't know the available names.
reloadNoForce re-read from disk (default: use cached version).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does add real value by disclosing the error path: an unknown name returns {error, available} so the agent can self-correct without a second call. However, it says nothing about permissions, side effects, or the cache/reload semantics beyond what the schema already documents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Two tight sentences with the core action front-loaded. The enumeration of return keys is somewhat redundant given an output schema exists, but the description stays short and readable.

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

Completeness4/5

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

For a simple two-parameter read tool with a full output schema, the description covers the essentials: what is returned, and what happens on failure. It is complete enough to call correctly, though a pointer to list_skills for discovery would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so both the name and reload parameters are fully documented in the schema, including the list_skills fallback and the cache/re-read behavior. The description adds no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource: 'Return the full body of a skill by name.' An agent can immediately tell this is a fetch-by-identifier operation. It does not explicitly differentiate itself from the sibling list_skills or render_codecollection_skill, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no named alternative (e.g. it never says to use list_skills when the name is unknown). The only routing hint, 'Call list_skills first', lives in the parameter schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_slx_runbookGet Slx RunbookA

Get the runbook for a specific SLX (structured JSON).

Returns the runbook definition including what tasks it runs, how they're configured, and what they check.

NOTE: For questions like "what does this SLX do?" or "what tasks does it run?", prefer workspace_chat — it provides contextual explanations. Use this tool when you need the raw runbook YAML/JSON (e.g. for task authoring or programmatic inspection).

ParametersJSON Schema
NameRequiredDescriptionDefault
slx_nameYesThe SLX short name.
workspace_nameYesThe workspace the SLX belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses return content (tasks, configuration, checks) and routes free-form questions elsewhere, but never states explicitly that this is a read-only operation, nor mentions permission requirements or rate limits. Reasonable but incomplete for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Front-loads the core action in the first sentence, then adds return detail and a clearly marked NOTE for routing. Three short paragraphs, each earning its place, with no redundancy.

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

Completeness4/5

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

An output schema exists, so return values need not be re-explained, and both parameters are fully covered. Usage routing is excellent; the only shortfall is behavioral disclosure (read-only nature, permissions) that no annotation supplies, but overall the definition is sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, with both required parameters (slx_name, workspace_name) documented in the schema. The description implies the SLX and workspace context but adds no syntax, format, or naming detail beyond what the schema already supplies, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Get the runbook for a specific SLX') and explicitly enumerates what the runbook contains (tasks it runs, how configured, what they check). It names the sibling workspace_chat and clarifies the boundary between them, so an agent can distinguish them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Gives an explicit when-to-use vs alternative: prefer workspace_chat for 'what does this SLX do?' questions, but use this tool when raw runbook YAML/JSON is needed for task authoring or programmatic inspection. This is exactly the when/when-not/alternative routing the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_chat_configGet Workspace Chat ConfigA

Get resolved chat rules and commands for a workspace.

Returns the list of rules and commands that apply to the workspace (and optional persona). These are the same rules and commands the workspace chat assistant sees. Response includes metadata only (id, name, scope); full rule/command content is not included in this endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
persona_nameNoOptional persona for persona-scoped rules/commands.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose a real limitation: the response includes metadata only (id, name, scope) and not full rule/command content. That is genuinely useful negative information. It stops short of noting auth requirements, scoping behavior, or pagination, but the metadata-only disclosure is a substantive behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three tight sentences, front-loaded with the core purpose, followed by scope and an important output caveat. No filler and each sentence earns its place.

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

Completeness5/5

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

An output schema exists, so the description need not enumerate return values, and it correctly notes the metadata-only restriction rather than repeating field details. Combined with fully covered parameters, an agent has enough to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so both workspace_name and persona_name are already documented, including the persona's 'persona-scoped' nature. The description mentions the optional persona but adds no syntax or format detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (Get) and resource (workspace chat config) and clarifies the output is the *resolved* set of rules and commands applying to a workspace/persona. This is a meaningful distinction from siblings like list_chat_rules and list_chat_commands, though it never names those siblings to sharpen the contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description implies the use case ('the same rules and commands the workspace chat assistant sees'), which suggests when this aggregated view is preferable to fetching individual rules or commands. However, it never explicitly states when to use this versus list_chat_rules or list_chat_commands, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_config_indexGet Workspace Config IndexA

Get the workspace configuration index (structured JSON).

Returns an overview of all configured resources, SLXs, and their relationships in the workspace. Useful for understanding what's monitored and how things are connected.

This tool accepts only workspace_name. It does NOT accept resource_path, slx_name, filter, or other parameters — those fail with unexpected_keyword_argument. To set resource_path on an SLX, use commit_slx or deploy_registry_codebundle. To find SLXs at a path, use workspace_chat or search_workspace.

NOTE: For questions like "what's monitored in namespace X?" or "how are resources connected?", prefer workspace_chat — it can traverse the resource graph and provide contextual answers. Use this tool only when you need the raw configuration index for programmatic processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose concrete behavior: only workspace_name is accepted and other params fail with unexpected_keyword_argument. It omits auth/permission or rate-limit context, but the parameter-failure behavior is a valuable, non-obvious disclosure and the output schema covers return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Purpose is front-loaded, then constraints, then alternatives. Every sentence earns its place, though the SLX-routing sentence is somewhat tangential and the NOTE repeats the workspace_chat preference already implied earlier.

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

Completeness5/5

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

For a single-param tool with an output schema, the description covers purpose, accepted/rejected parameters, and sibling routing comprehensively. Nothing an agent needs to invoke it correctly is missing, and return values are documented by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100% for the single parameter, so the baseline is 3, but the description adds meaning by enumerating the arguments that are rejected (resource_path, slx_name, filter) and the resulting error, going beyond the raw schema. This proactively prevents common misuse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description opens with a specific verb+resource ('Get the workspace configuration index') and clarifies the payload is structured JSON covering configured resources, SLXs, and their relationships. It clearly distinguishes itself from workspace_chat by scoping its use to programmatic processing of the raw index.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicitly names the preferred alternative ('prefer workspace_chat') and states the precise condition that selects this tool instead ('only when you need the raw configuration index for programmatic processing'). It also routes to commit_slx/deploy_registry_codebundle and search_workspace for adjacent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_contextGet Workspace ContextA

Get domain-specific context for building RunWhen tasks.

Reads the project's RUNWHEN.md file, which contains infrastructure conventions, database access rules, naming patterns, architectural knowledge, and other constraints that scripts must follow.

The file is auto-discovered by walking up from the current working directory. Override with the RUNWHEN_CONTEXT_FILE env var if needed.

IMPORTANT: Call this BEFORE writing any task or script to understand the target environment's rules and relationships.

ParametersJSON Schema
NameRequiredDescriptionDefault
reloadNoForce re-read from disk (default: False, uses cached version).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the auto-discovery mechanism (walking up from cwd), the RUNWHEN_CONTEXT_FILE override, and caching behavior (reinforced by the reload param). It does not state what happens if the file is absent or what errors look like, so it falls short of exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action, then layered detail on the source file, discovery, override, and a bolded usage directive. Every sentence contributes, though it is slightly longer than strictly necessary for a one-parameter tool.

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

Completeness5/5

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 explanation. Given the simple input and rich output contract, the description covers purpose, mechanism, override, and invocation timing completely enough to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% for the single 'reload' parameter, so the schema already explains the cache-busting behavior. The description adds discovery/override context but nothing new about the parameter itself, which is the expected baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Get domain-specific context') and immediately names the concrete source: the project's RUNWHEN.md file with infrastructure conventions, DB rules, and naming patterns. This is clearly distinguishable from the many assistant/skill/chat-rule siblings, none of which read a project context file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

The closing line gives explicit, actionable timing: 'Call this BEFORE writing any task or script to understand the target environment's rules.' That removes ambiguity about when to invoke. It stops short of naming sibling alternatives or when-not-to-use, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_issuesGet Workspace IssuesA

Get current issues for a workspace (structured JSON).

Issues represent detected problems in your infrastructure that RunWhen has identified through automated health checks.

NOTE: For questions like "issues related to neo4j" or "what's failing in namespace X", prefer workspace_chat — it has semantic search and keyword filtering that produce materially better results. Use this tool only when you need raw JSON for programmatic processing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax issues to return.
sinceNoISO 8601 lower bound for latest occurrence (e.g. '2026-03-29T14:00:00Z').
severityNoFilter: 1=critical, 2=high, 3=medium, 4=low.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the output nature ('structured JSON') and the meaning of the returned data, which is useful, but says nothing about authentication, rate limits, or pagination. For a read-only get, the implicit read semantics carry most of the load, so this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

The purpose is front-loaded in the first sentence, followed by a short domain definition and a clearly-marked NOTE for routing. Every sentence earns its place, though the definition sentence is a mild luxury rather than strictly necessary to invoke the tool.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values, and it correctly focuses on selection guidance and the alternative. Combined with full schema coverage and no annotations, it is complete enough for correct invocation, missing only non-essential behavioral detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% and each parameter (limit, since, severity, workspace_name) is already documented in the schema with defaults and formats. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb and resource ('Get current issues for a workspace') and even defines what an 'issue' is in this domain, which is genuinely useful. It does not, however, distinguish itself from the sibling get_issue_details, which an agent would still need to disambiguate separately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It gives explicit when-not guidance ('For questions like "issues related to neo4j"... prefer workspace_chat') and names the alternative along with the reason (semantic search and keyword filtering). It then states the positive selection condition ('Use this tool only when you need raw JSON for programmatic processing'), leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_locationsGet Workspace LocationsA

List runner locations with auto-resolution guidance and recommendations.

Returns a structured payload that tells the agent which location to use (or to omit the parameter entirely when auto-resolution can pick). The raw list is preserved in locations for backward compatibility.

Response shape::

{ "workspace": "", "count": , "locations": [], "private": [], # workspace-type runners (preferred) "public": [], # shared runners (fallback) "recommended": "<name|null>", "auto_resolves": , # True when run_*/commit_slx can pick alone "disambiguation_hint": "...", "skill_reference": "runwhen-skill://discover-locations", }

recommended is the name run_script / run_script_and_wait / commit_slx WILL pick when the location parameter is omitted. When auto_resolves is True the agent should NOT pass a location argument at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it does so well: it explains that the payload resolves the location for downstream run_*/commit_slx calls, defines 'auto_resolves' semantics, and identifies 'private' runners as preferred and 'public' as fallback. It omits auth/permission or rate-limit context, leaving a small gap for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

Front-loaded with the purpose and the key 'auto_resolves' rule, but the description then reproduces a full response-shape JSON block with inline comments. Since an output schema exists, much of that block duplicates structured data and lengthens the definition unnecessarily.

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

Completeness4/5

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

The response-shape explanation and the 'recommended'/'auto_resolves' semantics give the agent enough to call this correctly and act on the result without opening other schemas. Return values are technically covered by the output schema, but the extra semantic annotations here (preferred vs fallback, skill reference) genuinely add value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter, so the schema already documents 'workspace_name'. The description adds only indirect meaning by tying the resolved result to the 'location' parameter of other tools. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb+resource ('List runner locations') and clarifies the tool's real job — resolving which location the run_*/commit_slx tools will pick. It references the consuming siblings by name, so an agent can place it in the workflow, though it never sharply contrasts against a competing sibling for the same query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives explicit conditional guidance: when 'auto_resolves' is True the agent should NOT pass a 'location' argument at all. That is real when-to-use guidance tied to a documented field. It stops short of naming alternative tools or exclusions, so it is clear context rather than a full routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_secretsGet Workspace SecretsA

List available secret keys with platform grouping and mapping guidance.

Returns a structured payload that helps agents pick the right secret_vars mapping for a task. The raw key list is preserved in secrets for backward compatibility.

Response shape::

{ "workspace": "", "secrets": [], "platform_groups": { "kubernetes": ["kubeconfig"], "azure": [...], ... }, "recommended_secret_vars": { "kubernetes": { "kubeconfig": "kubeconfig" }, "azure": { "AZURE_CLIENT_ID": "...", ... }, ... }, "runtime_semantics": "", "skill_reference": "runwhen-skill://discover-secrets", }

Critical for agents: workspace secrets are injected into scripts as FILE PATHS, not literal values. See the discover-secrets skill for the read_secret helper pattern.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses the critical non-obvious runtime semantics that secrets are injected as FILE PATHS, not literal values, and references the skill helper. It stops short of covering auth requirements, pagination, or side effects, but for a read-only lister this is strong context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

The purpose and critical semantics are front-loaded and the closing 'FILE PATHS, not literal values' note earns its place, but the full response-shape JSON block is largely redundant when an output schema already exists, adding length without new information.

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

Completeness4/5

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

For a single-parameter read tool that has an output schema, the description covers purpose, return semantics, and the crucial file-path caveat. Nothing essential to correct invocation is missing, though the redundant return-shape block slightly dilutes focus.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Only one parameter, workspace_name, and schema description coverage is 100%, so the schema already documents it fully. The description adds no syntax or format guidance for the parameter beyond what the schema provides, matching the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb ('List') and resource ('available secret keys') plus the scope of platform grouping and mapping guidance. It is clearly distinct from all siblings, none of which expose workspace secret keys, though it 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.

Usage Guidelines3/5

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

It implies when to use it — 'helps agents pick the right secret_vars mapping for a task' — and points to the discover-secrets skill for the read_secret pattern, but gives no explicit when-not conditions or alternative tools to compare against.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_slxsGet Workspace SlxsA

List ALL SLXs in a workspace (structured JSON). No filtering.

SLXs are the fundamental unit of work in RunWhen — each represents a health check, task, or automation runbook for a piece of infrastructure.

The underlying PAPI endpoint is paginated (100 SLXs per page); this tool auto-paginates internally, following next until exhausted, so the returned results are the complete list for the workspace — never just the first page. count reflects the true total and next is always null (there is nothing left to page).

It accepts only workspace_name. It does NOT accept slx_name, filter, alias, tag, or any other filtering parameter — those would fail with unexpected_keyword_argument.

For other shapes:

  • One specific SLX (runbook detail): get_slx_runbook(workspace_name=..., slx_name=...)

  • Search / filter by topic (e.g. "neo4j health checks"): workspace_chat

  • Search by resource (e.g. "what monitors namespace X"): workspace_chat

Use this raw-list tool only when you need to enumerate every SLX for programmatic processing (counting, batch operations, etc).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does so well: it discloses that the underlying endpoint paginates at 100, that the tool auto-paginates to completion, that 'count' is the true total and 'next' is always null, and that unsupported keywords raise unexpected_keyword_argument.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action and the 'no filtering' constraint, then well-structured bullets for alternatives. It is somewhat verbose on pagination internals, but each block serves a distinct decision the agent must make.

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

Completeness5/5

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, yet the description still clarifies the pagination semantics of the output. Combined with the alternative routing and parameter exclusions, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the schema already documents workspace_name and the baseline is 3. The description adds negative parameter semantics by enumerating what is NOT accepted (slx_name, filter, alias, tag), which meaningfully reduces mis-invocation risk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description states a specific verb and resource ('List ALL SLXs in a workspace'), names the return shape (structured JSON), and explicitly scopes out filtering. It also distinguishes itself from get_slx_runbook and workspace_chat, so an agent can select it without opening a sibling schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It gives explicit routing for three shapes of need: one SLX -> get_slx_runbook, topic search -> workspace_chat, resource search -> workspace_chat. It closes with a clear when-to-use condition ('only when you need to enumerate every SLX for programmatic processing').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assistantsList AssistantsA

List AI assistants (personas) configured in a workspace.

An assistant is a persona — its shortName is the value you pass as persona_name to workspace_chat. Use this to discover which assistants already exist before creating a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. "List" implies a read-only, non-destructive operation, and the shortName-to-persona_name explanation is useful semantic context. However, it says nothing about result volume, pagination, or ordering, which matters for a list tool with a large potential result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two tight sentences, front-loaded with the core action, and every clause earns its place by defining the resource and linking the output to a downstream tool.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the single parameter is fully documented. The description supplies the key cross-tool semantic (shortName → persona_name) and a usage trigger. Minor omission: no mention of result scale or pagination for a list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100% with a single, well-documented workspace_name parameter, so the schema already does the work. The description adds no syntax or format detail for the parameter itself; its shortName note concerns a sibling tool's input, not this one. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb ("List") and resource ("AI assistants (personas) configured in a workspace"), then clarifies with a definition of what an assistant is. The plural "List" clearly distinguishes it from get_assistant, create_assistant, update_assistant, and delete_assistant among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives a concrete when-to-use: "Use this to discover which assistants already exist before creating a new one," routing toward create_assistant. It also cross-references workspace_chat by explaining the persona_name linkage. No explicit when-not or exclusion is stated, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_chat_commandsList Chat CommandsC

List chat commands (slash-command instructions).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based).
scope_idNoFilter by scope ID.
is_activeNoFilter by active status.
page_sizeNoItems per page (1-200).
scope_typeNoFilter by scope (platform, org, workspace, persona, user).
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It says only 'List', revealing nothing about pagination behavior, result ordering, scope of the listing, or permissions required; the parenthetical adds minor semantic value but no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

A single front-loaded sentence with zero filler, which is appropriately sized for a simple list tool. It is efficient but arguably too terse to be maximally useful.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the schema fully documents parameters. However, for a tool with six parameters including several filters, the description offers no filtering context or usage framing, leaving it minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters (page, scope_id, is_active, page_size, scope_type, workspace_name) with descriptions and defaults. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a clear verb (List) and resource (chat commands), and the parenthetical 'slash-command instructions' clarifies what a chat command is. It is distinguishable from siblings like get_chat_command, create_chat_command, and update_chat_command by its listing verb, though it doesn't 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.

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus get_chat_command or the other chat-command siblings, nor any prerequisites or exclusions. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_chat_rulesList Chat RulesC

List chat rules (workspace chat rules).

Uses AgentFarm internal API; may require network access.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based).
scope_idNoFilter by scope ID (e.g. workspace name, or None for platform).
is_activeNoFilter by active status.
page_sizeNoItems per page (1-200).
scope_typeNoFilter by scope (platform, org, workspace, persona, user).
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does mention the AgentFarm internal API and possible network access, but gives no readOnly confirmation, pagination behavior, or auth/permission expectations for a 6-parameter list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Two short sentences, front-loaded with the core action and free of padding. The trailing API/network note is slightly tangential but still compact and non-redundant.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and parameters are fully documented in the schema. Gaps remain around usage context (filtering behavior, when to prefer this over get_chat_rule), leaving the definition minimally adequate for a filtered list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (page, page_size, scope_id, scope_type, is_active, workspace_name) are already documented in the schema. The description adds no extra meaning beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ('List chat rules (workspace chat rules)'), so the operation is unambiguous. However, it offers no differentiation from the sibling listing/retrieval tools (get_chat_rule, list_chat_commands), leaving the agent to infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusion criteria, and no mention of alternatives such as get_chat_rule for a single rule. The agent gets a bare listing verb with none of the routing information that the sibling set clearly needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_discovery_platformsList Discovery PlatformsA

List supported generation-rule platforms and default render settings.

Skills:

  • runwhen-skill://commit-to-codecollection

  • runwhen-skill://author-generation-rules

Call this before render_codecollection_skill when the user has not confirmed whether they want workspace-scoped output (runwhen) or per-resource cloud/Kubernetes discovery (kubernetes, azure, aws, gcp). Ask the user to pick a platform and scope, then look up valid resource_types with list_indexed_resource_types(search=...). All catalog data is bundled offline — no docs.runwhen.com access required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose a useful trait: all catalog data is bundled offline with no docs.runwhen.com access required, clarifying latency/permission expectations. It omits return-shape detail, but an output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

The purpose is front-loaded and the sequencing guidance is high value, but the embedded Skills list and skill URI references add length not strictly needed to call a zero-argument lister.

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

Completeness5/5

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

For a zero-param catalog lookup with an output schema and a workflow dependency on render_codecollection_skill, the description supplies exactly the sequencing and follow-up routing an agent needs; nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4; there are no parameter semantics to add beyond what the empty schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The opening sentence gives a specific verb ('List') and resource ('supported generation-rule platforms and default render settings'), which an agent can immediately distinguish from siblings like list_indexed_resource_types or render_codecollection_skill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

It states explicitly when to call it ('before render_codecollection_skill when the user has not confirmed workspace-scoped vs per-resource discovery'), names the alternatives (runwhen/kubernetes/azure/aws/gcp), and points to the follow-up tool list_indexed_resource_types(search=...).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_indexed_resource_typesList Indexed Resource TypesA

Search bundled indexer catalogs for valid generation-rule resourceTypes.

Skills:

  • runwhen-skill://author-generation-rules

  • runwhen-skill://commit-to-codecollection

Fully offline — reads catalogs/indexed-resource-types.json (or bundled markdown catalogs) shipped with the MCP package. No network access required.

For azure/aws/gcp, search must be at least 2 characters (large catalogs). Kubernetes CRD types use plural.group[/version] syntax when not listed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 50). Increase for broad searches.
searchNoOptional substring filter (e.g. 'deployment', 'azure_keyvault').
platformYesIndexer platform: runwhen, kubernetes, azure, aws, or gcp. Must match render_codecollection_skill platform.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that the tool is 'Fully offline', reads a bundled JSON/markdown catalog from the MCP package, and needs no network access. It also adds a concrete constraint (2-char minimum search for azure/aws/gcp), though it doesn't describe output or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loads the purpose, then lists related skills, then the offline behavior and platform-specific constraints. Efficient and mostly front-loaded, though the interspersed skill list adds slight visual noise without much functional payload.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and the description covers the offline execution model, the platform-scoping requirement, and search constraints. Complete enough for an agent to call correctly, with minor room on edge cases or result shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: the 2-character minimum on 'search' for large catalogs and the 'plural.group[/version]' syntax for unlisted Kubernetes CRD types. This is meaningful elaboration rather than repetition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb ('Search') and resource ('bundled indexer catalogs for valid generation-rule resourceTypes'), which is precise enough to distinguish it from generic search siblings. It does not explicitly name a competing tool, but the referenced skills ('author-generation-rules', 'commit-to-codecollection') anchor its role clearly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Provides contextual guidance by pointing to the two skills it supports and by noting platform must match render_codecollection_skill, but gives no explicit when-to-use vs when-not or alternative-tool routing. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_knowledge_base_articlesList Knowledge Base ArticlesA

List Knowledge Base articles (notes) in a workspace (structured JSON).

Returns KB articles that feed the workspace's Knowledge Overlay Graph. Articles can contain operational knowledge, runbook context, architecture notes, or any information useful for troubleshooting.

NOTE: For questions like "what do we know about service X?", prefer workspace_chat — it searches KB articles semantically. Use this tool for programmatic KB management (listing, filtering by status).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax articles to return (max 200).
searchNoSearch within article content.
statusNoFilter by status — 'active' or 'deprecated'. Returns all if omitted.
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It adds useful domain context about what articles feed (the Knowledge Overlay Graph) and the kinds of content they hold, but does not disclose pagination behavior, default/max limits in prose, read-only guarantees, or permission requirements. Adequate but leaves real gaps unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action and output format, and the NOTE is high-value routing content. The middle sentence enumerating content types (runbook context, architecture notes, troubleshooting) is somewhat expendable but does aid understanding, keeping this just below maximally efficient.

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

Completeness4/5

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

An output schema exists, so return values needn't be explained, and the description covers purpose, alternatives, and content scope. It stops short of explaining pagination or the interaction between the search and status filters, which is a minor omission rather than a blocking gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents workspace_name, limit, search, and status. The description reinforces 'filtering by status' but adds no syntax, default, or format detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (List) and resource (Knowledge Base articles / notes) scoped to a workspace, and clarifies the output format (structured JSON). The NOTE distinguishes it from the semantic-search sibling workspace_chat and from get_knowledge_base_article, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicit when-to-use/when-not guidance: prefer workspace_chat for semantic 'what do we know about service X?' questions, and use this tool for programmatic KB management (listing, filtering by status). Both the alternative and the selecting condition are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_skillsList SkillsA

List every progressive-disclosure skill the server exposes.

Returns [{name, description, uri}]. Use this when you want to know what guidance is available before running a tool — read the description to decide whether you need the full body, then fetch it with get_skill(name) (or, if your client supports MCP resources directly, read the uri via the resource read API).

Cross-vendor note: this is the same information that list_resources returns for the runwhen-skill:// family. Clients that surface MCP resources should prefer that path; this tool is the explicit fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the return shape, the read-then-fetch workflow, and the cross-vendor equivalence/fallback relationship with list_resources. It stops short of noting caveats such as whether the listing is complete, paginated, or scoped, but the core behavioral profile is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core purpose, then the return shape, then the routing advice, so the important information comes first. The cross-vendor note is somewhat verbose but it is genuinely load-bearing because it steers clients to a different mechanism.

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

Completeness5/5

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

An output schema already exists, so the description need not explain return values, yet it still names the fields for orientation. Combined with the explicit alternatives and fallback guidance, an agent has everything needed to call it correctly and act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

The tool takes zero parameters, which establishes the baseline of 4. There is nothing for the description to add on parameter meaning, and it correctly stays silent rather than inventing inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('List every progressive-disclosure skill the server exposes') and immediately distinguishes itself from the sibling get_skill by noting it is the enumeration step that precedes fetching. An agent can tell what it returns and how it differs from related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicitly says when to use it ('when you want to know what guidance is available before running a tool'), names the follow-up alternative get_skill(name), and prescribes a preference order against list_resources for MCP-resource-capable clients, naming this tool as the explicit fallback.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspacesList WorkspacesA

List all workspaces you have access to.

Returns workspace names, display names, and basic metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden; it does disclose that results are limited to workspaces the caller can access and that no filtering is applied. It does not mention pagination, result-size expectations, ordering, or any failure/auth modes, which is a meaningful gap for a listing endpoint with no 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.

Conciseness4/5

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

Two short sentences, front-loaded with the action and scope before the return content. The second sentence partially duplicates what the output schema already conveys, so it is efficient but not maximally economical.

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

Completeness4/5

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

With zero parameters and an output schema already documenting the returned fields, the description covers what the agent needs to select and call this tool. Only minor operational details (pagination, ordering) are absent, which is acceptable given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

The tool takes no parameters (schema coverage is 100% trivially), so per the baseline there is nothing for the description to clarify. It correctly avoids inventing filter or paging arguments that the schema does not support.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb (list) and resource (workspaces) with an explicit scope qualifier, 'you have access to', so the agent knows the result set is permission-filtered. No sibling tool competes for this action, so the lack of explicit differentiation isn't a real gap, but there's nothing that elevates it above a clear, standard listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The intent ('get the set of workspaces available to me') is implied clearly by the name and description, and for a zero-argument listing tool that is largely sufficient. However, there is no explicit guidance on when to prefer this over e.g. get_workspace_context or search_workspace, nor any note about prerequisites such as authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_codecollection_skillRender Codecollection SkillA

Render a tested tool-builder task as a private Custom Discovery CodeCollection.

Skills:

  • runwhen-skill://commit-to-codecollection (GitOps workflow)

  • runwhen-skill://build-runwhen-task (authoring + testing first)

Emits the standard codecollection layout (generation rule + Jinja templates) for workspace-builder discovery. Templates delegate runtime to rw-generic-codecollection/codebundles/tool-builder with base64 GEN_CMD.

Also writes .runwhen/SKILL_TEMPLATE.md with the decoded script summary and .runwhen/raw_script.{py,sh} with the full decoded script so PR reviewers and automated systems never need to base64-decode TaskSet templates.

This tool does not push to git or mutate the workspace — it renders files locally (or returns them inline) for you to git add / commit / push.

Default generation rule uses platform: runwhen and resourceTypes: [workspace]. For cloud/Kubernetes discovery, set platform to kubernetes, azure, aws, or gcp and pass resource_types / match_rules / slx_qualifiers from the bundled indexer catalogs (list_indexed_resource_types). Discovery SLX templates include the platform tag/hierarchy includes (e.g. kubernetes-tags.yaml).

Requires runwhen-local with the matching platform indexer enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo'logs-bulk', 'config', or 'logs-stacktrace'.logs-bulk
tagsNoResource tags ({name, value} dicts).
aliasYesHuman-readable SLX display name.
accessNo'read-write' or 'read-only'.read-write
ownersNoOwner emails for the review file (defaults to current user).
scriptNoThe full script source code (not base64).
env_varsNoEnvironment variables baked into the TaskSet config.
platformNoGeneration rule platform: runwhen (one SLX per workspace), kubernetes, azure, aws, or gcp (per-resource discovery). Call list_discovery_platforms() before choosing — agents must confirm the user's target platform and scope.runwhen
base_nameNoShort SLX suffix in generation rule (<15 chars). Default: bundle_name.
hierarchyNoTag names for hierarchical grouping.
image_urlNoIcon URL for the SLX.
statementYesSLX statement describing what should be true.
output_dirNoWrite rendered files to this directory (stdio mode). When omitted, files are returned in the tool response only.
sli_scriptNoOptional separate SLI script (defaults to main script if include_sli).
task_titleNoHuman-readable task title (static literal).
bundle_nameYesCodebundle directory name (kebab-case, e.g. 'azure-function-cold-start').
include_sliNoAlso emit an SLI template (tool-builder SLI).
interpreterNo'python' or 'bash'.python
match_rulesNoMatch predicates forwarded into the generation rule YAML.
script_pathNoLocal file path for script. **stdio mode only.**
secret_varsNoSecret name → workspace secret key mappings.
runtime_varsNoPer-run runtime variables (task-only).
resource_pathNoResource path for search indexing.
script_base64NoUTF-8 script as standard base64.
resource_typesNoResource types for the generation rule (default: ['workspace']).
slx_qualifiersNoSLX name qualifiers (default: ['workspace']).
workspace_nameYesWorkspace used during tool-builder testing (provenance in review file).
sli_interpreterNoInterpreter for SLI script.
source_slx_nameNoOriginal inline SLX short name (provenance in review file).
timeout_secondsNoTask timeout passed to tool-builder runbook.
script_base64_pathNoLocal path to base64-encoded script file. **stdio mode only.**
script_gzip_base64NoUTF-8 script as base64(gzip(...)).
generic_runtime_refNoGit ref for rw-generic-codecollection pinned in templates.main
sli_interval_secondsNoSLI interval when include_sli is true.
generic_runtime_repo_urlNoOverride rw-generic-codecollection repo URL in templates.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it explicitly disclaims git push and workspace mutation, discloses the side-effect of writing .runwhen files to disk, and states the environment precondition. It stops short of covering failure modes, whether rendering is idempotent, or how output_dir behaves on invalid input, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the one-line purpose, then segmented into skills, emitted layout, non-goals, platform defaults, and preconditions using bold and short paragraphs. Slightly long for a tool definition and repeats the git non-goal mildly, but every block carries distinct routing or behavioral information.

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

Completeness4/5

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

Given 35 parameters and an existing output schema (so return values need no explanation), the description covers the pieces an agent cannot infer: the emitted file layout, the platform-dependent generation rule, required runtime environment, and the git hand-off boundary. Remaining gaps — error handling, idempotency, and any limits on repeated rendering — are minor rather than blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds genuine meaning by grouping the discovery-related parameters — platform default 'runwhen' vs kubernetes/azure/aws/gcp per-resource discovery, and the paired resource_types/match_rules/slx_qualifiers sourced from the bundled indexer catalogs. It explains base_name (<15 chars, defaults to bundle_name) and the base64 GEN_CMD delegation, going beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Render a tested tool-builder task as a private Custom Discovery CodeCollection') and immediately enumerates the concrete artifacts emitted (generation rule + Jinja templates, .runwhen/SKILL_TEMPLATE.md, raw_script files). This clearly separates it from siblings like commit_slx or deploy_registry_codebundle, which the agent can rule out without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Names the prerequisite workflow explicitly via the runwhen-skill URIs ('build-runwhen-task (authoring + testing first)') and draws the boundary against git operations: 'does not push to git or mutate the workspace — it renders files locally ... for you to git add / commit / push.' It also routes platform selection to list_discovery_platforms/list_indexed_resource_types and states the 'Requires runwhen-local with the matching platform indexer enabled' precondition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_scriptRun ScriptA

Execute a script on a RunWhen runner for testing.

Sends the script to the workspace's runner at the specified location. Returns a run ID that can be used with get_run_status and get_run_output to monitor execution and retrieve results.

The script must follow the RunWhen contract:

  • Python task: define main() returning List[Dict] with keys 'issue title', 'issue description', 'issue severity' (1-4), 'issue next steps'.

  • Python SLI: define main() returning a float 0-1.

  • Bash task: define main() writing issue JSON array to FD 3 (>&3).

  • Bash SLI: define main() writing a metric float to FD 3.

Provide exactly one of: script | script_base64 | script_gzip_base64 | script_path (stdio) | script_base64_path (stdio). Use script_gzip_base64 for scripts >5KB to maximise transport headroom.

Use validate_script first to check compliance.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptNoThe full script source code (raw text).
env_varsNoEnvironment variables (e.g. {'NAMESPACE': 'default'}).
locationNoRunner location (use get_workspace_locations).
run_typeNo'task' or 'sli'.task
interpreterNo'bash' or 'python'.bash
script_pathNoLocal file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params.
secret_varsNoSecret mappings (e.g. {'kubeconfig': 'kubeconfig'}).
script_base64NoUTF-8 script as standard base64. Prefer over inline 'script' when JSON-escaping multiline content is error-prone.
workspace_nameYesThe workspace to run in (e.g. 't-oncall').
script_base64_pathNoLocal file path to a file containing the base64-encoded script. **stdio mode only.**
script_gzip_base64NoUTF-8 script as base64(gzip(...)). Best inline option for scripts >5KB — 3-5x denser than 'script_base64'. Encode with: base64.b64encode(gzip.compress(script.encode())).decode().

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantial work: it discloses the async return contract (run ID + which tools consume it), the runner/location requirement, and the mandatory RunWhen script contract for four execution modes. It omits auth/permission requirements and any timeout or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with purpose, then follow-up tools, then the contract block, then transport guidance — a logical order. The contract enumeration is dense but each line is load-bearing; only minor tightening is possible.

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

Completeness5/5

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

For an 11-parameter mutation-style tool with an output schema, the description covers the essentials an agent needs: execution semantics, prerequisite validation, transport encoding selection, and the required script contract. Return format details are rightly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3; the description exceeds it by consolidating a mutual-exclusivity rule ('provide exactly one of script | script_base64 | script_gzip_base64 | script_path | script_base64_path') and by recommending gzip for >5KB. It adds the RunWhen contract semantics (task vs SLI, Python vs Bash) that the schema fields alone do not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Specific verb+resource: 'Execute a script on a RunWhen runner for testing', with an explicit statement that it returns a run ID for polling via get_run_status/get_run_output. It distinguishes itself implicitly from the sibling run_script_and_wait by framing execution as async/monitorable, but never names that sibling to draw the line explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear context ('for testing') and an explicit prerequisite ('Use validate_script first to check compliance'). It also routes encoding choice ('use script_gzip_base64 for scripts >5KB'). It lacks explicit guidance on when to prefer this over run_script_and_wait, which is the closest alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_script_and_waitRun Script And WaitA

Execute a script and wait for results (combines run + poll + output).

This is a convenience tool that runs a script, polls until completion, and returns the full output — all in one call. Use this instead of calling run_script + get_run_status + get_run_output separately.

The script must follow the RunWhen contract:

  • Python task: define main() returning List[Dict] with keys 'issue title', 'issue description', 'issue severity' (1-4), 'issue next steps'.

  • Python SLI: define main() returning a float 0-1.

  • Bash task: define main() writing issue JSON array to FD 3 (>&3).

  • Bash SLI: define main() writing a metric float to FD 3.

Provide exactly one of: script | script_base64 | script_gzip_base64 | script_path (stdio) | script_base64_path (stdio). Use script_gzip_base64 for scripts >5KB to maximise transport headroom.

Bash scripts must NOT include main "$@" at the bottom. The runner sources the script and invokes main() itself with FD 3 wired to a run_output.json file. A trailing main "$@" triggers a preflight invocation with FD 3 read-only and produces misleading "Bad file descriptor" errors.

secret_vars entries are injected as env vars whose VALUE is a FILE PATH on the runner — not the secret value itself. kubectl/KUBECONFIG and gcloud/GOOGLE_APPLICATION_CREDENTIALS work unchanged. For tokens/ passwords the script must cat "$VAR" (bash) or open(os.environ["VAR"]).read() (python) to get the actual value.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptNoThe full script source code (raw text).
env_varsNoEnvironment variables for the script.
locationNoRunner location (use get_workspace_locations).
run_typeNo'task' or 'sli'.task
interpreterNo'bash' or 'python'.bash
script_pathNoLocal file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params.
secret_varsNoSecret mappings (env var name to workspace secret key).
script_base64NoUTF-8 script as standard base64. Prefer over inline 'script' when JSON-escaping multiline content is error-prone.
workspace_nameYesThe workspace to run in (e.g. 't-oncall').
script_base64_pathNoLocal file path to a file containing the base64-encoded script. **stdio mode only.**
script_gzip_base64NoUTF-8 script as base64(gzip(...)). Best inline option for scripts >5KB — 3-5x denser than 'script_base64'.
runtime_var_overridesNoPer-run override values for script variables (name → value). Merged into envVars at test time. Overrides win on name collision.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral burden and largely does: it discloses the blocking wait semantics, the RunWhen main() contract per run_type/interpreter, and the non-obvious secret_vars behavior (values are file paths, not secrets). It omits timeout limits, failure/error semantics, and any rate-limit or permission requirements, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with purpose before the contract details, and bulleted structure keeps the dense content scannable. Given 12 parameters and a non-trivial execution contract, the length is mostly justified, though a few lines (e.g. the FD 3 pitfall) are verbose relative to their selection value.

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

Completeness4/5

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

For a 12-parameter execution tool with no annotations and an output schema (so returns need not be restated), the description covers the script contract, parameter selection, and secret handling. It is still missing timeout, error-handling, and permission/auth context needed to predict failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it enumerates the mutually-exclusive script_* variants, recommends script_gzip_base64 for scripts over 5KB, and explains that secret_vars inject file paths rather than values. That is substantive semantics beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Names a specific verb+resource (execute a script) and states the composite behavior (run + poll + output) in the first line. It explicitly distinguishes itself from the sibling tools run_script, get_run_status, and get_run_output, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

States when to use it ('Use this instead of calling run_script + get_run_status + get_run_output separately') and names the concrete alternatives. It does not specify when NOT to use it, e.g. for long-running scripts where fire-and-poll may be preferable, so it falls short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_slxRun SlxA

Run an existing SLX's runbook tasks on the workspace runner.

Skill: runwhen-skill://run-existing-slx — and default task_titles="*" (a literal resolved title produces empty passedTitles).

This triggers execution of a previously committed SLX (not an ad-hoc script). Use this when you want to run a health check, troubleshooting task, or automation that already exists in the workspace.

IMPORTANT: This is different from run_script / run_script_and_wait, which execute ad-hoc scripts. Use run_slx to trigger SLXs that are already committed and configured in the workspace.

NOTE: workspace_chat CANNOT run tasks directly — it can only search for and describe them. Use this tool to actually execute an SLX.

The tool creates a RunSession with the run request, polls until completion, and returns the results including pass/fail status and any issues found.

ParametersJSON Schema
NameRequiredDescriptionDefault
slx_nameYesThe SLX short name (e.g. 'k8s-pod-health').
task_titlesNoTasks to run: '*' for all, or '||'-separated titles.*
workspace_nameYesThe workspace (e.g. 't-oncall').
runtime_var_overridesNoPer-run override values for runtime variables (name → value). Passed through to the runner at execution time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavior: it creates a RunSession, polls until completion, and returns pass/fail status and issues found — a synchronous, side-effecting execution. It also warns that the default task_titles='*' matters because a literal resolved title yields empty passedTitles. It stops short of stating permission/auth requirements or failure/timeout behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action and well organized, but the warning about run_script is stated twice (the 'IMPORTANT' paragraph and the 'different from run_script' line), and the dangling 'Skill: runwhen-skill://...' fragment reads as an orphaned artifact rather than a complete sentence.

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

Completeness5/5

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. Combined with the alternatives, the commit-vs-ad-hoc distinction, and the polling/completion behavior, an agent has everything needed to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented, and the baseline is 3. The description adds only the task_titles='*' default nuance, which is already stated in the schema; it does not explain runtime_var_overrides behavior beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Run an existing SLX's runbook tasks on the workspace runner') and immediately scopes it as executing a previously committed SLX rather than an ad-hoc script. It explicitly contrasts itself with run_script / run_script_and_wait and workspace_chat, so an agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Gives an explicit when-to-use ('health check, troubleshooting task, or automation that already exists in the workspace') plus when-not-to-use, naming the exact alternative tools for ad-hoc execution. The NOTE that workspace_chat cannot run tasks but can search/describe them closes the most likely misroute.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_registrySearch RegistryA

Search the RunWhen CodeBundle Registry for reusable automation.

Skill: runwhen-skill://find-and-deploy-codebundle (search → deploy workflow).

Use this BEFORE writing a custom script — there may already be a production-ready codebundle for the task. Returns codebundles with their tasks, SLIs, required env vars, and deployment metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoComma-separated support tags (e.g. 'GKE,KUBERNETES').
searchYesFree-text search (e.g. 'kubernetes pod health', 'postgres backup').
platformNoFilter by platform (e.g. 'Kubernetes', 'GCP', 'AWS').
max_resultsNoMax results to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the read-only search nature and the shape of results (tasks, SLIs, required env vars, deployment metadata), but adds nothing about authentication, result limits beyond the param, or rate behavior. Adequate, with clear gaps for a no-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core action, followed by the routing hint and the value proposition. Every sentence earns its place; only the '(search → deploy workflow)' parenthetical is slightly compressed but still useful.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description covers purpose, timing, and follow-on workflow. It is complete enough for an agent to select and call it correctly, lacking only fallback-tool guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the four parameters (search, tags, platform, max_results) are already fully documented with examples. The description adds no syntax or formatting guidance beyond the schema's 'comma-separated' tags note, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb and resource ('Search the RunWhen CodeBundle Registry') and scopes it to 'reusable automation.' It is clearly distinguishable from siblings like get_registry_codebundle and deploy_registry_codebundle, which operate on a single already-identified codebundle rather than searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Explicitly prescribes when to use it ('Use this BEFORE writing a custom script' and 'there may already be a production-ready codebundle'), and routes to the follow-on skill search → deploy workflow. It stops short of naming the concrete alternatives (run_script / validate_script) as fallbacks, so it is strong but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_workspaceSearch WorkspaceA

Search for tasks, resources, and configuration in a workspace.

Uses the workspace's task search / autocomplete to find matching items.

NOTE: Prefer workspace_chat for most search queries — it uses semantic search and keyword grep across issues, resources, SLXs, and run sessions with much richer results. Use this tool only as a lightweight autocomplete fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query string.
workspace_nameYesThe workspace to search (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden; it discloses the mechanism (task search/autocomplete) and positions itself as a lightweight fallback versus the richer semantic search of workspace_chat. It does not mention auth, rate limits, or result scope beyond the autocomplete framing, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Front-loads the core purpose, then the mechanism, then a clearly delimited NOTE carrying the routing advice. Every sentence earns its place with no filler.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the two params are fully covered by the schema. The description supplies purpose, mechanism, and sibling routing, leaving only minor unstated details (e.g. result limits) for a low-complexity search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 100%, so both query and workspace_name are already documented in the schema, making 3 the baseline. The description adds no syntax, format, or matching-behavior detail for the parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (Search) and resource (tasks, resources, and configuration in a workspace), then clarifies the underlying mechanism as task search/autocomplete. It explicitly names and differentiates itself from the sibling workspace_chat, so an agent can disambiguate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Gives an explicit alternative ('Prefer workspace_chat for most search queries'), the reason for that preference (semantic search + keyword grep with richer results), and the specific condition for using this tool ('only as a lightweight autocomplete fallback'). When-to-use, when-not, and the alternative are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_assistantUpdate AssistantA

Partially update an existing AI assistant (persona).

Fetches the current configuration, applies only the fields you provide (leaving everything else intact), then writes the merged result back. Use this instead of create_assistant when you only want to change a few settings without resetting the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
avatar_urlNoNew avatar image URL.
run_configNoReplace the run configuration.
descriptionNoNew description.
display_nameNoNew display name.
filter_scopeNoNew scope filter.
assistant_nameYesAssistant short name to update (e.g. 'azure-devops'). Workspace prefix optional.
search_filtersNoReplace the vector-search filters.
workspace_nameYesThe workspace the assistant belongs to.
filter_stop_wordsNoReplace the stop-words list.
run_confidence_thresholdNoNew run confidence threshold (0-1).
filter_codebundle_task_tagsNoReplace the task-tag filter list.
filter_confidence_thresholdNoNew filter confidence threshold (0-1).
filter_issue_selection_strategyNoNew issue selection strategy.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and it does disclose the key behavioral trait: a fetch-merge-write cycle that preserves unspecified fields. It doesn't cover auth/permissions or resolve whether passing null clears a field versus omits it, but the core mutation semantics are stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three short, front-loaded sentences: what it does, how it works, and when to prefer it. No filler or repetition.

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

Completeness4/5

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

For a 13-parameter mutation tool with an output schema present (so return values need no explanation), the description covers purpose and merge semantics adequately. It leaves gaps on authorization requirements and the null/clear semantics, which keeps it from fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 100% with per-field descriptions ('Replace the run configuration', etc.), so the schema does the heavy lifting. The description adds the omitted-fields-are-preserved rule, but does not resolve the null-versus-omit ambiguity for the 11 optional nullable fields, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb (update) and resource (AI assistant/persona), and immediately clarifies the partial-update nature. It distinguishes itself from the sibling create_assistant, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Explicit routing guidance: 'Use this instead of create_assistant when you only want to change a few settings without resetting the rest.' It names the alternative and the exact condition that selects this tool over it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_chat_commandUpdate Chat CommandA

Update an existing chat command by ID.

Omitted fields are left unchanged. Schedule fields (cron_schedule, sink_configs, run_as_user, assistant_name, etc.) follow the same partial-update semantics as the PAPI. Use clear_max_runs=True to remove an existing run cap (MCP cannot send bare null for max_runs).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew command name.
max_runsNoReplace the run budget (must be >= 1 when scheduling).
scope_idNoNew scope ID.
is_activeNoSet active/inactive.
command_idYesThe command ID to update.
scope_typeNoNew scope type.
descriptionNoNew description.
run_as_userNoReplace the run-as user email.
sink_configsNoReplace delivery targets for scheduled runs.
cron_scheduleNoNew cron expression, or empty string to clear scheduling.
assistant_nameNoReplace the persona for scheduled runs (workspace prefix optional).
clear_max_runsNoWhen true, remove the run budget cap (unlimited scheduled runs).
workspace_nameYesThe workspace the command belongs to (e.g. 't-oncall').
command_contentNoNew markdown content.
schedule_pausedNoPause or resume the cron schedule.
reset_runs_completedNoWhen true, reset runs_completed to 0 (e.g. after raising max_runs).
auto_approve_readonlyNoToggle auto-approve for read-only tasks on scheduled runs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden, and it does disclose the crucial partial-update contract ("Omitted fields are left unchanged") plus a real MCP-level constraint on clearing max_runs. It omits authorization requirements, reversibility, and side effects on in-flight scheduled runs, and defers schedule semantics to an opaque external "PAPI" reference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Three short sentences, front-loaded with the core action, then the update contract, then the one non-obvious workaround. The "etc." tail on the schedule-field list and the unexplained "PAPI" reference are the only wasted/opaque bits.

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

Completeness4/5

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

For a 17-parameter mutation tool with 100% schema coverage and an output schema, the description covers the essential partial-update semantics an agent needs. It is thin only on permissions and scheduling side effects, which limits it below a top score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, so the per-field descriptions already explain each parameter (baseline 3). The description adds real value beyond the schema by explaining the interaction between max_runs and clear_max_runs and by grouping the schedule-related fields under a shared partial-update rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb and resource ("Update an existing chat command by ID") and the schema/name make it trivially distinguishable from create_chat_command and get_chat_command. It stops short of explicitly routing against siblings, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Gives conditional guidance for one parameter path (use clear_max_runs=True to remove a run cap, since MCP can't send bare null for max_runs), which is genuinely useful. However it never says when to choose update vs. create/get/delete, nor any prerequisites such as required permissions or whether the command must exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_chat_ruleUpdate Chat RuleC

Update an existing chat rule by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew rule name.
rule_idYesThe rule ID to update.
scope_idNoNew scope ID.
is_activeNoSet active/inactive.
scope_typeNoNew scope type.
rule_contentNoNew markdown content.
workspace_nameYesThe workspace the rule belongs to (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and supplies almost nothing. It does not disclose that this is a partial update (only rule_id and workspace_name are required, all other fields nullable/optional), whether omitted fields are preserved, whether rule_content markdown is validated, or any permission requirements for the mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

A single front-loaded sentence with no filler, which is structurally clean. It is arguably terse to the point of under-informing, but it wastes no words.

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

Completeness2/5

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

A 7-parameter mutation tool with no annotations and no explicit guidance is under-described; a present output schema means returns need not be explained, but the description fails to cover partial-update semantics, required vs optional field behavior, or authorization context. The agent lacks enough to call this safely beyond the raw schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so every one of the 7 parameters is documented in the schema (name, scope_id, is_active, scope_type, rule_content, rule_id, workspace_name). The description only adds a restatement of the ID lookup and no extra semantics such as how scope_type/scope_id interact as a pair. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

States a specific verb ('Update') and resource ('chat rule') plus the ID-based lookup, which is enough to distinguish it from create_chat_rule or list_chat_rules by name alone. It does not explicitly name an alternative sibling, but the action-resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites (e.g. needing an existing rule_id from get_chat_rule or list_chat_rules), and no routing to alternatives like update_chat_command. The agent must infer all usage context from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_knowledge_base_articleUpdate Knowledge Base ArticleA

Update an existing Knowledge Base article.

Only provided fields are updated; omitted fields remain unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoUpdated human-readable article title (max 255 chars). Title is the primary field for title-weighted KB search and the global-note catalog.
statusNoSet to 'active' or 'deprecated'.
contentNoUpdated article content (max 20000 chars).
note_idYesThe UUID of the KB article to update.
verifiedNoMark as human-verified (true/false).
resource_pathsNoUpdated resource paths.
workspace_nameYesThe workspace (e.g. 't-oncall').
abstract_entitiesNoUpdated entity tokens.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses PATCH semantics (omitted fields unchanged), which is meaningful for a mutation tool, but says nothing about required permissions, authorization, or the side effects of changing fields like status or title. An output schema exists, so return format need not be covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two short sentences, zero waste. The core action is front-loaded and the partial-update constraint follows immediately. Nothing is redundant.

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

Completeness3/5

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

For a mutation tool with no annotations, the essentials are present (what it does, patch semantics, a fully documented schema, and an output schema). The remaining gaps are behavioral - permissions/auth requirements and side effects on search indexing or cataloging when title/status change - which a mutation tool should ideally cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters, including lengths, enums like 'active'/'deprecated', and field meanings. The description adds no parameter-level detail beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

The description states a specific verb (Update) and resource (existing Knowledge Base article), clearly separating it from create_knowledge_base_article, delete_knowledge_base_article, and the get/list siblings. It does not, however, explicitly name or contrast with any sibling, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is implied by the verb and by contrast with the create/delete/get siblings, and it does clarify the partial-update behavior ('Only provided fields are updated; omitted fields remain unchanged'). But there is no explicit when-to-use guidance, prerequisites, or named alternatives, leaving it at implied-usage level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_scriptValidate ScriptA

Validate a script against the RunWhen contract before running it.

Checks that the script follows the required structure (main function, correct output format, etc.) and extracts referenced environment variables.

Task scripts must return/write issues with keys: 'issue title', 'issue description', 'issue severity' (1-4), 'issue next steps', and optionally 'issue observed at'.

Script-source parameter matrix (provide exactly one):

Variant

Best for

Mode

script

Small scripts <~5KB, readable

any

script_base64

Any size; safe JSON escaping

any

script_gzip_base64

>5KB; 3-5x denser than b64

any

script_path

Local file, raw text

stdio only

script_base64_path

Local file containing base64 blob

stdio only

Skill: runwhen-skill://build-runwhen-task (full authoring workflow).

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptNoThe full script source code (raw text).
task_typeNo'task' (returns issues) or 'sli' (returns 0-1 metric).task
interpreterNo'bash' or 'python'.bash
script_pathNoLocal file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params.
script_base64NoUTF-8 script as standard base64. Prefer over inline 'script' when JSON-escaping multiline content is error-prone. Mutually exclusive with the other script_* params.
script_base64_pathNoLocal file path to a file containing the base64-encoded script. **stdio mode only.** Convenient when the agent has already written the encoded script to a scratch file. Mutually exclusive with the other script_* params.
script_gzip_base64NoUTF-8 script as base64(gzip(...)). Best inline option for scripts >5KB — typically 3-5x denser than 'script_base64'. Encode with: base64.b64encode(gzip.compress(script.encode())).decode(). Mutually exclusive with the other script_* params.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does reasonably well: it discloses the checks performed (structure, main function, output format), the side effect of extracting referenced environment variables, and the task-script issue-key contract. It does not state side effects, idempotency, or failure behavior, but it does convey that validation is a non-executing pre-flight step.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the primary purpose, then a compact variant table that earns its space by compressing five mutually exclusive options into a scannable grid. The issue-key paragraph is slightly dense but necessary; overall minimal waste.

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

Completeness4/5

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

Given 7 parameters, a 100% covered schema, an output schema, and no annotations, the description supplies the contract rules, mode constraints, and variant guidance an agent needs to call it correctly. Minor gap: no mention of what a failed validation looks like or whether it can ever mutate state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3; the variant matrix pushes it higher by explaining the selection tradeoffs (small vs. large scripts, density, escaping safety) and the 'provide exactly one' mutual-exclusion rule, adding real decision value beyond the per-property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

Specific verb (validate) plus resource (script) plus the standard it is checked against (the RunWhen contract), with the temporal scope 'before running it' that separates it from the run_script/run_script_and_wait siblings. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It clearly states the context of use ('before running it') and enumerates which script-source variant fits which situation, including the stdio-only limitation for path-based variants. It stops short of explicitly naming the run siblings it precedes (run_script, run_script_and_wait), so the routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workspace_chatWorkspace ChatA

Ask the RunWhen AI assistant about your infrastructure.

This is the PRIMARY tool for investigating infrastructure. It sends your message to the RunWhen workspace AI agent, which searches (keyword, semantic, and fuzzy), navigates and correlates across resources, SLXs, issues, run sessions, and the knowledge base, and returns rich markdown reports, diagrams, and tables.

PREFER THIS TOOL over direct read/query tools (get_workspace_issues, get_workspace_slxs, search_workspace, etc.) for any question that involves searching by topic, keyword, or context — e.g. "issues related to neo4j", "what's failing in namespace X?", "health of the watcher cluster". workspace_chat produces materially better answers because it can search, filter, and correlate across all workspace data internally.

Use direct tools instead ONLY for: executing tasks (run_slx), task authoring, registry operations, chat config CRUD, KB mutations, or when you specifically need raw structured JSON for programmatic processing.

Returns: JSON with message, sessionId, widgets, chatUrl (full browser URL to continue this session in the RunWhen UI — run tasks, review history), and chatExportLink (shareable chat-export path when available).

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesYour question or request about the workspace infrastructure.
session_idNoOptional session ID to continue a previous conversation.
persona_nameNoAI persona to use (default: 'default').default
workspace_nameYesThe workspace to query (e.g. 't-oncall').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: it searches by keyword/semantic/fuzzy, correlates across resources/SLXs/issues/sessions/KB, and returns markdown reports, diagrams and tables. It does not cover permissions, auth requirements, rate limits, or latency, which are the remaining behavioral gaps for a chat/agent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Front-loaded with the core purpose and routing guidance, then cleanly sectioned with a 'Returns:' block. It is somewhat long, and the return-value enumeration is largely redundant since an output schema exists, which slightly undercuts economy.

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

Completeness5/5

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

For a complex AI-assisted query tool, the description covers purpose, routing against numerous siblings, internal behavior, and usage conditions. Since a full output schema is present, the extra return-value prose is redundant but harmless, and nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema description coverage is 100%, so message, session_id, persona_name, and workspace_name are already documented in the schema. The description adds essentially nothing to parameter meaning (e.g., it does not explain session continuation semantics beyond what the schema says), so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

States a specific verb+resource ('Ask the RunWhen AI assistant about your infrastructure') and elaborates on the internal search/correlation behavior. It explicitly distinguishes itself from siblings by naming get_workspace_issues, get_workspace_slxs, search_workspace, and run_slx, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

Provides explicit when-to-use ('any question that involves searching by topic, keyword, or context') with concrete examples, plus a when-NOT-to-use list ('executing tasks, task authoring, registry operations, chat config CRUD, KB mutations, or raw structured JSON'). It also names the alternative tools to use instead, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.4
    • Changedcreate_knowledge_base_article1 field changed
      • addedInput schema / properties / title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Human-readable article title (max 255 chars). Strongly recommended: title is the primary field for title-weighted KB search and the workspace global-note catalog. If omitted the note is stored title-less and under-performs on retrieval."
        +}
    • Changedupdate_knowledge_base_article1 field changed
      • addedInput schema / properties / title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Updated human-readable article title (max 255 chars). Title is the primary field for title-weighted KB search and the global-note catalog."
        +}
  2. 3 tool updatesv0.1.3
    • Addedlist_discovery_platforms
    • Addedlist_indexed_resource_types
    • Changedrender_codecollection_skill1 field changed
      • changedInput schema / properties / platform / description
        Previous value: -"Generation rule platform. Use 'runwhen' for workspace-scoped tool-builder."New value: +"Generation rule platform: runwhen (one SLX per workspace), kubernetes, azure, aws, or gcp (per-resource discovery). Call list_discovery_platforms() before choosing — agents must confirm the user's target platform and scope."
  3. 2 tool updatesv0.1.1
    • Changeddelete_slx2 fields changed
      • removedInput schema / properties / branch
        Removed value: -{
        -  "default": "main",
        -  "description": "Git branch to delete from.",
        -  "type": "string"
        -}
      • removedInput schema / properties / commit_message
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Custom commit message."
        -}
    • Addedrender_codecollection_skill
  4. 44 tool updatesv0.1.0
    • First observedcommit_slx
    • First observedcreate_assistant
    • First observedcreate_chat_command
    • First observedcreate_chat_rule
    • First observedcreate_knowledge_base_article
    • First observeddelete_assistant
    • First observeddelete_knowledge_base_article
    • First observeddelete_slx
    • First observeddeploy_registry_codebundle
    • First observedget_assistant
    • First observedget_chat_command
    • First observedget_chat_rule
    • First observedget_issue_details
    • First observedget_knowledge_base_article
    • First observedget_registry_codebundle
    • First observedget_run_output
    • First observedget_run_sessions
    • First observedget_run_status
    • First observedget_skill
    • First observedget_slx_runbook
    • First observedget_workspace_chat_config
    • First observedget_workspace_config_index
    • First observedget_workspace_context
    • First observedget_workspace_issues
    • First observedget_workspace_locations
    • First observedget_workspace_secrets
    • First observedget_workspace_slxs
    • First observedlist_assistants
    • First observedlist_chat_commands
    • First observedlist_chat_rules
    • First observedlist_knowledge_base_articles
    • First observedlist_skills
    • First observedlist_workspaces
    • First observedrun_script
    • First observedrun_script_and_wait
    • First observedrun_slx
    • First observedsearch_registry
    • First observedsearch_workspace
    • First observedupdate_assistant
    • First observedupdate_chat_command
    • First observedupdate_chat_rule
    • First observedupdate_knowledge_base_article
    • First observedvalidate_script
    • First observedworkspace_chat

TDQS

A3.5/5.0

Scored across 47 tools

Disambiguation4/5

Most tools target distinct resources and actions, and the descriptions go out of their way to explain when to prefer workspace_chat over the raw JSON read tools (get_workspace_issues, get_workspace_slxs, search_workspace). Some residual overlap remains in the read/query cluster (search_workspace vs workspace_chat vs get_workspace_config_index) and among run_script vs run_script_and_wait vs run_slx, but the guidance largely resolves it.

Naming Consistency4/5

Nearly all tools follow a predictable snake_case verb_noun pattern (get_*, list_*, create_*, update_*, delete_*, run_*, search_*). The main deviation is workspace_chat, which uses a noun_verb shape with no verb prefix, plus minor inconsistencies in the domain prefixing (get_workspace_chat_config vs list_chat_rules).

Tool Count2/5

At 47 tools this is well past the point where a set feels heavy; several clusters could be consolidated (run_script + run_script_and_wait + get_run_status + get_run_output; the nine chat-rule/command tools; multiple overlapping workspace read tools). The domain is broad, but the surface is bloated beyond what each sub-area needs.

Completeness4/5

Coverage is strong: full CRUD for assistants, knowledge-base articles, and chat rules/commands, plus runs, registry, and discovery/codecollection workflows. Minor gaps exist (no create/update/delete for workspaces, only list_workspaces; no delete for chat rules) but the core lifecycles are represented.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with operational customer context, including typed revenue objects, persistent state, scoped tools, and human-in-the-loop handoffs through MCP, REST, and CLI.
    11 npm
    12
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with Databricks workspaces, running SQL queries, managing jobs, and exploring schemas via the Model Context Protocol.
    1
    GPL 3.0