RunWhen Platform MCP
The RunWhen Platform MCP connects AI coding agents to the RunWhen infrastructure platform, enabling AI-assisted infrastructure management, task authoring, and automation deployment.
Workspace Intelligence
Chat with your infrastructure via natural language using the RunWhen AI assistant
List workspaces, get issues (with severity filtering), list SLXs, view run sessions, and get workspace config indexes
Search workspaces by keyword across tasks, resources, and config
Get issue details and SLX runbook definitions
AI Assistants (Personas)
List, create, update, and delete custom AI personas that tailor how the AI investigates infrastructure, with custom filters, tag filters, and confidence thresholds
Chat Rules & Commands
Create, update, and list chat rules (AI behavior instructions) and slash-commands, including cron-scheduled commands, delivery targets (email/Slack), and auto-approval settings
Knowledge Base Management
Full CRUD on Knowledge Base articles (operational notes, architecture docs, troubleshooting guides) that feed the workspace's Knowledge Overlay Graph
CodeBundle Registry
Search the public registry for pre-built automation codebundles
View full codebundle details (tasks, SLIs, env vars, deployment metadata)
Deploy registry codebundles as SLXs directly to a workspace
Task Authoring (Tool Builder)
Load workspace infrastructure context (
RUNWHEN.md) before writing scriptsValidate bash/Python scripts against the RunWhen contract
Run scripts on live RunWhen runners and monitor status/output
Commit tested scripts as SLXs (tasks or SLIs) to the workspace Git repo, with cron scheduling, secret mappings, env vars, and runtime parameters
Run existing SLXs, delete SLXs, list available secrets, and list runner locations
Skills (Progressive Disclosure)
List and load detailed step-by-step guided workflows on demand (e.g., build-runwhen-task, find-and-deploy-codebundle)
Additional Capabilities
Multi-environment support (beta, prod, etc.)
OAuth and Bearer token authentication
Remote HTTPS access and airgapped environment support
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RunWhen Platform MCPtell me about the latest issues in my workspace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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).
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_contextto loadRUNWHEN.mdconventions 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
Install the server:
pip install runwhen-platform-mcpOr 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 .Set environment variables (see Configuration):
RW_API_URL,RUNWHEN_TOKEN, and optionallyDEFAULT_WORKSPACE.Add the server to your MCP client using the config below. Replace
your-jwt-tokenandyour-workspacewith 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 Settings → MCP → New 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.jsonin your project rootUser:
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
.exefiles 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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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’srunwhen-platform-mcpif you installed from source)Env:
RW_API_URL,RUNWHEN_TOKEN, and optionallyDEFAULT_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
/mcpwith no trailing slash. The server redirects/mcp/→/mcp, which can break some MCP clients.
Workspace: Pass
workspace_nameon tools that support it when you need a specific workspace. RunWhen’s hosted service is configured for the beta API; self-hosted deployments often setDEFAULT_WORKSPACEin 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)
Open Cursor Settings → MCP → New MCP Server, or edit
.cursor/mcp.jsonin your project (or user config, depending on how you scope MCP).Add the
mcpServers.runwhenblock above (https://mcp.beta.runwhen.com/mcpfor hosted beta, or your self-hosted URL) and Bearer token.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)
Add the same
mcpServersentry to.vscode/mcp.json(workspace) or to usersettings.jsonunder the key your VS Code build uses for MCP servers (for examplemcp.servers— check VS Code MCP documentation for the current schema).Use
urlandheadersas 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)
Edit the Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/claude/claude_desktop_config.json
Merge the
mcpServers.runwhenobject from the JSON block above (hosted or self-hosted URL) into the top-levelmcpServersmap (alongside any other servers you already have).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:latestOr 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-mcpThe 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 |
| Yes | Set to |
| No | Bind address (default: |
| No | Listen port (default: |
| No | Set to |
| No | Comma-separated Host allowlist for FastMCP's |
| No | Set to |
| 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 whoseHostheader doesn't match returns421 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 theMCP_BASE_URLhostname to the allow-list, so the OAuth-configured install works out of the box. If the public hostname on your ingress differs fromMCP_BASE_URL(rare), setMCP_ALLOWED_HOSTSexplicitly.
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.
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-serveris served from this base).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
Token endpoint auth — Use client secret post (
client_secret_post), matching the server’s OIDC proxy configuration.Set on the MCP server:
MCP_PAPI_OAUTH_CLIENT_ID— client ID from step 2MCP_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). Optionalpersona_nameto select an assistant.list_workspaces— List workspaces you have access to.get_workspace_chat_config— Get resolved chat rules and commands (metadata). Optionalpersona_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 viacron_schedule,sink_configs,run_as_user, andassistant_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 (itsshort_nameis thepersona_nameforworkspace_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 fromcommit_slxwhich embeds inline scripts).
Task authoring — Tool Builder (9 tools)
get_workspace_context— LoadRUNWHEN.mdfrom 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; supportssli_scriptorcron_schedule).get_workspace_secrets— List secret keys (e.g.kubeconfig).get_workspace_locations— List runner locations. Location auto-resolves forrun_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 |
| Yes | RunWhen API base URL (e.g. |
| Yes | RunWhen API token (JWT or Personal Access Token). Used for both API and Agent. |
| No | Default workspace so tools don’t need |
| No | Human-readable label for this server instance (e.g. |
| No | Override path to |
| No | CodeBundle Registry URL (default: |
| No | Set to |
| No | HTTP timeout (seconds) for registry calls. Default |
| No | Soft warning threshold for script payload size. Default |
| No | Hard cap for script payload size. Default |
| No | Force a specific |
| No | Git ref for the generic codecollection mirror (default: |
| No | Override Tool Builder runbook code bundle ( |
| No | Override Tool Builder SLI code bundle ( |
| No | Override cron-scheduler SLI code bundle ( |
| No | Seconds between script run status polls (default: |
| No | Max seconds to wait for a script run (default: |
| No | Delay before fetching run artifacts (default: |
| 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 |
| For OAuth | Public URL of the MCP server (origin only). |
| For OAuth | RunWhen OAuth client ID (preferred). |
| For OAuth | RunWhen OAuth client secret (preferred). |
| 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=trueThis 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:
Explicit call argument —
generic_runtime_repo_urlonrender_codecollection_skill.Env override —
MCP_GENERIC_CODECOLLECTION_REPO_URL/MCP_TOOL_BUILDER_*_REPO_URL/MCP_CRON_SLI_REPO_URL(see table below).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 namedrw-generic-codecollection(orrw-workspace-utils), uses that URL. Results are cached in-process for 5 minutes.Hardcoded
github.comdefault.
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 |
| Always in airgap. | Set to |
| Always. | Internal PAPI URL, e.g. |
| If | Public UI origin used in |
| HTTP transport with OAuth. | Public origin of the MCP server (e.g. |
| Rarely. | Force a specific |
| Rarely. | Git ref for the generic codecollection mirror. Default: |
| Rarely. | Per-bundle override for Tool Builder runbook. |
| Rarely. | Per-bundle override for Tool Builder SLI. |
| Rarely. | Per-bundle override for the cron-scheduler SLI ( |
| 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. |
| Optional. | Human-readable label baked into the MCP server name (e.g. |
Getting a token
Personal Access Token (recommended, up to 180 days): RunWhen UI → Profile → Personal 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_nameinworkspace_chat/get_workspace_chat_configto 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_chatto the RunWhen Agent (AgentFarm), which has many internal tools. You ask in natural language; optionalpersona_nameselects the assistant.Tool Builder flow: Search registry (
search_registry) → load context (get_workspace_context) → write script → validate → get secrets/locations → test withrun_script_and_wait→ iterate →commit_slx→ verify withget_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 insideworkspace_chat.CodeBundle Registry: Search for existing automation before building custom. The registry at
registry.runwhen.comis 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.templateExample:
runwhen_platform_mcp/docs/RUNWHEN.md.exampleFlow and SLI patterns:
runwhen_platform_mcp/docs/tool-builder-flow.md
What’s in this repo
Component | Path | Description |
MCP server |
| Python package; run via |
Docs |
| Tool Builder flow, RUNWHEN.md template/example. |
Tests |
| Pytest tests; run with |
Skills |
| Reusable AI workflow skills (SKILL.md). Filesystem-discovered by Cursor / Copilot / Claude via |
Rules & agents |
| Optional Cursor rules and agent personas. |
Docker |
| Container image for remote HTTP deployment. Published to |
Cursor plugin |
| Plugin metadata and example MCP config. |
Copilot instructions |
| 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 |
| Native filesystem skill loading |
Goose, Continue, Cline, OpenAI Codex CLI, any other compliant MCP client |
| Standard MCP |
Clients that surface tools only (some OpenAI / Gemini function-callers) |
| 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/ -vLocal 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-mcpCursor 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 checkCI 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 toolscommit_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:
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.
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 invokesmain()itself with FD 3 wired to a run_output.json file. A trailingmain "$@"triggers a preflight invocation with FD 3 read-only, producing misleading "Bad file descriptor" errors. Just definemain()and stop there.secret_varsentries 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 mustcat "$VAR"(bash) oropen(os.environ["VAR"]).read()(python) to get the actual value.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | 'logs-bulk', 'config', or 'logs-stacktrace'. | logs-bulk |
| tags | No | Resource tags ({name, value} dicts). | |
| alias | Yes | Human-readable display name (e.g. 'Pod Health Check'). | |
| access | No | 'read-write' or 'read-only'. | read-write |
| branch | No | Git branch to commit to. | main |
| owners | No | Owner emails (defaults to current user). | |
| script | No | The full script source code (not base64). | |
| env_vars | No | Environment variables baked into the SLX config. | |
| location | No | Runner location (use get_workspace_locations). | |
| slx_name | Yes | Short SLX name (lowercase-kebab-case, e.g. 'k8s-pod-health'). | |
| hierarchy | No | Tag names for hierarchical grouping. | |
| image_url | No | Icon URL for the SLX. | |
| statement | Yes | SLX statement (e.g. 'All pods should be running'). | |
| task_type | No | 'task' (runbook) or 'sli' (indicator). | task |
| sli_script | No | Optional SLI script (returns float 0-1). | |
| task_title | No | Human-readable task title. | |
| interpreter | No | 'bash' or 'python'. | bash |
| script_path | No | Local file path for main script. **stdio mode only.** Mutually exclusive with the other script_* params. | |
| secret_vars | No | Secret mappings baked into the SLX config. | |
| runtime_vars | No | Per-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_schedule | No | Cron expression to schedule the task (e.g. '0 */2 * * *'). | |
| resource_path | No | Resource path for search indexing. | |
| script_base64 | No | UTF-8 main script as standard base64. | |
| codebundle_ref | No | Git ref for the codebundle (auto-resolved if omitted). | |
| commit_message | No | Custom commit message. | |
| workspace_name | Yes | The workspace to commit to (e.g. 't-oncall'). | |
| sli_interpreter | No | Interpreter for the SLI script. | |
| sli_script_path | No | Local file path for SLI script. **stdio mode only.** Mutually exclusive with the other sli_script_* params. | |
| interval_seconds | No | For SLIs, how often to run in seconds. | |
| sli_script_base64 | No | UTF-8 SLI script as standard base64. | |
| script_base64_path | No | Local file path to a file containing the base64-encoded main script. **stdio mode only.** | |
| script_gzip_base64 | No | UTF-8 main script as base64(gzip(...)). Best inline option for scripts >5KB — 3-5x denser than 'script_base64'. | |
| sli_interval_seconds | No | How often the SLI runs in seconds. | |
| sli_script_base64_path | No | Local file path to a file containing the base64-encoded SLI script. **stdio mode only.** | |
| sli_script_gzip_base64 | No | UTF-8 SLI script as base64(gzip(...)). Best inline option for SLI scripts that exceed simple-metric size. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses created files (slx.yaml + runbook.yaml or sli.yaml), output contracts for task vs SLI, and critical footguns (bash main() call, secret_vars file path injection). However, it does not explicitly state if the tool is idempotent or if it overwrites existing SLXs, nor mention permissions or rate limits. The disclosures are thorough 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with tables, bullet points, and section headers. It front-loads the core purpose and usage. However, some details (e.g., footguns, output contracts) could be slightly more concise or moved to a separate section to improve scanability. Overall, every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (35 parameters, 4 required, multiple script variants, task/SLI duality, and output schema), the description is remarkably complete. It covers parameter selection, usage workflows, output expectations (task returns List[Dict], SLI returns float), and caveats. The presence of an output schema reduces the need to explain return values, and the description appropriately references it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds significant value beyond schema per-parameter docs. It introduces a matrix explaining when to use each script variant (script, script_base64, etc.), mutual exclusivity rules, and footguns that affect parameter usage (e.g., bash main() constraint). This greatly aids parameter selection and avoids common mistakes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Commit' and the resource 'a tested script as an SLX to the workspace Git repo'. It explicitly distinguishes from sibling tools by mentioning alternative for large scripts (deploy_registry_codebundle), making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance (after testing with run_script/run_script_and_wait), when-not-to-use (for very large scripts, prefer deploy_registry_codebundle), and a detailed parameter matrix for script source variants. It also explains how to combine task and SLI, covering both custom and cron-scheduler approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_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.
| Name | Required | Description | Default |
|---|---|---|---|
| avatar_url | No | Optional avatar image URL (e.g. '/personas/Man1-Happy.svg'). | |
| run_config | No | Run configuration: allow/disallow/budget settings (advanced). | |
| short_name | Yes | Assistant 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. | |
| description | No | What this assistant specializes in (e.g. tech stack, team). | |
| display_name | No | Human-readable display name (e.g. 'Azure DevOps Helper'). | |
| filter_scope | No | Optional scope filter for results (advanced). | |
| search_filters | No | Vector-search filter operators (e.g. {'codebundleTaskTags': ['kubernetes'], 'slxGroup': ['my-group']}). | |
| workspace_name | Yes | The workspace to create the assistant in. | |
| filter_stop_words | No | Words stripped from search queries before matching. | |
| run_confidence_threshold | No | Confidence threshold for automatic task runs (0-1). | |
| filter_codebundle_task_tags | No | Only surface tasks tagged with these (e.g. ['azure', 'devops']). Empty/omitted means no tag filter. | |
| filter_confidence_threshold | No | Confidence threshold for filtering results (0-1). | |
| filter_issue_selection_strategy | No | Issue selection strategy (e.g. 'MOST_SEVERE'). | MOST_SEVERE |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Absent annotations, the description fully discloses behavior: it's an upsert, omitted fields reset to defaults, and the short_name becomes persona_name. It also explains the broader workflow of shaping behavior with chat rules/commands.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, but slightly verbose (e.g., repeating 'assistant' multiple times). Nonetheless, it is clear and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no annotations, and output schema present, the description adequately covers creation behavior, upsert, and context. It doesn't detail return values (schema handles that). Missing some edge case handling notes, but sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds context for short_name (mapping to persona_name) and upsert behavior, but does not significantly elaborate on other parameters beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new AI assistant persona in a workspace, distinguishes it from update_assistant and delete_assistant, and explains its relation to workspace_chat via persona_name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use (create new assistant), when to use update_assistant (to change few fields), and mentions attaching rules/commands afterward. No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Command name (alphanumeric, underscore, or hyphen only). | |
| max_runs | No | Maximum scheduled runs before the schedule stops (omit for unlimited). | |
| scope_id | No | Scope ID (null for platform; workspace name for workspace). | |
| is_active | No | Whether the command is active. | |
| scope_type | Yes | One of platform, org, workspace, persona, user. | |
| description | No | Optional description for the command. | |
| run_as_user | No | Email of the user the scheduled session runs as. Required when cron_schedule is set. | |
| sink_configs | No | Delivery targets when cron_schedule is set. Each entry: {type: 'email'|'slack', mode: 'user'|'all-workspace-users'|'channel'|'webhook', target: '...'}. | |
| cron_schedule | No | Cron 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_name | No | Persona 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_name | Yes | The workspace to create the command in (e.g. 't-oncall'). | |
| command_content | Yes | Markdown content of the command. | |
| schedule_paused | No | When true, the cron does not fire (independent of is_active). | |
| auto_approve_readonly | No | When true, scheduled runs auto-approve read-only task execution (write tasks still require approval). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 naming constraints, invocation syntax, and scheduling behavior, but omits details on permissions, idempotency, or what happens on duplicate names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with only five lines, front-loading the core purpose. Every sentence adds meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 parameters and an output schema, the description covers essential creation and scheduling aspects. It does not explain all parameters, but the schema handles them. Additional context on skill and invocation is helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, baseline 3. The description adds value by explaining the relationship between scheduling parameters and the skill context, going beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a chat command (slash-command) and specifies naming constraints. This verb+resource combination effectively distinguishes it from sibling tools like create_assistant or create_chat_rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to set scheduling parameters (cron_schedule plus sink_configs, run_as_user, assistant_name) but does not explicitly indicate when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_chat_ruleB
Create a chat rule. Uses AgentFarm internal API.
Skill: runwhen-skill://manage-rules (scoping + wording guidance).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the rule. | |
| scope_id | No | Scope ID (null for platform; workspace name for workspace). | |
| is_active | No | Whether the rule is active. | |
| scope_type | Yes | One of platform, org, workspace, persona, user. | |
| rule_content | Yes | Markdown content of the rule. | |
| workspace_name | Yes | The workspace to create the rule in (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions 'Uses AgentFarm internal API' but does not describe side effects, permissions, or whether the operation is idempotent. The skill reference is about wording guidance, not tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences with no unnecessary words. Front-loaded with the core action. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema and full parameter descriptions, the description is mostly complete. The skill reference provides extra guidance. However, it could mention prerequisites or the effect of scope_type and scope_id interplay, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds a skill reference that hints at scoping and wording, but does not add significant new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create a chat rule' and the resource. It distinguishes from sibling tools like update or list by its verb. The skill reference adds context but is not necessary for purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as update_chat_rule or when to avoid it. The skill reference hints at scoping but does not provide clear usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | 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. | |
| content | Yes | The article content (plain text or markdown, max 20000 chars). | |
| resource_paths | No | Canonical resource paths (e.g. ['kubernetes/namespace/prod']). | |
| workspace_name | Yes | The workspace to create in (e.g. 't-oncall'). | |
| abstract_entities | No | Entity tokens for indexing (e.g. ['oom-killed', 'memory-limits']). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that articles become indexed and searchable, which is a side effect, but it does not specify other behaviors like validation, failure modes, or any prerequisites. The reference to 'article scoping + lifecycle' is vague and could be expanded to explain how creation affects existing resources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a skill reference and content guidance—tight with no fluff. The key action is front-loaded, and the additional context (indexing, content type) is succinct. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the availability of an output schema and a well-described input schema, the description covers the essential purpose and usage context. It could be more complete by mentioning that the workspace must exist or that content is validated, but we have the skill reference and the schema's parameter descriptions filling gaps. Overall, it is solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a note about content being 'informative operational knowledge,' which contextualizes the 'content' parameter, but it does not add meaningful detail beyond what the schema already provides (e.g., title max length, resource_paths examples). No additional explanation is given for parameters like abstract_entities.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new Knowledge Base article') with a specific resource (knowledge base article) and workspace context, distinguishing it from sibling operations like update, delete, and list. It also explains the broader purpose—indexing into the Knowledge Overlay Graph for searchability—which reinforces its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (for adding informative operational knowledge) and gives examples of suitable content, distinguishing it from other tools. However, it does not explicitly discuss when NOT to use it (e.g., for updating) or mention alternative tools, though the purpose is clear enough that exclusions are implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_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.
| Name | Required | Description | Default |
|---|---|---|---|
| assistant_name | Yes | Assistant short name to delete (e.g. 'azure-devops'). Workspace prefix optional. | |
| workspace_name | Yes | The workspace the assistant belongs to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the deletion is soft (implied reversible) and that associated rules/commands are not automatically removed. However, it does not specify whether the operation is reversible, required permissions, or impact on existing conversations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines purpose, second adds essential caveat. No redundant information. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema (unspecified behavior but not required per rules), the description covers the key aspects: soft-delete and side effects on rules/commands. It could mention the return value or reversibility, but overall it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described in input schema). The description adds no additional meaning beyond what the schema provides for assistant_name and workspace_name. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (delete) and resource (assistant), and specifies it's a soft-delete. This distinguishes it from sibling tools like create_assistant, update_assistant, get_assistant, and list_assistants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Does not mention prerequisites (e.g., assistant must exist) or when not to use it. The only additional information is a cleanup note about rules/commands, which is more of a warning than usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_knowledge_base_articleA
Delete a Knowledge Base article.
Removes the article from the workspace and the Knowledge Overlay Graph index.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The UUID of the KB article to delete. | |
| workspace_name | Yes | The workspace (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions removal from workspace and index, which is helpful, but lacks details on reversibility, required permissions, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the action and resource; no redundancy. However, the second sentence could be integrated into the first for even better conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the simplicity of a delete operation, the description is largely complete. It could mention if the action is irreversible, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add meaning beyond the parameter descriptions. Baseline 3 applies as the schema already documents the parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Delete') and the resource ('Knowledge Base article'), and specifies the scope ('removes from workspace and Knowledge Overlay Graph index'), distinguishing it from sibling tools like create or update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., when to delete vs. archive), no prerequisites stated, and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_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.
| Name | Required | Description | Default |
|---|---|---|---|
| slx_name | Yes | Short name of the SLX to delete (e.g. 'k8s-pod-health'). | |
| workspace_name | Yes | The workspace to delete from (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses key behaviors: it uses the v4 endpoint, tombstones the SLX row, and triggers corestate reconciliation to clean up related rows. It also notes behavior matches the UI. It does not cover auth or rate limits, but the core behavior is well explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into three paragraphs, each serving a purpose: core action, endpoint details, and usage clarification. It is front-loaded with the main purpose. It could be slightly more concise, but no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the input schema is fully covered, output schema exists, and the description covers behavior, usage, and parameter meaning, it is complete for an agent to select and invoke this tool correctly. It addresses potential confusion about Git-branch scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by providing example short names and workspace names, clarifying that parameters do not include branch/commit_message (removed from prior paths), and emphasizing the short-name format. This goes beyond the schema's simple descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a 'soft-delete' of an SLX from a workspace via the v4 endpoint. It specifies the resource (SLX), action (soft-delete), and scope (workspace). It distinguishes from siblings by clarifying it is workspace-global and not Git-branch-scoped, which differentiates it from potential Git-oriented tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for workspace-scoped soft delete) and when not (avoids Git branches). It advises callers previously using a Git-oriented delete path to stop passing branch/commit_message. However, it does not explicitly mention alternative tools or when to use them, though siblings include other delete tools like delete_assistant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Git branch/tag for the codecollection. | main |
| data | No | 'logs-bulk', 'config', or 'logs-stacktrace'. | logs-bulk |
| tags | No | Resource tags ({name, value} dicts). | |
| alias | Yes | Human-readable display name (e.g. 'Namespace Health'). | |
| access | No | 'read-only' or 'read-write'. | read-only |
| branch | No | Workspace config branch. | main |
| owners | No | Owner emails (defaults to current user). | |
| location | Yes | Runner location (use get_workspace_locations). | |
| repo_url | Yes | Git URL of the codecollection. | |
| slx_name | Yes | Short SLX name (lowercase-kebab-case). | |
| hierarchy | No | Tag names for hierarchical grouping. | |
| image_url | No | Icon URL for the SLX. | |
| statement | Yes | SLX statement (e.g. 'All pods should be running'). | |
| deploy_sli | No | Also deploy the SLI (health indicator). | |
| config_vars | No | Codebundle config variables. | |
| secret_vars | No | Secret mappings (e.g. {'kubeconfig': 'kubeconfig'}). | |
| resource_path | No | Resource path for search indexing. | |
| commit_message | No | Custom commit message. | |
| deploy_runbook | No | Deploy the runbook (task). | |
| workspace_name | Yes | Target workspace (e.g. 't-oncall'). | |
| codebundle_path | Yes | Path to codebundle dir (e.g. 'codebundles/k8s-namespace-healthcheck'). | |
| sli_description | No | Description for the SLI metric. | |
| sli_interval_seconds | No | SLI run interval in seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains that the tool deploys a pre-built codebundle from its own repo and mentions the runbook/sli location. While it doesn't detail auth or side effects, the overall behavior is clear. A 4 is appropriate as it adds useful context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences), front-loaded with the main purpose, and well-structured. It includes a sibling comparison and usage instructions with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (23 params, 7 required, output schema exists), the description provides essential context: purpose, sibling differentiation, and preparation steps. There is an output schema, so return values need not be described. A 4 reflects that it covers the key aspects without being overly detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 23 parameters. The description does not add extra meaning beyond referencing 'values from the registry'. The baseline 3 is correct since the description doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deploys a registry codebundle as an SLX to a workspace, with specific verb and resource. It distinguishes itself from the sibling commit_slx by contrasting the deployment of pre-built codebundles versus inline scripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: after using search_registry and get_registry_codebundle to find the right codebundle. It also contrasts with commit_slx, helping the agent choose the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assistantA
Get a single AI assistant (persona) by its short name (full config).
| Name | Required | Description | Default |
|---|---|---|---|
| assistant_name | Yes | Assistant short name (e.g. 'azure-devops'). Workspace prefix optional. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 correctly indicates a read operation ('Get') and mentions the return includes full config. However, it does not disclose any error conditions, authentication requirements, or potential side effects. It is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb 'Get', and contains no filler. Every word is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter tool with 2 parameters and an output schema (not shown but present), the description provides enough context to understand the tool's behavior. It explains what the assistant_name is and that the result is the full configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the base score is 3. The description adds the phrase 'by its short name' which is already in the schema's assistant_name description. It does not add significant meaning beyond the schema. The workspace_name parameter is straightforward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('single AI assistant'), specifies it is by short name, and distinguishes from siblings like 'list_assistants' and 'create_assistant' by implying that this returns the full config of one assistant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need a specific assistant's configuration, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., 'list_assistants' for listing all assistants, or 'get_workspace_config_index' for overview). No when-not-to-use or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_commandA
Get a single chat command by ID (full content).
| Name | Required | Description | Default |
|---|---|---|---|
| command_id | Yes | The command ID to retrieve. | |
| workspace_name | Yes | The workspace the command belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It mentions 'full content' which hints at a richer response than list, but does not disclose any potential behavioral traits like permissions or side effects. Adequate for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that efficiently captures the tool's purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the tool's simplicity, the description is adequate. It could be slightly improved by clarifying what 'full content' entails, but overall it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'command_id' and 'workspace_name' fully. The description adds no extra semantic meaning beyond stating the resource and its retrieval method.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get', the resource 'chat command', and specifies that it retrieves a single command by ID with full content. This distinguishes it from listing tools like list_chat_commands.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Sibling list_chat_commands implies listing, but the description does not clarify when to use get vs list. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_ruleA
Get a single chat rule by ID (full content).
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | The rule ID to retrieve. | |
| workspace_name | Yes | The workspace the rule belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It states 'full content' suggesting a complete response, but does not mention permissions, rate limits, error handling, or any side effects. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is front-loaded with the key action and resource. Perfectly concise for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description need not detail return values. It covers the basic purpose and parameters. Could mention edge cases like missing rule_id, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters have descriptions). The tool description adds no extra meaning beyond the schema—'by ID' simply mirrors rule_id. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('chat rule'), and clarifies scope ('by ID, full content'). This clearly distinguishes it from siblings like list_chat_rules (which returns multiple) and get_chat_command (different resource type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need a single chat rule by ID, but does not explicitly state when not to use it or mention alternatives like list_chat_rules for multiple rules. No guidance on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | The issue ID to look up. | |
| workspace_name | Yes | The workspace the issue belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It states the tool returns structured JSON, implying a read-only operation. While it lacks details on auth, rate limits, or exact output structure, it sufficiently communicates the tool's non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a note. It front-loads the main purpose and then provides crucial usage differentiation, making every sentence earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and full parameter coverage, the description is largely complete. It explains when to use the tool and what to expect. However, it could mention potential error conditions or required permissions, but overall it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds no additional meaning beyond what the schema already provides for the two parameters. It merely reiterates the need for an issue ID and workspace name without extra semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed information about a specific issue in structured JSON format. It distinguishes itself from the sibling `workspace_chat` by specifying this tool is for raw JSON retrieval when you have an issue ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to prefer `workspace_chat` for investigative questions and to use this tool only when you already have an issue ID and need raw JSON. This provides clear usage guidance and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledge_base_articleB
Get a specific Knowledge Base article by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The UUID of the KB article to retrieve. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states the action without disclosing permissions required, whether it's read-only, expected response complexity, or error scenarios. The output schema covers return values but not behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It is concise and front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema exists to describe return values, the description lacks context about required workspace scope, potential lack of access errors, or response size. For a simple get tool, it is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds no extra meaning beyond 'by ID'. Baseline 3 is appropriate as the schema already documents the parameters sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'Knowledge Base article', and the method 'by ID'. It distinguishes from sibling tools like list_knowledge_base_articles which retrieve multiple articles, and create/update/delete tools which modify articles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not mention when not to use it, prerequisites (e.g., need to know the article ID), or any exclusion criteria. The description assumes the agent knows it's for a single article retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| codebundle_slug | Yes | The codebundle slug (e.g. 'k8s-podresources-health'). | |
| collection_slug | Yes | The codecollection slug (e.g. 'rw-cli-codecollection'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the kind of information returned (configuration templates, environment variables, deployment instructions) but does not mention auth needs or data freshness. However, as a read operation, side effects are unlikely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, second sentence provides usage guidance. Every sentence is useful and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described. The description covers the purpose, usage context, and the type of information retrieved. Given the tool's moderate complexity, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters having descriptions. The description adds no additional meaning beyond what the schema provides for the parameters, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get full details of a specific codebundle from the registry,' specifying verb (get), resource (full details of a codebundle), and scope (registry). It distinguishes from sibling tools like search_registry and deploy_registry_codebundle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after search_registry to get complete information' providing clear context on when to use this tool, and implies search_registry as the alternative for initial discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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)
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID returned by run_script. | |
| fetch_logs | No | Download and parse artifact contents. | |
| workspace_name | Yes | The workspace the run belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses return content but not behavior on incomplete runs, error handling, or required permissions. The precondition 'completed script run' is implied but not enforced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a bullet list. Front-loaded with purpose, no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 'get' tool with 3 params, output schema, and no annotations, the description covers return values well. Lacks details on failure modes or preconditions, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in the schema. The description does not add extra meaning beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the output artifacts from a completed script run' with a specific verb and resource. It lists the returned fields (issues, stdout, stderr, status), distinguishing it from sibling tools like get_run_status or run_script.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage after a script run completes ('from a completed script run'), but lacks explicit when-not-to-use or alternatives like get_run_status for status-only checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max run sessions to return. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions 'recent' but does not specify cutoff or sorting order, nor error handling (e.g., missing workspace). However, the presence of an output schema (context signal) reduces burden. Description adds some context about run sessions but lacks full behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise: one sentence for purpose, one for context, and a clear usage note. No unnecessary words, front-loaded with core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no nested objects, output schema present), the description adequately explains purpose, usage, and output format. Minor gaps like limit behavior and sorting are omitted, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. Description adds general context ('workspace', 'recent') but does not provide additional semantics beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent run sessions for a workspace in structured JSON. It explains what run sessions are and distinguishes from sibling tool workspace_chat by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit note advises preferring workspace_chat for investigative questions (searching, filtering, correlating) and using this tool only when raw JSON is needed for programmatic processing, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run ID returned by run_script. | |
| workspace_name | Yes | The workspace the run belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It lists possible status values (RUNNING, SUCCEEDED, FAILED) and implies it's a polling operation, which is useful behavioral context. It doesn't mention idempotency or side effects, but for a status check that's acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose, usage hint, and status values. Front-loaded and efficient, with no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers purpose, usage, and parameters. For a simple polling tool, it is complete and leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds specific usage hints (e.g., run_id from run_script, workspace example 't-oncall'), providing meaningful context beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and resource 'status of a script run', and it differentiates from siblings by specifying polling after run_script, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to poll after run_script to check completion, providing clear context for when to use. However, it doesn't mention alternatives like get_run_output for output or get_run_sessions for sessions, which would strengthen guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skillA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Skill name (e.g. 'build-runwhen-task'). Call list_skills first if you don't know the available names. | |
| reload | No | Force re-read from disk (default: use cached version). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains both success and error return structures, including that error contains available names for self-correction. Does not explicitly declare read-only or non-destructive behavior, but the return format indicates retrieval only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the main purpose and return format. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema provided, the description sufficiently explains the return values. For a simple retrieval tool with 2 parameters, it covers error handling and caching hint, but lacks explicit read-only declaration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add additional parameter semantics beyond what the schema already provides for name and reload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the full body of a skill by name, and specifies the returned fields on success and error. This distinguishes it from sibling get_* tools, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance to call list_skills first if name is unknown, and mentions self-correction via error response. Does not explicitly state when not to use or provide alternatives beyond list_skills.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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).
| Name | Required | Description | Default |
|---|---|---|---|
| slx_name | Yes | The SLX short name. | |
| workspace_name | Yes | The workspace the SLX belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does not explicitly state that the tool is read-only, idempotent, or any behavioral traits like permissions or rate limits. However, as a get operation, the lack of transparency is not critical but still leaves room for improvement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear first line stating purpose, a second paragraph detailing the return content, and a third paragraph giving usage guidance. Every sentence adds value and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (context signals: true), the description adequately explains what the output contains: 'runbook definition including what tasks it runs, how they're configured, and what they check.' This is complete for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with clear descriptions for both parameters: 'slx_name' (the SLX short name) and 'workspace_name' (the workspace the SLX belongs to). The description does not add any additional parameter semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the runbook for a specific SLX' and specifies it returns the runbook definition including tasks, configuration, and checks. It also distinguishes itself from the sibling tool 'workspace_chat' by noting that tool provides contextual explanations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: '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).' This clearly tells when to use and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| persona_name | No | Optional persona for persona-scoped rules/commands. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly states that 'Response includes metadata only (id, name, scope); full rule/command content is not included,' which is a key behavioral trait. It also indicates 'resolved' meaning the rules/commands are computed for the workspace. No contradictions or misleading statements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences and a statement about metadata. Every sentence adds value, starting with the core purpose, then the context (same as assistant sees), and a critical caveat about metadata. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity, the presence of an output schema, and no annotations, the description covers the essential aspects: purpose, scope, and return content limitation. It might lack details on prerequisites (e.g., workspace existence) or error conditions, but the output schema likely handles return structure. Overall sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with clear descriptions for both parameters. The tool description adds no further meaning to the parameters beyond what the schema already offers. Thus, it meets the baseline of 3, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving resolved chat rules and commands for a workspace. It specifies the verb 'Get' and the resource 'resolved chat rules and commands', and distinguishes from sibling tools like get_chat_command and get_chat_rule by indicating it returns a list with resolved configurations for the workspace and optional persona.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'These are the same rules and commands the workspace chat assistant sees.' This guides when to use the tool. However, it does not explicitly state when not to use it or mention alternatives like get_chat_command for individual rules, which would improve differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool accepts only one parameter and returns structured JSON. It also warns about unexpected keyword arguments. Could mention authorization or performance, but overall sufficient for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise paragraphs: purpose, parameter constraints, and usage guidance. Every sentence adds value, and the structure front-loads key information. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, read-only, output schema present), the description covers all relevant aspects: what it does, what it returns, parameter restrictions, and when to use alternatives. The presence of an output schema means return value detail is not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (workspace_name described). The description adds value by explicitly listing which parameters are not accepted (resource_path, slx_name, filter) and the resulting error, going beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the workspace configuration index as structured JSON, providing a specific verb and resource. It distinguishes itself from siblings like workspace_chat by noting when each is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use (programmatic processing) and when to prefer alternatives (workspace_chat for contextual questions). Also clarifies that only workspace_name is accepted and other parameters will fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| reload | No | Force re-read from disk (default: False, uses cached version). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations, the description covers caching behavior, auto-discovery, and env var override. Does not mention side effects or permissions, but reads are typically safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three paragraphs with clear front-loading of purpose. The 'IMPORTANT' line emphasizes usage. Slightly verbose but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given existence of an output schema (not shown), the description adequately explains source, caching, and override without needing return value details. Complete for a read-context tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'reload' is fully described in the schema (100% coverage), and the description adds context about caching and when to use the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get domain-specific context for building RunWhen tasks' and specifies reading a RUNWHEN.md file. This clearly distinguishes it from sibling tools like get_workspace_secrets or get_workspace_config_index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Call this BEFORE writing any task or script to understand the target environment's rules and relationships.' No exclusion of alternatives, but the unique purpose makes the guideline sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max issues to return. | |
| since | No | ISO 8601 lower bound for latest occurrence (e.g. '2026-03-29T14:00:00Z'). | |
| severity | No | Filter: 1=critical, 2=high, 3=medium, 4=low. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that issues are 'detected problems... through automated health checks' and returns structured JSON. However, with no annotations, it omits details like read-only nature, rate limits, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: first sentence states purpose, then context, then usage note. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage and output schema, description provides sufficient context about purpose and alternatives. Missing minor behavioral details, but overall complete for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in schema. Description adds no additional parameter meaning beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'current issues for a workspace (structured JSON)'. It differentiates from sibling workspace_chat by specifying this tool is for raw JSON programmatic processing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use this tool ('only when you need raw JSON for programmatic processing') and when to prefer workspace_chat ('for questions like...'). Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It describes the response shape in detail, including fields like auto_resolves and recommended. It mentions backward compatibility for the locations field. It does not explicitly state if the tool is read-only, but the name and context imply it is a query without side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise summary sentence followed by a response shape in a code block. Every sentence adds value, and the length is appropriate for the complexity of the output. No redundant or vague statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one parameter) and the detailed response shape provided in the description, the tool is fully documented. The agent knows exactly what to expect and how to interpret the output for subsequent decisions. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with a description for workspace_name. The tool description does not add additional parameter semantics beyond what the schema provides. The example in the schema ('t-oncall') is helpful but not extensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists runner locations with auto-resolution guidance. It provides a specific verb ('List') and resource ('runner locations'). While it doesn't explicitly differentiate from siblings, the unique response structure and guidance set it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: when auto_resolves is True, the agent should not pass a location argument. It also explains that the recommended field tells which location sibling tools will pick when omitted. This clearly indicates when to use the tool and how to interpret its output for subsequent calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully covers behavioral traits. It details the response shape, including platform_groups, recommended_secret_vars, runtime_semantics, and a critical note about file-path semantics. It also mentions backward compatibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and is reasonably concise. However, the response shape block adds length; it could be slightly shorter while maintaining clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the absence of an output schema in the input, the description provides a complete output shape and critical behavioral notes, making it fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100% for the single parameter 'workspace_name'. The description does not add extra meaning beyond what the schema already provides, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available secret keys with platform grouping and mapping guidance', specifying a verb (list), resource (secret keys), and distinct purpose. It differentiates from sibling tools by focusing on secrets and platform grouping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving secret keys and mapping guidance, but does not explicitly state when to use this tool versus alternatives or provide exclusions. No direct guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_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_chatSearch 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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels: it discloses the pagination behavior (auto-paginates until exhausted), the return structure (complete results, true count, next always null), the strict parameter acceptance, and the error condition (unexpected_keyword_argument). This goes beyond basic safety to explain exactly what the tool does internally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose, SLX definition, behavior detail, parameter constraints, and alternatives. Every sentence adds value; the use of bold and bullets improves scannability. It's appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (pagination, filtering non-support, alternatives), the description is complete: it explains the pagination effect, the exact return fields (results, count, next), the error on invalid params, and when to use it vs. alternatives. The existence of an output schema doesn't detract; the description preemptively explains the return semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (workspace_name already described as 'The workspace to query (e.g. 't-oncall')'), so baseline is 3. The description adds 'It accepts only workspace_name' and the prohibition on other params, which reinforces schema constraints (additionalProperties: false) but doesn't provide deeper meaning about the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List ALL SLXs in a workspace (structured JSON)' with explicit scope ('ALL', 'no filtering'), uses a specific verb+resource structure, and immediately distinguishes itself from siblings by the emphasis on 'no filtering' and the explicit alternative for specific SLXs (get_slx_runbook) and searches (workspace_chat).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance ('only when you need to enumerate every SLX for programmatic processing'), specifies what it does NOT accept (filtering params leading to errors), and lists clear alternatives with conditions ('One specific SLX... get_slx_runbook', 'Search/filter by topic... workspace_chat'). This fully satisfies the when/when-not/alternatives requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states it lists assistants but does not disclose pagination, error behavior, or permission requirements. Minimal detail beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, concept explanation with cross-reference, and usage guidance. No redundant information; perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (not shown), description need not cover return values. The description is mostly complete for a list tool, though it could mention behavior for empty results or invalid workspace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, setting baseline to 3. Description does not add extra meaning beyond the schema description of workspace_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists AI assistants/personas in a workspace. Distinguishes from siblings by mentioning the shortName used in workspace_chat and the use case of discovering before creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using the tool to discover existing assistants before creating a new one. Provides clear context but does not explicitly mention when not to use or compare with get_assistant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chat_commandsB
List chat commands (slash-command instructions).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). | |
| scope_id | No | Filter by scope ID. | |
| is_active | No | Filter by active status. | |
| page_size | No | Items per page (1-200). | |
| scope_type | No | Filter by scope (platform, org, workspace, persona, user). | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only states it's a 'list' operation, implying read-only, but does not mention pagination (page, page_size), default values, or that workspace_name is required. No side effects or auth requirements are noted, which is a significant gap for a tool with six parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence, six words) and front-loaded with the core purpose. However, it could be slightly expanded to mention the required workspace parameter without becoming verbose. Still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too minimal for a tool with six parameters and an output schema. It does not mention that workspace_name is required, how filters affect results, or what the output contains. While output schema exists, the description should still provide high-level context about usage scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning to the parameters; it does not mention any parameter names or how they affect results. Thus it provides no extra value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List chat commands (slash-command instructions)' clearly identifies the verb (List) and resource (chat commands) and provides additional context that these are slash commands. This differentiates it from sibling tools like create_chat_command or get_chat_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_chat_command (for a specific command) or create_chat_command. The description does not mention required workspace context or filtering capabilities, leaving the agent to infer usage from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chat_rulesB
List chat rules (workspace chat rules).
Uses AgentFarm internal API; may require network access.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). | |
| scope_id | No | Filter by scope ID (e.g. workspace name, or None for platform). | |
| is_active | No | Filter by active status. | |
| page_size | No | Items per page (1-200). | |
| scope_type | No | Filter by scope (platform, org, workspace, persona, user). | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions 'Uses AgentFarm internal API; may require network access' but does not cover pagination, rate limits, or confirm read-only nature. The 'List' verb implies read-only but is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no fluff. Every sentence provides information: the action and a technical detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and an output schema, the description could provide more context on typical usage, such as how pagination works or the relationship between workspace_name and scope_id. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all parameters. The tool description adds minimal extra meaning beyond the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List chat rules' with a specific resource, and adds 'workspace chat rules' to differentiate from other chat-related tools. However, it does not explicitly distinguish from sibling tools like list_chat_commands.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_chat_rule or create_chat_rule. It does not mention filtering options or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that all catalog data is bundled offline (no external access needed). It also mentions associated skills. Implicitly a read-only list operation, so no destructive behavior is expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two paragraphs: first concise purpose, second detailed workflow. Every sentence adds value. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0 parameters and an output schema, the description fully explains the tool's purpose, prerequisites, and post-usage steps. It covers the workflow context without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0 parameters (100% coverage by default). Description adds meaning by explaining the output content and how to use the results, justifying a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists supported generation-rule platforms and default render settings. It uses a specific verb ('List') and resource, and distinguishes itself from siblings by being a prerequisite to 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool: before render_codecollection_skill when user hasn't confirmed scope. Provides detailed next steps (ask user, then use list_indexed_resource_types). No alternatives mentioned but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50). Increase for broad searches. | |
| search | No | Optional substring filter (e.g. 'deployment', 'azure_keyvault'). | |
| platform | Yes | Indexer platform: runwhen, kubernetes, azure, aws, or gcp. Must match render_codecollection_skill platform. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description explicitly states 'Fully offline — reads bundled catalogs' and lists skills, covering key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with bullet points for constraints, front-loaded purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, output schema exists, and description covers offline, constraints, and skills, it is complete for this search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds extra context: platform must match another tool, gives search examples, clarifies limit default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Search bundled indexer catalogs for valid generation-rule resourceTypes' with clear verb and resource, and the offline nature distinguishes it from networked tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit constraints for search length and Kubernetes syntax, but does not mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max articles to return (max 200). | |
| search | No | Search within article content. | |
| status | No | Filter by status — 'active' or 'deprecated'. Returns all if omitted. | |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 that the tool lists articles and returns structured JSON, and mentions the Knowledge Overlay Graph. However, it does not explicitly state read-only behavior or potential side effects, though the context implies it is a safe read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the core purpose. Each sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the comprehensive parameter documentation, the description adequately covers the tool's purpose, usage context, and differentiation from sibling tools. No additional detail is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds value by explaining the broader context (e.g., articles feed the Knowledge Overlay Graph) and the distinction from workspace_chat, which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Knowledge Base articles in a workspace and returns structured JSON. It distinguishes from sibling tools like workspace_chat by specifying this is for programmatic KB management, not semantic search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance: use this tool for programmatic management and filtering, and prefer workspace_chat for semantic questions. The note provides clear when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the return format and usage context (read-only listing), though it does not explicitly state non-destructive behavior. Still, it is transparent about being a listing operation with no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three paragraphs, but each sentence adds value. Could be slightly shortened, but the cross-vendor note is useful. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description is complete. It explains what it returns, when to use, and how it relates to other tools and resources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is 100%. The description does not add parameter info because there are none. Baseline 4 is appropriate as there is nothing to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every progressive-disclosure skill the server exposes, with a specific verb and resource. It distinguishes from sibling list_ tools by focusing on skills, and even differentiates from 'list_resources' for the same data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: before running a tool to check guidance. Provides alternatives: use get_skill or resource read. Includes cross-vendor note advising clients to prefer list_resources for MCP resource surfaces, making this the fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesA
List all workspaces you have access to.
Returns workspace names, display names, and basic metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds some value by mentioning return of 'workspace names, display names, and basic metadata.' However, it does not disclose potential side effects, authentication requirements, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the primary purpose. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema (not shown but exists), and minimal complexity, the description adequately covers the tool's behavior for an agent to select and use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List all workspaces you have access to,' which is a specific verb+resource. It distinguishes from siblings which deal with other entities like assistants, commands, or issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While it's intuitive to use for listing workspaces, no exclusions or comparisons to similar tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | 'logs-bulk', 'config', or 'logs-stacktrace'. | logs-bulk |
| tags | No | Resource tags ({name, value} dicts). | |
| alias | Yes | Human-readable SLX display name. | |
| access | No | 'read-write' or 'read-only'. | read-write |
| owners | No | Owner emails for the review file (defaults to current user). | |
| script | No | The full script source code (not base64). | |
| env_vars | No | Environment variables baked into the TaskSet config. | |
| platform | No | 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. | runwhen |
| base_name | No | Short SLX suffix in generation rule (<15 chars). Default: bundle_name. | |
| hierarchy | No | Tag names for hierarchical grouping. | |
| image_url | No | Icon URL for the SLX. | |
| statement | Yes | SLX statement describing what should be true. | |
| output_dir | No | Write rendered files to this directory (stdio mode). When omitted, files are returned in the tool response only. | |
| sli_script | No | Optional separate SLI script (defaults to main script if include_sli). | |
| task_title | No | Human-readable task title (static literal). | |
| bundle_name | Yes | Codebundle directory name (kebab-case, e.g. 'azure-function-cold-start'). | |
| include_sli | No | Also emit an SLI template (tool-builder SLI). | |
| interpreter | No | 'python' or 'bash'. | python |
| match_rules | No | Match predicates forwarded into the generation rule YAML. | |
| script_path | No | Local file path for script. **stdio mode only.** | |
| secret_vars | No | Secret name → workspace secret key mappings. | |
| runtime_vars | No | Per-run runtime variables (task-only). | |
| resource_path | No | Resource path for search indexing. | |
| script_base64 | No | UTF-8 script as standard base64. | |
| resource_types | No | Resource types for the generation rule (default: ['workspace']). | |
| slx_qualifiers | No | SLX name qualifiers (default: ['workspace']). | |
| workspace_name | Yes | Workspace used during tool-builder testing (provenance in review file). | |
| sli_interpreter | No | Interpreter for SLI script. | |
| source_slx_name | No | Original inline SLX short name (provenance in review file). | |
| timeout_seconds | No | Task timeout passed to tool-builder runbook. | |
| script_base64_path | No | Local path to base64-encoded script file. **stdio mode only.** | |
| script_gzip_base64 | No | UTF-8 script as base64(gzip(...)). | |
| generic_runtime_ref | No | Git ref for rw-generic-codecollection pinned in templates. | main |
| sli_interval_seconds | No | SLI interval when include_sli is true. | |
| generic_runtime_repo_url | No | Override rw-generic-codecollection repo URL in templates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It details what the tool emits (standard codecollection layout, .runwhen files), explains that it renders locally or returns inline, and specifies the default generation rule and platform options. It also explicitly negates side effects (no push/mutation). However, it does not mention error behavior or performance characteristics, which slightly reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (multiple paragraphs) and includes many details about specific files, skills, and defaults. While every sentence adds value, the length could be overwhelming. The main purpose is front-loaded, but the density of information makes it less concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (35 parameters, 4 required, has output schema), the description is remarkably complete. It covers output format, directory handling, platform choices, references to sibling tools like list_discovery_platforms, and the overall workflow. With an existing output schema, return values are already documented, so the description meets completeness needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 35 parameters have descriptions in the schema. The tool description adds some contextual meaning (e.g., platform parameter advises calling list_discovery_platforms, script parameters explain base64 options), but overall it does not significantly deepen understanding beyond the schema defaults and descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: 'Render a tested tool-builder task as a private Custom Discovery CodeCollection.' It uses a specific verb ('render') and a specific resource ('CodeCollection'), and distinguishes itself from sibling tools by focusing on this rendering task rather than listing workspaces, chat, or other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool: it renders a tested tool-builder task. It mentions related skills (commit-to-codecollection, build-runwhen-task) and clearly states what the tool does not do: 'This tool does not push to git or mutate the workspace.' It also advises calling list_discovery_platforms() before choosing a platform, giving the agent a clear workflow step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_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.
| Name | Required | Description | Default |
|---|---|---|---|
| script | No | The full script source code (raw text). | |
| env_vars | No | Environment variables (e.g. {'NAMESPACE': 'default'}). | |
| location | No | Runner location (use get_workspace_locations). | |
| run_type | No | 'task' or 'sli'. | task |
| interpreter | No | 'bash' or 'python'. | bash |
| script_path | No | Local file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params. | |
| secret_vars | No | Secret mappings (e.g. {'kubeconfig': 'kubeconfig'}). | |
| script_base64 | No | UTF-8 script as standard base64. Prefer over inline 'script' when JSON-escaping multiline content is error-prone. | |
| workspace_name | Yes | The workspace to run in (e.g. 't-oncall'). | |
| script_base64_path | No | Local file path to a file containing the base64-encoded script. **stdio mode only.** | |
| script_gzip_base64 | No | UTF-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 that the tool returns a run ID, sends the script to a runner, and requires compliance with the RunWhen contract. It also explains encoding trade-offs and the need for a valid workspace. It does not mention potential side effects or rate limits, but for a script execution tool, the behavioral context is largely adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with purpose, then output, then contract details, then parameter selection guidance, ending with a validation tip. It is slightly long but every sentence adds necessary information. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, 1 required, with encoding variants and script contracts) and the availability of an output schema, the description is thorough. It covers the script contract in detail, explains when to use each encoding, and suggests a prerequisite step (validate_script). No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds significant value by explaining the script contract (Python vs Bash, task vs SLI), encoding recommendations (script_gzip_base64 for >5KB), and the mutual exclusivity of script_* parameters. This goes beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a script for testing on a RunWhen runner, directly distinguishing it from similar tools like run_script_and_wait (which blocks) and validate_script (which only checks compliance). The verb-resource-action is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: it recommends using validate_script first and explains how to monitor execution with get_run_status/get_run_output. However, it does not explicitly contrast with run_script_and_wait or list conditions where one should prefer this tool over siblings, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_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.
| Name | Required | Description | Default |
|---|---|---|---|
| script | No | The full script source code (raw text). | |
| env_vars | No | Environment variables for the script. | |
| location | No | Runner location (use get_workspace_locations). | |
| run_type | No | 'task' or 'sli'. | task |
| interpreter | No | 'bash' or 'python'. | bash |
| script_path | No | Local file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params. | |
| secret_vars | No | Secret mappings (env var name to workspace secret key). | |
| script_base64 | No | UTF-8 script as standard base64. Prefer over inline 'script' when JSON-escaping multiline content is error-prone. | |
| workspace_name | Yes | The workspace to run in (e.g. 't-oncall'). | |
| script_base64_path | No | Local file path to a file containing the base64-encoded script. **stdio mode only.** | |
| script_gzip_base64 | No | UTF-8 script as base64(gzip(...)). Best inline option for scripts >5KB — 3-5x denser than 'script_base64'. | |
| runtime_var_overrides | No | Per-run override values for script variables (name → value). Merged into envVars at test time. Overrides win on name collision. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations exist, the description thoroughly discloses behavioral aspects: it polls until completion, returns full output, explains the script contract requirements, warns about the Bash 'main "$@"' pitfall, details secret_vars behavior (value is a file path, not the secret itself), and specifies the mutual exclusivity of script parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence is informative. It is well-structured: starts with purpose, then contract, then parameter guidance, then warnings. Slightly verbose but justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, a required workspace_name, and an output schema (not detailed in description), the description is remarkably complete. It covers script contract, parameter selection, environment variables, secrets, runtime overrides, and location. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds critical meaning beyond the schema: it clarifies the mutual exclusivity of script parameters, recommends script_gzip_base64 for large scripts, explains that secret_vars values are file paths, and describes runtime_var_overrides merging with env_vars. This adds significant value for proper usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute a script and wait for results (combines run + poll + output).' It explicitly distinguishes from sibling tools run_script, get_run_status, and get_run_output by saying 'Use this instead of calling ... separately.' The verb 'execute' and resource 'script' are specific, and the scope 'wait for results' is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use this tool: as a convenience wrapper over the separate run-poll-output steps. It also gives alternatives (the individual calls) and provides important prerequisites: the script must follow the RunWhen contract with specific return types for Python/Bash tasks and SLIs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_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.
| Name | Required | Description | Default |
|---|---|---|---|
| slx_name | Yes | The SLX short name (e.g. 'k8s-pod-health'). | |
| task_titles | No | Tasks to run: '*' for all, or '||'-separated titles. | * |
| workspace_name | Yes | The workspace (e.g. 't-oncall'). | |
| runtime_var_overrides | No | Per-run override values for runtime variables (name → value). Passed through to the runner at execution time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the execution flow (creates RunSession, polls, returns results) and default behavior for task_titles. No annotations are provided, so the description carries the full burden; it is fairly comprehensive but could mention any required permissions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections but slightly wordy; all sentences provide value and are front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full parameter descriptions and the existence of an output schema (context signals), the description covers usage, behavior, and return results, making it sufficiently complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds meaningful context beyond the schema: examples for slx_name and workspace_name, explicit default and format for task_titles, and explanation for runtime_var_overrides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs an existing SLX's runbook tasks, distinguishing it from ad-hoc script tools (run_script/run_script_and_wait) and the search-only workspace_chat tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (health checks, troubleshooting existing SLX) and when-not-to-use (ad-hoc scripts), including direct references to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Comma-separated support tags (e.g. 'GKE,KUBERNETES'). | |
| search | Yes | Free-text search (e.g. 'kubernetes pod health', 'postgres backup'). | |
| platform | No | Filter by platform (e.g. 'Kubernetes', 'GCP', 'AWS'). | |
| max_results | No | Max results to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses the return content (tasks, SLIs, env vars, deployment metadata) and implies no side effects (search is read-only). No contradictions. Could mention pagination or rate limits but is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, each contributing purpose, skill link, usage guidance, and return information. No fluff, well-structured, and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with an existing output schema, the description adequately covers purpose, usage context, and return content. It could add search syntax tips but is largely complete given the tool's straightforward nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the return shape but does not enhance parameter understanding beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches a registry for reusable automation, specifying the resource (CodeBundle Registry) and action (search). It distinguishes from siblings like deploy_registry_codebundle and get_registry_codebundle by focusing on finding codebundles rather than deploying or retrieving specific ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool before writing custom scripts, indicating a workflow 'search → deploy'. While it doesn't compare to alternative search tools like search_workspace, the usage guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string. | |
| workspace_name | Yes | The workspace to search (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It mentions 'autocomplete' and 'lightweight fallback', implying limited results, but does not detail behavior like case sensitivity, fuzzy matching, or result limits. The output schema likely covers return format, so details are partially provided. Slight gap in behavioral specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff. The purpose is stated first, followed by the usage guideline. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available and only 2 parameters, the description is largely complete. It differentiates from similar tools and provides usage context. Minor omission: no mention of pagination or result limits, but acceptable for a lightweight autocomplete tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters with descriptions (100% coverage). The description adds no parameter-specific details beyond the schema, only context about what is searched. Baseline 3 is appropriate as the schema already provides meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for tasks, resources, and configuration using autocomplete. It differentiates from the sibling workspace_chat, which uses semantic search for richer results. The verb 'search' and resource 'workspace' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (lightweight autocomplete fallback) and when not to (prefer workspace_chat for most queries). Provides a clear alternative and context, meeting the highest standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_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.
| Name | Required | Description | Default |
|---|---|---|---|
| avatar_url | No | New avatar image URL. | |
| run_config | No | Replace the run configuration. | |
| description | No | New description. | |
| display_name | No | New display name. | |
| filter_scope | No | New scope filter. | |
| assistant_name | Yes | Assistant short name to update (e.g. 'azure-devops'). Workspace prefix optional. | |
| search_filters | No | Replace the vector-search filters. | |
| workspace_name | Yes | The workspace the assistant belongs to. | |
| filter_stop_words | No | Replace the stop-words list. | |
| run_confidence_threshold | No | New run confidence threshold (0-1). | |
| filter_codebundle_task_tags | No | Replace the task-tag filter list. | |
| filter_confidence_threshold | No | New filter confidence threshold (0-1). | |
| filter_issue_selection_strategy | No | New issue selection strategy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the partial update behavior (fetch, merge, write) but lacks details on permissions, error handling, or side effects. With no annotations, the description carries the full burden and is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second explains mechanism and suggests alternative. No redundant information, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: purpose, partial update mechanism, and when to use vs create. Has output schema so return values are covered. Sibling tools are many, but differentiation from create_assistant is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are described in the input schema (100% coverage). The description adds general context about partial updates but does not provide per-parameter meaning beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Partially update an existing AI assistant (persona)' with a specific verb and resource. It distinguishes from the sibling tool 'create_assistant' by explaining when to use this tool instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this instead of create_assistant when you only want to change a few settings without resetting the rest,' providing clear when-to-use and alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New command name. | |
| max_runs | No | Replace the run budget (must be >= 1 when scheduling). | |
| scope_id | No | New scope ID. | |
| is_active | No | Set active/inactive. | |
| command_id | Yes | The command ID to update. | |
| scope_type | No | New scope type. | |
| description | No | New description. | |
| run_as_user | No | Replace the run-as user email. | |
| sink_configs | No | Replace delivery targets for scheduled runs. | |
| cron_schedule | No | New cron expression, or empty string to clear scheduling. | |
| assistant_name | No | Replace the persona for scheduled runs (workspace prefix optional). | |
| clear_max_runs | No | When true, remove the run budget cap (unlimited scheduled runs). | |
| workspace_name | Yes | The workspace the command belongs to (e.g. 't-oncall'). | |
| command_content | No | New markdown content. | |
| schedule_paused | No | Pause or resume the cron schedule. | |
| reset_runs_completed | No | When true, reset runs_completed to 0 (e.g. after raising max_runs). | |
| auto_approve_readonly | No | Toggle auto-approve for read-only tasks on scheduled runs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 partial-update behavior and a critical workaround for clearing max_runs via clear_max_runs=True, explaining that MCP cannot send bare null. This adds valuable behavioral insight beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three sentences. The first sentence states purpose, the second explains partial-update, the third addresses a key behavioral nuance. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 17 parameters and no annotations, the description covers the essential update semantics and a specific workaround. An output schema exists, so return value documentation is not required. It could highlight required parameters but is generally complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds overall semantics and a note about clear_max_runs, but doesn't detail individual parameters since the schema already does. It provides context without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update an existing chat command by ID', specifying the verb (update) and resource (chat command). It distinguishes from sibling tools like create_chat_command and list_chat_commands by focusing on modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool, emphasizing partial-update semantics ('Omitted fields are left unchanged'). It doesn't explicitly exclude alternatives or provide when-not scenarios, but the purpose is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_chat_ruleB
Update an existing chat rule by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New rule name. | |
| rule_id | Yes | The rule ID to update. | |
| scope_id | No | New scope ID. | |
| is_active | No | Set active/inactive. | |
| scope_type | No | New scope type. | |
| rule_content | No | New markdown content. | |
| workspace_name | Yes | The workspace the rule belongs to (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Update', giving no detail on mutation effects, partial updates, error handling, or permissions. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with one sentence, front-loaded with the key action. However, it borders on being too sparse, which slightly reduces effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an existing output schema, the description omits behavioral context (success/failure behavior, side effects) and does not compensate for missing annotations. For a 7-parameter update tool, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no parameter-level details; its sole sentence does not augment the schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Update' and the resource 'existing chat rule by ID', distinguishing it from create/delete/list operations. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like create_chat_rule or delete_chat_rule. No prerequisites, exclusions, or contextual hints are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_knowledge_base_articleA
Update an existing Knowledge Base article.
Only provided fields are updated; omitted fields remain unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Updated human-readable article title (max 255 chars). Title is the primary field for title-weighted KB search and the global-note catalog. | |
| status | No | Set to 'active' or 'deprecated'. | |
| content | No | Updated article content (max 20000 chars). | |
| note_id | Yes | The UUID of the KB article to update. | |
| verified | No | Mark as human-verified (true/false). | |
| resource_paths | No | Updated resource paths. | |
| workspace_name | Yes | The workspace (e.g. 't-oncall'). | |
| abstract_entities | No | Updated entity tokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It adds the important partial-update behavior, but does not mention error handling, permissions, return values, or what happens if the note_id does not exist. The partial-update note is valuable, but the description remains thin for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states purpose, and the second explains the partial-update behavior. No fluff, front-loaded, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is thorough and an output schema exists, which covers return values. However, the description omits context such as whether the note_id must exist, whether workspace_name is used for authorization, or any constraints like validation. For a mutation tool with no annotations, the description covers the core behavior but lacks some completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter descriptions, so the baseline is 3. The description adds meaningful semantics by clarifying that omitted fields remain unchanged, which is a critical behavior for all optional parameters. This supplements the schema's default-null representation with a clear partial-update model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Update an existing Knowledge Base article') with a specific verb and resource. It distinguishes from siblings like create_knowledge_base_article and delete_knowledge_base_article, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (updating an existing article) and adds the key usage guideline that only provided fields are updated while omitted fields remain unchanged. It does not explicitly mention alternatives (e.g., create/delete) but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_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).
| Name | Required | Description | Default |
|---|---|---|---|
| script | No | The full script source code (raw text). | |
| task_type | No | 'task' (returns issues) or 'sli' (returns 0-1 metric). | task |
| interpreter | No | 'bash' or 'python'. | bash |
| script_path | No | Local file path to read the script from. **stdio mode only.** Mutually exclusive with the other script_* params. | |
| script_base64 | No | UTF-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_path | No | Local 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_base64 | No | UTF-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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the validation checks (structure, output format, env vars) and required issue keys, but does not disclose potential error behavior, side effects, or prerequisites. With no annotations, the description carries the burden but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, validation details, output format, and a helpful table. Every sentence provides essential information without redundancy. It is appropriately sized for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers input variants thoroughly, explains output format for task-type scripts, and references a skill for the full authoring workflow. It is complete for a validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter matrix adds significant value beyond the input schema by grouping parameters into variants, explaining best use cases, mode restrictions, and encoding instructions (e.g., for gzip_base64). This enriches understanding of parameter selection and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Validate a script against the RunWhen contract before running it,' specifying the verb 'validate' and the resource 'script against RunWhen contract.' It distinguishes itself from sibling tools like run_script by focusing on validation before execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a detailed parameter matrix with 'best for' and 'mode' columns, guiding selection based on script size and context. It also explains the required output format for task scripts. However, it does not explicitly compare when to use this tool versus alternatives like run_script.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_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).
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Your question or request about the workspace infrastructure. | |
| session_id | No | Optional session ID to continue a previous conversation. | |
| persona_name | No | AI persona to use (default: 'default'). | default |
| workspace_name | Yes | The workspace to query (e.g. 't-oncall'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, description discloses behavior: sends message to AI agent, uses keyword/semantic/fuzzy search, correlates data, returns rich markdown reports. Also describes return fields (JSON with message, sessionId, etc.). Lacks explicit mention of side effects or rate limits, but overall thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured paragraphs: purpose, functionality with usage guidance, and return format. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations but presence of output schema, description adequately covers purpose, usage, behavior, and return values. Provides enough information for an agent to decide when and how to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with descriptions (coverage 100%). Description does not add additional parameter details beyond schema; however, it provides context on the tool's behavior and returns, which indirectly helps. Baseline applicable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool asks the RunWhen AI assistant about infrastructure, positioning it as the primary investigation tool. It distinguishes itself from sibling tools by stating it produces better answers through cross-correlation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises preference over direct read/query tools and provides concrete examples (e.g., 'issues related to neo4j'). Also lists specific cases for using direct tools instead (executing tasks, task authoring, etc.).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.1.4- Changed
create_knowledge_base_article1 field changed- added
Input schema / properties / titleAdded 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." +}
- Changed
update_knowledge_base_article1 field changed- added
Input schema / properties / titleAdded 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." +}
3 tool updates
v0.1.3- Added
list_discovery_platforms - Added
list_indexed_resource_types - Changed
render_codecollection_skill1 field changed- changed
Input schema / properties / platform / descriptionPrevious 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."
2 tool updates
v0.1.1- Changed
delete_slx2 fields changed- removed
Input schema / properties / branchRemoved value: -{ - "default": "main", - "description": "Git branch to delete from.", - "type": "string" -} - removed
Input schema / properties / commit_messageRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Custom commit message." -}
- Added
render_codecollection_skill
44 tool updates
v0.1.0- First observed
commit_slx - First observed
create_assistant - First observed
create_chat_command - First observed
create_chat_rule - First observed
create_knowledge_base_article - First observed
delete_assistant - First observed
delete_knowledge_base_article - First observed
delete_slx - First observed
deploy_registry_codebundle - First observed
get_assistant - First observed
get_chat_command - First observed
get_chat_rule - First observed
get_issue_details - First observed
get_knowledge_base_article - First observed
get_registry_codebundle - First observed
get_run_output - First observed
get_run_sessions - First observed
get_run_status - First observed
get_skill - First observed
get_slx_runbook - First observed
get_workspace_chat_config - First observed
get_workspace_config_index - First observed
get_workspace_context - First observed
get_workspace_issues - First observed
get_workspace_locations - First observed
get_workspace_secrets - First observed
get_workspace_slxs - First observed
list_assistants - First observed
list_chat_commands - First observed
list_chat_rules - First observed
list_knowledge_base_articles - First observed
list_skills - First observed
list_workspaces - First observed
run_script - First observed
run_script_and_wait - First observed
run_slx - First observed
search_registry - First observed
search_workspace - First observed
update_assistant - First observed
update_chat_command - First observed
update_chat_rule - First observed
update_knowledge_base_article - First observed
validate_script - First observed
workspace_chat
TDQS
Most tools have distinct purposes with detailed descriptions, but there is overlap between run_script and run_script_and_wait, and many read tools are explicitly secondary to workspace_chat, which could cause confusion about which to use.
Naming follows a mostly consistent verb_noun pattern in snake_case, with minor deviations like 'run_script_and_wait' and verbose names like 'render_codecollection_skill'. Overall predictable.
45 tools is well above the typical well-scoped range. While the platform is broad, several tools are convenience wrappers (run_script_and_wait) or redundant, making the surface feel overly large.
The tool surface covers most lifecycle needs for SLXs, assistants, chat, knowledge, registry, and execution. Minor gaps like batch operations or explicit SLX update are manageable.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides 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.1511Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Databricks workspaces, running SQL queries, managing jobs, and exploring schemas via the Model Context Protocol.1GPL 3.0
- FlicenseNot gradedqualityDmaintenanceEnables AI coding agents to interact with Redmine projects, issues, time tracking, and members through natural language via the Model Context Protocol.-
- FlicenseBqualityDmaintenanceMCP server for IBM Watson Orchestrate (WXO). Manage tools, agents, connections, flows, and execute tools from Cursor, VS Code Copilot, Claude Desktop, Antigravity, Windsurf, or the WxO Builder extension.35-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/runwhen-contrib/runwhen-platform-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server