Skip to main content
Glama
Coalesce-Software-Inc

coalesce-transform-mcp

Official

coalesce-transform-mcp

npm version Install in VS Code Install in VS Code Insiders Install in Cursor License: MIT

MCP server for Coalesce. Built for Snowflake Cortex Code (CoCo) - with first-class support for every other MCP client (Claude Code, Claude Desktop, Cursor, VS Code, Windsurf). Manage nodes, pipelines, environments, jobs, and runs, and drive the local-first Coalesce CLI from the same server: validate a project, preview DDL/DML, plan a deployment, and apply it to a cloud environment.


I want to…

Task

Jump to

πŸš€

Get running in 2 minutes

Quick Start

πŸŽ›οΈ

Customize agent behavior

Skills

πŸ”

Find a specific tool

Tools

πŸ“¦

Walk through the full setup

Full Installation

πŸ”‘

Authenticate (env var or ~/.coa/config)

Credentials

🌐

Run against multiple Coalesce environments

Multiple environments

πŸ“₯

Scaffold source nodes from warehouse tables

Tools β†’ warehouse source discovery

πŸ”’

Lock prod down to read-only

Safety model


Related MCP server: bricks-use

Quick Start

Each link below opens a short install guide with a click-to-install button (where supported) and the manual config.

TIP

❄️ Snowflake Cortex Code + coalesce-transform-mcp. CoCo is Snowflake's AI coding CLI - it already knows your warehouse, role, and data. Drop this MCP in and an agent can plan pipelines, create nodes, run DML, and verify results in a single session, all under Snowflake's auth model. Install in Cortex Code β†’

Why this pairing? Cortex Code is Snowflake's AI coding CLI - it already authenticates to your warehouse, runs under your Snowflake role, and has native tools for querying live data. Add coalesce-transform-mcp and a single agent session can plan pipelines, create nodes, run DML, and verify results against real rows without leaving the terminal.

One-liner (after installing the Cortex Code CLI):

cortex mcp add coalesce-transform npx coalesce-transform-mcp

Or edit ~/.snowflake/cortex/mcp.json directly:

{
  "mcpServers": {
    "coalesce-transform": {
      "type": "stdio",
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Drop the env block if you're using ~/.coa/config - Cortex Code and Coalesce can both pick the token up from the same profile. Full walkthrough: docs/installation-guides/cortex-code.md.

Click-to-install: Install in Cursor

Manual: paste into .cursor/mcp.json in your project root (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "coalesce-transform": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Cursor does not expand ${VAR} - paste the literal token, or drop the env block and use ~/.coa/config (see Credentials).

Click-to-install: Install in VS Code

Manual: follow the VS Code MCP install guide and use this config:

{
  "name": "coalesce-transform",
  "command": "npx",
  "args": ["coalesce-transform-mcp"]
}

Add the COALESCE_ACCESS_TOKEN via VS Code's secret input prompt, or drop the token and use ~/.coa/config. Reload the VS Code window after install.

Click-to-install: Install in VS Code Insiders

Manual: identical to the stable VS Code install - Insiders reads the same MCP config.

One-liner:

claude mcp add coalesce-transform -- npx coalesce-transform-mcp

Pass env vars inline if you need them:

claude mcp add coalesce-transform \
  --env COALESCE_ACCESS_TOKEN=$COALESCE_ACCESS_TOKEN \
  -- npx coalesce-transform-mcp

Manual: paste into .mcp.json in your project root (or ~/.claude.json for global):

{
  "mcpServers": {
    "coalesce-transform": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_ACCESS_TOKEN": "${COALESCE_ACCESS_TOKEN}"
      }
    }
  }
}

Claude Code does expand ${VAR} from your shell env at load time - .mcp.json can stay safely committed to git with variable references. Omit the env block if using ~/.coa/config.

No deeplink yet - paste manually.

File: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).

{
  "mcpServers": {
    "coalesce-transform": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Claude Desktop does not expand ${VAR} - paste the literal token, or drop the env block and use ~/.coa/config. Fully quit Claude Desktop (Cmd+Q) and relaunch after editing.

No deeplink yet - paste manually.

File: ~/.codeium/windsurf/mcp_config.json.

{
  "mcpServers": {
    "coalesce-transform": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Windsurf does not expand ${VAR} - paste the literal token, or drop the env block and use ~/.coa/config. Restart Windsurf after editing.

TIP

πŸš€ Just installed?

Just say "help me get set up" β€” or run /coalesce-setup. Your agent will check your credentials and project setup, then walk you through fixing whatever's missing.


Skills

Skills are editable markdown that shapes how the agent reasons about your Coalesce project. Ship your team's naming conventions, grain definitions, and layering patterns as context - every agent on the server instantly picks them up. No fine-tuning, no prompt engineering, just markdown you edit and commit.

Set COALESCE_MCP_SKILLS_DIR to make skills editable on disk. Each skill resolves to default content, user-augmented content, or a full user override - see docs/context-skills.md for the resolution order and customization walkthrough.

25 skills, grouped into 6 families:

  • overview - General Coalesce concepts, response guidelines, and operational constraints

  • tool-usage - Best practices for tool batching, parallelization, and SQL conversion

  • id-discovery - Resolving project, workspace, environment, job, run, node, and org IDs

  • storage-mappings - Storage location concepts, {{ ref() }} syntax, and reference patterns

  • ecosystem-boundaries - Scope of this MCP vs adjacent data-engineering MCPs (Snowflake, Fivetran, dbt, Catalog)

  • data-engineering-principles - Node type selection, layered architecture, methodology detection, materialization strategies

  • sql-platform-selection - Determining the active SQL platform from project metadata

  • setup-guide - First-time MCP setup flow driven by diagnose_setup (pairs with the /coalesce-setup prompt)

  • sql-snowflake - Snowflake-specific SQL conventions for node SQL

  • sql-databricks - Databricks-specific SQL conventions for node SQL

  • sql-bigquery - BigQuery-specific SQL conventions for node SQL

  • node-creation-decision-tree - Choosing between predecessor-based creation, updates, and full replacements

  • node-payloads - Working with workspace node bodies, metadata, config, and array-replacement risks

  • hydrated-metadata - Coalesce hydrated metadata structures for advanced node payload editing

  • intelligent-node-configuration - How intelligent config completion works, schema resolution, automatic field detection

  • node-operations - Editing existing nodes: joins, columns, config fields, and SQL-to-graph conversion

  • aggregation-patterns - JOIN ON generation, GROUP BY detection, and join-to-aggregation conversion

  • node-type-selection-guide - When to use each Coalesce node type (Stage/Work vs Dimension/Fact vs specialized)

  • node-type-corpus - Node type discovery, corpus search, and metadata patterns

  • pipeline-workflows - Building pipelines end-to-end: node type selection, multi-node sequences, execution

  • intent-pipeline-guide - Using build_pipeline_from_intent to create pipelines from natural language

  • pipeline-review-guide - Using review_pipeline for pipeline analysis and optimization

  • pipeline-workshop-guide - Using pipeline workshop tools for iterative, conversational pipeline building

  • run-operations - Starting, retrying, polling, diagnosing, and canceling Coalesce runs

  • run-diagnostics-guide - Using diagnose_run_failure to analyze failed runs and determine fixes


Tools

NOTE

Legend

  • ⚠️ Destructive - the tool needs confirmed: true before it will run.

  • 🧰 Bundled coa CLI - runs locally against a project directory. The tool needs a projectPath pointing at a folder that contains data.yml.

  • Preflight validation - destructive 🧰 tools run a safety check before shelling out. See Safety model.

Environments, workspaces, projects

  • list_environments - List all available environments

  • get_environment - Get details of a specific environment

  • list_workspaces - List all workspaces

  • get_workspace - Get details of a specific workspace

  • list_projects - List all projects

  • get_project - Get project details

Nodes

  • list_environment_nodes - List nodes in an environment

  • list_workspace_nodes - List nodes in a workspace

  • get_environment_node - Get a specific environment node

  • get_workspace_node - Get a specific workspace node

  • analyze_workspace_patterns - Detect package adoption, pipeline layers, methodology, and generate recommendations

  • list_workspace_node_types - List distinct node types observed in current workspace nodes

Jobs, subgraphs, runs

  • list_environment_jobs - List all jobs for an environment

  • find_jobs_by_name - Fuzzy-match environment jobs by name and return each match with its recent runs

  • get_job_run_details_by_name - Fuzzy-match one environment job by name and return its latest run details + results

  • get_environment_job - Get details of a specific job

  • list_job_nodes - Resolve a workspace job's selectors into concrete nodes, grouped by subgraph

  • get_workspace_subgraph - Get details of a specific subgraph by UUID (the public API has no subgraph list endpoint β€” look up UUIDs via the repo's subgraphs/ folder or the local cache populated on create)

  • list_runs - List runs with optional filters

  • get_run - Get details of a specific run

  • get_run_results - Get results of a completed run

  • get_run_details - Run metadata plus results in one call

Search

  • search_workspace_content - Search node SQL, column names, descriptions, and config values

  • audit_documentation_coverage - Scan all workspace nodes/columns for missing descriptions

Local project & cloud CLI

  • 🧰 coa_list_project_nodes - List all nodes defined in a local project (pre-deploy)

Plan & build

  • plan_pipeline - Plan a pipeline from SQL or a natural-language goal without mutating the workspace; ranks best-fit node types from the local repo

  • create_pipeline_from_plan - Execute an approved pipeline plan using predecessor-based creation

  • create_pipeline_from_sql - Plan and create a pipeline directly from SQL

  • build_pipeline_from_intent - Build a pipeline from a natural language goal with automatic entity resolution and node type selection

  • review_pipeline - Analyze an existing pipeline for redundant nodes, missing joins, layer violations, naming issues, and optimization opportunities

  • parse_sql_structure - Parse a SQL statement into structural components (CTEs, source tables, projected columns) without touching the workspace

  • select_pipeline_node_type - Rank and select the best Coalesce node type for a pipeline step

Workshop (iterative, conversational)

  • pipeline_workshop_open - Open an iterative pipeline builder session with workspace context pre-loaded

  • pipeline_workshop_instruct - Send a natural language instruction to modify the current workshop plan

  • get_pipeline_workshop_status - Get the current state of a workshop session

  • pipeline_workshop_close - Close a workshop session and release resources

Local project validation & planning

  • 🧰 coa_validate - Validate YAML schemas and scan a local project for configuration problems

  • 🧰 coa_plan - Generate a deployment plan JSON by diffing a local project against a cloud environment (non-destructive)

Create

  • create_workspace_node_from_scratch - Create a workspace node with no predecessors

  • create_workspace_node_from_predecessor - Create a node from predecessor nodes with column coverage verification

  • create_node_from_external_schema - Create a workspace node whose columns match an existing warehouse table or external schema

Update

  • set_workspace_node - Replace a workspace node with a full body

  • update_workspace_node - Safely update selected fields of a workspace node

  • replace_workspace_node_columns - Replace metadata.columns wholesale

  • delete_workspace_node - Delete a node from a workspace ⚠️

Configure

  • complete_node_configuration - Intelligently complete a node's configuration by analyzing context

  • apply_join_condition - Auto-generate and write a FROM/JOIN/ON clause for a multi-predecessor node

  • convert_join_to_aggregation - Convert a join-style node into an aggregated fact-style node

Disk ↔ cloud round-trip

  • serialize_workspace_node_to_disk_yaml - Convert a cloud workspace node to the on-disk nodes/*.yml shape coa reads (drop into a coa project for dry-run rendering)

  • parse_disk_node_to_workspace_body - Convert an on-disk coa node YAML back into a cloud workspace-node body for set_workspace_node / update_workspace_node

  • apply_sql_to_workspace_node - Round-trip user edits on rendered DDL/DML SQL (coa_dry_run_create / coa_dry_run_run output) back into a cloud node β€” column diff, source-mapping inference, GROUP BY / ORDER BY / LIMIT, INSERT-target rename

Subgraphs & jobs

  • create_workspace_subgraph - Create a subgraph to group nodes visually

  • update_workspace_subgraph - Update a subgraph's name and node membership

  • delete_workspace_subgraph - Delete a subgraph (nodes are NOT deleted) ⚠️

  • create_workspace_job - Create a job in a workspace with node include/exclude selectors

  • update_workspace_job - Update a job's name and node selectors

  • delete_workspace_job - Delete a job ⚠️

  • start_run - Start a new run; requires Snowflake auth

  • run_and_wait - Start a run and poll until completion

  • run_status - Check status of a running job

  • retry_run - Retry a failed run

  • retry_and_wait - Retry a failed run and poll until completion

  • cancel_run - Cancel a running job ⚠️

  • diagnose_run_failure - Classify errors, surface root cause, suggest actionable fixes

  • get_environment_overview - Environment details with full node list

  • get_environment_health - Dashboard: node counts, run statuses, failed runs in last 24h, stale nodes, dependency health

Local execution (bundled CLI)

  • 🧰 coa_dry_run_create - Preview DDL without executing (does not validate columns/types exist in warehouse)

  • 🧰 coa_dry_run_run - Preview DML without executing (same caveat)

  • 🧰 coa_create - Run DDL (CREATE/REPLACE) against the warehouse for selected nodes ⚠️

  • 🧰 coa_run - Run DML (INSERT/MERGE) to populate selected nodes ⚠️

  • 🧰 coa_deploy - Apply a plan JSON to a cloud environment ⚠️

  • 🧰 coa_refresh - Run DML for selected nodes in an already-deployed environment (no local project required) ⚠️

Warehouse source discovery (bundled CLI, new in v0.10)

Pair these three to onboard warehouse tables as source nodes without hand-writing YAML. Typical flow: list to see per-location counts, add (scoped by location) to scaffold, optionally remove to drop nodes when a location is retired. Each add populates the source node's database/schema from the workspace config β€” no placeholder values to fix up afterward.

  • 🧰 coa_list_warehouse_sources - List warehouse tables per storage location; summary or per-table detail (with alreadyExists flags)

  • 🧰 coa_add_warehouse_sources ⚠️ - Scaffold source-node YAML files from warehouse tables; supports dryRun: true for preview

  • 🧰 coa_remove_warehouse_sources ⚠️ - Delete scaffolded source-node YAML; hand-renamed files are skipped

  • get_upstream_nodes - Walk the full upstream dependency graph for a node

  • get_downstream_nodes - Walk the full downstream dependency graph for a node

  • get_column_lineage - Trace a column through the pipeline upstream and downstream

  • analyze_impact - Downstream impact of changing a node or specific column - impacted counts, grouped by depth, and critical path

  • propagate_column_change - Update all downstream columns after a column rename or data type change ⚠️

  • list_repo_packages - List package aliases and enabled node-type coverage from a committed Coalesce repo

  • list_repo_node_types - List exact resolvable committed node-type identifiers from nodeTypes/

  • get_repo_node_type_definition - Resolve one node type and return its outer definition plus parsed nodeMetadataSpec

  • generate_set_workspace_node_template - Generate a YAML-friendly set_workspace_node body template

  • search_node_type_variants - Search the committed node-type corpus by normalized family, package, primitive, or support status

  • get_node_type_variant - Load one exact node-type corpus variant by variant key

  • generate_set_workspace_node_template_from_variant - Generate a template from a committed corpus variant

  • create_environment - Create a new environment within a project

  • delete_environment - Delete an environment ⚠️

  • create_project - Create a new project

  • update_project - Update a project

  • delete_project - Delete a project ⚠️

  • list_git_accounts - List all git accounts

  • get_git_account - Get git account details

  • create_git_account - Create a new git account

  • update_git_account - Update a git account

  • delete_git_account - Delete a git account ⚠️

  • list_org_users - List all organization users

  • get_user_roles - Get roles for a specific user

  • list_user_roles - List all user roles

  • set_org_role - Set organization role for a user

  • set_project_role - Set project role for a user

  • delete_project_role - Remove project role from a user ⚠️

  • set_env_role - Set environment role for a user

  • delete_env_role - Remove environment role from a user ⚠️

Cache snapshots

  • cache_workspace_nodes - Fetch every page of workspace nodes, write a full snapshot, and return cache metadata

  • cache_environment_nodes - Fetch every page of environment nodes, write a full snapshot

  • cache_runs - Fetch every page of run results, write a full snapshot

  • cache_org_users - Fetch every page of organization users, write a full snapshot

  • clear_data_cache - Delete all cached snapshots, auto-cached responses, and plan summaries ⚠️

Skills & setup

  • personalize_skills - Export bundled skill files to a local directory for customization

  • diagnose_setup - Stateless probe reporting configured setup pieces; pairs with the /coalesce-setup MCP prompt

  • 🧰 coa_doctor - Check config, credentials, and warehouse connectivity end-to-end for a local project

  • 🧰 coa_bootstrap_workspaces ⚠️ - Run coa doctor --fix to write a starter workspaces.yml from locations.yml (placeholder values β€” user must edit before running warehouse operations)

  • 🧰 coa_describe - Fetch a section of COA's self-describing documentation by topic + optional subtopic (also available as coalesce://coa/describe/* resources)


Full Installation

Requirements:

  • Node.js 22+

  • A Coalesce account with a workspace

  • An MCP-compatible AI client (see Quick Start)

  • Snowflake credentials - only if you plan to use run tools or coa_create/coa_run (see Credentials)

  • Install footprint is ~76 MB unpacked (the bundled @coalescesoftware/coa CLI ships its own runtime; the MCP tarball itself is under 1 MB)

1. Clone your project. If your team already has a Coalesce project in Git, clone it locally - the bundled coa CLI operates on a project directory, so most local create/run tools require one on disk:

git clone <your-coalesce-project-repo-url>
cd my-project

Don't have a Git-linked project yet? In the Coalesce UI, open your workspace β†’ Settings β†’ Git and connect a repo (or create one via your Git provider and paste the URL). Coalesce will commit the project skeleton on first push; clone that repo locally once it's populated.

my-project/
β”œβ”€β”€ data.yml                 # Root metadata (fileVersion, platformKind)
β”œβ”€β”€ locations.yml            # Storage location manifest
β”œβ”€β”€ nodes/                   # Pipeline nodes (.yml for V1, .sql for V2)
β”œβ”€β”€ nodeTypes/               # Node type definitions with templates
β”œβ”€β”€ environments/            # Environment configs with storage mappings
β”œβ”€β”€ macros/                  # Reusable SQL macros
β”œβ”€β”€ jobs/                    # Job definitions
└── subgraphs/               # Subgraph definitions

V1 vs V2 - the format is pinned by fileVersion in data.yml. V1 (fileVersion: 1 or 2) stores each node as a single YAML file with columns, transforms, and config inline. V2 (fileVersion: 3) is SQL-first: the node body lives in a .sql file using @id / @nodeType annotations and {{ ref() }} references, with YAML retained for config. New projects default to V2; existing V1 projects keep working unchanged.

NOTE

V2 status as of v0.10. V2 is supported. Earlier versions of this MCP required a v2Acknowledged: true flag on coa_create / coa_run / coa_plan because the V2 parser had silent failure modes. COA 7.35 fixed the two biggest (bidirectional config-annotation sync, UNION ALL preservation), so the flag has been removed. Two minor rough edges remain when authoring V2 β€” coa validate false positives on aliased columns, and parse errors rendering to zero-column CREATE TABLE ... AS SELECT WHERE 1=0. The V2_DETECTED preflight warning surfaces both; the coalesce://context/sql-node-v2-policy resource has the full playbook.

Point the MCP at this directory by setting repoPath in ~/.coa/config or COALESCE_REPO_PATH in your env block.

2. Create workspaces.yml. This file is required for coa_create / coa_run and their dry-run variants. It maps each storage location declared in locations.yml to a physical database + schema for local development. It's typically gitignored (per-developer), so cloning the project does not give it to you - you have to create it.

The /coalesce-setup prompt detects a missing workspaces.yml and walks you through it. If you'd rather do it directly, pick one of:

  • Ask your agent to bootstrap it (easiest): prompt the agent to call the coa_bootstrap_workspaces tool (it needs confirmed: true, so the agent will ask before running).

    WARNING

    The generated file contains placeholder values. The bootstrap tool seeds database/schema with defaults that won't match your real warehouse. Ask the agent to open the file with you and replace every placeholder before calling coa_create / coa_run - otherwise the generated DDL/DML will target the wrong (or non-existent) database.

  • Hand-write it. Ask the agent to fetch the authoritative schema via the coa_describe tool (topic: "schema", subtopic: "workspaces") - no top-level wrapper, no fileVersion.

    # workspaces.yml - keys are workspace names; `dev` is the default if --workspace is omitted
    dev:
      connection: snowflake          # required - name of the connection block COA should use
      locations:                     # optional - one entry per storage location name from locations.yml
        SRC_INGEST_TASTY_BITES:
          database: JESSE_DEV        # required
          schema: INGEST_TASTY_BITES # required
        ETL_STAGE:
          database: JESSE_DEV
          schema: ETL_STAGE
        ANALYTICS:
          database: JESSE_DEV
          schema: ANALYTICS

Ask your agent to verify the setup - e.g. "Run coa_doctor on my project and summarize the results." It checks data.yml, workspaces.yml, credentials, and warehouse connectivity end to end.

COA 7.35 (the version bundled with v0.10) also accepts a workspace.yml (note: singular, not the plural workspaces.yml above). It's just a flat locations: map β€” no top-level workspace names, no connection: block β€” and is suitable when you only need local storage mappings and don't need to switch between named workspaces.

# workspace.yml (singular) - per-repo local storage mappings only
locations:
  SRC_INGEST_TASTY_BITES:
    database: JESSE_DEV
    schema: INGEST_TASTY_BITES
  ANALYTICS:
    database: JESSE_DEV
    schema: ANALYTICS

The two files are independent: workspaces.yml (plural) handles multi-workspace cloud profiles, workspace.yml (singular) handles per-repo local mappings. Pick the simpler shape if multi-workspace isn't a need. Fetch the canonical schema via coa_describe (topic: "schema", subtopic: "workspace").

3. Pick an auth path:

Simplest for first-time MCP users. Generate a COALESCE_ACCESS_TOKEN from Coalesce β†’ Deploy β†’ User Settings, then include it in your client config:

{
  "env": {
    "COALESCE_ACCESS_TOKEN": "<YOUR_TOKEN>"
  }
}

Best if you already use the coa CLI - the server reads the same profile file, so nothing to duplicate. Drop the env block entirely:

{
  "command": "npx",
  "args": ["coalesce-transform-mcp"]
}

See Credentials for the profile schema.

When both sources set a field, the env var wins.

4. Install the server via one of the Quick Start paths above.

5. Restart your client, then run the /coalesce-setup prompt to verify everything is wired up.

If you have more than one Coalesce environment to manage, see Multiple environments.

Credentials

The server reads credentials from two sources and merges them with env-wins precedence - a matching env var always overrides the profile value, so you can pin a single field per session without editing the config file. Call diagnose_setup to see which source supplied each value.

Source 1: ~/.coa/config (shared with the coa CLI)

COA stores credentials in a standard INI file. You create it by hand, or let coa write it as you use the CLI. The MCP reads the profile selected by COALESCE_PROFILE (default [default]) and maps the keys below onto their matching env vars.

[default]
token=<your-coalesce-refresh-token>
domain=https://your-org.app.coalescesoftware.io
snowflakeAccount=<your-snowflake-account>   # e.g., abc12345.us-east-1 - required by coa CLI
snowflakeUsername=YOUR_USER
snowflakeRole=YOUR_ROLE
snowflakeWarehouse=YOUR_WAREHOUSE
snowflakeKeyPairKey=/Users/you/.coa/rsa_key.p8
snowflakeAuthType=KeyPair
orgID=<your-org-id>              # optional; fallback for cancel-run
repoPath=/Users/you/path/to/repo # optional; for repo-backed tools
cacheDir=/Users/you/.coa/cache   # optional; per-profile cache isolation

[staging]
# …additional profiles; select with COALESCE_PROFILE

Key mapping - each profile key maps to an env var of the same concept:

Profile key

Env var

token

COALESCE_ACCESS_TOKEN

domain

COALESCE_BASE_URL

snowflake* (all keys)

SNOWFLAKE_* (matching suffix)

orgID

COALESCE_ORG_ID

repoPath

COALESCE_REPO_PATH

cacheDir

COALESCE_CACHE_DIR

Notes:

  • snowflakeAuthType is read by COA itself (no env var) - include it when using key-pair auth.

  • orgID, repoPath, and cacheDir are MCP-specific - the COA CLI ignores them.

  • Only the fields the MCP needs are shown above. COA's config supports many more - run npx @coalescesoftware/coa describe config for the authoritative reference. Unknown keys are ignored.

If ~/.coa/config doesn't exist the server runs env-only - startup never fails on a missing or malformed profile file; it just logs a stderr warning.

Source 2: env vars in your MCP config

Variable

Description

Default

COALESCE_ACCESS_TOKEN

Bearer token from the Coalesce Deploy tab. Optional when ~/.coa/config provides a token.

β€”

COALESCE_PROFILE

Selects which ~/.coa/config profile to load.

default

COALESCE_BASE_URL

Region-specific base URL.

https://app.coalescesoftware.io (US)

COALESCE_ORG_ID

Fallback org ID for cancel-run. Also readable from orgID in the active ~/.coa/config profile.

β€”

COALESCE_REPO_PATH

Local repo root for repo-backed tools and pipeline planning. Also readable from repoPath in the active ~/.coa/config profile.

β€”

COALESCE_CACHE_DIR

Base directory for the local data cache. When set, cache files are written here instead of the working directory. Also readable from cacheDir in the active ~/.coa/config profile.

β€”

COALESCE_MCP_AUTO_CACHE_MAX_BYTES

JSON size threshold before auto-caching to disk.

32768

COALESCE_MCP_INLINE_RESPONSES

Forces large responses inline as text instead of auto-caching them to disk and returning a resource_link (and suppresses per-field cache resource links). The server already auto-enables this for clients known not to support MCP resources (e.g. Snowflake Cortex), which otherwise render the link as unreadable "binary data" and retry in a loop. Set true to force it on for an unrecognised client, or false to disable auto-detection. Leave unset for Claude/Cursor to keep large payloads out of context.

false (auto-enabled for resource-less clients)

COALESCE_MCP_LINEAGE_TTL_MS

In-memory lineage cache TTL in milliseconds.

1800000

COALESCE_MCP_MAX_REQUEST_BODY_BYTES

Max outbound API request body size.

524288

COALESCE_MCP_REQUEST_TIMEOUT_MS

Default per-request timeout for Coalesce API calls. Raise on large workspaces where paginated reads exceed the default.

60000

COALESCE_MCP_DETAIL_FETCH_TIMEOUT_MS

Per-page timeout for detail=true paginated fetches of large node lists.

180000

COALESCE_MCP_NODE_TYPE_RANKING_TIMEOUT_MS

Deadline for the best-effort workspace-adoption node-type ranking lookup inside node creation. Advisory only β€” creation proceeds without a ranking suggestion if this trips.

15000

COALESCE_MCP_INVENTORY_CACHE_TTL_MS

In-memory TTL for the workspace node-type inventory. Set to 0 to disable.

300000

COALESCE_MCP_NODE_INDEX_CACHE_TTL_MS

In-memory TTL for the workspace node-index (id/name/type/location) cache used by SQL- and intent-ref resolution. Set to 0 to disable.

300000

COALESCE_MCP_NODE_DETAIL_CACHE_TTL_MS

In-memory TTL for the workspace node-detail (full body) cache used by review and predecessor lookups. Set to 0 to disable.

300000

COALESCE_MCP_READ_ONLY

When true, hides all write/mutation tools during registration. Only read, list, search, cache, analyze, review, diagnose, and plan tools are exposed.

false

COALESCE_MCP_SKILLS_DIR

Directory for customizable AI skill resources. When set, reads context resources from this directory and seeds defaults on first run. Users can augment or override any skill.

β€”

Snowflake credentials (run tools only)

start_run, retry_run, run_and_wait, retry_and_wait, and the warehouse-touching COA tools (coa_create, coa_run) need Snowflake credentials. These normally come from ~/.coa/config. Override any field via env var:

Variable

Required

Description

SNOWFLAKE_ACCOUNT

Yes

Snowflake account identifier (e.g., abc12345.us-east-1). Required by the local coa CLI and coa doctor; not used by the MCP's REST run path.

SNOWFLAKE_USERNAME

Yes

Snowflake account username

SNOWFLAKE_KEY_PAIR_KEY

No

Path to PEM-encoded private key (required if SNOWFLAKE_PAT not set)

SNOWFLAKE_PAT

No

Snowflake Programmatic Access Token (alternative to key pair)

SNOWFLAKE_KEY_PAIR_PASS

No

Passphrase for encrypted keys

SNOWFLAKE_WAREHOUSE

Yes

Snowflake compute warehouse

SNOWFLAKE_ROLE

Yes

Snowflake user role

"Required" means one of env OR the matching ~/.coa/config field must supply the value. SNOWFLAKE_PAT is env-only - COA's config uses snowflakePassword for Basic auth (a different concept), which this server deliberately doesn't read.

Field-level overrides

{
  "coalesce-transform": {
    "command": "npx",
    "args": ["coalesce-transform-mcp"],
    "env": {
      "COALESCE_PROFILE": "staging",
      "SNOWFLAKE_ROLE": "TRANSFORMER_ADMIN"
    }
  }
}

Reads: "use the [staging] profile, but override its snowflakeRole."

Multiple environments

If you work across several Coalesce environments (dev/staging/prod, or multiple orgs), register the package once per profile under distinct server names:

{
  "mcpServers": {
    "coalesce-prod": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": {
        "COALESCE_PROFILE": "prod",
        "COALESCE_MCP_READ_ONLY": "true"
      }
    },
    "coalesce-dev": {
      "command": "npx",
      "args": ["coalesce-transform-mcp"],
      "env": { "COALESCE_PROFILE": "dev" }
    }
  }
}

Why this pattern:

  • Namespaced tools. The client surfaces coalesce-prod__* vs coalesce-dev__*, so an agent can't accidentally mutate the wrong environment.

  • Per-environment safety. Pair prod with COALESCE_MCP_READ_ONLY=true to hide every write tool on that server while leaving dev fully writable.

  • No per-call profile juggling. Each server is pinned at startup.

Skip this pattern if you only use one environment - a single registration is simpler. For 2–3 environments it's worth the extra config; beyond that, each server is a separate Node process, so consider whether you actually need them all loaded at once.

Safety model

Three layers prevent destructive surprises. See docs/safety-model.md for the full breakdown (tool annotations, read-only mode, explicit confirmation, COA preflight validation).

  • Tool annotations - every tool carries MCP readOnlyHint / destructiveHint / idempotentHint. The ⚠️ marker in Tools marks destructiveHint: true tools.

  • COALESCE_MCP_READ_ONLY=true hides all write/mutation tools at server startup. Use it for audits, agent sandboxes, or pairing with a prod profile.

  • Explicit confirmation on destructive ops - delete_*, propagate_column_change, cancel_run, clear_data_cache, coa_create, coa_run, coa_deploy, coa_refresh all require confirmed: true.

More configuration


Design notes

  • SQL override is disallowed. Nodes are built via YAML/config (columns, transforms, join conditions), not raw SQL. Template generation strips overrideSQLToggle, and write helpers reject overrideSQL fields.

  • Caching. Large responses are auto-cached to disk. Use cache_workspace_nodes and siblings when you want a reusable snapshot. Configure the threshold with COALESCE_MCP_AUTO_CACHE_MAX_BYTES.

  • Repo-backed tools. Set COALESCE_REPO_PATH (or add repoPath= to your ~/.coa/config profile) to your local Coalesce repo root (containing nodeTypes/, nodes/, packages/), or pass repoPath on individual tool calls. The server does not clone repos or install packages.

  • COA CLI versioning. The bundled COA CLI is pinned to an exact alpha version - not a floating @next tag. Every release of this MCP ships with a known-good COA build.

  • COA describe cache. COA describe output is cached under ~/.cache/coalesce-transform-mcp/coa-describe/<coa-version>/ after first access. Cache is version-keyed - upgrading the MCP automatically invalidates stale content.


Resource

πŸ“˜

Coalesce Docs

Product documentation

πŸ”Œ

Coalesce API Docs

REST API reference

🧰

Coalesce CLI (coa)

Bundled CLI docs

πŸ›’

Coalesce Marketplace

Node type packages

πŸ”—

Model Context Protocol

MCP spec & ecosystem


Contributing

Issues and PRs welcome.

License

MIT Β© Coalesce - built on top of the open Model Context Protocol.

Available Tools

115 tools
analyze_impactAnalyze ImpactA
Read-onlyIdempotent

Analyze the downstream impact of changing a node or a specific column.

Args: workspaceID: Workspace to query nodeID: Node to analyze impact for columnID: (optional) Specific column β€” if omitted, analyzes impact of the entire node

Returns: Impacted node count, impacted column count, nodes grouped by depth level, and the critical path (longest dependency chain from source to leaf). Without columnID: shows all downstream nodes and all columns across them that depend on any column of this node. With columnID: shows only nodes/columns that specifically depend on that column.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesNode ID to analyze impact for
columnIDNoOptional column ID β€” if provided, only analyzes impact of that specific column
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
byDepthNo
criticalPathNo
sourceNodeIDNo
impactedNodesNo
sourceColumnIDNo
sourceNodeNameNo
sourceNodeTypeNo
impactedColumnsNo
sourceColumnNameNo
totalImpactedNodesNo
totalImpactedColumnsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds useful behavioral context: 'Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call.' This goes beyond annotations.

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

Conciseness5/5

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

The description is well-structured with an args section and clear bullet-like separation. Each sentence is concise and informative, with no wasted words.

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

Completeness5/5

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

Given the complexity of impact analysis, the description thoroughly covers what the tool does, its parameters, return values (impacted counts, nodes grouped by depth, critical path), and behavioral notes (caching). The presence of an output schema does not detract from the completeness.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant value by explaining the semantic difference between omitting columnID (analyzes impact of entire node) and providing it (only nodes/columns depending on that column). This goes beyond the schema's short descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Analyze the downstream impact of changing a node or a specific column.' It distinguishes between analyzing the whole node vs a specific column, which differentiates it from siblings like get_downstream_nodes.

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

Usage Guidelines4/5

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

The description provides clear context: analyze downstream impact before modifying a node. It explains the difference between using columnID or not. However, it does not explicitly state when not to use it or mention alternative tools like get_downstream_nodes.

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

analyze_workspace_patternsAnalyze Workspace PatternsA
Read-onlyIdempotent

Analyze workspace node patterns to detect package adoption, pipeline layers, data modeling methodology, and generate recommendations.

This performs a whole-workspace scan (summary-level, all nodes) and returns a compact profile. Use it for profiling/overview tasks, NOT for finding a specific node β€” for that use search_workspace_content or get_workspace_node. If you want a reusable local snapshot of full node bodies, use cache_workspace_nodes (an explicit full pull).

Args:

  • workspaceID (string, required): The workspace ID to analyze

Returns: Workspace profile with package adoption, pipeline layers, naming conventions, and recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIDYesThe workspace ID to analyze

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeCountNo
analyzedAtNo
methodologyNo
workspaceIDNo
layerPatternsNo
packageAdoptionNo
recommendationsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so safety is covered. The description adds valuable context: it performs a whole-workspace scan at summary-level and returns a compact profile. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is concise, with a clear opening sentence, a paragraph for usage guidelines, and separated Args/Returns sections. No unnecessary words; every sentence adds value.

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

Completeness5/5

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

Given the tool has only one parameter, rich annotations, and an output schema referenced in the description, the description fully explains the scope (whole-workspace summary scan) and return value (profile with adoption, layers, naming, recommendations). It is complete for its complexity.

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

Parameters3/5

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

Schema coverage is 100% (only workspaceID). The description's Args section repeats the parameter without adding extra meaning, format examples, or constraints. Baseline 3 is appropriate since schema already documents the parameter.

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

Purpose5/5

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

The description clearly states the tool analyzes workspace node patterns to detect package adoption, pipeline layers, data modeling methodology, and generate recommendations. It distinguishes itself from siblings like search_workspace_content and get_workspace_node by specifying it is for profiling/overview tasks, not for finding specific nodes.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool (profiling/overview tasks) and when not to use it (finding a specific node), and provides direct alternatives: search_workspace_content, get_workspace_node, and cache_workspace_nodes. This gives clear guidance.

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

apply_join_conditionApply Join ConditionA
Idempotent

Write a FROM/JOIN/ON clause to a workspace node's sourceMapping.join.joinCondition by analyzing predecessor columns and generating the join automatically.

Use this for multi-predecessor nodes where you need to combine data via JOIN. The tool inspects predecessor columns, finds common column names for ON conditions, and writes the full joinCondition to the node.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID of the multi-predecessor node

  • joinType (enum, optional): 'INNER JOIN' | 'LEFT JOIN' | 'RIGHT JOIN' | 'FULL OUTER JOIN'. Defaults to INNER JOIN

  • whereClause (string, optional): WHERE filter to append after the JOIN (without the WHERE keyword)

  • qualifyClause (string, optional): QUALIFY clause to append (without the QUALIFY keyword)

  • joinColumnOverrides (array, optional): Explicit column mappings when column names differ across predecessors. Each entry: { leftPredecessor, rightPredecessor, leftColumn, rightColumn }

Returns: { nodeID, joinCondition, warning?, validation? }

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID of the multi-predecessor node
joinTypeNoType of JOIN to use between predecessors. Defaults to INNER JOIN.
whereClauseNoOptional WHERE clause to append after the JOIN (without the WHERE keyword).
workspaceIDYesThe workspace ID
qualifyClauseNoOptional QUALIFY clause to append (without the QUALIFY keyword).
joinColumnOverridesNoExplicit column mappings for joins when column names differ across predecessors. Overrides auto-detected common columns for the specified predecessor pair.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate write, idempotent, and non-destructive behavior. The description adds that it writes to sourceMapping.join.joinCondition, inspects columns, and auto-generates conditions. This complements the annotations without contradiction. It could mention overwriting behavior, but overall high transparency.

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

Conciseness5/5

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

The description is well-structured: a purpose sentence, usage guidance, then bullet lists for args and returns. No unnecessary words, each sentence contributes. It is front-loaded with the key action.

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

Completeness5/5

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

Given 6 parameters, a described output object, and annotations, the description covers all aspects: what it does, when to use, inputs, outputs, and behavior. No gaps remain for an agent to misuse the tool.

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

Parameters4/5

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

Schema coverage is 100%, providing baseline 3. The description adds meaning beyond schema: explains purpose of each param, defaults for joinType, and clarifies joinColumnOverrides usage for mismatched column names. This adds significant value.

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

Purpose5/5

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

The description clearly states the tool writes a FROM/JOIN/ON clause to a specific node property by analyzing predecessor columns and generating join conditions automatically. It uses a specific verb and resource, distinguishing it from sibling tools like convert_join_to_aggregation.

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

Usage Guidelines4/5

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

The description explicitly says to use for multi-predecessor nodes needing JOINs, and explains the automatic column matching. It does not mention exclusions or alternatives, but the context is clear and sufficient for selecting this tool.

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

apply_sql_to_workspace_nodeApply SQL Edits to Workspace NodeA

Round-trip a user's edits on a rendered DDL/DML SQL document back to the cloud workspace node it came from. Parses the SQL's column list, diffs it against the node's current metadata.columns[], and updates the node via set_workspace_node (unless dryRun: true). Both DDL and DML inputs feed the same node metadata β€” a DDL edit and a DML edit on the same node update the same metadata.columns[].

Column-level diff (structural changes β€” joins, CTEs, WHERE/GROUP BY, custom expressions on the join itself β€” are NOT reverse-engineered; those live in the node YAML):

  • Removed columns (in YAML, missing in SQL) β†’ dropped

  • Type changes (matching name, different dataType) β†’ updated in place; existing sources / columnReferences / lineage metadata is preserved

  • Renamed columns (DML only β€” same transform, new AS alias) β†’ renamed in place, lineage preserved (column id stays stable so downstream refs keep working). Detection requires unambiguous transform pairing; ambiguous cases fall back to drop+add.

  • Expression-changed columns (DML only β€” same name, edited transform) β†’ sources[].transform is updated and source-mapping inference is re-run to refresh columnReferences if the new transform references different upstream columns.

  • New columns β†’ for DML inputs, source-mapping inference resolves the column's transform against upstream predecessors (alias-prefix match, all-pred name fallback, multi-source COALESCE/GREATEST). For DDL inputs, new columns are added with empty columnReferences[] (DDL doesn't carry transforms); fill them in via the cloud UI.

Block-level diff (DML only β€” single-sourceMapping nodes):

  • WHERE / ON-condition edits β†’ written to sourceMapping[0].join.joinCondition with table refs rewritten to {{ ref('LOC', 'NAME') }} form.

  • Adding or removing a predecessor source via SQL is REJECTED β€” add/remove the predecessor in the cloud UI first, then re-render.

Tail-clause diff (DML only):

  • GROUP BY presence toggle β†’ flips config.groupByAll. Coalesce derives the actual GROUP BY column list from non-aggregate columns at render time.

  • ORDER BY adds / changes / removes β†’ config.orderby flag and config.orderbycolumn.items[] array of {sortColName, sortOrder}.

  • LIMIT adds / changes / removes β†’ appended to / stripped from the trailing position of sourceMapping[0].join.joinCondition. Coalesce has no native limit config field for typical SQL nodes; the apply path warns when groupByAll/orderby is set (the auto-rendered tail clauses would land AFTER LIMIT, producing invalid SQL).

INSERT header diff (DML only β€” INSERT-shaped inputs):

  • Target identifier change (INSERT INTO "DB"."LOC"."NAME") β†’ updates the cloud node's top-level database / locationName / name fields. Renames/relocates the node; downstream references are unaffected (they use the node id, not the name).

  • INSERT column list out-of-sync with the SELECT projection β†’ REJECTED. Coalesce auto-generates the INSERT list from metadata.columns[]; edit the SELECT (using AS aliases) to add/rename/reorder columns.

Args:

  • workspaceID (string, required)

  • nodeID (string, required)

  • sql (string, required): Either a CREATE [OR REPLACE] TABLE statement (DDL, from coa_dry_run_create) OR a SELECT/INSERT statement (DML, from coa_dry_run_run). The shape is auto-detected.

  • dryRun (boolean, optional): If true, return the diff without writing.

Returns: { applied, dryRun, inputKind, diff: { unchanged, typeChanged, renamed, expressionChanged, removed, added }, joinDiff: { kind: 'identical' | 'whereOrJoinEdit' | 'newSource' | 'removedSource' | 'unsupported', ... }, tailDiff: { groupBy: { kind: 'identical' | 'added' | 'removed', ... }, orderBy: { kind: 'identical' | 'added' | 'changed' | 'removed', ... } }, limitDiff: { kind: 'identical' | 'added' | 'changed' | 'removed' | 'unsupported', ... }, insertHeaderDiff: { kind: 'identical' | 'targetChanged' | 'columnListMismatch' | 'notApplicable', ... }, body?, warnings?, error? }

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe edited SQL to apply. Accepts either: (a) a CREATE [OR REPLACE] TABLE statement (`coa_dry_run_create` output) β€” name + dataType per column, no transforms; or (b) a SELECT/INSERT/MERGE statement (`coa_dry_run_run` output) β€” name + expression per column, dataType inferred from the expression. For MERGE shapes (Coalesce dim / Type-2 SCD nodes) only the inner SELECT inside USING (...) is editable; the MERGE envelope (target, ON, WHEN MATCHED / WHEN NOT MATCHED) is Coalesce-managed and ignored by the apply path. The tool extracts the column list and diffs it against the node's current metadata.columns[].
dryRunNoWhen true, returns the diff and updated metadata.columns[] without writing to the workspace. Useful for previewing what would change before pushing.
nodeIDYesThe node ID to update.
workspaceIDYesThe workspace ID containing the node.

TDQS

A4.7/5.0
Behavior5/5

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

The description provides extensive behavioral details beyond annotations: diff logic, what is not reverse-engineered, block-level diff, tail-clause diff, INSERT header diff, and specific rejection cases. This far exceeds the readOnlyHint and destructiveHint provided.

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

Conciseness4/5

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

The description is quite long but well-structured with sections and bullet points. The core purpose is front-loaded. While every sentence contributes value, the verbosity could be streamlined for quicker parsing.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, no output schema), the description is exceptionally complete. It covers edge cases, detailed return structure, and diffing logic comprehensively, making it sufficient for an agent to invoke correctly.

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

Parameters5/5

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

The description adds significant meaning to each parameter beyond the input schema. For 'sql', it explains accepted forms, auto-detection, and limitations. For 'dryRun', it clarifies preview behavior. The schema coverage is 100%, yet the description still enriches understanding.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Round-trip a user's edits on a rendered DDL/DML SQL document back to the cloud workspace node it came from.' It distinguishes itself from sibling tools by focusing on applying SQL edits diffs, not generic node updates.

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

Usage Guidelines4/5

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

The description implicitly guides usage by detailing the inputs from coa_dry_run_create and coa_dry_run_run. However, it lacks explicit alternatives or when-not-to-use guidance. It is clear but not perfectly explicit about when to choose this over other tools.

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

audit_documentation_coverageAudit Documentation CoverageA
Read-onlyIdempotent

Scan all nodes and columns in a workspace and report documentation coverage statistics.

Args: workspaceID: Workspace to audit

Returns: Total and documented counts for nodes and columns, percentage coverage, and lists of undocumented nodes and columns (column list capped at 200). A node is 'documented' if it has a non-empty description. A column is 'documented' if its metadata.columns[] entry has a non-empty description field.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call (may take a moment for large workspaces). Subsequent calls use the cached graph (default TTL: 30 min).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIDYesWorkspace ID to audit

Output Schema

ParametersJSON Schema
NameRequiredDescription
auditedAtNo
totalNodesNo
workspaceIDNo
totalColumnsNo
documentedNodesNo
truncatedColumnsNo
documentedColumnsNo
undocumentedNodesNo
undocumentedColumnsNo
undocumentedNodeListNo
undocumentedColumnListNo
nodeDocumentationPercentNo
columnDocumentationPercentNo

TDQS

A4.3/5.0
Behavior5/5

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

The description details behavioral traits beyond annotations: it explains the dependency on a lineage cache, initial fetch time, caching TTL (30 min), and defines 'documented' for nodes and columns. It also notes that column lists are capped at 200. Annotations already indicate read-only, idempotent, and non-destructive, and the description adds valuable context without contradiction.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence purpose, followed by clear sections for Args, Returns, and additional details. Every sentence adds value without redundancy.

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

Completeness5/5

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

Given the tool's complexity (scanning all nodes, caching, reporting statistics), the description covers all necessary aspects: return structure, undocumented node/column listing limits, and caching behavior. No critical gaps are present.

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

Parameters3/5

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

The single parameter 'workspaceID' is fully described in the schema (100% coverage). The description merely restates it as 'Workspace to audit', adding no extra meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: to scan all nodes and columns in a workspace and report documentation coverage statistics. It uses a specific verb ('audit') and resource ('documentation coverage'), and is distinct from sibling tools like 'list_workspace_nodes' or 'analyze_workspace_patterns'.

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

Usage Guidelines3/5

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

The description implies usage for auditing documentation coverage and mentions caching behavior, but does not provide explicit guidance on when to use this tool versus alternatives. No exclusions or comparisons to siblings are given.

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

build_pipeline_from_intentBuild Pipeline from IntentA

Build a Coalesce pipeline from a natural language description. Describe what you want in plain English and this tool resolves workspace nodes, selects node types, and creates the pipeline nodes.

Examples:

  • "combine customers and orders by customer_id, aggregate total revenue by region"

  • "stage the raw payments table"

  • "join products with inventory on product_id"

The tool parses the intent, fuzzy-matches entity names to existing workspace nodes, and selects appropriate node types. When confirmed, it creates the pipeline nodes directly. Alternatively, set dryRun=true to get the plan without creating nodes, then pass it to create_pipeline_from_plan.

If entity names cannot be resolved or the intent is ambiguous, the tool returns clarification questions instead of a plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoWhen true, return the generated plan without creating nodes.
intentYesNatural language description of the pipeline to build. Mention table/node names, join keys, aggregations, and filters.
schemaNoOptional target schema
databaseNoOptional target database
repoPathNoOptional local committed Coalesce repo path for repo-first node-type ranking. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
confirmedNoSet to true only after presenting the plan to the user and receiving explicit approval.
targetNameNoOptional target node name override
workspaceIDYesThe workspace ID
locationNameNoOptional target locationName
targetNodeTypeNoOptional node type override. When omitted, the planner selects the best type automatically.
confirmationTokenNoThe token returned in the STOP_AND_CONFIRM response. Required when confirmed=true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
planNo
errorNo
dryRunNo
reasonNo
createdNo
warningNo
cancelledNo
nodeCountNo
incompleteNo
workspaceIDNo
createdNodesNo
cleanupFailuresNo
STOP_AND_CONFIRMNo
failedPlanNodeIDNo
cleanupFailedNodeIDsNo

TDQS

A4.9/5.0
Behavior5/5

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

Discloses key behaviors: parses intent, fuzzy-matches entities, selects node types, creates nodes upon confirmation, returns clarification questions when ambiguous. Annotations indicate write operation (readOnlyHint=false) and non-destructive, consistent with description.

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

Conciseness5/5

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

Description is well-structured with examples, clear flow, and no redundant sentences. Every sentence adds value, including the crucial note about STOP_AND_CONFIRM response. Front-loaded with main purpose and alternatives.

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

Completeness5/5

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

Given tool complexity (11 parameters, requires output schema which exists), description fully explains workflow, error handling (ambiguity), and integration with confirmation. No gaps identified.

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

Parameters4/5

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

Input schema covers all parameters (100% coverage), but description adds meaningful context: explains dryRun returns plan without creation, confirmed requires confirmationToken, repoPath fallback behavior, and targetNodeType auto-selection. This extra context justifies above baseline 3.

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

Purpose5/5

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

Clearly states the tool builds a Coalesce pipeline from natural language, with specific verb 'build', resource 'pipeline', and source 'intent'. Distinguishes from sibling 'create_pipeline_from_plan' by mentioning it as an alternative for dry-run plans.

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

Usage Guidelines5/5

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

Provides explicit guidance: when to use (natural language intent), when to use dryRun, prerequisite of workspaceID and intent, required confirmation flow with confirmationToken, and fallback to clarification questions for ambiguity. Also mentions alternative tool create_pipeline_from_plan.

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

cache_environment_nodesCache Environment NodesA
Idempotent

Fetch and cache all environment nodes to disk for efficient repeated access.

Args:

  • environmentID (string, required): The environment ID

  • detail (boolean, optional): Fetch expanded node details. Defaults to true

  • pageSize (number, optional): API page size for collection. Defaults to 250, max 500

  • orderBy (string, optional): Sort field for paginated collection. Defaults to id

  • orderByDirection ('asc'|'desc', optional): Sort direction

Returns: Cache metadata with resourceUri (coalesce://cache/...) for accessing the cached data via MCP resource read.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoWhen true, fetches expanded node details. Defaults to true.
orderByNoOptional sort field used for paginated collection. Defaults to id.
pageSizeNoOptional API page size used while collecting the full snapshot. Defaults to 250.
environmentIDYesThe environment ID
orderByDirectionNoOptional sort direction used for paginated collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
fileUriNo
messageNo
metaUriNo
orderByNo
runTypeNo
cachedAtNo
pageSizeNo
toolNameNo
pageCountNo
runStatusNo
sizeBytesNo
totalRunsNo
autoCachedNo
totalNodesNo
totalUsersNo
resourceUriNo
workspaceIDNo
environmentIDNo
maxInlineBytesNo
orderByDirectionNo

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses that data is cached to disk and returns a resourceUri for accessing the cache, which goes beyond the annotations (idempotentHint, openWorldHint, etc.). No contradictions with annotations.

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

Conciseness5/5

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

The description is concise: one sentence for purpose followed by a clear parameter list. It is front-loaded and every sentence serves a purpose without redundancy.

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

Completeness5/5

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

Given the presence of annotations and the return description (cache metadata with resourceUri), the description is complete. It explains the tool's behavior, parameters, and output, leaving no significant gaps.

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

Parameters3/5

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

Input schema coverage is 100%, and the description merely restates defaults already present in the schema (e.g., detail defaults to true, pageSize defaults to 250). It adds no new semantic information beyond the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: to fetch and cache all environment nodes to disk for efficient repeated access. It uses specific verbs ('fetch and cache') and identifies the resource ('environment nodes'), distinguishing it from sibling cache tools like cache_org_users or cache_runs.

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

Usage Guidelines4/5

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

The description implies usage for repeated access to environment nodes, but does not explicitly compare to alternatives like list_environment_nodes or get_environment_node. While the caching intent is clear, explicit when-to-use guidance is missing for a 5.

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

cache_org_usersCache Org UsersA
Idempotent

Fetch and cache all organization users to disk for efficient repeated access.

Args:

  • pageSize (number, optional): API page size for collection. Defaults to 250, max 500

  • orderBy (string, optional): Sort field for paginated collection. Defaults to id

  • orderByDirection ('asc'|'desc', optional): Sort direction

Returns: Cache metadata with resourceUri (coalesce://cache/...) for accessing the cached data via MCP resource read.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderByNoOptional sort field used for paginated collection. Defaults to id.
pageSizeNoOptional API page size used while collecting the full snapshot. Defaults to 250.
orderByDirectionNoOptional sort direction used for paginated collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
fileUriNo
messageNo
metaUriNo
orderByNo
runTypeNo
cachedAtNo
pageSizeNo
toolNameNo
pageCountNo
runStatusNo
sizeBytesNo
totalRunsNo
autoCachedNo
totalNodesNo
totalUsersNo
resourceUriNo
workspaceIDNo
environmentIDNo
maxInlineBytesNo
orderByDirectionNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds transparency by stating it caches to disk and returns cache metadata with a resource URI. No contradictions; the side effect (writing to disk) is disclosed.

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

Conciseness5/5

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

The description is extremely concise: one sentence for purpose, an Args list, and a Returns line. No unnecessary words; every part earns its place.

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

Completeness5/5

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

For a tool with 3 optional parameters and an output schema, the description fully covers what the tool does, its parameters with defaults, and what it returns (cache metadata with resourceUri). No missing information.

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

Parameters5/5

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

Schema coverage is 100%, and the description adds value by summarizing default values (pageSize defaults to 250, max 500; orderBy defaults to id; orderByDirection enforces 'asc' or 'desc'). This goes beyond the schema by providing defaults in a concise format.

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

Purpose5/5

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

The description clearly states 'Fetch and cache all organization users to disk for efficient repeated access.' This specifies a verb (fetch and cache), a resource (organization users), and a distinct purpose (efficient repeated access). Among siblings, list_org_users likely provides one-time listing, so this tool is well-differentiated.

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

Usage Guidelines4/5

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

The description implies when to use: for caching users to avoid repeated fetches. However, it does not explicitly mention when not to use or alternatives (e.g., list_org_users for one-time access). The context is clear but lacks explicit exclusions.

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

cache_runsCache RunsA
Idempotent

Fetch and cache runs to disk with optional filters for efficient repeated access.

Args:

  • runType (enum, optional): Filter by 'deploy' or 'refresh'

  • runStatus (enum, optional): Filter by 'completed' | 'failed' | 'canceled' | 'running' | 'waitingToRun'

  • environmentID (string, optional): Filter by environment ID

  • detail (boolean, optional): Fetch expanded run details. Defaults to false

  • pageSize (number, optional): API page size for collection. Defaults to 250, max 500

  • orderBy (string, optional): Sort field for paginated collection. Defaults to id

  • orderByDirection ('asc'|'desc', optional): Sort direction

Returns: Cache metadata with resourceUri (coalesce://cache/...) for accessing the cached data via MCP resource read.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoWhen true, fetches expanded run details. Defaults to false.
orderByNoOptional sort field used for paginated collection. Defaults to id.
runTypeNoOptional run type filter
pageSizeNoOptional API page size used while collecting the full snapshot. Defaults to 250.
runStatusNoOptional run status filter
environmentIDNoOptional environment ID filter
orderByDirectionNoOptional sort direction used for paginated collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
fileUriNo
messageNo
metaUriNo
orderByNo
runTypeNo
cachedAtNo
pageSizeNo
toolNameNo
pageCountNo
runStatusNo
sizeBytesNo
totalRunsNo
autoCachedNo
totalNodesNo
totalUsersNo
resourceUriNo
workspaceIDNo
environmentIDNo
maxInlineBytesNo
orderByDirectionNo

TDQS

A3.7/5.0
Behavior4/5

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

The description adds context beyond annotations: it reveals side effect (caching to disk), idempotency (efficient repeated access), and return format (resourceUri). Annotations provide idempotentHint=true, which aligns. No contradictions.

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

Conciseness4/5

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

Description is well-structured with Args and Returns sections, front-loading the main purpose. It is adequately concise, though could be tightened by removing redundant default mentions.

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

Completeness4/5

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

Given 7 optional params and no output schema provided, the description explains the return format (cache metadata with resourceUri) adequately. It covers the essential behavior for an agent to use the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so description adds marginal value. It provides defaults and limits (e.g., pageSize max 500) and clarifies parameter purposes, but does not introduce new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Fetch and cache runs to disk with optional filters', using specific verb (fetch/cache) and resource (runs). It distinguishes from siblings like 'list_runs' and 'get_run' by emphasizing caching behavior.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives (e.g., 'list_runs' for one-time fetch). The description implies caching for repeated access, but does not state exclusions or alternatives.

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

cache_workspace_nodesCache Workspace NodesA
Idempotent

Fetch and cache the ENTIRE workspace's nodes to disk β€” a full snapshot of every node. Run this ONLY when the user explicitly wants the whole workspace cached. For targeted work, prefer search_workspace_content, get_workspace_node, or get_workspace_subgraph; for a profile use analyze_workspace_patterns. detail=false is much cheaper and sufficient for inventory; detail=true on a large workspace produces a very large snapshot. Note: the result is a coalesce://cache/... resource link, which clients that do not support MCP resources (e.g. Snowflake Cortex Code) cannot read.

Args:

  • workspaceID (string, required): The workspace ID

  • detail (boolean, optional): Fetch expanded node details. Defaults to true

  • pageSize (number, optional): API page size for collection. Defaults to 250, max 500

  • orderBy (string, optional): Sort field for paginated collection. Defaults to id

  • orderByDirection ('asc'|'desc', optional): Sort direction

Returns: Cache metadata with resourceUri (coalesce://cache/...) for accessing the cached data via MCP resource read.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoWhen true, fetches expanded node details. Defaults to true.
orderByNoOptional sort field used for paginated collection. Defaults to id.
pageSizeNoOptional API page size used while collecting the full snapshot. Defaults to 250.
workspaceIDYesThe workspace ID
orderByDirectionNoOptional sort direction used for paginated collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
fileUriNo
messageNo
metaUriNo
orderByNo
runTypeNo
cachedAtNo
pageSizeNo
toolNameNo
pageCountNo
runStatusNo
sizeBytesNo
totalRunsNo
autoCachedNo
totalNodesNo
totalUsersNo
resourceUriNo
workspaceIDNo
environmentIDNo
maxInlineBytesNo
orderByDirectionNo

TDQS

A4.9/5.0
Behavior5/5

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

Adds context beyond annotations: details trade-off (detail=false cheaper vs detail=true large snapshot), and client limitation (result resource link unreadable by clients like Snowflake Cortex Code). No contradiction with annotations.

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

Conciseness5/5

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

Well-structured with main purpose, Args section, Returns section. Front-loaded with key info, no wasted words.

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

Completeness5/5

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

Complete for a caching tool with 5 params and output schema. Explains caching mechanism, resource link limitation, parameter behaviors. No gaps.

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

Parameters4/5

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

Schema coverage 100% gives baseline 3. Description adds value: explains detail parameter cost trade-off, pageSize for collection, orderBy/orderByDirection for pagination. Above baseline.

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

Purpose5/5

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

The description clearly states the tool fetches and caches the entire workspace's nodes to disk, specifying the resource (workspace nodes) and action (fetch and cache). It distinguishes from siblings like search_workspace_content, get_workspace_node, etc.

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

Usage Guidelines5/5

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

Explicitly says 'Run this ONLY when the user explicitly wants the whole workspace cached' and provides specific alternatives for targeted work (search_workspace_content, get_workspace_node, get_workspace_subgraph, analyze_workspace_patterns).

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

cancel_runCancel RunA
Destructive

Cancel an in-progress Coalesce run. Destructive β€” the run will be terminated immediately. Canceling a running pipeline mid-execution can leave data in an inconsistent state (partial loads, half-transformed tables). There is no 'undo cancel'.

Args:

  • runID (string, required): Numeric run ID to cancel

  • environmentID (string, required): Environment the run belongs to

  • orgID (string, optional): Organization ID. Falls back to COALESCE_ORG_ID env var or orgID in the active ~/.coa/config profile.

  • confirmed (boolean, optional): Set to true after the user explicitly confirms cancellation

Returns: Confirmation with updated run status.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIDNoThe organization ID. Optional if COALESCE_ORG_ID is set, or if `orgID` is present in the active ~/.coa/config profile.
runIDYesThe numeric run ID (integer) of the run to cancel
confirmedNoSet to true after the user explicitly confirms the cancellation.
environmentIDYesThe environment ID the run belongs to

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
runStatusNo
runCounterNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true), the description adds detailed behavioral traits: immediate termination, potential inconsistent state, no undo. No contradiction.

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

Conciseness5/5

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

The description is well-structured, front-loaded with purpose, and every sentence adds value without redundancy.

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

Completeness5/5

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

For a destructive operation with annotations, complete schema, and output schema, the description covers consequences, parameter details, and return expectation, leaving no gaps.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds context like runID being numeric, orgID fallback logic, and confirmed param usage, providing meaningful added value.

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

Purpose5/5

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

The description clearly states 'Cancel an in-progress Coalesce run' with a specific verb and resource, and it distinguishes from sibling tools like retry_run and start_run.

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

Usage Guidelines4/5

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

The description warns about data inconsistency and no undo, implying caution, but does not explicitly state when to use vs alternatives like retry_run.

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

clear_data_cacheClear Data CacheA
Destructive

Clear the MCP server's local data cache. Removes all cached artifacts from disk.

Args:

  • confirmed (boolean, optional): Set to true after the user explicitly confirms cache clearing

Returns: { deleted: boolean, fileCount: number, totalBytes: number, message: string }

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoSet to true after the user explicitly confirms the cache clearing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sizeMBNo
deletedNo
messageNo
fileCountNo
totalBytesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds that it removes all cached artifacts from disk, confirming the scope. It does not contradict annotations and provides additional context about the action's permanence, though it could mention impact on ongoing operations.

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

Conciseness5/5

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

Description is extremely concise: one sentence for purpose, then a clear Args and Returns section. Every sentence adds value. No unnecessary words.

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

Completeness5/5

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

For a simple cache-clearing tool with one optional parameter and an output schema, the description provides all necessary context: what it does, the safety confirmation step, and the return structure. No gaps.

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

Parameters3/5

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

Schema coverage is 100% with a description for the confirmed parameter. The tool description repeats this information without adding new semantics. Baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states the verb 'clear' and resource 'data cache', specifying it removes all cached artifacts. No sibling tools perform cache clearing, so no differentiation needed.

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

Usage Guidelines4/5

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

Description explains when to use (to clear cache) and provides a guideline that the confirmed parameter should be set after user explicit confirmation. However, it does not explicitly discuss when not to use or alternatives, but for a simple maintenance tool, this is acceptable.

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

coa_add_warehouse_sourcesCOA Add Warehouse Sources (scaffold source nodes)A
Destructive

Scaffold source-node YAML files from warehouse tables. Wraps coa sources add --json. Database and schema are read from the workspace's storage-location config and copied onto each scaffolded source node β€” no separate placeholders to fix up afterward, but verify the workspace config itself is correct first (the bootstrap tool seeds placeholders into it).

DESTRUCTIVE: writes files into the project's nodes/ tree. Requires confirmed: true. Existing source nodes are skipped unless overwrite: true.

MUST pass exactly one of location or all (the CLI enforces this in non-TTY mode and so do we).

DRY-RUN: pass dryRun: true to list what would be imported without writing files. The JSON shape is the same as a real write, with wouldImport reflecting the delta. confirmed: true is still required for consistency, but no files are created.

Profile resolution: input profile > COALESCE_PROFILE env > [default].

Usage pattern: call coa_list_warehouse_sources --location <name> first to preview, then call this with the same scope.

Args:

  • projectPath (string, required)

  • location (string) OR all (boolean): exactly one required

  • include (string, optional): glob filter

  • overwrite (boolean, optional): re-import existing nodes

  • dryRun (boolean, optional): preview without writing

  • profile (string, optional)

  • confirmed (boolean): must be true to execute. Required even when dryRun: true, for consistency with other destructive tools β€” no files are written in that case.

Returns: { command, exitCode, stdout, stderr, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true), description details that it writes files, requires confirmed:true, skips existing nodes unless overwrite:true, and explains dry-run behavior (no files written). No contradiction with annotations.

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

Conciseness5/5

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

Well-structured with clear sections, front-loaded purpose, and no unnecessary words. Every sentence adds value.

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

Completeness5/5

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

Covers all aspects: destructive behavior, parameters, dry-run, profile resolution, return shape, and a usage pattern. No gaps given the tool's complexity.

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

Parameters5/5

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

Despite the input schema showing no properties, the description thoroughly explains each parameter (projectPath, location, all, include, overwrite, dryRun, profile, confirmed) and their roles, effectively compensating for the empty schema.

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

Purpose5/5

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

Clearly states the tool scaffolds source-node YAML files from warehouse tables, distinguishing itself from sibling tools like coa_remove_warehouse_sources and coa_list_warehouse_sources via a usage pattern mention.

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

Usage Guidelines5/5

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

Provides explicit usage constraints: exactly one of location or all, dry-run option, profile resolution, and a recommended pattern to preview with coa_list_warehouse_sources first.

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

coa_bootstrap_workspacesCOA Bootstrap workspaces.yml (doctor --fix)A
Destructive

Run coa doctor --fix β€” writes a starter workspaces.yml in the project root, seeded from locations.yml. Safe to re-run; coa will not overwrite a valid existing file.

IMPORTANT: the generated file contains placeholder database/schema values. The user MUST open it and set real values before running coa_create / coa_run β€” otherwise warehouse operations will target non-existent databases.

KNOWN ISSUE (CD-16983): the workspaces.yml profile controls coa create/run, but coa plan/deploy/refresh fall through to [default] in ~/.coa/config. After bootstrap, check that the two profiles point at the same cloud account before relying on plan/deploy results.

DESTRUCTIVE: writes a new file to the project directory. Requires confirmed=true after explicit user approval.

Args:

  • projectPath (string, required): Path to the COA project root (directory with data.yml)

  • workspace (string, optional): workspaces.yml workspace name (default: dev)

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoSet to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds behavioral context: it writes a file, is safe to re-run, includes a known issue about profile fall-through, and requires confirmed=true. This adds value beyond annotations without contradiction.

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

Conciseness4/5

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

The description is well-structured with clear sections (main action, important notes, known issue, destructive warning, args, returns). Every sentence provides useful information, though it could be slightly more concise without losing clarity.

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

Completeness5/5

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

Given the tool has 3 parameters, output schema, and side effects, the description covers purpose, usage warnings, known issues, destructive nature, and return format. It fully equips the agent to understand when and how to use the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description does not add additional semantics beyond what the schema provides (e.g., confirmed requirement is also in 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.

Purpose5/5

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

The description clearly states the tool runs 'coa doctor --fix' to write a starter 'workspaces.yml' file, seeded from 'locations.yml'. The verb 'writes' and specific resource distinguish it from siblings like coa_doctor, coa_create, etc.

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

Usage Guidelines4/5

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

The description provides clear usage context: it is safe to re-run, will not overwrite existing valid files, and warns that placeholder values must be replaced before using coa_create/coa_run. It also mentions the known issue about profile configuration. It lacks explicit when-not-to-use or alternatives but provides strong guidance overall.

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

coa_createCOA Create (DDL)A
Destructive

Execute coa create β€” runs DDL (CREATE/REPLACE) for the selected nodes against the configured warehouse.

DESTRUCTIVE: modifies warehouse schema. Requires confirmed=true after explicit user approval.

Pre-flight checks run before execution (double-quoted refs, missing workspaces.yml, bad selector patterns). Errors block execution; warnings are returned alongside the result.

V2 NOTICE: when the project contains V2 artifacts (fileVersion: 2 node types or .sql nodes), a V2_DETECTED preflight warning attaches to the result. Execution is no longer blocked β€” annotation sync (CD-16972) and UNION ALL shipped in COA 7.35 closed the biggest V2 risks. Two rough edges remain: coa validate false positives on aliased columns, and zero-column CTAS when a SELECT has a parse error. See coalesce://context/sql-node-v2-policy.

Args:

  • projectPath (string, required)

  • workspace, include, exclude (optional)

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, preflightWarnings?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
excludeNoCOA node selector to exclude.
includeNoCOA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`.
confirmedNoSet to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.6/5.0
Behavior5/5

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

The description explicitly states DESTRUCTIVE: modifies warehouse schema, requires confirmation, and details pre-flight checks and V2 notice. This adds significant context beyond the destructiveHint annotation, which is already true.

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

Conciseness4/5

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

The description is structured with clear sections (DESTRUCTIVE, pre-flight, V2 NOTICE, Args, Returns) and front-loads the purpose. It is informative but could be slightly trimmed; however, it earns its length.

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

Completeness5/5

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

Given the tool's destructive nature, 5 parameters, and output schema, the description covers behavior, required confirmation, preflight checks, V2 details, and return structure comprehensively. No gaps identified.

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

Parameters4/5

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

The description adds meaning to parameters beyond the schema, e.g., explaining confirmed must be true to execute, and clarifying include/exclude selectors. Since schema coverage is 100%, the description still adds value.

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

Purpose5/5

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

The description clearly states the tool executes 'coa create' to run DDL (CREATE/REPLACE) for selected nodes against the configured warehouse. It distinguishes itself from sibling tools like coa_dry_run_create by indicating destructive behavior and required confirmation.

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

Usage Guidelines4/5

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

The description provides clear context: requires confirmed=true after user approval, runs pre-flight checks, and notes V2 behavior. It does not explicitly mention when not to use or compare to alternatives, but the guidance is sufficient for appropriate use.

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

coa_deployCOA DeployA
Destructive

Apply a plan JSON to a cloud environment. Changes environment schema/state.

DESTRUCTIVE: modifies the deployed environment. Requires confirmed=true.

The plan file must exist (produced by coa_plan). Does NOT re-validate project contents β€” validates the plan structure only.

Args:

  • environmentID (string, required)

  • plan (string, required): path to coa-plan.json

  • profile, token (optional)

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
planYesPath to the coa-plan.json produced by coa_plan. Must exist before calling.
tokenNoCoalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input.
profileNoProfile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`).
confirmedNoSet to true after explicit user confirmation.
environmentIDYesTarget environment ID to deploy into.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it explicitly warns 'DESTRUCTIVE: modifies the deployed environment' (matching destructiveHint=true), details the confirmation requirement ('confirmed must be true to execute'), and clarifies the validation scope ('Does NOT re-validate project contents β€” validates the plan structure only'). This is valuable additional transparency. A minor gap: it doesn't mention whether the operation is synchronous or async, but the return format suggests synchronous. Still, strong.

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

Conciseness4/5

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

The description is well-structured: a concise purpose sentence, a warning line, prerequisites, then a clear 'Args' list, and a 'Returns' line. It is efficient but slightly redundant with the schema (the Args list largely mirrors the schema properties). However, the structure aids quick comprehension. Minor redundancy prevents a 5.

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

Completeness5/5

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

Given the tool's complexity (destructive, confirmation requirement, plan prerequisite, return format), the description covers all essential aspects: purpose, behavioral traits, prerequisites, argument details, and return schema. The presence of an output schema reduces the burden, but the description still provides complete context for safe and correct invocation.

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

Parameters5/5

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

With 100% schema coverage, the description still adds significant meaning: it re-explains each parameter in a clear 'Args' list, emphasizing the critical points (e.g., 'plan: path to coa-plan.json', 'confirmed: must be true to execute'). It goes beyond the schema by grouping optional parameters and explaining the 'profile, token' fallback behavior. This fully compensates for any dependency on schema.

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

Purpose5/5

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

The description clearly states 'Apply a plan JSON to a cloud environment. Changes environment schema/state.' This is a specific verb+resource combination that distinguishes the tool from siblings like coa_plan (which produces the plan) and coa_run (which runs a pipeline). The purpose is unambiguous.

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

Usage Guidelines4/5

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

The description provides explicit usage guidance: 'The plan file must exist (produced by coa_plan). Does NOT re-validate project contents β€” validates the plan structure only.' and 'Requires confirmed=true.' It clearly indicates when to use (after coa_plan) and the needed confirmation. While it implies not to use without a plan, it could explicitly name the alternative (coa_plan) for when-to-use differentiation, but the guidance is strong.

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

coa_describeCOA DescribeA
Read-onlyIdempotent

Fetch a section of COA's self-describing documentation. Wraps coa describe <topic> [<subtopic>].

Well-known topics (also available as coalesce://coa/describe/* resources): overview, commands, selectors, schemas, workflow, structure, concepts, sql-format, node-types, config.

Use subtopic for the parameterized topics:

  • topic='command', subtopic='' β€” deep-dive on a specific command

  • topic='schema', subtopic='' β€” full JSON schema for a file type

Args:

  • topic (string, required)

  • subtopic (string, optional)

  • refresh (boolean, optional): bypass the on-disk cache and re-run COA

Returns: { topic, subtopic?, source (memory|disk|coa), content, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesDescribe topic. Well-known topics: overview, commands, selectors, schemas, workflow, structure, concepts, sql-format, node-types, config. You may also pass 'command' or 'schema' together with a subtopic.
refreshNoForce bypass of the on-disk cache and re-run `coa describe`. Defaults to false.
subtopicNoOptional subtopic (command name for topic='command', schema type for topic='schema').

Output Schema

ParametersJSON Schema
NameRequiredDescription
topicNo
sourceNo
contentNo
subtopicNo
coaVersionNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate read-only and idempotent. The description adds caching behavior (defaults to disk cache, can refresh with 'refresh' parameter) and describes the 'source' field in the return value. No contradictions.

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

Conciseness5/5

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

The description is concise and well-structured: a summary sentence, then bullet points for parameters and return value. No fluff, front-loaded with purpose.

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

Completeness5/5

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

Given the output schema exists, the description does not need to detail return format, but it provides a brief summary. It covers usage, parameters, and behavior completely for a documentation tool.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by listing well-known topics, explaining subtopic usage for 'command' and 'schema', and clarifying the 'refresh' parameter's effect on cache.

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

Purpose5/5

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

The description clearly states the tool fetches documentation sections, uses the verb 'Fetch', specifies the resource ('section of COA's self-describing documentation'), and distinguishes itself from siblings that perform actions on nodes or environments.

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

Usage Guidelines4/5

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

The description explains when to use (to get documentation), lists well-known topics, and describes parameterized usage. While it does not explicitly state when not to use or name alternatives, the sibling context implies its specific role.

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

coa_doctorCOA DoctorA
Read-onlyIdempotent

Run coa doctor against a local COA project β€” checks data.yml, workspaces.yml, credentials, and warehouse connectivity.

KNOWN ISSUE (CD-16983): doctor reports the profile selected via workspaces.yml / --workspace, but coa_plan / coa_deploy / coa_refresh resolve profile differently β€” they fall through to the [default] profile in ~/.coa/config unless --profile or COALESCE_PROFILE is set. A green doctor result does NOT guarantee that plan/deploy will authenticate against the same cloud account. When a user reports plan/deploy auth mismatches, suspect profile divergence before blaming credentials. Platform fix approach still under discussion.

Args:

  • projectPath (string, required): Path to the COA project root (directory with data.yml)

  • workspace (string, optional): workspaces.yml workspace name (default: dev)

Returns: { command, exitCode, stdout, stderr, timedOut, json?, coaVersion, preflightWarnings? }

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds critical behavioral context about profile resolution differences and the known issue, going beyond what annotations cover.

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

Conciseness4/5

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

The description is front-loaded with purpose and input details, then the known issue. While the known issue paragraph is lengthy, it's important and well-structured. Minor verbosity but earns its place.

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

Completeness5/5

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

Given the tool's diagnostic nature and output schema, the description explains what is checked, the known limitation, and uses the input schema well. It provides sufficient context for an agent to use the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description restates parameter purposes (projectPath as COA project root, workspace with default 'dev') but adds no new meaning beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool runs 'coa doctor' to check data.yml, workspaces.yml, credentials, and warehouse connectivity. It specifies a diagnostic/validation role, which distinguishes it from siblings like coa_deploy or coa_plan.

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

Usage Guidelines5/5

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

The description includes an explicit known issue (CD-16983) explaining when not to rely solely on this tool (green result doesn't guarantee auth matching for plan/deploy) and advises to suspect profile divergence. This provides clear when-not-to-use and alternative debugging steps.

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

coa_dry_run_createCOA Dry Run Create (DDL preview)A
Read-onlyIdempotent

Preview the DDL that coa create would execute, without hitting the warehouse. Forces --dry-run --verbose.

Runs entirely offline against local project files β€” no Coalesce cloud authentication or API calls. coa create (and coa run) are the offline local-dev commands; do not confuse with the scheduler-aware coa deploy / coa plan / coa refresh which target cloud environments.

OUTPUT SHAPE (CD-16959+): dry-run reports pass/fail for every selected node rather than stopping at the first template error. Scan the full stdout β€” a non-zero exit code means one or more nodes failed, but successful nodes still render their generated SQL above/below the failures. Do not assume early output implies all-clear.

Check the stdout: table names should resolve (not blank), column types should not be UNKNOWN (indicates broken ref() targets), and SQL should look correct. For V2 nodes specifically, watch for CREATE TABLE ... AS SELECT WHERE 1=0 with zero columns β€” this means the SELECT has a parse error and the dry-run reports success despite producing broken DDL. See coalesce://context/sql-node-v2-policy.

LIMITATION: dry-run only exercises the SQL generator. It does NOT validate that referenced columns or types exist in the actual warehouse β€” a dry-run can succeed with column references that will fail at run-time with 'invalid identifier'. Use cortex or another Snowflake-capable MCP to confirm the schema when that matters.

Args:

  • projectPath (string, required)

  • workspace (string, optional)

  • include / exclude (string, optional): Node selector

Returns: { command, exitCode, stdout, stderr, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
excludeNoCOA node selector to exclude.
includeNoCOA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.9/5.0
Behavior5/5

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

While annotations indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds substantial behavioral context: it forces --dry-run --verbose, runs entirely offline without API calls, reports per-node pass/fail, explains non-zero exit code meaning, and warns about V2 node pitfalls and the limitation that it doesn't validate column existence. No contradiction with annotations.

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

Conciseness4/5

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

The description is lengthy but well-structured with sections (OUTPUT SHAPE, LIMITATION) and front-loads the core purpose. Some redundancy exists (e.g., dry-run explained twice), but the complexity warrants the detail. Slightly verbose but organized.

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

Completeness5/5

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

Given the tool's complexity (dry-run with special output behavior and limitations), the description covers output shape, failure handling, V2 node bugs, and cross-tool comparisons. The output schema exists, so return values are not needed. Complete for an agent to use correctly.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant value: it explains `include`/`exclude` as node selectors with examples, mentions workspace defaults to 'dev', and provides context for the node selector syntax. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states 'Preview the DDL that `coa create` would execute, without hitting the warehouse.' It specifies the verb (preview), resource (DDL), and explicitly distinguishes from `coa create` and cloud commands. The purpose is unambiguous and differentiated from siblings.

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

Usage Guidelines5/5

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

The description explains when to use this tool (preview DDL offline) and explicitly warns against confusing it with scheduler-aware cloud commands like `coa deploy`/`coa plan`/`coa refresh`. It also clarifies that `coa create` and `coa run` are offline local-dev commands, providing clear context and exclusions.

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

coa_dry_run_runCOA Dry Run Run (DML preview)A
Read-onlyIdempotent

Preview the DML that coa run would execute, without hitting the warehouse. Forces --dry-run --verbose.

Runs entirely offline against local project files β€” no Coalesce cloud authentication or API calls. coa run (and coa create) are the offline local-dev commands; do not confuse with the scheduler-aware coa deploy / coa plan / coa refresh which target cloud environments.

OUTPUT SHAPE (CD-16959+): dry-run reports pass/fail for every selected node rather than stopping at the first template error. Scan the full stdout β€” a non-zero exit code means one or more nodes failed, but successful nodes still render their generated SQL above/below the failures.

LIMITATION: dry-run only exercises the SQL generator. It does NOT validate that referenced columns or types exist in the actual warehouse β€” a dry-run can succeed with column references that will fail at run-time with 'invalid identifier'. Use cortex or another Snowflake-capable MCP to confirm the schema when that matters.

Args:

  • projectPath (string, required)

  • workspace (string, optional)

  • include / exclude (string, optional): Node selector

Returns: { command, exitCode, stdout, stderr, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
excludeNoCOA node selector to exclude.
includeNoCOA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.7/5.0
Behavior5/5

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

Description adds significant value beyond annotations: it reveals offline nature, no authentication needed, output shape (pass/fail per node), non-zero exit code meaning, and limitation that dry-run doesn't validate column/type existence. Annotations already indicate read-only and idempotent, but description enriches with operational details.

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

Conciseness5/5

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

Description is well-organized with sections (OUTPUT SHAPE, LIMITATION) and concise bullet points. Every sentence adds value, no redundancy.

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

Completeness5/5

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

Despite formal output schema not fully detailed, description explains output shape, exit code interpretation, and limitations. Covers key aspects needed for correct use: offline, no auth, column validation caveat. Comprehensive for a dry-run tool.

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

Parameters3/5

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

Input schema has 100% description coverage, so description adds minimal new meaning. It gives examples for include/exclude but mostly restates schema. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states it previews DML from `coa run` without hitting warehouse, forcing --dry-run --verbose. It distinguishes from sibling tools like coa_dry_run_create and coa_run, and clarifies it's offline vs cloud commands.

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

Usage Guidelines5/5

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

Explicitly warns not to confuse with coa deploy/plan/refresh, tells when to use cortex for schema validation, and advises to scan full stdout for exit codes. Provides clear context for when to use this tool vs alternatives.

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

coa_list_project_nodesCOA List Project NodesA
Read-onlyIdempotent

List all nodes defined in a local COA project (pre-deploy). Wraps coa create --list-nodes.

Different from list_environment_nodes (which lists deployed nodes in a cloud environment via the REST API).

Args:

  • projectPath (string, required)

  • workspace (string, optional)

Returns: { command, exitCode, stdout, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds operational detail: wraps a command and returns a specific structure. No contradictions and adds value beyond annotations.

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

Conciseness5/5

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

Description is concise, uses bullet points for args/returns, and front-loads the core purpose. No unnecessary words.

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

Completeness4/5

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

Covers purpose, usage differentiation, returns structure, and parameter list. With full schema and annotations, the description is adequate. Could add more about the command context but not necessary.

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

Parameters3/5

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

Schema covers both parameters with descriptions. Description merely restates parameter names and types without adding new context. Baseline 3 is appropriate given high schema coverage.

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

Purpose5/5

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

Clearly states 'List all nodes defined in a local COA project (pre-deploy)', providing a specific verb and resource. Distinguishes from sibling list_environment_nodes by specifying scope (local vs deployed).

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

Usage Guidelines5/5

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

Explicitly differentiates from list_environment_nodes and states it is for pre-deploy listing. Gives clear context for when to use this tool.

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

coa_list_warehouse_sourcesCOA List Warehouse SourcesA
Read-onlyIdempotent

List warehouse tables visible to each storage location in a COA project. Wraps coa sources list --json.

Three modes via flags:

  • Neither location nor all: returns per-location SUMMARY counts (totalTables, importedTables, newTables). Cheap; use this first on unfamiliar projects.

  • location: <name>: returns per-table detail for that one location, each row marked alreadyExists: true if a source node has already been scaffolded for it.

  • all: true: per-table detail for every location. Potentially large β€” prefer scoping when you can.

Use this to (a) figure out which locations have un-imported tables before calling coa_add_warehouse_sources, or (b) audit which scaffolded source nodes still match the warehouse.

Read-only: queries the warehouse via the COA cloud profile, writes nothing. Profile resolution: input profile > COALESCE_PROFILE env > [default].

Args:

  • projectPath (string, required)

  • location (string, optional)

  • all (boolean, optional): mutually exclusive with location

  • include (string, optional): glob filter on table names

  • profile (string, optional)

Returns: { command, exitCode, stdout, stderr, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only and non-destructive behavior. The description reinforces this with 'Read-only: ... writes nothing' and adds useful context about profile resolution. No contradictions.

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

Conciseness5/5

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

The description is well-structured, front-loaded with the core function, followed by modes, usage guidance, behavioral notes, and parameter list. Every sentence adds value without redundancy.

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

Completeness4/5

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

Overall comprehensive for a list tool: covers modes, usage, behavior, and returns. However, the return structure is only partially described (e.g., 'json?' is vague) and the actual output shape for details is not specified.

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

Parameters4/5

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

The input schema is empty, so the description carries full parameter information. It lists five parameters with types and notes mutual exclusivity of 'location' and 'all'. However, it lacks format details for parameters like location or profile.

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

Purpose5/5

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

The description clearly states the tool's main function: listing warehouse tables visible to storage locations in a COA project. It distinguishes itself from sibling tools by explicitly referencing coa_add_warehouse_sources and explaining how this tool is used as a precursor.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use each of the three modes (summary first, location-specific for detail, all mode cautiously) and gives concrete use cases like identifying un-imported tables before adding sources.

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

coa_planCOA PlanA

Generate a deployment plan. Reads the local project, diffs against the target environment, and writes a plan JSON (default coa-plan.json in the project root).

Non-destructive: produces a plan file only. Safe to call without confirmation. The plan is then applied via coa_deploy.

Requires COA cloud credentials (~/.coa/config or profile/token) and an environmentID.

V2 NOTICE: when the project contains V2 artifacts, a V2_DETECTED preflight warning attaches to the result (same shape as coa_create / coa_run). Execution is not blocked; see coalesce://context/sql-node-v2-policy for the two remaining rough edges.

Args:

  • projectPath (string, required)

  • environmentID (string, required)

  • out (string, optional): plan output path

  • gitsha, enableCache (optional)

  • profile, token (optional)

Returns: { command, exitCode, stdout, stderr, preflightWarnings?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoOutput path for the plan JSON. Relative paths resolve against the project root. Defaults to coa-plan.json in the project root.
tokenNoCoalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input.
gitshaNoOptional git SHA to embed in the plan manifest.
profileNoProfile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`).
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
enableCacheNoEnable coa's plan cache. Coalesce recommends leaving this off unless plan generation is slow.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).
environmentIDYesTarget environment ID for the deployment plan.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations indicate non-destructive and non-read-only. Description reinforces non-destructive nature and adds context: reads local project, diffs, writes plan file, attaches preflight warnings if V2 artifacts detected, and is safe to call without confirmation. No contradictions with annotations.

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

Conciseness4/5

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

Description is well-structured: front-loaded with main purpose and safety, then prerequisites, special notes, and arg list. The arg list is somewhat redundant with schema but not overly verbose. It earns its space with essential information.

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

Completeness5/5

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

Given complexity (8 params, output schema exists), the description covers all necessary aspects: purpose, behavior, safety, prerequisites, special V2 notice, argument summary, and return shape. Agent has sufficient information for correct invocation.

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

Parameters4/5

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

Schema coverage is 100% with detailed descriptions. The description's 'Args' section adds some context beyond the schema, such as default output path and fallback behavior for profile/token. While schema provides complete semantic coverage, the description offers slight additional value.

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

Purpose5/5

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

The description clearly states the tool generates a deployment plan by reading the local project, diffs against target, and writes a plan JSON. It uses specific verb 'generate' and resource 'deployment plan', and distinguishes from sibling coa_deploy which applies the plan.

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

Usage Guidelines5/5

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

Explicitly states the tool is non-destructive, safe to call without confirmation, and that the plan is applied via coa_deploy, providing clear when-to-use guidance. It also lists prerequisites (credentials, environmentID) and notes the V2_DETECTED preflight warning behavior.

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

coa_refreshCOA RefreshA
Destructive

Run DML for selected nodes in a deployed environment. Does not require a local project β€” operates purely on the cloud environment.

DESTRUCTIVE: modifies warehouse data in the environment. Requires confirmed=true.

Args:

  • environmentID (string, required)

  • include, exclude, jobID, parallelism, parameters (optional)

  • forceIgnoreEnvironmentStatus (optional)

  • profile, token (optional)

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIDNoRun a specific deployed job.
tokenNoCoalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input.
excludeNoNode selector to exclude.
includeNoNode selector to scope the refresh.
profileNoProfile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`).
confirmedNoSet to true after explicit user confirmation.
parametersNoRuntime parameters to pass to the run.
parallelismNoParallelism level.
environmentIDYesEnvironment ID to refresh.
forceIgnoreEnvironmentStatusNoProceed even if the environment has a failed deploy. May cause refresh failures β€” use only when you understand the state.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A4.3/5.0
Behavior5/5

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

The description explicitly states 'DESTRUCTIVE: modifies warehouse data' and the need for confirmed=true, which adds behavioral insight beyond the annotations (destructiveHint=true). It also warns about forceIgnoreEnvironmentStatus potentially causing failures, providing valuable behavioral context.

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

Conciseness4/5

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

The description is fairly concise but includes a parameter list that largely duplicates the schema. It is well-structured with clear sections (description, destructive note, args, returns), though the args section could be trimmed for even better conciseness.

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

Completeness4/5

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

The description covers the tool's destructive nature, required confirmation, and the return structure. Given the output schema exists, it doesn't need to detail return values further. It could elaborate more on how include/exclude node selectors work, but overall it's adequate.

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

Parameters3/5

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

The input schema has 100% description coverage, so the schema already explains all parameters. The description repeats the parameter list but does not add significant new meaning beyond the schema's own descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Run DML for selected nodes in a deployed environment.' It specifies that it operates purely on the cloud environment and does not require a local project, distinguishing it from other tools that may need local context.

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

Usage Guidelines4/5

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

The description provides usage context, noting that it requires confirmed=true and is destructive. It also mentions that it doesn't require a local project. However, it does not explicitly compare with sibling tools like coa_run or coa_deploy, leaving some ambiguity about when to choose this tool over alternatives.

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

coa_remove_warehouse_sourcesCOA Remove Warehouse Sources (delete scaffolded YAML)A
Destructive

Delete scaffolded source-node YAML files from the project. Wraps coa sources remove --json --yes (the MCP layer handles confirmation; --yes is always passed to the CLI).

DESTRUCTIVE: removes files from disk. Requires confirmed: true. Hand-renamed ("unmanaged") files are reported but NOT removed β€” the CLI considers them user-owned.

MUST pass exactly one of location or all.

PROFILE LIMITATION: unlike list/add, the underlying coa sources remove does NOT accept a --profile flag in COA 7.35 (errors unknown option '--profile'). Profile resolution falls back to [default] in ~/.coa/config. If that diverges from the agent's intended profile, the agent should temporarily set [default] or wait for the upstream patch.

Usage pattern: when re-onboarding a location or cleaning up after a schema rename. Pair with coa_list_warehouse_sources to confirm scope first.

Args:

  • projectPath (string, required)

  • location (string) OR all (boolean): exactly one required

  • include (string, optional): glob filter (e.g. 'OLD_*')

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Highlights destructive nature, confirmation requirement, CLI wrapper behavior, and profile limitation, adding context beyond annotations. However, the parameter contradiction with schema reduces clarity.

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

Conciseness4/5

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

Well-structured with clear sections and front-loaded purpose. Slightly verbose but each sentence adds value. Could be more concise.

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

Completeness4/5

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

Covers behavior, return shape, usage pattern, alternatives, and limitations. Lacks full alignment with input schema due to parameter mismatch, otherwise comprehensive.

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

Parameters1/5

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

Describes 5 parameters with detailed semantics, but the input schema declares no properties. This mismatch makes the parameter information unreliable and misleading, severely undermining usefulness.

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

Purpose5/5

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

Clearly states 'Delete scaffolded source-node YAML files from the project' with specific verb and resource. Distinguishes from sibling 'coa_list_warehouse_sources' by pairing suggestion.

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

Usage Guidelines5/5

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

Provides explicit when-to-use context (re-onboarding, cleanup after schema rename), required flags, profile limitation with workaround, and pairing with list tool. Covers when-not-to-use implicitly by noting unmanaged files are not removed.

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

coa_runCOA Run (DML)A
Destructive

Execute coa run β€” runs DML (INSERT/MERGE) to populate the selected nodes.

DESTRUCTIVE: modifies warehouse data. Requires confirmed=true.

Same pre-flight checks as coa_create. A V2_DETECTED preflight warning attaches for V2 projects but does not block execution (see coa_create for the V2 NOTICE). Uses a 30-minute timeout.

Args:

  • projectPath (string, required)

  • workspace, include, exclude (optional)

  • confirmed (boolean): must be true to execute

Returns: { command, exitCode, stdout, stderr, preflightWarnings?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
excludeNoCOA node selector to exclude.
includeNoCOA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`.
confirmedNoSet to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description reinforces this with 'DESTRUCTIVE: modifies warehouse data.' It adds value by detailing the need for confirmed, timeout, preflight warnings for V2 projects, and return structure. No contradiction with annotations.

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

Conciseness4/5

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

The description is concise with a clear one-line summary followed by key behavioral notes. It uses a clean structure but could be more streamlined; no wasted sentences.

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

Completeness4/5

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

Given the tool has 5 parameters, annotations, and an output schema, the description is fairly complete. It covers purpose, behavioral traits, and return format. It references coa_create for additional details, which is acceptable.

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

Parameters3/5

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

All 5 parameters are described in the schema (100% coverage). The description adds some context (e.g., confirmed must be true, include example, projectPath mentions data.yml), but much of this is already in the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool runs DML (INSERT/MERGE) to populate selected nodes. It uses a specific verb+resource combination. However, it does not explicitly distinguish itself from siblings like coa_create or coa_dry_run_run, though it mentions shared pre-flight checks.

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

Usage Guidelines3/5

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

The description mentions the requirement for confirmed=true and a 30-minute timeout. It references coa_create for pre-flight checks, but does not provide explicit when-to-use or when-not-to-use guidance compared to alternatives like coa_dry_run_run.

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

coa_validateCOA ValidateA
Read-onlyIdempotent

Run coa validate β€” scans a project's YAML schemas, storage locations, column references, and types.

Known issue: V2 SQL nodes may produce false-positive column reference errors from the Column References scanner. Those don't block coa_dry_run_create / coa_dry_run_run.

Args:

  • projectPath (string, required)

  • workspace (string, optional)

  • include / exclude (string, optional): Node selector

Returns: { command, exitCode, stdout, stderr, json?, coaVersion }

ParametersJSON Schema
NameRequiredDescriptionDefault
excludeNoCOA node selector to exclude.
includeNoCOA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`.
workspaceNoCOA workspace name from workspaces.yml. Defaults to 'dev'.
projectPathYesAbsolute or relative path to the COA project root (the directory containing data.yml).

Output Schema

ParametersJSON Schema
NameRequiredDescription
jsonNo
stderrYes
stdoutYes
commandYes
exitCodeYes
timedOutYes
coaVersionYes
jsonParseErrorNo
preflightWarningsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds value by disclosing a known false-positive issue and detailing the return format (command, exitCode, stdout, etc.), which goes beyond the annotations.

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

Conciseness4/5

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

The description is concise and front-loaded with the core action. It includes a known issue, arguments, and returns without extraneous details. Every sentence contributes useful information.

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

Completeness4/5

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

Given the tool's complexity, the presence of annotations, full schema coverage, and an output schema, the description is fairly complete. It covers what is scanned, a known issue, and the return format, but could benefit from more guidance on interpreting results or prerequisites.

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

Parameters3/5

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

With 100% schema description coverage, the description's argument list largely restates the schema. No additional semantics or examples are provided beyond what is in the schema, so the added value is minimal.

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

Purpose4/5

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

The description clearly states the tool runs `coa validate` and scans YAML schemas, storage locations, column references, and types. It provides a specific verb and resource, but does not explicitly differentiate from sibling tools like `coa_doctor` or `coa_describe`.

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

Usage Guidelines3/5

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

The description mentions a known issue with false positives that do not block related tools, offering some context for when validation results may need interpretation. However, it lacks explicit guidance on when to use this tool versus alternative validation or diagnostic tools.

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

complete_node_configurationComplete Node ConfigurationA
Idempotent

Run intelligent configuration completion on a workspace node. Analyzes the node's type definition, existing config, and column layout to fill in required and recommended configuration fields.

Both creation tools call this internally, but you can invoke it separately after manual edits.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID

  • repoPath (string, optional): Local repo path for type definition lookup

Returns: { nodeID, configCompletion? | configCompletionSkipped? }

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID to configure
repoPathNoOptional path to local Coalesce repository for schema resolution
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate idempotent, non-destructive, open world. Description adds that it analyzes type definition and existing config, and can be invoked after manual edits, implying it fills without overwriting. No contradiction.

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

Conciseness5/5

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

Two short paragraphs plus bulleted Args/Returns. Front-loaded purpose, no wasted words.

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

Completeness4/5

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

Provides enough context for understanding when and how to use, including return shape. Could elaborate on 'intelligent' aspects but sufficient for typical usage.

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

Parameters4/5

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

Schema covers all 3 params (100% coverage). Description adds meaningful context for 'repoPath' (type definition lookup) and includes returns section. Baseline 3 exceeded by extra clarity.

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

Purpose5/5

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

The description clearly states the verb 'Run intelligent configuration completion' on a specific resource 'workspace node', and differentiates from siblings by noting that creation tools call it internally but it can be invoked separately.

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

Usage Guidelines4/5

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

Explicitly says when to use: after manual edits or as standalone. Does not list alternatives but context implies completion is handled internally by creation tools. Good but not exhaustive.

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

convert_join_to_aggregationConvert Join to AggregationA
Idempotent

Convert an existing join node into an aggregated fact table with GROUP BY. This is the REQUIRED follow-up after creating a multi-predecessor node β€” it completes the join setup.

This tool automatically:

  • Generates JOIN ON clauses from common columns between predecessors

  • Writes the complete FROM/JOIN/ON/GROUP BY clause to the node's joinCondition (no separate update needed)

  • Replaces columns with GROUP BY dimensions + aggregate measures

  • Infers datatypes from transform functions (COUNT β†’ NUMBER, SUM β†’ NUMBER(38,4), etc.)

  • Sets column-level attributes (isBusinessKey on GROUP BY columns, isChangeTracking on aggregates)

  • Validates that all non-aggregate columns are in GROUP BY

  • Runs intelligent config completion

Use this to transform a simple join (row-level) into an aggregated fact table (summary-level).

Example: Convert order detail join to customer metrics: { workspaceID: "1", nodeID: "fact-node-id", groupByColumns: ['"STG_ORDER_HEADER"."CUSTOMER_ID"'], aggregates: [ { name: "TOTAL_ORDERS", function: "COUNT", expression: 'DISTINCT "STG_ORDER_HEADER"."ORDER_ID"' }, { name: "LIFETIME_VALUE", function: "SUM", expression: '"STG_ORDER_HEADER"."ORDER_TOTAL"' }, { name: "AVG_ORDER_VALUE", function: "AVG", expression: '"STG_ORDER_HEADER"."ORDER_TOTAL"' } ], joinType: "INNER JOIN" }

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID of the join to convert

  • groupByColumns (string[], required): Columns to group by (dimensions)

  • aggregates (array, required): Aggregate columns with functions and expressions

  • joinType (string, optional): JOIN type (default: INNER JOIN)

  • maintainJoins (boolean, optional): Generate JOINs (default: true)

  • repoPath (string, optional): Local repo path for config completion

Returns: Updated node with new columns, joinCondition, GROUP BY analysis, and config completion results.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID of the join to convert
joinTypeNoType of JOIN to use. Defaults to INNER JOIN.
repoPathNoOptional path to local Coalesce repository for intelligent config completion
aggregatesYesAggregate columns with their functions and expressions
workspaceIDYesThe workspace ID
maintainJoinsNoIf true (default), analyzes predecessors, generates JOIN SQL, and writes the joinCondition to the node. If false, only replaces columns with aggregates without generating joins.
groupByColumnsYesColumns to group by (dimensions). Use fully-qualified names like '"TABLE"."COLUMN"'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds rich behavioral details: it automatically generates JOIN ON clauses, writes the complete FROM/JOIN/ON/GROUP BY clause, replaces columns, infers datatypes, sets column-level attributes, validates GROUP BY, and runs config completion. No contradiction with annotations.

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

Conciseness4/5

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

The description is well-structured: purpose statement, bullet list of automatic actions, example, then parameter list. It is front-loaded with the main purpose. While somewhat verbose, every sentence adds value given the tool's complexity.

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

Completeness5/5

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

Despite having 7 parameters, the description covers all aspects: what it does, how it works, what it returns, and provides an example. The output schema is implied to exist, and the description explains the return value sufficiently.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description's 'Args' section reiterates parameters with brief descriptions, but also provides a concrete example with values mapped to parameters, which adds meaningful context beyond the schema definitions.

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

Purpose5/5

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

The description clearly states the tool converts a join node into an aggregated fact table with GROUP BY. It distinguishes itself from sibling tools like 'apply_join_condition' by specifying it is the required follow-up after creating a multi-predecessor node. A concrete example is provided.

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

Usage Guidelines4/5

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

The description explicitly states this is the required follow-up after creating a multi-predecessor node, providing clear context. It does not explicitly list when not to use it or alternatives, but the context is strong enough.

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

create_environmentCreate EnvironmentA

Create a new Coalesce environment within a project.

Args:

  • projectID (string, required): The project to create the environment in

  • name (string, required): Name for the new environment

  • oauthEnabled (boolean, optional): Enable OAuth (default: false)

  • devEnv (boolean, optional): Mark as development environment (default: false)

  • connectionAccount (string, optional): Connection account identifier

  • runTimeParameters (object, optional): Runtime parameters for the environment

  • tagColors (object, optional): UI tag colors { backgroundColor, textColor }

Returns: Created environment object with assigned ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new environment
devEnvNoDefaults to false.
projectIDYesThe project ID to create the environment in
tagColorsNoOptional tag colors for the environment
oauthEnabledNoWhether OAuth is enabled. Defaults to false.
connectionAccountNoOptional connection account identifier
runTimeParametersNoOptional runtime parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare non-readOnly, non-destructive, non-idempotent. The description adds that it returns the created object but lacks details on side effects, prerequisites, or error conditions beyond creation.

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

Conciseness5/5

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

The description is a single sentence followed by a clear bullet list of arguments and returns. It is front-loaded and every element is essential and well-organized.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, nested objects, output schema), the description covers all parameters with types, defaults, and return shape. It lacks only minor context like error conditions or domain semantics, but is complete enough for an agent to use correctly.

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

Parameters3/5

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

Schema descriptions cover 100% of parameters. The description repeats parameter details and adds default values and a structured return description, but does not add significant new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Create' and resource 'environment' within a project, and explicitly distinguishes from sibling tools like delete_environment and get_environment.

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

Usage Guidelines3/5

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

The description implies use for creating environments but provides no guidance on when not to use it (e.g., duplicate names, permissions) or alternatives among siblings. No exclusions or when-to-use context.

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

create_git_accountCreate Git AccountB

Create a new Git account in Coalesce.

Args:

  • name (string, required): Account name

  • gitUsername (string, required): Git username for authentication

  • gitAuthorName (string, required): Author name for git commits

  • gitAuthorEmail (string, required): Email address for git commits

  • gitToken (string, required): Personal access token for the git provider

  • provider (enum, optional): 'github' | 'gitlab' | 'bitbucket' | 'azureDevOps'

  • accountOwner (string, optional): User ID of the account owner

Returns: Created Git account with assigned ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the git account
gitTokenYesPersonal access token or authentication token for the git provider
providerNoGit provider type
gitUsernameYesGit username for authentication
accountOwnerNoUser ID of the account owner (org admins can manage other users' accounts)
gitAuthorNameYesAuthor name used for git commits
gitAuthorEmailYesEmail address used for git commits

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds that it returns the created account with an assigned ID, which is useful but does not elaborate on side effects or security considerations.

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

Conciseness5/5

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

The description is concise, front-loaded with the purpose, and uses a clear bulleted list for parameters. Every sentence is necessary and well-structured.

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

Completeness4/5

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

The description covers the purpose, parameters, and return value. An output schema exists, but the description still mentions the return. It does not address error conditions or prerequisites, but for a create tool it is fairly complete.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes parameters. The description restates them and lists enum values for provider, but does not add significant new meaning beyond the schema.

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

Purpose4/5

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

The description clearly states the tool creates a new Git account in Coalesce, specifying the action and resource. However, it does not differentiate from sibling tools like update_git_account or get_git_account, which slightly reduces clarity.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as update_git_account or list_git_accounts. There is no mention of when not to use it or any prerequisites.

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

create_node_from_external_schemaCreate Node from External SchemaA

Create a workspace node whose output columns match an external table schema (e.g., from Snowflake DESCRIBE TABLE, dbt manifest, or any metadata source).

This tool automates the workflow of:

  1. Creating a node from predecessor(s) (auto-populates columns from source)

  2. Reconciling auto-populated columns against the external target schema

  3. Replacing columns to match the external schema exactly

Reconciliation logic:

  • Matched columns (by name): Preserves source linkage from predecessor, overrides dataType to match external schema

  • New columns (in target but not predecessor): Added without source mapping, flagged as needing a transform

  • Dropped columns (in predecessor but not target): Removed from the node

The response includes a reconciliation object showing exactly what was matched, added, dropped, and which types changed.

REQUIRED: Call plan_pipeline first to discover the correct nodeType.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeType (string, required): Node type from plan_pipeline

  • predecessorNodeIDs (string[], required): One or more predecessor node IDs

  • targetColumns (array, required): External column definitions to match

  • targetName (string, optional): Name for the new node (e.g., 'STG_ORDER_HEADER')

  • locationName (string, optional): Storage location name

  • repoPath (string, optional): Local repo path for config completion

  • goal (string, optional): Intent for node type validation

Returns: { node, reconciliation: { matched, added, dropped, typeChanges }, predecessors, validation, configCompletion?, configCompletionSkipped?, nodeTypeValidation?, nextSteps }

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoThe goal or intent for this node. Used to validate the chosen nodeType.
nodeTypeYesThe type of node to create. Call plan_pipeline first to discover and rank available node types.
repoPathNoPath to local Coalesce repository for automatic config completion.
targetNameNoName for the new node (e.g., 'STG_ORDER_HEADER'). If omitted, uses the auto-generated name from Coalesce.
workspaceIDYesThe workspace ID
locationNameNoStorage location name for the new node.
targetColumnsYesExternal column definitions describing the target table schema. Each column specifies name, dataType, and optionally nullable, description, and transform.
predecessorNodeIDsYesOne or more predecessor node IDs to link to the new node

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.6/5.0
Behavior5/5

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

The description details the reconciliation logic (matched, added, dropped, typeChanges) which goes beyond the annotations. It also clarifies that the tool is a write operation (not read-only) and is not destructive. No contradictions with annotations.

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

Conciseness4/5

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

The description is well-structured with a clear summary, workflow breakdown, and required prerequisite. It is slightly long but each section adds necessary value. Front-loaded with purpose.

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

Completeness5/5

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

Given the complexity (8 parameters, prerequisite, reconciliation logic), the description covers workflow, reconciliation, prerequisite, and response structure comprehensively. Output schema is mentioned.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds extra context for `goal`, `nodeType` (prerequisite), and `targetColumns` (auto-mapping, transform behavior), improving meaning beyond schema.

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

Purpose5/5

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

The description clearly states the tool creates a workspace node that matches an external table schema. It gives specific use cases (Snowflake DESCRIBE TABLE, dbt manifest) and distinguishes from sibling tools like `create_workspace_node_from_predecessor` and `create_workspace_node_from_scratch` by emphasizing external schema matching.

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

Usage Guidelines4/5

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

The description explicitly requires calling `plan_pipeline` first and explains the reconciliation logic. However, it does not explicitly mention when not to use this tool or list alternatives beyond the sibling tools.

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

create_pipeline_from_planCreate Pipeline from PlanA

Create a Coalesce pipeline from a previously approved plan. Pass the exact plan object returned by plan_pipeline. Projection-capable node types execute by creating predecessor-based nodes first and then persisting the final full node body via set_workspace_node.

Args:

  • workspaceID (string, required): The workspace ID

  • plan (object, required): The exact plan object returned by plan_pipeline

  • confirmed (boolean, optional): Set to true after user approves the plan. Must be paired with confirmationToken

  • confirmationToken (string, optional): Token from prior STOP_AND_CONFIRM response. Required when confirmed=true

  • dryRun (boolean, optional): When true, validate without creating nodes

Returns: { created: boolean, nodes?: CreatedNode[], warnings?: string[] }

ParametersJSON Schema
NameRequiredDescriptionDefault
planYesThe plan object returned by plan_pipeline.
dryRunNoWhen true, validate the plan and return it without creating any nodes.
confirmedNoSet to true only after presenting the plan to the user and receiving explicit approval. Must be paired with the confirmationToken returned by the prior STOP_AND_CONFIRM response.
workspaceIDYesThe workspace ID
confirmationTokenNoThe token returned in the STOP_AND_CONFIRM response. Required when confirmed=true to prove the plan was presented to the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription
planNo
errorNo
dryRunNo
reasonNo
createdNo
warningNo
cancelledNo
nodeCountNo
incompleteNo
workspaceIDNo
createdNodesNo
cleanupFailuresNo
STOP_AND_CONFIRMNo
failedPlanNodeIDNo
cleanupFailedNodeIDsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds behavioral detail about projection-capable node types being created in two steps, which is useful beyond annotations. No contradiction found.

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

Conciseness4/5

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

The description is concise with a clear initial sentence and a parameter list. The list is somewhat lengthy but well-structured. Every sentence adds value, though the parameter section mirrors the schema.

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

Completeness4/5

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

Given the complexity and presence of output schema, the description covers the main workflow: plan input, confirmation process, dryRun option, and return type. It could mention plan must be from plan_pipeline and status 'ready', but overall complete.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes all parameters thoroughly. The description repeats the parameter definitions without adding significant new meaning. The extra detail about projection-capable nodes is not parameter-specific.

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

Purpose5/5

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

Description clearly states 'Create a Coalesce pipeline from a previously approved plan' with specific verb and resource. It distinguishes from siblings like plan_pipeline and build_pipeline_from_intent by specifying the input is the exact plan object.

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

Usage Guidelines4/5

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

The description says to pass the exact plan from plan_pipeline and requires user approval via confirmed and confirmationToken. It provides clear context for when to use but does not explicitly mention alternatives or when not to use. The confirmation token requirement adds strong usage guidance.

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

create_pipeline_from_sqlCreate Pipeline from SQLA

Plan and create a Coalesce pipeline from user-provided SQL. Pass the user's EXACT SQL unchanged. The SQL may use raw table names or already contain Coalesce {{ ref() }} syntax if that is what the user provided. Do NOT rewrite between styles or otherwise modify the query. The planner resolves workspace sources automatically and generates a Coalesce-compatible joinCondition for the final node.

If you are building a pipeline yourself, use declarative tools directly: create_workspace_node_from_predecessor β†’ convert_join_to_aggregation β†’ replace_workspace_node_columns.

This tool validates candidate node types against currently observed workspace nodes. If a selected type is not observed, the plan will include a warning asking the user to confirm installation in Coalesce.

Consult coalesce://context/node-type-corpus for node type patterns and metadata structures.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe user's EXACT SQL, copied verbatim. It may use raw table names or existing Coalesce {{ ref() }} syntax. Do NOT rewrite between SQL styles or modify it in any way. Pass it exactly as the user provided it.
goalNoOptional business goal or context for the SQL
dryRunNoWhen true, return the generated plan without creating nodes.
schemaNoOptional target schema
databaseNoOptional target database
repoPathNoOptional local committed Coalesce repo path for repo-first node-type ranking. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
confirmedNoSet to true only after presenting the ready plan to the user and receiving explicit approval. Must be paired with the confirmationToken returned by the prior STOP_AND_CONFIRM response.
targetNameNoOptional target node name override
descriptionNoOptional node description
workspaceIDYesThe workspace ID
locationNameNoOptional target locationName
targetNodeTypeNoOptional node type override. When omitted, the planner ranks repo-backed and observed workspace node types for the use case.
configOverridesNoOptional config overrides to merge into the final node body.
confirmationTokenNoThe token returned in the STOP_AND_CONFIRM response. Required when confirmed=true to prove the plan was presented to the user.

Output Schema

ParametersJSON Schema
NameRequiredDescription
planNo
errorNo
dryRunNo
reasonNo
createdNo
warningNo
cancelledNo
nodeCountNo
incompleteNo
workspaceIDNo
createdNodesNo
cleanupFailuresNo
STOP_AND_CONFIRMNo
failedPlanNodeIDNo
cleanupFailedNodeIDsNo

TDQS

A4.8/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing that SQL is passed unchanged, planner auto-resolves sources, validates node types, warns if type not observed, and requires confirmation token. No contradiction with annotations.

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

Conciseness4/5

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

The description is structured in clear paragraphs: core purpose, alternative usage, validation behavior, consultation reference. It is informative without being overly verbose, though could be slightly more concise.

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

Completeness5/5

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

Given the complexity (14 params, nested object, output schema exists), the description covers essential behavior, usage boundaries, and parameter semantics. It is complete and provides sufficient context for an AI agent to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% with good descriptions. The description adds significant usage context for parameters like sql (must be exact), confirmed/confirmationToken pairing, and dryRun purpose. Baseline 3, but value add justifies 4.

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

Purpose5/5

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

The description clearly states the tool plans and creates a pipeline from user-provided SQL. It specifies the exact verb and resource, and distinguishes from sibling tools by explicitly noting an alternative tool sequence for manual pipeline building.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: use when user provides SQL, not when building manually (alternative tools given). It also mentions validation behavior and consultation of node-type corpus.

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

create_projectCreate ProjectA

Create a new Coalesce project.

Args:

  • name (string, required): Project name

  • platformKind (enum, required): Target platform β€” 'snowflake', 'databricks', 'starburst', or 'spark'

  • description (string, optional): Project description

  • gitAccountID (string, optional): Git account to link

  • gitRepo (string, optional): Git repository URL

  • gitBranch (string, optional): Default git branch

Returns: Created project object with assigned ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new project
gitRepoNoGit repository URL
gitBranchNoDefault git branch name
descriptionNoOptional project description
gitAccountIDNoGit account ID to link to the project
platformKindYesTarget platform for the project

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint false and destructiveHint false, confirming modification but not destruction. The description adds that it returns a created project with an assigned ID, providing useful post-creation behavior. No contradictions.

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

Conciseness5/5

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

The description is concise, front-loaded with the purpose, followed by a clean list of parameters and return value. Every sentence adds value with no waste.

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

Completeness5/5

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

Given the tool's complexity, full schema coverage, annotations, and output schema, the description is complete. It covers purpose, parameters, and return value without gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes each parameter. The description repeats parameters with types and required status, which is redundant but reinforces the information. It does not add meaningful new semantics beyond the schema.

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

Purpose5/5

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

The description clearly states 'Create a new Coalesce project' with a specific verb and resource. It is distinct from siblings like update_project, get_project, and delete_project, which focus on update, read, or delete operations.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. While it's implied for creation, there is no guidance on prerequisites or exclusions. With many siblings, more explicit context would help.

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

create_workspace_jobCreate Workspace JobA

Create a new job in a Coalesce workspace. Jobs define which nodes to run together.

Args:

  • workspaceID (string, required): The workspace ID

  • name (string, required): Job name

  • includeSelector (string, required): Node selector. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'. Use empty string to include nothing

  • excludeSelector (string, required): Node exclusion selector. Same format as includeSelector. Use empty string to exclude nothing

Returns: Created job with assigned ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the job
workspaceIDYesThe workspace ID
excludeSelectorYesNode exclusion selector string. Same format as includeSelector. Use empty string to exclude nothing.
includeSelectorYesNode selector string. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'. Use empty string to include nothing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false (write operation) and destructiveHint=false. The description adds value by detailing the required parameters and the format of selectors, and noting that empty strings exclude nothing. This provides transparency beyond annotations.

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

Conciseness5/5

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

The description is extremely conciseβ€”three short paragraphs covering purpose, parameters with examples, and return value. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Given the complexity (4 required params, all simple strings) and the presence of an output schema (though not shown), the description is complete enough. It covers all necessary aspects for a creation tool: what it does, required inputs with format, and the return value.

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

Parameters4/5

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

Schema coverage is 100%, but the description enhances understanding by providing concrete format examples for includeSelector and excludeSelector, and clarifying that empty strings are valid. This adds meaning beyond the schema's generic descriptions.

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

Purpose5/5

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

The description clearly states it creates a new job in a Coalesce workspace, using the specific verb 'Create', and identifies the resource type. It distinguishes from sibling tools like update_workspace_job, delete_workspace_job, and find_jobs_by_name by focusing on creation.

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

Usage Guidelines4/5

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

The description specifies what the tool does and provides detailed parameter information, making it clear when to use it (to create a job). It does not explicitly state when not to use it or list alternatives, but given its unique purpose among siblings, the context is sufficient.

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

create_workspace_node_from_predecessorCreate Workspace Node from PredecessorA

Create a workspace node from one or more predecessor nodes, fetch it, and verify that columns were auto-populated from those predecessors before applying any optional changes.

SINGLE-CALL WORKFLOW: You can create a node AND apply column transforms, WHERE filters, or aggregation in one call:

  • columns + whereCondition: Replace auto-populated columns with specific transforms and add a WHERE filter β€” no separate replace_workspace_node_columns needed

  • groupByColumns + aggregates: Convert to an aggregation node with GROUP BY β€” no separate convert_join_to_aggregation needed These are mutually exclusive: use columns OR groupByColumns+aggregates, not both.

REQUIRED: Before calling this tool, call plan_pipeline with goal, sourceNodeIDs, and repoPath to discover and rank available node types. Use the nodeType from the plan result β€” do NOT guess or hardcode node types like 'Stage', 'View', or numeric IDs like '65'. The planner scans all committed node type definitions and scores them against your use case.

SPECIALIZED TYPES WARNING: Do NOT use Dynamic Tables, Incremental Load, Materialized View, or other specialized types unless the user explicitly requests that pattern (e.g., 'near-real-time refresh', 'continuous refresh', 'incremental processing'). For standard batch ETL, CTE decomposition, and general transforms, use Stage or Work. The response includes nodeTypeValidation.warning if a specialized pattern was detected without matching context β€” always check this field.

JOIN INTELLIGENCE: For multi-predecessor nodes (joins), this tool automatically:

  • Analyzes common columns between each predecessor pair

  • Returns joinSuggestions with normalized column names and their left/right counterparts

  • Reports which predecessors are represented in the resulting column references

  • Warns if any predecessor is missing from the auto-populated columns

AUTOMATIC CONFIG: When repoPath is provided, this tool automatically runs intelligent config completion after creation β€” reading the node type definition, setting node-level config defaults, and applying column-level attributes (isBusinessKey, isChangeTracking, etc.). The configCompletion result shows what was applied.

Do not use overrideSQL or override.* fields; SQL override is disallowed in this project.

For guidance on node types, storage locations, and SQL patterns, see resources: coalesce://context/data-engineering-principles, coalesce://context/storage-mappings, coalesce://context/sql-platform-selection

Args:

  • workspaceID (string, required): The workspace ID

  • nodeType (string, required): Node type from plan_pipeline

  • predecessorNodeIDs (string[], required): One or more predecessor node IDs

  • changes (object, optional): Partial fields to apply after creation

  • columns (array, optional): Replace auto-populated columns (mutually exclusive with groupByColumns)

  • whereCondition (string, optional): WHERE filter (only with columns)

  • groupByColumns (string[], optional): GROUP BY columns (with aggregates)

  • aggregates (array, optional): Aggregate columns (with groupByColumns)

  • joinType (string, optional): JOIN type for multi-predecessor aggregation

  • repoPath (string, optional): Local repo path for config completion

  • goal (string, optional): Intent for node type validation

Returns: { nodeID, created, joinSuggestions?, nodeTypeValidation?, configCompletion? }

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoThe goal or intent for this node (e.g., 'deduplicate customer records', 'join orders with customers'). Used to validate that the chosen nodeType is appropriate for the task. Same value you would pass to plan_pipeline.
changesNoOptional partial fields to apply after successful auto-population validation, such as name, description, config, metadata, database, schema, or locationName.
columnsNoReplace auto-populated columns with these specific columns and transforms. Mutually exclusive with groupByColumns/aggregates.
joinTypeNoJOIN type for multi-predecessor aggregation nodes. Defaults to INNER JOIN.
nodeTypeYesThe type of node to create. IMPORTANT: Call plan_pipeline first to discover and rank available node types β€” use the nodeType from its result. Format: 'PackageName:::ID' for package types (e.g., 'base-nodes:::Stage') or simple name ('Stage') for built-in types. Always prefer the package-prefixed format returned by plan_pipeline.
repoPathNoPath to local Coalesce repository for automatic config completion after creation.
aggregatesNoAggregate columns. Must be provided with groupByColumns. Mutually exclusive with columns.
workspaceIDYesThe workspace ID
groupByColumnsNoGROUP BY columns for aggregation. Must be provided with aggregates. Mutually exclusive with columns.
whereConditionNoWHERE filter to append to the joinCondition (without the WHERE keyword). Only valid with columns, not with groupByColumns/aggregates.
predecessorNodeIDsYesOne or more predecessor node IDs to link to the new node

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.9/5.0
Behavior5/5

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

Discloses automatic config completion, join intelligence with joinSuggestions, and nodeTypeValidation warnings. Annotations (readOnlyHint=false, etc.) are consistent; description adds context about mutability and side effects beyond annotations.

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

Conciseness4/5

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

Well-structured with headings and front-loaded purpose, but lengthy. Every sentence adds value given tool complexity. Could be slightly more concise, but appropriate for the feature-rich tool.

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

Completeness5/5

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

Covers entire workflow: prerequisite planning, single-call options, specialized types warning, join intelligence, automatic config, and references external resources. Output schema exists, so return values are handled separately. Highly complete.

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

Parameters5/5

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

Schema coverage is 100%, but description adds critical meaning: mutual exclusivity of columns vs groupByColumns+aggregates, required nodeType from plan_pipeline, goal for validation, and detailed explanations for changes, whereCondition, and other parameters.

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

Purpose5/5

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

States explicit verb+resource: 'Create a workspace node from one or more predecessor nodes'. Distinguishes from siblings like create_workspace_node_from_scratch by emphasizing predecessor-based creation and auto-population verification.

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

Usage Guidelines5/5

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

Provides explicit when-to-use: single-call workflow for combined creation/transforms, warnings against guessing node types, requirement to call plan_pipeline first, and exclusion of overrideSQL. Clearly differentiates from replace_workspace_node_columns and convert_join_to_aggregation.

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

create_workspace_node_from_scratchCreate Workspace Node from ScratchA

Create a workspace node from scratch with NO predecessors. Only use this when the node truly has no upstream nodes β€” for example, a standalone utility node. If the node has ANY upstream/source nodes, use create_workspace_node_from_predecessor instead.

REQUIRED: Before calling this tool, call plan_pipeline with goal + repoPath to discover the correct nodeType. Do not guess or hardcode node types β€” the planner ranks all available types and returns the best match.

SPECIALIZED TYPES WARNING: Do NOT use Dynamic Tables, Incremental Load, Materialized View, or other specialized types unless the user explicitly requests that pattern (e.g., 'near-real-time refresh', 'incremental processing'). For standard batch ETL, CTE decomposition, and general transforms, use Stage or Work. The response includes nodeTypeValidation.warning if a specialized pattern was detected without matching context.

Defaults to completionLevel='configured', which REQUIRES both name and metadata.columns to be provided. If you don't have column definitions yet, set completionLevel to 'created' or 'named' instead.

AUTOMATIC CONFIG: When repoPath is provided, this tool automatically runs intelligent config completion after creation β€” reading the node type definition, setting node-level config defaults, and applying column-level attributes. The configCompletion result shows what was applied.

Do not use overrideSQL or override.* fields; SQL override is disallowed in this project.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNoThe goal or intent for this node (e.g., 'deduplicate customer records', 'aggregate daily sales'). Used to validate that the chosen nodeType is appropriate for the task. Same value you would pass to plan_pipeline.
nameNoOptional node name to apply after creation.
configNoOptional config object to apply after creation.
changesNoOptional additional partial fields to merge after the node is created and fetched.
metadataNoOptional metadata object to apply after creation, including metadata.columns.
nodeTypeYesThe type of node to create. IMPORTANT: Call plan_pipeline first to discover and rank available node types β€” use the nodeType from its result. Format: 'PackageName:::ID' for package types (e.g., 'base-nodes:::Stage') or simple name ('Stage') for built-in types. Always prefer the package-prefixed format returned by plan_pipeline.
repoPathNoPath to local Coalesce repository for automatic config completion after creation.
descriptionNoOptional node description to apply after creation.
workspaceIDYesThe workspace ID
completionLevelNoHow complete the node should be before the tool returns. Defaults to configured.
storageLocationsNoOptional storageLocations array to apply after creation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate non-readOnly and openWorld. The description adds key behavioral details: default completionLevel requiring name and columns, automatic config completion when repoPath is provided, disallowed override fields, and warning responses. This substantially enriches transparency beyond annotations.

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

Conciseness4/5

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

The description is relatively long but every sentence adds value. It is front-loaded with purpose and usage, uses bold and caps for warnings, and organizes information logically. Given the tool's complexity, the length is justified and it remains focused.

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

Completeness5/5

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

Given the tool's 11 parameters, nested objects, and output schema, the description covers prerequisites, edge cases, completion behaviors, automatic config, disallowed fields, and response warnings comprehensively. It leaves no significant gaps for an AI agent to infer.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds context about how parameters interact (completionLevel requires name and columns, nodeType should come from plan_pipeline, repoPath triggers automation) and prerequisites (goal used for validation), going beyond the schema's individual descriptions.

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

Purpose5/5

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

The description explicitly states 'Create a workspace node from scratch with NO predecessors,' clearly distinguishing it from the sibling tool create_workspace_node_from_predecessor. It provides specific examples (standalone utility node) and specifies when not to use it, making the purpose highly clear.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use and when-not-to-use conditions, directly naming the alternative tool. It mandates calling plan_pipeline before this tool, warns about specialized types and completionLevel defaults, and provides concrete prerequisites, achieving full usage guidance.

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

create_workspace_subgraphCreate Workspace SubgraphA

Create a subgraph in a Coalesce workspace. Subgraphs group nodes visually. The assigned UUID is cached locally so future edits can reference the subgraph by name.

Args:

  • workspaceID (string, required): The workspace ID

  • name (string, required): Subgraph name

  • steps (string[], required): Array of node IDs to include

Returns: { subgraphID, subgraph, cached, message } β€” subgraphID is the UUID; cache it if you need to edit this subgraph later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the subgraph
stepsYesArray of node IDs to include in the subgraph
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint false), description discloses caching behavior of UUID and return format. Adds value by explaining that the subgraph ID is cached for later reference, which is not evident from annotations.

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

Conciseness5/5

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

Two concise paragraphs with Args/Returns sections. No redundant information. Front-loaded with purpose. Every sentence earns its place.

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

Completeness5/5

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

For a simple creation tool with 3 required parameters, the description covers purpose, parameters, return shape, and a behavioral note (caching). No output schema needed as description provides return structure.

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

Parameters3/5

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

All three parameters are documented in schema (100% coverage). Description restates them but adds minimal new semantics (e.g., steps are node IDs). Baseline 3 applies as schema does the heavy lifting.

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

Purpose5/5

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

Description clearly states 'Create a subgraph in a Coalesce workspace' with specific verb and resource, and explains subgraphs group nodes visually. Distinguishes from sibling tools like delete/update/get.

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

Usage Guidelines3/5

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

Mentions caching for future edits, implying when to use (when later edits are needed), but does not explicitly state when not to use or provide alternatives. Usage context is implied but not exhaustive.

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

delete_environmentDelete EnvironmentA
Destructive

Permanently delete a Coalesce environment. This is destructive and cannot be undone.

Args:

  • environmentID (string, required): The environment ID to delete

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoSet to true after the user explicitly confirms the deletion.
environmentIDYesThe environment ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description reinforces by stating 'permanently delete' and 'cannot be undone', and explains the confirmation mechanism. Adds value beyond annotations.

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

Conciseness5/5

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

The description is concise: a single sentence stating purpose, then structured Args and Returns sections. Every sentence is necessary and front-loaded.

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

Completeness5/5

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

For a simple destructive tool with an output schema, the description covers purpose, required parameters, confirmation requirement, and return type. No gaps.

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

Parameters3/5

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

Schema coverage is 100%, so baseline 3. The description lists parameters in Args format, but adds no new information beyond what the schema already provides (e.g., 'confirmed' explanation is identical).

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

Purpose5/5

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

The description clearly states 'Permanently delete a Coalesce environment' with explicit verb 'delete' and resource 'environment'. It distinguishes from siblings like 'create_environment' by emphasizing destructiveness.

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

Usage Guidelines4/5

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

The description warns this is destructive and irreversible, and explains the 'confirmed' parameter requires explicit user confirmation. It provides clear usage context but doesn't explicitly mention when not to use.

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

delete_env_roleDelete Env RoleA
Destructive

Remove a user's role from a specific environment. Destructive β€” the user will lose environment access immediately.

Args:

  • userID (string, required): The user ID

  • environmentID (string, required): The environment ID

  • confirmed (boolean, optional): Set to true after the user explicitly confirms the role removal

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIDYesThe user ID
confirmedNoSet to true after the user explicitly confirms the role removal.
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses that the user loses environment access immediately, which goes beyond the annotation's destructiveHint=true. It also explains the optional 'confirmed' parameter for explicit user confirmation.

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

Conciseness5/5

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

The description is brief and well-structured: a one-sentence purpose, a warning, a clear list of arguments, and a return description. No extraneous information.

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

Completeness4/5

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

Given the tool's simplicity (3 parameters, no enums), the description covers the main points: purpose, immediate destructive effect, required and optional parameters, and return type. Could optionally mention that the role must exist, but not necessary for completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description lists the three parameters with types and requiredness, and adds context for 'confirmed' (user confirmation). However, it does not significantly extend beyond the schema's own descriptions.

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

Purpose5/5

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

The description clearly states the action: 'Remove a user's role from a specific environment.' It specifies the resource (role), verb (remove), and context (environment). It is distinct from sibling tools like set_env_role which adds/updates roles.

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

Usage Guidelines4/5

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

The description notes that the action is destructive and immediate, implying it should be used only when removal is intended. It does not explicitly list alternatives (e.g., set_role with null), but the clear labeling and sibling context suffice.

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

delete_git_accountDelete Git AccountA
Destructive

Permanently delete a Git account. Destructive and cannot be undone β€” if this is the only git account linked to a project, it breaks the CI/CD connection.

Args:

  • gitAccountID (string, required): The account ID

  • accountOwner (string, optional): User ID of the account owner

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoSet to true after the user explicitly confirms the deletion.
accountOwnerNoUser ID of the account owner (org admins can manage other users' accounts)
gitAccountIDYesThe git account ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.8/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: it states the action is permanent, cannot be undone, and specifies consequences like breaking CI/CD. It also clarifies the purpose of the 'confirmed' parameter to prevent accidental deletion.

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

Conciseness5/5

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

The description is concise, with a single paragraph followed by bullet points for args and returns. Every sentence adds value, and the main action is front-loaded.

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

Completeness5/5

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

The description covers the tool's behavior, parameters, consequences, and return type (confirmation message). Given the availability of an output schema, this is complete and sufficient.

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

Parameters5/5

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

The description explains all three parameters in detail: gitAccountID (the account ID), accountOwner (optional, for org admins), and confirmed (set to true after explicit confirmation). This adds meaning beyond the schema, especially for the 'confirmed' parameter.

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

Purpose5/5

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

The description explicitly states 'Permanently delete a Git account.' It is a specific verb-resource pair, and the tool name and description clearly distinguish it from siblings like 'update_git_account' and 'get_git_account'.

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

Usage Guidelines4/5

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

The description explains the destructive nature and warns about breaking CI/CD if it's the only account linked to a project. While it doesn't explicitly list alternatives or when not to use, the context is clear enough for the agent to understand the tool's purpose and impact.

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

delete_projectDelete ProjectA
Destructive

Permanently delete a Coalesce project. This is destructive and cannot be undone.

Args:

  • projectID (string, required): The project ID

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmedNoSet to true after the user explicitly confirms the deletion.
projectIDYesThe project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already set destructiveHint=true. The description adds important behavioral context: the deletion is permanent, irreversible, and requires explicit user confirmation. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise: two sentences plus an arg list. The core action and destructiveness are front-loaded. Every sentence adds value, with no redundancy.

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

Completeness5/5

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

Given the simple two-parameter schema, good annotations, and presence of an output schema, the description fully covers the tool's purpose, required parameters, confirmation flow, and return type.

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

Parameters3/5

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

Schema coverage is 100% with parameter descriptions already present. The description repeats parameter names and types but adds little 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.

Purpose5/5

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

The description states 'Permanently delete a Coalesce project' with a clear verb (delete) and resource (project). It emphasizes the irreversible, destructive nature, distinguishing it from sibling tools like create_project or update_project.

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

Usage Guidelines4/5

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

The description explicitly states the tool is destructive and cannot be undone, and requires user confirmation via the 'confirmed' parameter. While it doesn't explicitly name alternative tools, the context is clear and sufficient for an agent to decide when to use it.

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

delete_project_roleDelete Project RoleA
Destructive

Remove a user's role from a specific project. Destructive β€” the user will lose project access immediately.

Args:

  • userID (string, required): The user ID

  • projectID (string, required): The project ID

  • confirmed (boolean, optional): Set to true after the user explicitly confirms the role removal

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIDYesThe user ID
confirmedNoSet to true after the user explicitly confirms the role removal.
projectIDYesThe project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.4/5.0
Behavior5/5

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

The description adds value beyond annotations by explaining the immediate effect on user access and the need for confirmation. It also describes the return value. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise, with a clear header, warning, and structured Args/Returns sections. Every sentence adds value.

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

Completeness4/5

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

Given the low complexity and presence of annotations and output schema, the description provides sufficient context. The return value 'Confirmation message' is mildly vague but acceptable for a destructive action.

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

Parameters3/5

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

Schema coverage is 100% and the description repeats the parameter info from the schema. It adds minimal extra meaning 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.

Purpose5/5

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

The description starts with 'Remove a user's role from a specific project', which is a clear verb+resource combination. It distinguishes itself from sibling deletion tools like delete_env_role and delete_environment by specifying 'project role'.

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

Usage Guidelines4/5

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

The description explicitly warns 'Destructive β€” the user will lose project access immediately' and includes a 'confirmed' parameter requiring explicit user confirmation, providing clear usage guidance. However, it could benefit from mentioning when not to use this tool (e.g., alternatives like set_project_role).

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

delete_workspace_jobDelete Workspace JobA
Destructive

Delete a job from a workspace. Destructive β€” jobs define which nodes run together; deleting the wrong one breaks scheduled pipelines.

Args:

  • workspaceID (string, required): The workspace ID

  • jobID (string, required): The job ID

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIDYesThe job ID to delete
confirmedNoSet to true after the user explicitly confirms the deletion.
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already indicate destructiveHint=true, and the description adds valuable context by explaining what jobs do ('define which nodes run together') and the specific consequence of deleting the wrong one ('breaks scheduled pipelines'). No contradiction with annotations.

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

Conciseness5/5

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

The description is concise and front-loaded with the essential action and warning. It uses a single impactful sentence followed by a structured list of parameters and return value, with no redundant content.

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

Completeness4/5

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

The tool has an output schema (unshown) and the description mentions 'Confirmation message' as return. Given the destructive nature, the description adequately covers behavior, safety, and consequences. Slightly more detail on the confirmation format could be added but is not necessary.

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

Parameters3/5

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

The input schema has 100% description coverage for all three parameters. The description's 'Args' list restates the schema's descriptions without adding new information, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Delete a job from a workspace' with a specific verb and resource. It distinguishes from sibling tools like 'create_workspace_job' and 'update_workspace_job' by warning about destructive consequences, making the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

The description explicitly warns about the destructive nature ('deleting the wrong one breaks scheduled pipelines') and includes a safety confirmation parameter. While it doesn't name alternative tools, the warning provides clear context 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.

delete_workspace_nodeDelete Workspace NodeA
Destructive

Permanently delete a workspace node. Destructive β€” check for downstream dependencies first. Before mutating, the tool resolves the node via get_workspace_node and blocks the delete if the ID does not exist.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message plus the resolved node name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID to delete
confirmedNoSet to true after the user explicitly confirms the deletion.
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.7/5.0
Behavior5/5

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

Description adds significant value beyond annotations: 'Permanently delete', 'check for downstream dependencies first', and 'resolves the node via get_workspace_node and blocks the delete if the ID does not exist'. No contradiction with destructiveHint: true.

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

Conciseness5/5

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

Three sentences plus a brief Args listβ€”every sentence earns its place. Purpose is front-loaded, no redundancy, and the structure is clear and efficient.

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

Completeness5/5

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

Covers all aspects: purpose, caution about dependencies, pre-validation, optional confirmation parameter, and return value ('Confirmation message plus the resolved node name'). Adequate for an agent to decide and invoke.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description's Args section adds behavioral context (e.g., confirmed is optional and for user confirmation) and explains pre-validation logic, which goes beyond the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states 'Permanently delete a workspace node', specifying the action (delete), resource (workspace node), and permanence. It distinguishes from sibling tools like update_workspace_node or create_workspace_node.

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

Usage Guidelines4/5

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

The description explicitly warns 'Destructive β€” check for downstream dependencies first', providing guidance on when to use caution. It also mentions pre-validation (block if ID not found). While it doesn't name specific alternatives, it implies usage context for deletion.

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

delete_workspace_subgraphDelete Workspace SubgraphA
Destructive

Delete a subgraph from a workspace. Destructive β€” the subgraph is removed but its member nodes are NOT deleted. Pass either subgraphID (preferred) or subgraphName with optional repoPath.

Args:

  • workspaceID (string, required): The workspace ID

  • subgraphID (string, optional): The subgraph ID. Preferred when known.

  • subgraphName (string, optional): The subgraph name. Resolved via cache β†’ repo when subgraphID is absent (the Coalesce API has no subgraph list endpoint).

  • repoPath (string, optional): Coalesce repo path for subgraph YAML lookup.

  • confirmed (boolean, optional): Set to true after the user explicitly confirms deletion

Returns: Confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoPathNoOptional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile.
confirmedNoSet to true after the user explicitly confirms the deletion.
subgraphIDNoThe subgraph ID to delete. Preferred when known.
workspaceIDYesThe workspace ID
subgraphNameNoThe subgraph name. Resolved via cache β†’ repo when subgraphID is absent (the Coalesce API has no subgraph list endpoint).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark destructive; description adds 'member nodes are NOT deleted' and explains name resolution process, providing critical beyond-annotation context.

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

Conciseness5/5

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

Concise, front-loaded with action and outcome. Arg list is well-organized. No superfluous sentences.

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

Completeness5/5

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

With output schema present, description adequately covers behavior, parameter resolution, and return type. No gaps for the tool's complexity.

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

Parameters4/5

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

Schema covers all parameters; description adds resolution logic for subgraphName and preferred status for subgraphID, enhancing utility beyond schema.

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

Purpose5/5

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

Description clearly states the action (delete a subgraph) and distinguishes from siblings by specifying what is affected (nodes not deleted). Verb+resource structure is explicit.

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

Usage Guidelines4/5

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

Describes when to use subgraphID vs subgraphName with repoPath, and mentions confirmation requirement. Lacks explicit when-not-to-use but infers well from destructive nature.

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

diagnose_run_failureDiagnose Run FailureA
Read-onlyIdempotent

Diagnose a failed Coalesce run. Fetches run metadata and per-node results, classifies each failure (SQL error, missing object, permission issue, data type mismatch, timeout, configuration error), and returns actionable fix suggestions.

Use this when a run has failed and the user wants to understand what went wrong and how to fix it. Works best with completed (failed) runs β€” for in-progress runs, use run_status instead.

Returns: run summary, per-node failure diagnosis with error classification, and prioritized recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIDYesThe numeric run ID (integer, e.g. '401'). Use the runCounter value from start_run or run_status responses β€” not the UUID from run URLs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
runIDNo
endTimeNo
runTypeNo
summaryNo
failuresNo
warningsNo
runStatusNo
startTimeNo
analyzedAtNo
environmentIDNo
recommendationsNo

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and not destructive. Description adds value by explaining it fetches metadata and per-node results, classifies failure types, and returns recommendations. No contradictions.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, then usage, then output. Every sentence adds value. No wasted words.

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

Completeness5/5

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

Description covers input (runID), when to use, what the tool does (failure classification, recommendations), and output summary. Given complexity and existing output schema, description is complete.

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

Parameters5/5

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

Only one parameter runID. Description adds critical context: use runCounter from start_run/run_status, not UUID from URLs. This guidance goes beyond the schema's description, helping the agent avoid common errors.

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

Purpose5/5

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

Description clearly states it diagnoses failed Coalesce runs, fetches metadata and per-node results, classifies failures, and returns fix suggestions. Distinguishes from sibling run_status by specifying it's for completed failed runs.

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

Usage Guidelines5/5

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

Explicitly says when to use (failed runs) and when not (in-progress runs), names alternative tool run_status. Provides context that it works best with completed failed runs.

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

diagnose_setupDiagnose SetupA
Read-onlyIdempotent

Stateless probe that reports which first-time-setup pieces are configured: Coalesce access token, Snowflake credentials (for run tools + coa_create/coa_run), local repo path + whether it's a COA project, and a best-effort coa doctor check when applicable.

Returns a structured report plus ordered nextSteps. Use this during or after the /coalesce-setup prompt flow to confirm progress between phases.

Never throws. Safe to call repeatedly.

Returns: { accessToken: { status, ... }, snowflakeCreds: { status, ... }, repoPath: { status, ... }, coaDoctor: { status, ... }, nextSteps: string[], ready: boolean }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
readyYes
repoPathYes
coaConfigYes
coaDoctorYes
nextStepsYes
accessTokenYes
snowflakeCredsYes
projectWarningsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive. The description adds that it never throws, is safe to call repeatedly, and returns a structured report with nextSteps, providing useful behavioral context beyond annotations.

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

Conciseness5/5

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

The description is concise (5 sentences), front-loaded with purpose, and every sentence provides essential information without redundancy. No wasted words.

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

Completeness5/5

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

Given no parameters and a rich output schema, the description covers purpose, behavior, usage context, and return structure comprehensively. It is complete for a diagnostic tool.

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

Parameters4/5

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

No parameters exist, so schema coverage is 100%. The description focuses on the output, detailing the return fields including status, nextSteps, and ready, which adds value beyond the schema.

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

Purpose5/5

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

The description clearly identifies it as a 'stateless probe' for first-time-setup configuration, listing specific components (access token, Snowflake credentials, repo path, coa doctor). It distinguishes itself from sibling tools like 'coa_doctor' and 'diagnose_run_failure'.

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

Usage Guidelines4/5

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

Explicitly states to use 'during or after the /coalesce-setup prompt flow to confirm progress' and notes it is safe to call repeatedly. Implicitly suggests it is not for runtime diagnostics, but does not explicitly list when to avoid.

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

find_jobs_by_nameFind Environment Jobs by NameA
Read-onlyIdempotent

Fuzzy-match jobs in an environment by name (case-insensitive substring), and return each match with its most recent runs. Use this when the user references a job by name and you need the job's ID or recent execution history.

Scans the last 50 runs in the environment and groups them by matched job. Runs that fall outside that window are not returned β€” for older history call list_runs with explicit pagination.

Args:

  • environmentID (string, required): The environment ID

  • jobName (string, required): Substring to match (case-insensitive)

  • runLimitPerJob (integer, optional): Max recent runs per matched job (default 5)

Returns: { matches: [{ job: {id, name, includeSelector, excludeSelector}, recentRuns: [{runID, runCounter, runStatus, runType, runStartTime, runEndTime}] }], summary: { jobsMatched, totalRunsReturned, runScanLimit } }

ParametersJSON Schema
NameRequiredDescriptionDefault
jobNameYesSubstring to match against job names (case-insensitive)
environmentIDYesThe environment ID
runLimitPerJobNoMax recent runs per matched job (default 5, max 50)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, etc. The description adds the crucial detail that only the last 50 runs are scanned, runs outside that window are not returned. This explains the behavioral limitation beyond what annotations provide.

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

Conciseness4/5

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

Well-structured: clear purpose, usage context, limitation, then organized Args and Returns blocks. Front-loaded with key information. Every sentence adds value, though the Args block slightly overlaps with the schema.

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

Completeness5/5

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

Given the schema coverage, annotations, and the provided output schema in the description, the description fully explains the tool's behavior, parameters, return format, and limitations. No gaps in understanding for an agent.

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

Parameters3/5

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

Schema covers all 3 parameters with descriptions (100% coverage). The description adds the default value of 5 for runLimitPerJob and its maximum of 50, providing marginal additional value. No further semantic enrichment needed.

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

Purpose5/5

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

The description specifies the action: fuzzy-matching jobs by name case-insensitively, returning matches with recent runs. It clearly distinguishes from sibling tools like list_environment_jobs and list_runs by focusing on name-based search with limited run history.

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

Usage Guidelines5/5

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

Explicitly states when to use: when the user references a job by name and needs ID or recent execution history. Provides exclusions: runs outside the last 50 are not returned, directing to list_runs with pagination for older history. Names an alternative tool.

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

generate_set_workspace_node_templateGenerate Set Workspace Node TemplateA
Read-onlyIdempotent

Generate a YAML-friendly set_workspace_node body template either from a raw node definition object or by resolving a committed node type from a local repo. Prefer repo mode when a local committed repo contains the definition; use the corpus tools when repo-backed resolution is unavailable. SQL override controls are removed from returned templates because they are disallowed in this project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDNoOptional node ID for comparing inferred mappings to a live workspace node.
schemaNoOptional schema value to include in the template.
databaseNoOptional database value to include in the template.
nodeNameNoOptional node name to inject into the generated template.
nodeTypeNoExact repo node type identifier in repo mode, or optional nodeType override in raw mode.
repoPathNoOptional local committed repo path for repo mode. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
definitionNoRaw parsed node definition object for template generation in raw mode.
workspaceIDNoOptional workspace ID for comparing inferred mappings to a live workspace node.
locationNameNoOptional storage location name to include in the template.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
comparisonNo
nodeDefinitionNo
nodeMetadataSpecYamlNo
setWorkspaceNodeBodyTemplateNo
setWorkspaceNodeBodyTemplateYamlNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds behavioral context by stating SQL override controls are removed because they are disallowed, which is additional transparency. No contradictions with annotations.

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

Conciseness5/5

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

Four concise sentences, front-loaded with purpose. Each sentence adds unique information without redundancy. Efficient and well-structured.

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

Completeness4/5

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

Given the tool's complexity (9 params, two modes, output schema), the description covers the essential behavioral context and usage guidance. Output schema is not described but is provided separately, and the description compensates for any gaps in parameter interaction understanding.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that nodeType is used differently in repo vs raw mode, and that repoPath has a fallback chain. This contextualizes parameters beyond schema descriptions.

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

Purpose4/5

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

The description clearly states the tool generates a YAML-friendly set_workspace_node body template in two modes: raw node definition or repo commited type. It differentiates from some siblings by mentioning the use of corpus tools, but does not explicitly distinguish the closely named sibling 'generate_set_workspace_node_template_from_variant'.

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

Usage Guidelines4/5

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

Provides explicit guidance on when to use repo mode vs raw mode, and mentions fallback to corpus tools. Also notes SQL override controls are removed due to project constraints. However, does not explicitly list when not to use this tool or direct to alternative sibling tools.

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

generate_set_workspace_node_template_from_variantGenerate Set Workspace Node Template from VariantA
Read-onlyIdempotent

Generate a set_workspace_node body template from a node-type corpus variant stored in the committed snapshot. This avoids requiring the original external node source repo at runtime, rejects partial variants unless allowPartial=true, and can optionally compare the inferred template against a live workspace node. SQL override controls are removed from returned templates because they are disallowed in this project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDNoOptional node ID for comparing inferred mappings to a live workspace node.
schemaNoOptional schema value to include in the template.
databaseNoOptional database value to include in the template.
nodeNameNoOptional node name to inject into the generated template.
nodeTypeNoOptional nodeType override. Defaults to the variant definition capitalized field.
variantKeyYesThe exact node-type corpus variant key.
workspaceIDNoOptional workspace ID for comparing inferred mappings to a live workspace node.
allowPartialNoWhen true, allow best-effort generation for variants currently marked partial.
locationNameNoOptional storage location name to include in the template.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
comparisonNo
nodeDefinitionNo
nodeMetadataSpecYamlNo
setWorkspaceNodeBodyTemplateNo
setWorkspaceNodeBodyTemplateYamlNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate non-destructive, idempotent read-only. Description adds valuable behavioral context: avoids external repo, rejects partial variants, removes SQL overrides, optional live comparison. No contradiction.

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

Conciseness5/5

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

Two sentences efficiently convey purpose, key constraints, and optional behaviors. Every sentence adds value; front-loaded with main action.

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

Completeness4/5

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

Given 9 params, output schema exists, and sibling tools, the description covers main purpose and constraints. Could mention edge cases or error handling but adequate for agent selection.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds meaning beyond individual param descriptions by explaining overall behavior like allowPartial effect and SQL override removal, enhancing semantic understanding.

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

Purpose5/5

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

Description clearly states it generates a set_workspace_node body template from a variant, explicitly distinguishing from similar tools by mentioning the source (committed snapshot) and avoiding external repo. Also specifies removal of SQL override controls.

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

Usage Guidelines4/5

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

Describes when to use (with a variant) and conditions like reject partial variants unless allowPartial. Implicitly differentiates from siblings like generate_set_workspace_node_template by mentioning variant source, but lacks explicit when-not-to-use or direct comparison.

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

get_column_lineageGet Column LineageA
Read-onlyIdempotent

Trace a specific column through the entire pipeline β€” upstream to its sources and downstream to every column that depends on it.

Args: workspaceID: Workspace to query nodeID: Node that contains the column columnID: Column ID to trace

Returns: Array of column lineage entries with nodeID, nodeName, nodeType, columnID, columnName, direction (upstream/downstream), and depth. Uses column-level references (metadata.columns[].sources[].columnReferences[]) to trace the full path.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesNode ID containing the column
columnIDYesColumn ID to trace lineage for
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
columnIDNo
nodeNameNo
upstreamNo
columnNameNo
downstreamNo
totalUpstreamNo
totalDownstreamNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and idempotent. The description adds critical behavioral context: it requires a lineage cache and will fetch all workspace nodes with detail=true on first call, a side effect not in annotations.

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

Conciseness5/5

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

The description is concise (5 sentences), front-loaded with purpose, and each sentence adds value: purpose, parameters, return format, underlying method, prerequisite.

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

Completeness5/5

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

The description fully covers inputs, outputs (including return format), and prerequisites (lineage cache). Given the output schema exists, the return details suffice. No gaps remain.

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

Parameters3/5

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

All three parameters have schema descriptions (100% coverage), so the description's parameter listing adds no new meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Trace a specific column through the entire pipeline β€” upstream to its sources and downstream,' specifying the verb (trace) and resource (column). It distinguishes from similar tools like get_upstream_nodes that trace nodes, not columns.

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

Usage Guidelines4/5

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

The description implies usage for column-level lineage tracing, contrasting with node-level siblings. However, it lacks explicit when-to-use or when-not-to-use statements, though the context is clear.

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

get_downstream_nodesGet Downstream NodesA
Read-onlyIdempotent

Walk the full downstream dependency graph for a node and return every dependent with its depth level.

Args: workspaceID: Workspace to query nodeID: Starting node whose downstream dependents to trace

Returns: Array of dependent nodes with nodeID, nodeName, nodeType, and depth (1 = direct child). Traverses the entire graph with no depth limit. Nodes are deduplicated.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesNode ID to trace downstream from
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
nodeNameNo
nodeTypeNo
ancestorsNo
dependentsNo
totalAncestorsNo
totalDependentsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readonly and idempotent. The description adds useful behavioral details: it requires a lineage cache, may fetch all workspace nodes on first call, deduplicates nodes, and returns depth levels. No contradictions.

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

Conciseness5/5

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

The description is concise and front-loaded with the main purpose, followed by structured args, return format, and additional notes. Every sentence adds value with no unnecessary information.

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

Completeness5/5

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

Given the presence of annotations and output schema, the description covers all essential aspects: purpose, parameters, return structure (nodeID, nodeName, nodeType, depth), traversal behavior (full graph, no limit, deduplicated), and a notable side effect (caching requirement). It is complete for a graph-traversal tool.

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

Parameters3/5

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

Input schema coverage is 100% with existing descriptions for workspaceID and nodeID. The description reiterates these parameters without adding new constraints, examples, or semantic nuance beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool walks the full downstream dependency graph and returns dependents with depth levels. The verb 'walk' and resource 'downstream dependency graph' are specific and distinguish it from siblings like get_upstream_nodes.

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

Usage Guidelines3/5

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

The description implies usage for tracing all downstream dependents with no depth limit, but lacks explicit guidance on when to use vs alternatives such as get_upstream_nodes or get_column_lineage. No when-not-to-use instructions are provided.

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

get_environmentGet EnvironmentA
Read-onlyIdempotent

Get details of a specific Coalesce environment by ID.

Returns full environment configuration including connection details, runtime parameters, and tag colors.

Args:

  • environmentID (string, required): The environment ID

Returns: Full environment object with ID, name, project, connection settings, and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive. The description adds context about the return value (full environment object with ID, name, project, etc.) without contradicting annotations. It doesn't disclose additional behaviors like rate limits, but given annotations cover safety, this 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.

Conciseness5/5

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

The description is concise with a clear structure: main purpose, return summary, and parameter list. Every sentence adds value with no fluff.

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

Completeness4/5

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

Given the simple getter nature, the description covers the tool's purpose and return values. It mentions key fields (ID, name, project, connection settings) which aligns with expected output. Minor omission of error handling, but overall complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100% with description for environmentID. The description repeats this info and adds no further parameter semantics beyond the schema. Baseline 3 is appropriate as schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states 'Get details of a specific Coalesce environment by ID', which is a specific verb+resource. It distinguishes from sibling tools like list_environments (list all) and create_environment (create new).

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

Usage Guidelines4/5

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

The description implies usage (when you need details of a single environment by ID) but does not explicitly state when not to use or mention alternatives like get_environment_health. However, the purpose is clear enough for an agent to infer appropriate usage.

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

get_environment_healthGet Environment HealthA
Read-onlyIdempotent

Get a comprehensive health dashboard for a deployed environment. Composes multiple API calls into a single health summary.

This tool paginates through all environment nodes and all environment runs before scoring health, so it may take longer on large or busy environments.

Args:

  • environmentID (string, required): The environment ID

Returns: { environmentID, assessedAt, totalNodes, nodesByType: { Stage: 5, Dimension: 3, ... }, nodeRunStatus: [{ nodeID, nodeName, lastRunStatus, lastRunTime }], failedRunsLast24h: [{ runID, runStatus, startTime, endTime }], staleNodes: [{ nodeID, nodeName, nodeType, lastRunTime, daysSinceLastRun }], dependencyHealth: { orphanNodes: [...], totalDependencyEdges }, healthScore: "healthy" | "warning" | "critical", healthReasons: ["..."] }

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentIDYesThe environment ID to assess health for

Output Schema

ParametersJSON Schema
NameRequiredDescription
assessedAtNo
staleNodesNo
totalNodesNo
healthScoreNo
nodesByTypeNo
environmentIDNo
healthReasonsNo
nodeRunStatusNo
dependencyHealthNo
failedRunsLast24hNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context: it paginates through all nodes and runs, and may be slow on large environments. No contradiction with annotations.

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

Conciseness4/5

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

The description is front-loaded with purpose and behavior, followed by a detailed return structure. It is efficient but the return block is lengthy; still, it earns its place by documenting the output.

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

Completeness5/5

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

Given the rich annotations and output schema, the description covers purpose, behavioral traits (pagination, latency), and a detailed return format. It is comprehensive for a health dashboard tool.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter environmentID, so the description's parameter info adds little beyond the schema. However, the description also shows the full return structure, which indirectly adds context. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get a comprehensive health dashboard for a deployed environment' with a specific verb and resource. It distinguishes itself from siblings by noting it composes multiple API calls, setting it apart from simpler getters like get_environment or get_environment_overview.

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

Usage Guidelines4/5

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

The description explains when to use it (for a comprehensive health summary) and includes a caveat about pagination and potential delays on large environments. However, it does not explicitly state when not to use it or list alternatives, though the behavior note provides practical guidance.

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

get_environment_jobGet Environment JobA
Read-onlyIdempotent

Get details of a specific job in an environment.

Args:

  • environmentID (string, required): The environment ID

  • jobID (string, required): The job ID

Returns: Job object with name, node list, schedule, and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIDYesThe job ID
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, indicating a safe read operation. The description adds return field details (name, node list, schedule, configuration), going beyond annotations without contradiction.

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

Conciseness5/5

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

The description is concise with two short paragraphs. Every sentence adds value, with no redundancy or extra fluff.

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

Completeness5/5

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

For a simple get tool with high schema coverage, complete annotations, and an output schema, the description provides sufficient context. It covers what the tool does, required parameters, and return fields.

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

Parameters3/5

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

Schema coverage is 100% with both parameters documented. The description repeats the parameter names and required status, adding no 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.

Purpose5/5

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

The description clearly states 'Get details of a specific job in an environment', using a specific verb and resource. It distinguishes from sibling tools like list_environment_jobs and get_job_run_details_by_name.

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

Usage Guidelines3/5

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

The description implies usage when environmentID and jobID are known, but lacks explicit guidance on when to use this tool versus alternatives (e.g., list_environment_jobs). No when-not or alternatives are mentioned.

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

get_environment_nodeGet Environment NodeA
Read-onlyIdempotent

Get details of a specific node deployed in an environment.

Args:

  • environmentID (string, required): The environment ID

  • nodeID (string, required): The node ID

Returns: Full node object with columns, config, metadata, and deployment state.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it returns a 'Full node object with columns, config, metadata, and deployment state,' which goes beyond annotations where no contradiction is present.

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

Conciseness5/5

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

The description is extremely concise: one sentence for purpose, then Args and Returns sections. Every sentence adds value, with no fluff. Front-loaded with the key action.

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

Completeness5/5

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

Given the tool's straightforward nature (2 simple required params, output schema exists, no nested objects), the description provides sufficient detail about what the tool returns. The mention of 'Full node object with columns, config, metadata, and deployment state' covers the key aspects.

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

Parameters3/5

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

Schema coverage is 100%, and both parameters (environmentID, nodeID) are described in the schema with same text. The description repeats this info without adding new meaning beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get details of a specific node deployed in an environment.' It uses a specific verb-resource pair and distinguishes from sibling tools like list_environment_nodes (which lists) and get_workspace_node (which is for workspace nodes, not environment nodes).

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives such as list_environment_nodes or get_environment. The context is clear for an agent, but no explicit guidance on when not to use it or when a sibling is more appropriate.

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

get_environment_overviewGet Environment OverviewA
Read-onlyIdempotent

Get environment details and all its deployed nodes in a single call.

Args:

  • environmentID (string, required): The environment ID

Returns: { environment: EnvironmentObject, nodes: NodeObject[] }

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodesNo
environmentNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, safe behavior. The description adds the return structure showing both environment and nodes, which is valuable context beyond annotations.

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

Conciseness4/5

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

Very concise, front-loaded with purpose, and structured with Args/Returns. However, the parameter documentation in description is redundant with input schema.

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

Completeness5/5

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

Given a simple single-parameter get operation with full schema coverage and an output schema described, the description is complete and covers all necessary context.

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

Parameters3/5

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

Schema coverage is 100% (single parameter described in schema). Description merely repeats the schema, adding no new meaning.

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

Purpose5/5

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

The description clearly states it retrieves environment details and all deployed nodes in one call, distinguishing it from siblings like get_environment and list_environment_nodes.

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

Usage Guidelines3/5

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

It suggests use for efficiency ('in a single call') but does not provide explicit when-to-use, when-not-to-use, or alternatives. Context is clear but lacks exclusions.

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

get_git_accountGet Git AccountA
Read-onlyIdempotent

Get details of a specific Git account.

Args:

  • gitAccountID (string, required): The Git account ID

  • accountOwner (string, optional): User ID of the account owner

Returns: Git account object with connection details.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountOwnerNoUser ID of the account owner (org admins can manage other users' accounts)
gitAccountIDYesThe git account ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns a 'Git account object with connection details', which is helpful beyond the annotations.

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

Conciseness5/5

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

The description is extremely concise, with two sentences and a parameter list. No unnecessary words, and the purpose is front-loaded.

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

Completeness5/5

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

Given the simple read operation, rich annotations, and existence of an output schema, the description is complete. It covers what the tool does and what it returns.

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

Parameters3/5

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

Schema coverage is 100% and both parameters have descriptions in the schema. The description only repeats the parameter names and requiredness without adding new meaning.

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

Purpose5/5

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

The description clearly states 'Get details of a specific Git account', with a specific verb and resource. It distinguishes from siblings like list_git_accounts and create/update/delete by focusing on a single account retrieval.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives like list_git_accounts. While the purpose is clear, there is no guidance on use cases or exclusions.

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

get_job_run_details_by_nameGet Latest Run Details by Job NameA
Read-onlyIdempotent

Fuzzy-match a single environment job by name and return the full details of its most recent run (and optionally run results). Errors if the name matches zero or multiple jobs β€” use find_jobs_by_name first to disambiguate.

Looks at the last 50 runs in the environment to find the job's latest run. Older runs are not considered.

Args:

  • environmentID (string, required): The environment ID

  • jobName (string, required): Substring to match (case-insensitive). Must match exactly one job.

  • includeResults (boolean, optional): Include per-node run results (default true)

Returns: { job, run, results? }

ParametersJSON Schema
NameRequiredDescriptionDefault
jobNameYesSubstring to match against job names (case-insensitive). Must match exactly one job.
environmentIDYesThe environment ID
includeResultsNoInclude per-node run results (default true)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description adds valuable behavioral context beyond annotations: fuzzy matching (case-insensitive substring), error conditions, run limit (last 50 runs), and return structure. Annotations already state readOnlyHint, idempotentHint, and destructiveHint, which align with the description.

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

Conciseness5/5

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

The description is concise and well-structured. It front-loads the main behavior, then provides usage guidelines, parameter details, and return format. Every sentence adds value with no redundancy.

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

Completeness5/5

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

The output schema exists, so return values are covered. The description addresses all important aspects: fuzzy matching, error handling, run scope, optional parameter behavior, and typical usage with sibling tool. It is complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so parameters are well-documented. The description supplements by explaining the 'last 50 runs' constraint and the behavior of includeResults, adding value beyond the schema. However, the Args section largely repeats schema descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: fuzzy-match a single environment job by name and return full details of its most recent run. It uses a specific verb-resource combination and explicitly distinguishes itself from siblings like find_jobs_by_name.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use and when-not-to-use guidance: it errors on zero or multiple matches, advises using find_jobs_by_name first to disambiguate, and notes it only looks at the last 50 runs. This 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.

get_node_type_variantGet Node Type VariantA
Read-onlyIdempotent

Get one node-type corpus variant from the committed snapshot by variantKey. Use search_node_type_variants first when you need discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
variantKeyYesThe exact node-type corpus variant key.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
variantKeyNo
supportStatusNo
nodeDefinitionNo
nodeMetadataSpecNo

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already provide read-only, idempotent, and non-destructive hints. Description adds 'from the committed snapshot', which clarifies the source but does not significantly expand behavioral disclosure beyond annotations.

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

Conciseness5/5

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

Two concise sentences with front-loaded purpose and immediate guidance. No unnecessary words.

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

Completeness5/5

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

Given output schema exists, return values are handled. Description clarifies the source and retrieval method, making it fully 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.

Parameters3/5

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

Schema has 100% coverage with a clear description for variantKey. Description only mentions 'by variantKey', adding no new semantics beyond the schema.

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

Purpose5/5

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

Clearly states the tool retrieves a single node-type corpus variant by variantKey from the committed snapshot. Distinguishes from sibling search_node_type_variants by specifying 'Get one' versus discovery.

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

Usage Guidelines5/5

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

Explicitly advises to use search_node_type_variants first for discovery, providing clear guidance on when to use this tool vs. alternatives.

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

get_pipeline_workshop_statusPipeline Workshop StatusA
Read-onlyIdempotent

Get the current state of a pipeline workshop session, including all planned nodes, their configuration, and the instruction history.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIDYesThe workshop session ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
nodesNo
historyNo
warningsNo
createdAtNo
sessionIDNo
updatedAtNo
workspaceIDNo
openQuestionsNo
resolvedEntitiesNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations fully declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description is not burdened with safety disclosures. It adds value by specifying the response contents (nodes, config, history), but the output schema likely covers that.

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

Conciseness5/5

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

A single sentence that front-loads the verb and concisely states the resource and included data. No wasted words.

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

Completeness5/5

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

Given the low complexity, full schema coverage, presence of annotations, and an output schema, the description is complete. It mentions all relevant aspects: session state, nodes, configuration, instruction history.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter sessionID is described as 'The workshop session ID'. The description adds no additional meaning beyond what the schema provides, so baseline 3.

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

Purpose5/5

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

Description clearly states the verb 'Get' and the resource 'current state of a pipeline workshop session', listing specific contents (planned nodes, configuration, instruction history). This distinguishes it from sibling tools like pipeline_workshop_instruct or pipeline_workshop_close.

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

Usage Guidelines4/5

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

The context is clear: this tool retrieves session state. While it doesn't explicitly state when not to use it or suggest alternatives, the purpose is self-evident given the sibling tools (open, instruct, close).

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

get_projectGet ProjectA
Read-onlyIdempotent

Get details of a specific Coalesce project.

Args:

  • projectID (string, required): The project ID

  • includeWorkspaces (boolean, optional): Include nested workspace data

  • includeJobs (boolean, optional): Include nested job data

Returns: Full project object with ID, name, description, git configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIDYesThe project ID
includeJobsNoInclude nested job data for all workspaces
includeWorkspacesNoInclude nested workspace data with workspace IDs

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description does not need to repeat those. It adds value by describing the return object ('Full project object with ID, name, description, git configuration'), which supplements the annotations with concrete output context. No contradictions.

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

Conciseness5/5

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

The description is extremely concise: a single sentence for purpose, a bulleted list for parameters (three lines), and a single sentence for returns. It is front-loaded with the verb and resource, and every sentence contributes necessary information without verbosity.

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

Completeness5/5

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

Given the tool's simplicity (get a project), the presence of an output schema, and rich annotations, the description covers all essential aspects: what it does, what parameters are accepted, and what is returned. No gaps in functionality or behavior are evident.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already describes all parameters. The description largely repeats the schema but adds a 'Returns' line that provides meaningful context about the output. This extra return information justifies a score above the baseline of 3.

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

Purpose5/5

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

The description clearly states 'Get details of a specific Coalesce project.' It uses a specific verb ('Get') and resource ('project'), and among siblings like list_projects, update_project, delete_project, it uniquely identifies this tool for retrieving a single project's details.

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

Usage Guidelines3/5

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

The description implies usage to retrieve project details, but it does not explicitly guide when to use this tool versus alternatives like list_projects (for listing many projects) or other get_* tools. No exclusionary or comparison language is provided, leaving the agent to infer context.

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

get_repo_node_type_definitionGet Repo Node Type DefinitionA
Read-onlyIdempotent

Resolve one exact node type from a committed local Coalesce repo. Supports direct identifiers like Stage or 65 and package-backed identifiers like alias:::id. If the repo cannot resolve the definition exactly, use the corpus tools as the fallback path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeTypeYesExact direct node type identifier or exact package-backed alias:::id value.
repoPathNoOptional absolute or relative path to the local committed Coalesce repo. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
repoPathNo
warningsNo
filePathsNo
parseErrorNo
resolutionNo
repoWarningsNo
usageSummaryNo
nodeDefinitionNo
outerDefinitionNo
resolvedNodeTypeNo
resolvedRepoPathNo
requestedNodeTypeNo
nodeMetadataSpecYamlNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds context: the exactness constraint, support for two identifier types, and the fallback behavior. These disclosures go beyond what annotations provide, giving the agent useful operational understanding.

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

Conciseness5/5

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

Three concise sentences: purpose, identifier formats, fallback guidance. No wasted 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.

Completeness4/5

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

Given the tool's simplicity, annotations, and presence of an output schema, the description covers the key aspects: what it does, supported inputs, and fallback. It does not detail the output structure (handled by output schema) or error behavior, but the fallback path implicitly addresses resolution failures. Minor omission: behavior when repoPath is invalid, but fallback logic suggests it would use defaults. Overall, adequate.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds concrete examples for the nodeType parameter ('Stage', '65', 'alias:::id'), which clarifies the expected format beyond the schema description. For repoPath, it restates the fallback logic already in the schema, but adds no new semantic information. Overall, the description adds value.

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

Purpose5/5

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

The description clearly states the action ('resolve'), the specific resource ('one exact node type from a committed local Coalesce repo'), and the supported identifier formats. It also distinguishes this tool from siblings by referencing fallback to corpus tools, 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.

Usage Guidelines4/5

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

The description provides clear guidance on when to use the tool (exact resolution) and when to fall back to corpus tools. However, it does not explicitly compare with direct siblings like list_repo_node_types or search_node_type_variants, leaving some room for interpretation.

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

get_runGet RunA
Read-onlyIdempotent

Get details of a specific Coalesce run.

Args:

  • runID (string, required): Numeric run ID (integer, e.g. '401'). Use the runCounter value from start_run or run_status β€” not the UUID from run URLs.

Returns: Full run object with status, timing, node results, and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIDYesThe numeric run ID (integer, e.g. '401'). Use the runCounter value from start_run or run_status responses β€” not the UUID from run URLs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds the return content (status, timing, node results, configuration), providing behavioral context beyond annotations.

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

Conciseness5/5

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

The description is brief with two short sections: purpose and args/returns. It is front-loaded with the core action and contains no unnecessary words.

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

Completeness5/5

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

Given the presence of an output schema and supportive annotations, the description sufficiently covers the tool's behavior. It mentions the returned fields and parameter guidance, making it complete for a simple retrieval operation.

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

Parameters3/5

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

The description largely repeats the schema's parameter description for runID. Since schema coverage is 100%, no additional meaning is added beyond clarifying the source of the ID (runCounter). This is a minor improvement.

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

Purpose5/5

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

The description 'Get details of a specific Coalesce run' uses a clear verb+resource pair. It differentiates from siblings like get_run_details, get_run_results, and list_runs by specifying a single run retrieve.

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

Usage Guidelines4/5

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

The description explains how to use the runID parameter correctly (using runCounter, not UUID). However, it does not explicitly exclude alternative tools or state when not to use this tool.

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

get_run_detailsGet Run DetailsA
Read-onlyIdempotent

Get run metadata and execution results in a single call. Combines get_run and get_run_results.

Args:

  • runID (string, required): Numeric run ID (integer). Use runCounter, not the UUID.

Returns: { run: RunObject, results: ResultsObject, resultsError?: ErrorObject }

ParametersJSON Schema
NameRequiredDescriptionDefault
runIDYesThe numeric run ID (integer, e.g. '401'). Use the runCounter value from start_run or run_status responses β€” not the UUID from run URLs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
runNo
resultsNo
resultsErrorNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. The description adds context that it combines two calls into one and returns a combined object with possible error, which is useful beyond annotations.

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

Conciseness5/5

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

Two clear sentences plus structured arg/return spec. No unnecessary words, front-loaded with purpose.

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

Completeness5/5

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

Given the simple single-parameter tool, output schema exists, and description covers purpose, parameter guidance, and return structure. No gaps.

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

Parameters4/5

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

Schema coverage is 100%, providing baseline. Description adds clarifying guidance: 'Numeric run ID (integer). Use runCounter, not the UUID.' This provides additional semantic value beyond schema.

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

Purpose5/5

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

The description clearly states the tool retrieves run metadata and execution results, combining two existing calls. It specifies the resource (run) and action (get), and distinguishes from siblings get_run and get_run_results.

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

Usage Guidelines4/5

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

The description explicitly indicates this tool combines get_run and get_run_results, implying when to use instead of separate calls. It also instructs to use runCounter rather than UUID. However, it does not provide explicit when-not-to-use scenarios.

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

get_run_resultsGet Run ResultsA
Read-onlyIdempotent

Get the execution results of a specific Coalesce run.

Args:

  • runID (string, required): Numeric run ID (integer). Use runCounter, not the UUID.

Returns: Run results including per-node execution status, row counts, and errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
runIDYesThe numeric run ID (integer, e.g. '401'). Use the runCounter value from start_run or run_status responses β€” not the UUID from run URLs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive; description adds that it returns per-node status, row counts, errors, enhancing understanding beyond structured fields.

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

Conciseness5/5

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

Two sentences plus a concise list; no redundant information, front-loaded purpose.

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

Completeness5/5

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

Simple one-parameter tool with output schema; description sufficiently covers what is needed without over-explaining.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters, but description clarifies runID is numeric and advises using runCounter over UUID, adding practical value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it gets execution results of a specific run, distinguishing from siblings like get_run (run metadata) and get_run_details (run details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for retrieving run results, but lacks explicit guidance on when to use this vs. alternatives like get_run or get_run_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upstream_nodesGet Upstream NodesA
Read-onlyIdempotent

Walk the full upstream dependency graph for a node and return every ancestor with its depth level.

Args: workspaceID: Workspace to query nodeID: Starting node whose upstream lineage to trace

Returns: Array of ancestor nodes with nodeID, nodeName, nodeType, and depth (1 = direct parent). Traverses the entire graph with no depth limit. Nodes are deduplicated.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call (may take a moment for large workspaces). Subsequent calls use the cached graph (default TTL: 30 min).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesNode ID to trace upstream from
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
nodeNameNo
nodeTypeNo
ancestorsNo
dependentsNo
totalAncestorsNo
totalDependentsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, etc. Description adds deduplication and cache mechanism without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded, every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return format, cache behavior, and with output schema present, description is complete for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds little beyond listing parameters in Args. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool walks the full upstream dependency graph returning ancestors with depth. Distinguishes from siblings like get_downstream_nodes and analyze_impact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Specifies graph traversal has no depth limit, and mentions cache behavior. Does not explicitly provide when-not-to-use or alternatives, 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.

get_user_rolesGet User RolesB
Read-onlyIdempotent

Get roles assigned to a specific user, optionally scoped to a project or environment.

Args:

  • userID (string, required): The user ID

  • projectID (string, optional): Scope to a specific project

  • environmentID (string, optional): Scope to a specific environment

Returns: Role assignments for the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIDYesThe user ID
projectIDNoOptional project scope filter
environmentIDNoOptional environment scope filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds minimal behavioral detail beyond 'Returns: Role assignments...' but does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but includes a redundant parameter list. It is front-loaded with the purpose but could be more concise by omitting the parameter details already present in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, full schema coverage, and presence of an output schema, the description is complete enough for a safe read operation. It states the return value, which suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions. The description repeats the parameter names and required/optional status but adds no new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Get') and resource ('user roles') and specifies optional scoping to project or environment. It is specific but does not explicitly differentiate from the sibling tool 'list_user_roles', which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'list_user_roles' or the set/delete role tools. The description lacks when-not-to-use instructions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspaceGet WorkspaceA
Read-onlyIdempotent

Get details of a specific Coalesce workspace by ID.

Args:

  • workspaceID (string, required): The workspace ID

Returns: Full workspace object with ID, name, project association, and settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds value by specifying the return structure (ID, name, project association, settings), which helps the agent understand what to expect beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence plus a bullet list for args and returns. No fluff, every part is informative and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no nested objects), full annotation coverage, and presence of an output schema, the description is complete. It explains what the tool does, its parameter, and what it returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents the workspaceID parameter. The description merely repeats the arg definition, adding no additional semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Get details of a specific Coalesce workspace by ID', using a specific verb and resource. It distinguishes from sibling tools like list_workspaces (listing all) and other get_* tools by focusing on workspace by ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage when you have a workspace ID and need details. It does not explicitly state when not to use or mention alternatives, but the context and sibling names (e.g., list_workspaces) provide sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_nodeGet Workspace NodeA
Read-onlyIdempotent

Get details of a specific node in a workspace. Use list_workspaces to find workspace IDs.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID

Returns: Full workspace node with columns, transforms, joins, config, and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive. Description adds what the return includes (columns, transforms, joins, config, metadata), which is helpful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: one sentence for purpose, one for prerequisite (list_workspaces), then structured arg list and return summary. No waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for a simple retrieval tool: purpose, required args, return content. Output schema exists for further detail. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions. Description repeats parameter info without adding new meaning beyond the schema, so baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Get details of a specific node in a workspace.' Distinct from siblings like list_workspace_nodes or delete_workspace_node.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions using list_workspaces to find workspace IDs but no explicit guidance on when to use this vs list_workspace_nodes or other node retrieval tools. Adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspace_subgraphGet Workspace SubgraphA
Read-onlyIdempotent

Get details of a specific subgraph.

Args:

  • workspaceID (string, required): The workspace ID

  • subgraphID (string, required): The subgraph ID

Returns: Subgraph object with name and node steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
subgraphIDYesThe subgraph ID
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds context about the return shape (Subgraph object with name and node steps), which is useful beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded with the purpose. It lists parameters and return value without any unnecessary information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is complete: it states the action, required parameters, and return type. An output schema exists, so the return description is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description repeats parameter names and types from the schema without adding new meaning. It does not elaborate on how the parameters are used or constraints beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get details of a specific subgraph', using a specific verb and resource. This distinguishes it from sibling tools that create, delete, or update subgraphs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives are provided. The read-only nature is implied by the name and annotations, but there is no guidance on when to choose this over other getters like get_workspace_node.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environment_jobsList Environment JobsA
Read-onlyIdempotent

List all jobs deployed to a Coalesce environment. Jobs define which nodes run together β€” pair this with list_environment_nodes when planning a refresh, or with create_workspace_job when authoring new schedules.

Different from listing workspace-side jobs: this returns the jobs currently deployed to the target environment (what the scheduler will execute), not the in-flight workspace edits that may not be deployed yet.

Args:

  • environmentID (string, required): The environment ID

  • limit, startingFrom, orderBy, orderByDirection: Pagination

Returns: { data: Job[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
orderByNoField to sort by (required with startingFrom)
startingFromNoCursor from previous response's next field
environmentIDYesThe environment ID
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint=false. The description adds behavioral context about the tool reading deployed jobs vs workspace edits, and describes the return format. This adds value beyond the annotations, though not extensively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: first sentence states purpose, then usage guidance, then differentiation, then parameter/return summary. Every sentence adds value with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple list tool: explains purpose, usage context, differentiation, and return format. Output schema exists (description mentions Job[]). While it omits error conditions, annotations cover safety. The description is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description mentions arguments and their purpose (pagination), but this information is already present in the schema descriptions. No significant additional meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'List all jobs deployed to a Coalesce environment' with a specific verb and resource. It distinguishes from sibling tools like list_environment_nodes and create_workspace_job, and clarifies the difference from workspace-side jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use the tool: pair with list_environment_nodes for refresh planning or with create_workspace_job for authoring schedules. It also clarifies that it returns deployed jobs, not in-flight workspace edits, which helps avoid misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environment_nodesList Environment NodesA
Read-onlyIdempotent

List nodes deployed in a Coalesce environment. Returns ONE page (default 100 nodes, or 25 when detail=true). If the response has hasMore: true, you have NOT seen all nodes β€” you must page (call again with startingFrom set to the returned next, same orderBy) before drawing any conclusion about the environment, or you will undercount it. When you know the node, prefer get_environment_node by ID rather than paging.

Args:

  • environmentID (string, required): The environment ID

  • detail (boolean, optional): Include full node details

  • limit, startingFrom, orderBy, orderByDirection: Pagination (limit defaults to 100, or 25 when detail=true)

Returns: { data: Node[], next?: string, hasMore?: boolean, retrieved?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
detailNoInclude full node details in response
orderByNoField to sort by (required with startingFrom)
startingFromNoCursor from previous response's next field
environmentIDYesThe environment ID
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses pagination behavior, default limits (100 or 25 with detail=true), and response structure. Adds context beyond annotations (readOnlyHint, openWorldHint, etc.) without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured and mostly concise, but the argument list in the description partially duplicates schema properties. However, the pagination warning and alternative tool mention add significant value without excessive verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity with pagination and optional detail, the description covers return values, default behaviors, and alternative tool. Output schema exists, so return values need less explanation, but the description still provides necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value by stating default values for limit (100 or 25 when detail=true) and explaining usage of startingFrom and orderBy, which are not fully detailed in schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List nodes deployed in a Coalesce environment' with a specific verb and resource, and distinguishes from sibling get_environment_node by advising to use ID lookup when the node is known.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains pagination: if hasMore is true, must page to avoid undercounting. Also recommends get_environment_node as an alternative when the node is known, providing clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environmentsList EnvironmentsA
Read-onlyIdempotent

List all available Coalesce environments with optional pagination.

Returns environment IDs, names, and configuration. Use this to discover environment IDs needed by run, node, and job tools.

Args:

  • limit (number, optional): Max results per page

  • startingFrom (string, optional): Pagination cursor from previous response

  • orderBy (string, optional): Sort field (requires startingFrom)

  • orderByDirection ('asc'|'desc', optional): Sort direction

  • detail (boolean, optional): Include expanded environment configuration

Returns: { data: Environment[], next?: string, total?: number }

Use get_environment for a single environment by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
detailNoWhen true, returns expanded environment info
orderByNoField to sort by (required with startingFrom)
startingFromNoCursor from previous response's next field
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral details such as optional pagination and the return structure (data, next, total), but does not go into extensive detail like rate limits or authentication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it states the purpose first, then lists parameters and return type with a clear separation. Every sentence adds value, and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has an output schema and annotations covering safety, the description covers all necessary aspects: what the tool does, its parameters, return shape, and pagination mechanism. It is complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all 5 parameters, so the schema already documents them. The description lists the parameters briefly but adds minimal extra meaning beyond the schema, earning a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all available Coalesce environments with optional pagination, and explicitly distinguishes from the sibling get_environment tool by mentioning it returns a list and directing to use get_environment for a single environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool (to discover environment IDs needed by run, node, and job tools) and when to use an alternative (get_environment for a single environment by ID), effectively differentiating from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_git_accountsList Git AccountsA
Read-onlyIdempotent

List all Git accounts configured in Coalesce.

Args:

  • accountOwner (string, optional): User ID of the account owner. Org admins can manage other users' accounts

Returns: { data: GitAccount[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
accountOwnerNoUser ID of the account owner (org admins can manage other users' accounts)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining the scope of the accountOwner parameter (org admins can manage others' accounts) and the return structure, which goes 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a one-line summary plus structured args/returns. Every sentence is necessary and front-loaded with the core purpose. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not detail return values. It covers the optional filter and its semantics. The only minor gap is no mention of pagination or how to interpret the 'next' and 'total' fields, but these are inferred from the type. Overall, complete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 100%, the schema already documents the parameter. However, the description adds context about who can use the accountOwner filter (org admins managing others), which provides additional meaning beyond the schema's generic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list all' and the resource 'Git accounts configured in Coalesce,' with an optional filter by accountOwner. This distinguishes it from the sibling "get_git_account" which retrieves a single account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool over alternatives like "get_git_account." It is implied for listing, but no guidance on when not to use it or preference criteria. This is a minimum viable level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_nodesList Job Nodes (grouped by subgraph)A
Read-onlyIdempotent

Resolve a workspace job's selectors into concrete workspace nodes, grouped by subgraph. Composes getWorkspaceJob + listWorkspaceNodes + the local repo's subgraphs/ folder to evaluate the includeSelector/excludeSelector DSL (supported clauses: { subgraph: NAME } and { location: LOC name: NAME }, joined by OR).

Subgraph resolution note: the public Coalesce API has no subgraph list endpoint. { subgraph: NAME } terms can only be resolved when repoPath is set (or COALESCE_REPO_PATH). Without a repo, such terms land in unresolved and a warning is added to summary.warnings.

Args:

  • workspaceID (string, required): The workspace that owns the job

  • jobID (string, optional): The job ID. Preferred when known.

  • jobName (string, optional): The job name. Resolved against workspace jobs when jobID is absent.

  • repoPath (string, optional): Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile.

Returns: { job: { id, name, includeSelector, excludeSelector }, summary: { totalNodes, subgraphCount, unattachedCount, unresolvedCount, warnings }, nodesBySubgraph: [{ subgraphID, subgraphName, nodes: [{ id, name, location, nodeType }] }], unattached: [...], // nodes matched by the job but not in any subgraph unresolved: [{ term, reason }] // selector terms that matched nothing (stale selectors or missing repoPath) }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobNo
summaryNo
unattachedNo
unresolvedNo
nodesBySubgraphNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint true, idempotentHint true, destructiveHint false. The description adds significant behavioral context: it composes multiple API calls, resolves a DSL, and details the subgraph resolution dependency on repoPath, including what happens without it (unresolved terms and warnings). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, subgraph resolution note, Args, and Returns. It is moderately long but each sentence adds value. The key information is front-loaded. Minor verbosity in the DSL explanation is acceptable given complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (DSL resolution, subgraph dependencies), the description is thorough: it explains the DSL clauses, repo path requirements, and provides a detailed output schema. Missing: the input parameters are not reflected in the actual input schema, but the description itself is complete for understanding usage and behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters, but the description lists four parameters (workspaceID, jobID, jobName, repoPath) with requirements and fallback behavior. This adds essential meaning that the schema lacks entirely. The description compensates fully for the absent schema parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves a workspace job's selectors into concrete nodes grouped by subgraph. The title 'List Job Nodes (grouped by subgraph)' reinforces this, distinguishing it from siblings like list_workspace_nodes (which lists all nodes) and get_workspace_job (which only gets job details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this toolβ€”to resolve selectorsβ€”and details conditions like missing repoPath leading to unresolved terms. It mentions preferred arguments (jobID over jobName) and fallback behaviors, but does not explicitly contrast with alternative tools or provide explicit when-not-to-use guidance. Still, the context is clear and helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_org_usersList Org UsersA
Read-onlyIdempotent

List all users in the Coalesce organization.

Args:

  • limit, startingFrom, orderBy, orderByDirection: Pagination controls

Returns: { data: User[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
orderByNoField to sort by (required with startingFrom)
startingFromNoCursor from previous response's next field
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds pagination details and return type, which are behavioral traits beyond annotations. However, it does not mention rate limits, data freshness, or any potential delays.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only a few lines to cover purpose, parameters, and return type. Every sentence is informative with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, rich annotations, complete schema, and presence of output schema, the description is adequate. It covers the essential aspects (purpose, pagination, return shape). However, it could mention that the list includes all users regardless of status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for all parameters. The description only lists parameter names and groups them as 'Pagination controls', adding minimal value 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'users in the Coalesce organization'. It is distinct from sibling tools like 'cache_org_users' which implies a caching operation, and 'list_user_roles' which lists roles per user. The scope 'organization' is specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing users with pagination but does not explicitly state when to use this tool over alternatives (e.g., 'cache_org_users' might be for cached results). No when-not-to-use or exclusion criteria are provided, leaving the agent to infer from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsList ProjectsA
Read-onlyIdempotent

List all Coalesce projects.

Args:

  • includeWorkspaces (boolean, optional): Include nested workspace data

  • includeJobs (boolean, optional): Include nested job data for all workspaces

Returns: { data: Project[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
includeJobsNoInclude nested job data for all workspaces
includeWorkspacesNoInclude nested workspace data with workspace IDs

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive. The description adds value by specifying the optional inclusion of nested workspace and job data, and the return structure with pagination (next, total), which are not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with Args and Returns sections. A single sentence could suffice, but it's not overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (context signal), the description optionally explains return structure. It covers all parameters and return type, making it complete for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description largely repeats the schema's parameter descriptions. It adds minimal new meaning beyond 'include nested workspace data' vs 'with workspace IDs'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all Coalesce projects' with a specific verb and resource. It distinguishes from sibling tools like list_workspaces or list_environments by focusing on projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly provide when-to-use or when-not-to-use guidance compared to alternatives. However, the purpose is clear enough that an agent would infer using this to list projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_repo_node_typesList Repo Node TypesA
Read-onlyIdempotent

Inspect a committed local Coalesce repo and list exact resolvable node-type identifiers from nodeTypes/, optionally filtered to one package alias. Repo-backed discovery is preferred when the repo contains the committed definition; otherwise use the corpus tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoPathNoOptional absolute or relative path to the local committed Coalesce repo. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
inUseOnlyNoWhen true, return only identifiers currently referenced by committed nodes/*.yml operation.sqlType values.
packageAliasNoOptional exact package alias filter sourced from package YAML name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryNo
nodeTypesNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the filtering behavior (by packageAlias) and the source directory, which is consistent and non-contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first delivers purpose and key option, the second provides usage context. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not detail return values. It covers the source, filtering, and usage preference. Remaining minor gaps (e.g., what 'exact resolvable' means) are acceptable given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters already described. The description mentions the filtering option but does not add meaningful semantics beyond what the schema provides, so baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list', the resource 'node-type identifiers', and the scope 'from nodeTypes/ in a committed local Coalesce repo'. It distinguishes this repo-backed approach from corpus tools, setting it apart from siblings like list_workspace_node_types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: use when the repo contains committed definitions, otherwise use corpus tools. While it doesn't name specific sibling tools, the context signal is clear enough to guide the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_repo_packagesList Repo PackagesA
Read-onlyIdempotent

Inspect a committed local Coalesce repo and list package aliases from packages/*.yml. Use this when a local repo is available and you want repo-backed node-type discovery before falling back to the corpus.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoPathNoOptional absolute or relative path to the local committed Coalesce repo. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
summaryNo
packagesNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that the tool inspects a committed repo and lists from packages/*.yml, which is consistent and provides more context about the source and state requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is two sentences, front-loaded with the action, and contains no redundant information. Every sentence adds value: the first states the core function, the second provides usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and an output schema (signaled), the description covers the purpose and usage context adequately. It does not explain the output format, but the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with a single optional parameter repoPath fully described in the schema. The description does not add additional parameter semantics beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it inspects a local repo and lists package aliases from packages/*.yml. This distinguishes it from sibling tools like list_repo_node_types by focusing on packages, providing a specific verb-resource pair.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises use when a local repo is available and repo-backed node-type discovery is needed before falling back to the corpus. While it doesn't name specific alternative tools, the 'falling back to the corpus' hint suggests a broader strategy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_runsList RunsA
Read-onlyIdempotent

List Coalesce runs with optional filters for type, status, and environment.

Args:

  • runType ('deploy'|'refresh', optional): Filter by type

  • runStatus ('completed'|'failed'|'canceled'|'running'|'waitingToRun', optional): Filter by status

  • environmentID (string, optional): Filter by environment

  • detail (boolean, optional): Include full run details

  • limit, startingFrom, orderBy, orderByDirection: Pagination controls

Returns: { data: Run[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
detailNoInclude full run details in response
orderByNoField to sort by (required with startingFrom)
runTypeNoFilter by run type
runStatusNoFilter by run status
startingFromNoCursor from previous response's next field
environmentIDNoFilter by environment ID
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only, idempotent, and non-destructive behavior. The description adds pagination details (limit, startingFrom, orderBy) and return structure (next, total), which are not in annotations. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args and Returns sections, front-loading the main purpose. It is concise, though the parameter list is somewhat redundant with the schema. Each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with output schema existing, the description adequately covers purpose, filters, pagination, and return shape. No mention of authorization or rate limits, but annotations cover safety. It is complete enough given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% coverage with descriptions; the description lists parameters with types and optionality but adds minimal new semantic meaning beyond the schema. It groups pagination controls but repeats schema info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List Coalesce runs' with optional filters, specifying the verb and resource. It distinguishes from sibling tools like get_run or cancel_run by focusing on listing with filtering capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like get_run or list_environment_jobs. The description only lists parameters and return type, without contextual use cases or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_user_rolesList User RolesB
Read-onlyIdempotent

List roles for all users in the organization, optionally scoped.

Args:

  • projectID (string, optional): Scope to a project

  • environmentID (string, optional): Scope to an environment

Returns: { data: RoleAssignment[], next?: string, total?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIDNoOptional project scope filter
environmentIDNoOptional environment scope filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive. Description adds return format (pagination fields) but little else beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise docstring format with Args/Returns. No wasted words, front-loaded purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple with optional filters. Description covers purpose, parameters, and return shape. Output schema exists but is not present in description; description still provides sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description repeats parameter meanings without adding new context beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists roles for users, optionally scoped. However, not explicitly differentiated from sibling 'get_user_roles', which may be singular vs plural.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like 'get_user_roles', 'set_org_role', etc. The description implies usage for listing all roles but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspace_nodesList Workspace NodesA
Read-onlyIdempotent

List nodes in a Coalesce workspace (use list_workspaces to find workspace IDs). Returns ONE page (default 100 nodes, or 25 when detail=true).

IMPORTANT: if the response has hasMore: true, this is NOT the whole workspace β€” treating one page as complete will undercount it. Either page through the rest (call again with startingFrom set to the returned next, same orderBy), or better, switch tools: use analyze_workspace_patterns for a complete whole-workspace profile in one call, or search_workspace_content / get_workspace_node by ID to find specific nodes. Only page the full workspace when the user explicitly wants a full inventory.

Args:

  • workspaceID (string, required): The workspace ID

  • detail (boolean, optional): Include full node details

  • limit, startingFrom, orderBy, orderByDirection: Pagination (limit defaults to 100, or 25 when detail=true)

Returns: { data: Node[], next?: string, hasMore?: boolean, retrieved?: number }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (max 500)
detailNoInclude full node details in response
orderByNoField to sort by (required with startingFrom)
workspaceIDYesThe workspace ID
startingFromNoCursor from previous response's next field
orderByDirectionNoSort direction

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint. The description adds specific pagination behavior (default limits, hasMore flag, page semantics) and warns about incomplete results. This adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: a single sentence for purpose, a clear warning, then a paragraph with usage guidance and a paragraph describing args and returns. No fluff, well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, pagination complexity, many sibling tools, and presence of annotations and output schema, the description covers prerequisites, pagination logic, expected return shape, and alternatives. Fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds meaning by explaining default limit values (100 vs 25 with detail), the role of pagination parameters, and the return structure (next, hasMore). This enriches the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists nodes in a workspace, specifies it returns one page, and distinguishes from siblings like analyze_workspace_patterns and search_workspace_content. The description is specific about the resource and action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (list nodes), when not to use (if complete inventory needed), and provides alternatives (analyze_workspace_patterns, search_workspace_content, get_workspace_node). Also advises to find workspace IDs via list_workspaces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspace_node_typesList Workspace Node TypesA
Read-onlyIdempotent

List distinct node types observed in current workspace nodes. This scans existing nodes only; it is not a true installed-type registry.

WARNING: Do NOT use these values directly as the nodeType parameter for create_workspace_node_from_predecessor or create_workspace_node_from_scratch. The observed values may be bare numeric IDs (e.g. '31') that differ from the proper package-prefixed format (e.g. 'base-nodes:::Stage'). Always call plan_pipeline first to discover the correct nodeType.

Args:

  • workspaceID (string, required): The workspace ID

Returns: { nodeTypes: string[], counts: Record<string, number>, total: number } β€” nodeTypes is sorted by frequency descending; counts maps each type to its usage count.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
basisNo
totalNo
countsNo
nodeTypesNo
workspaceIDNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds critical context: scans existing nodes only, returns observed types (may be numeric IDs), and details return structure (sorted, counts). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Highly concise: purpose and warning in two short paragraphs, followed by structured Args and Returns. Every sentence adds value with no redundancy. Front-loaded with critical usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity (1 param), rich annotations, and described output schema, the description is complete. It covers scope, limitations, return format, and usage warnings adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage 100% with parameter description 'The workspace ID'. Description restates this without added meaning. However, it includes a Returns section detailing output structure (nodeTypes, counts, total), which compensates minimally. Baseline 3, slight improvement from return info.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List distinct node types observed in current workspace nodes' with specific verb and resource. It distinguishes from a registry ('not a true installed-type registry') and contrasts with plan_pipeline. Sibling list_repo_node_types differs by scope, making purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly warns against using returned values directly for nodeType parameters and directs to plan_pipeline instead. Provides clear when-not-to-use guidance with specific examples (bare numeric IDs vs proper format).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_workspacesList WorkspacesA
Read-onlyIdempotent

List all Coalesce workspaces.

Returns workspace IDs needed by node, job, and subgraph tools. Each workspace includes its projectID.

Returns: { data: Workspace[] }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
nextNo
totalNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false. The description adds context that each workspace includes its projectID and that IDs are needed by other tools, which is valuable beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the core action, and every word provides value. No waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters, rich annotations, and an output schema, the description is complete: it states what it does, what it returns, and its utility for other tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in input schema (schema coverage 100%), so baseline is 4. Description adds no additional parameter information, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all Coalesce workspaces, with specific mention of returning workspace IDs needed by other tools. It is distinct from sibling tools which are more specific or actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (before node, job, subgraph tools) by noting that it returns workspace IDs needed by them. However, it does not explicitly state when not to use it or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_disk_node_to_workspace_bodyParse Disk Node YAML to Workspace BodyB
Read-onlyIdempotent

Convert an on-disk coa node YAML (the nodes/*.yml format) into a cloud workspace-node body suitable for set_workspace_node or update_workspace_node. Returns the cloud-shape object.

Use this when local-dev edits to a YAML node need to be pushed back to a cloud workspace without manually translating the schema (operation: β†’ flat top-level, stepCounter/columnCounter β†’ nodeID/columnID, sourceColumnReferences[] β†’ sources[]).

For nodes that originated in the cloud, UUIDs round-trip and the cloud will treat the result as an idempotent update. For nodes authored from scratch on disk, the UUIDs are local-only β€” use create_workspace_node_from_predecessor or create_workspace_node_from_scratch instead of pushing this body via set/update.

Provide one of:

  • yaml: raw YAML string (will be parsed)

  • diskNode: pre-parsed disk-shape object

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so conversion is read-only. The description adds context about UUID round-trip behavior. However, it describes inputs (yaml or diskNode) not present in the schema, creating a contradiction that undermines transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise and well-structured, with purpose upfront. It is slightly verbose but earns its sentences by providing useful details and alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the return value and transformation well, but the missing parameter definitions make it incomplete. Without input definition, the tool cannot be invoked correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no properties, but the description demands 'Provide one of: yaml or diskNode'. This is a critical mismatch; the schema does not support these inputs, making the tool unusable as defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool converts on-disk YAML to a cloud workspace-node body for use with set/update tools. It specifies the format and distinguishes from sibling tools like create_workspace_node_from_predecessor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: use when pushing local-dev edits, avoid for scratch nodes (use alternatives). This clearly differentiates when to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_sql_structureParse SQL StructureA
Read-onlyIdempotent

Parse a SQL statement into its structural components without touching the workspace. Returns CTEs (if any), source table references (FROM/JOIN), and projected columns (SELECT list). Use this as the first step in a multi-step pipeline creation workflow to inspect the SQL decomposition before choosing node types or building a plan.

For CTE-based SQL, each CTE is returned with its columns (with transform detection), WHERE filters, source tables, structural flags (hasJoin, hasGroupBy), and inter-CTE dependency references.

For non-CTE SQL, returns the parsed source refs and SELECT items with column/expression classification.

This tool is pure parsing β€” no workspace reads, no node type selection, no mutations.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe SQL statement to parse. Pass it exactly as provided β€” do not rewrite or modify it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ctesNo
hasCtesNo
hasJoinNo
cteCountNo
guidanceNo
warningsNo
sourceRefsNo
selectItemsNo
sourceCountNo
selectItemCountNo
supportedSelectCountNo
unsupportedSelectCountNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context about the tool being pure parsing, details return behavior for CTE vs non-CTE SQL, and reinforces 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose and structured into paragraphs for CTE and non-CTE cases. It is moderately concise but could integrate the final reinforcing sentence earlier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and rich annotations, the description provides sufficient context about return types and the tool's role in workflows. It covers both CTE and non-CTE cases adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter `sql`. The description adds the important instruction to pass the SQL verbatim without rewriting, which goes beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool parses SQL statements into structural components and distinguishes itself from sibling tools by emphasizing it's pure parsing without mutations or workspace access.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly advises using this as the first step in a multi-step pipeline creation workflow and clarifies that it does not perform workspace reads, node selection, or mutations, guiding when to use or avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

personalize_skillsPersonalize SkillsA
Idempotent

Export all bundled Coalesce skill files to a local directory for customization. Each skill gets two files: coalesce_skills.{name}.md (the default) and user_skills.{name}.md (your overrides). Edit user_skills files to augment or override the defaults. Idempotent β€” never overwrites existing files.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNoDirectory to export skills to. Defaults to /root/.coalesce-mcp/skills

Output Schema

ParametersJSON Schema
NameRequiredDescription
createdYes
directoryYes
configHintYes
totalSkillsYes
alreadyExistedYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and destructiveHint=false. The description adds context: the exact files created (coalesce_skills.{name}.md and user_skills.{name}.md) and confirms idempotency with 'never overwrites existing files'. This goes beyond annotations and provides useful behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, then details outputs and behavior. No redundant information; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, annotations covering idempotency, and an output schema handling return values), the description covers purpose, outputs, and behavior completely. There are no gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the input schema already describes the directory parameter with default value. The description does not add further parameter meaning, so it meets the baseline for this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Export all bundled Coalesce skill files to a local directory for customization.' It uses a direct verb-resource pair and distinguishes from sibling tools which deal with workspace nodes, runs, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use the tool (to customize skills by editing user_skills files) and implies no alternatives among siblings. However, it does not explicitly state when not to use it or mention alternatives, so it misses explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_workshop_closePipeline Workshop CloseA
Idempotent

Close a pipeline workshop session and clean up the session state. If there are uncreated nodes in the plan, use build_pipeline_from_intent or plan_pipeline to create them before closing.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIDYesThe workshop session ID to close

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
closedNo
messageNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false; the description adds behavioral context about cleaning session state and handling uncreated nodes, which is consistent and adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff: first sentence states purpose, second provides conditional usage guidance. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (close operation with one parameter) and the existence of an output schema, the description adequately covers purpose, usage conditions, and prerequisite actions, making it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter sessionID, so the description adds no additional semantic detail beyond what the schema already provides, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (close) and resource (pipeline workshop session), and it distinguishes itself from sibling tools like pipeline_workshop_open and pipeline_workshop_instruct by specifying cleanup of session state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when-not-to-use guidance by mentioning uncreated nodes and suggests two alternative tools (build_pipeline_from_intent, plan_pipeline) to handle that case before closing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_workshop_instructPipeline Workshop InstructA

Send a natural language instruction to an open pipeline workshop session. The instruction modifies the current plan β€” you can:

  • Add nodes: 'add a staging node for PAYMENTS'

  • Join sources: 'join CUSTOMERS and ORDERS on CUSTOMER_ID'

  • Add aggregation: 'aggregate total REVENUE by REGION'

  • Change join key: 'change the join key to ORDER_ID'

  • Add filters: 'add filter for STATUS = active'

  • Add/remove columns: 'add column FULL_NAME' or 'remove column MIDDLE_NAME'

  • Rename nodes: 'rename STG_ORDERS to STG_SALES'

  • Remove nodes: 'remove the ORPHAN node'

Each instruction is processed against the current session state, and the updated plan is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIDYesThe workshop session ID from pipeline_workshop_open
instructionYesNatural language instruction to modify the plan

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
actionNo
changesNo
warningsNo
sessionIDNo
currentPlanNo
openQuestionsNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says the instruction 'modifies the current plan,' consistent with readOnlyHint=false. The examples illustrate the range of modifications but do not disclose additional behavioral traits such as whether the session state is saved, if there are any side effects like caching, or what happens on invalid input. Annotations already provide the core mutation and non-destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear introductory sentence followed by a bullet-point list of example instructions. It is informative but slightly lengthy; it could be more concise by trimming redundant examples. However, the structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity (natural language processing), the description covers the core functionality well. The existence of an output schema means return value documentation is not required. However, it does not mention error handling or prerequisites (e.g., session must be open and active), which might be considered minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with clear descriptions for both sessionID and instruction. The tool description adds value by providing many examples of valid instruction content, but these are illustrative rather than specifying constraints beyond the schema. Therefore, the parameter semantics are adequately covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool modifies an open pipeline workshop session via natural language. It lists numerous example instructions (add nodes, join sources, add filters, etc.), making the purpose explicit and distinguishable from sibling tools like pipeline_workshop_open (which opens a session) and pipeline_workshop_close (which closes one).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that the instruction is sent to an open session, implying it should be used after pipeline_workshop_open. It provides a rich set of examples covering many possible modifications. However, it does not explicitly state when not to use this tool or mention alternatives for specific operations (e.g., using apply_join_condition instead of a join instruction).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline_workshop_openPipeline Workshop OpenA

Open a new pipeline workshop session for iterative, conversational pipeline building. The workshop maintains state between calls so you can incrementally add nodes, change join keys, add filters, rename nodes, and refine the plan before creating anything.

Optionally provide an initial intent (e.g., 'join customers and orders on customer_id') to bootstrap the session with initial nodes.

Returns a sessionID that must be passed to subsequent workshop calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentNoOptional initial intent to bootstrap the session (e.g., 'join CUSTOMERS and ORDERS on CUSTOMER_ID')
workspaceIDYesThe workspace ID to build the pipeline in

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
nodesNo
historyNo
warningsNo
createdAtNo
sessionIDNo
updatedAtNo
workspaceIDNo
openQuestionsNo
resolvedEntitiesNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses stateful behavior and return of sessionID. However, with openWorldHint=true, description does not elaborate on potential side effects or permissions needed, missing behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a distinct purpose: purpose, operational behavior, and optional input. Front-loaded and free of extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, output schema present, and annotations, the description is sufficient. It clearly explains the tool's role, stateful nature, and required follow-up, leaving no major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description rephrases schema descriptions for both parameters without adding significant new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Open' and resource 'pipeline workshop session' with specific purpose 'iterative, conversational pipeline building'. Distinguishes from sibling tools like pipeline_workshop_instruct and pipeline_workshop_close.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that state is maintained between calls and that sessionID must be passed to subsequent workshop calls. Implicitly indicates when to use (start of session) vs siblings, but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_pipelinePlan PipelineA
Read-onlyIdempotent

Plan a Coalesce pipeline by discovering and ranking all available node types from the repo. ALWAYS call this before creating nodes to get the correct node type.

The planner scans the repo for all committed node type definitions, scores them against your use case, and returns ranked candidates. When available, it also returns a cached planSummaryUri MCP resource for the ranked node type summary so you can reuse that guidance throughout the pipeline without calling the planner again.

IMPORTANT β€” DO NOT WRITE SQL: The sql parameter is ONLY for converting SQL that the USER provided (pasted or typed). If you are building a pipeline yourself, provide goal + sourceNodeIDs instead.

PREREQUISITE: Before calling this tool, use list_workspace_nodes to discover available source/upstream nodes and their IDs in the workspace.

Preferred approach: Provide goal AND sourceNodeIDs. The planner selects the best node type and scaffolds the pipeline. Without sourceNodeIDs, the planner returns clarification questions.

User-provided SQL: When a user pastes SQL, pass it in sql. The planner parses refs and column projections.

Consult coalesce://context/node-type-corpus for node type patterns and metadata structures.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNoThe user's EXACT SQL, copied verbatim. It may use raw table names or existing Coalesce {{ ref() }} syntax. Do NOT rewrite between SQL styles or modify the query. If you are building a pipeline yourself, do NOT write SQL β€” use goal + sourceNodeIDs instead.
goalNoOptional natural-language pipeline goal
schemaNoOptional target schema
databaseNoOptional target database
repoPathNoOptional local committed Coalesce repo path for repo-first node-type ranking. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
targetNameNoOptional target node name override
descriptionNoOptional node description
workspaceIDYesThe workspace ID
locationNameNoOptional target locationName
sourceNodeIDsNoOptional upstream node IDs when planning from a non-SQL goal.
targetNodeTypeNoOptional node type override. When omitted, the planner ranks repo-backed and observed workspace node types for the use case.
configOverridesNoOptional config overrides to merge into the planned node body.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sqlNo
goalNo
nodesNo
intentNo
statusNo
versionNo
warningNo
platformNo
warningsNo
planCachedNo
assumptionsNo
instructionNo
workspaceIDNo
openQuestionsNo
cteNodeSummaryNo
planSummaryUriNo
STOP_AND_CONFIRMNo
nodeTypeSelectionNo
USE_THIS_NODE_TYPENo
supportedNodeTypesNo
nodeTypeDisplayNameNo
nodeTypeInstructionNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true. Description adds that the planner scans the repo, scores node types, and returns a cached planSummaryUri resource, providing context beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with sections, front-loaded with key instruction, and every sentence adds value. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 12 parameters and complexity, the description covers usage, prerequisites, and output hints (planSummaryUri). Output schema exists, so return details are covered. Minor gap: does not explicitly connect output to creation tools, but implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds significant value by explaining the usage distinction between sql and goal+sourceNodeIDs, prerequisites, fallback behavior for repoPath, and when to use configOverrides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Plan', resource 'pipeline', and mechanism 'discovering and ranking node types'. It also instructs to always call before creating nodes, differentiating from sibling creation tools like create_pipeline_from_plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'ALWAYS call this before creating nodes', warns when not to write SQL, provides prerequisite (use list_workspace_nodes), preferred approach (goal + sourceNodeIDs), and references a context resource for further guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propagate_column_changePropagate Column ChangeA
Destructive

⚠️ WRITE operation β€” Updates all downstream columns that depend on a source column. Use this after renaming a column or changing its data type to propagate the change through the entire pipeline.

Args: workspaceID: Workspace to modify nodeID: Node containing the source column columnID: Column ID that was changed changes: Object with optional columnName and/or dataType to propagate

Returns: Pre-mutation snapshot summary (column-level changes), snapshotPath to a disk file with full node bodies, list of updated nodes/columns, total count, and any errors encountered. The disk snapshot at snapshotPath captures each downstream node's complete nodeBody before mutation, enabling manual reversal of partial failures via set_workspace_node. Each downstream node is fetched, its column updated, and the full node PUT back via API. The lineage cache is invalidated after propagation.

Requires a lineage cache β€” will fetch all workspace nodes with detail=true on first call. Note: Propagation targets are determined from the cached lineage graph (up to 30 min old). Downstream nodes added after the cache was built will not be included. Refresh lineage first if the workspace structure has changed recently.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesNode ID containing the source column
changesYesChanges to propagate β€” at least one of columnName or dataType required
columnIDYesColumn ID that was changed
confirmedNoSet to true after the user explicitly confirms the propagation. Required because this operation modifies multiple downstream nodes.
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
changesNo
snapshotPathNo
sourceNodeIDNo
totalUpdatedNo
updatedNodesNo
sourceColumnIDNo
preMutationSnapshotNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructive and not readonly, but description adds extensive behavioral details: performs PUT requests for each downstream node, creates a disk snapshot for reversibility, invalidates cache, and explains partial failure handling. This goes well beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with front-loaded warning and purpose. Contains necessary detail without being overly verbose. A few sentences could be tightened, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 params, nested object, output schema), the description covers prerequisites, side effects, return values, error handling, and limitations like cache staleness. Very complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions. The description's 'Args' section adds little beyond the schema, though it reinforces the required nature of changes. Overall, minimal added value for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it's a WRITE operation that updates all downstream columns depending on a source column, with specific use cases like renaming a column or changing data type. This clearly distinguishes it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context for when to use (after column rename/type change), and important prerequisites (lineage cache, staleness up to 30 min, need to refresh). Lacks explicit 'when not to use' but is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_workspace_node_columnsReplace Workspace Node ColumnsA
Idempotent

Replace all columns in a workspace node with a new set of columns, optionally applying a WHERE filter and additional changes in a single call.

Do not use overrideSQL or override.* fields; SQL override is disallowed in this project.

Use this when:

  • Applying column transforms (UPPER, LEFT, COALESCE, etc.) after node creation

  • Adding WHERE filters at the same time as column transforms

  • Converting from a simple join to GROUP BY aggregation

  • Completely replacing column definitions with aggregate functions

Prefer this over separate update_workspace_node calls. Combine column replacement + WHERE filter in one call.

Example: Apply transforms and filter in one call: { columns: [ { name: 'CUSTOMER_ID', transform: '"CUSTOMER_LOYALTY"."CUSTOMER_ID"' }, { name: 'CITY', transform: 'UPPER("CUSTOMER_LOYALTY"."CITY")' }, { name: 'CONTACT_INFO', transform: 'COALESCE("CUSTOMER_LOYALTY"."E_MAIL", "CUSTOMER_LOYALTY"."PHONE_NUMBER")' } ], whereCondition: '"CUSTOMER_LOYALTY"."CUSTOMER_ID" IS NOT NULL AND ("CUSTOMER_LOYALTY"."E_MAIL" IS NOT NULL OR "CUSTOMER_LOYALTY"."PHONE_NUMBER" IS NOT NULL)' }

IMPORTANT: Use whereCondition for WHERE filters β€” do NOT construct {{ ref() }} syntax yourself. The FROM clause is already set up from node creation. The whereCondition is appended to the existing joinCondition automatically.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID

  • columns (array, required): Complete new columns array

  • whereCondition (string, optional): WHERE filter to append

  • additionalChanges (object, optional): Additional fields to update

Returns: { nodeID, warning?, validation? }

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID
columnsYesComplete new columns array to replace metadata.columns. Each column should include name and may include transform, dataType, description, nullable, sources, and other hydrated metadata fields.
workspaceIDYesThe workspace ID
whereConditionNoOptional WHERE filter to append to the node's existing joinCondition. Just provide the condition β€” do NOT include the WHERE keyword or construct {{ ref() }} syntax. The FROM clause is already set from node creation. Example: '"LOCATION"."LOCATION_ID" IS NOT NULL AND "LOCATION"."LOCATION_ID" != 0'
additionalChangesNoOptional additional fields to update, such as name, description, config, or metadata. Object fields are deep-merged; arrays are replaced. Do NOT include metadata.sourceMapping or customSQL β€” use whereCondition for WHERE filters, apply_join_condition for join setup, or convert_join_to_aggregation for GROUP BY patterns.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false. The description adds that SQL override is disallowed, whereCondition is appended to existing joinCondition, and FROM clause is pre-set. This provides useful context beyond annotations, though auth/rate limits are not mentioned but not expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with clear sections (purpose, disallowed, when to use, example, args, returns). It is relatively long but every sentence adds value. Front-loaded with the main action. Minor redundancy (e.g., 'Args' section repeats schema) but acceptable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters with nested objects, output schema), the description covers all aspects: what the tool does, how to use each parameter, constraints (no overrideSQL, no ref()), behavior (append whereCondition), and return format. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds significant meaning: 'columns' is explicitly described as a complete replacement array with required name and optional transform/dataType etc. 'whereCondition' clarifies it appends to joinCondition, with an example avoiding ref syntax. 'additionalChanges' explains deep-merge behavior and lists excluded fields. This far exceeds the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool replaces all columns in a workspace node with a new set, optionally adding a WHERE filter. It distinguishes from siblings like update_workspace_node by emphasizing a single-call column replacement with filter. The verb 'Replace' and resource 'workspace node columns' are 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists when to use: applying column transforms, adding WHERE filters, converting to GROUP BY, replacing with aggregate functions. Also states what to avoid (overrideSQL, override.*) and advises preferring this over separate update_workspace_node calls. Includes a concrete example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retry_and_waitRetry and WaitA

Retry a failed Coalesce run and poll until completion or timeout. Returns a task that can be polled for status.

Requires Snowflake auth via environment variables (Key Pair or PAT).

Args:

  • runDetails.runID (string, required): The run ID to retry

  • runDetails.forceIgnoreWorkspaceStatus (boolean, optional): Force retry

  • parameters (object, optional): Runtime parameters

  • pollInterval (number, optional): Seconds between checks (default: 10)

  • timeout (number, optional): Max wait seconds (default: 1800)

Returns: { status, results, resultsError?, incomplete?, timedOut? }

Inspect timedOut, incomplete, and resultsError fields before continuing.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoMax seconds to wait (default: 1800, min: 30, max: 3600)
parametersNoArbitrary key-value parameters to pass to the rerun
runDetailsYes
pollIntervalNoSeconds between status checks (default: 10, min: 5, max: 300)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
resultsNo
timedOutNo
incompleteNo
resultsErrorNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details the polling mechanism, timeout, and return structure including timedOut, incomplete, and resultsError fields, adding context beyond annotations. Annotations are sparse (readOnlyHint=false, etc.), and the description properly communicates the mutating nature and expected outcomes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence, an auth requirement note, bulleted args, and return fields. It is appropriately sized but could be slightly more concise by removing redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (retry and poll) and the presence of an output schema, the description covers auth, parameters, return fields, and post-use checks. It does not explicitly differentiate from retry_run, but the purpose is clear. Minor gaps: no mention of error scenarios beyond return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (75%), so the baseline is 3. The description adds default values for pollInterval and timeout but omits min/max constraints present in the schema. For runDetails.runID and forceIgnoreWorkspaceStatus, the description provides simplified explanations compared to schema descriptions. Overall, it adds moderate value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retry a failed Coalesce run and poll until completion or timeout,' specifying the verb (retry and poll), resource (failed Coalesce run), and expected behavior. It distinguishes from siblings like retry_run (likely no wait) and run_and_wait (starts new run).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly indicates when to use the tool (to retry a failed run) and provides context such as requiring Snowflake auth. It advises inspecting specific return fields before continuing, guiding post-invocation behavior. However, it does not explicitly mention when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retry_runRetry RunA

Retry a failed Coalesce run. Requires Snowflake auth via environment variables (Key Pair or PAT).

Args:

  • runDetails.runID (string, required): The run ID to retry

  • runDetails.forceIgnoreWorkspaceStatus (boolean, optional): Force retry even if deploy failed

  • parameters (object, optional): Runtime parameters

Returns: { runCounter, runStatus, message }

Prefer retry_and_wait when you need the final outcome in a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
parametersNoArbitrary key-value parameters to pass to the rerun
runDetailsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
runStatusNo
runCounterNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that forceIgnoreWorkspaceStatus forces retry even if deploy failed, and notes caution. Requires Snowflake auth. Annotations already indicate non-readonly and non-idempotent; description adds context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structured with Args/Returns, front-loaded purpose sentence. No fluff, but the Args section could be more concise by referencing schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers auth requirement, parameter caution, return shape, and points to sibling tool. Reasonably complete given has output schema and good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters well (runID pattern, forceIgnoreWorkspaceStatus caution). Description adds minimal extra meaning beyond schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Retry a failed Coalesce run' with specific verb (retry) and resource (run). Differentiates from sibling retry_and_wait by noting it returns final outcome.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends retry_and_wait when final outcome is needed, and mentions Snowflake auth prerequisites. Provides clear guidance on when to use alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_pipelineReview PipelineA
Read-onlyIdempotent

Analyze an existing pipeline in a Coalesce workspace and suggest improvements. Walks the node DAG, inspects column transforms, join conditions, node types, naming conventions, and layer architecture to identify issues and optimization opportunities.

Returns findings sorted by severity (critical β†’ warning β†’ suggestion) with actionable fix suggestions.

Checks for:

  • Redundant passthrough nodes (no transforms added)

  • Missing join conditions (multi-predecessor nodes without FROM/JOIN)

  • Layer violations (skipping staging/intermediate layers)

  • Node type mismatches (View used for joins, Dimension in staging layer)

  • Orphan nodes (disconnected from the pipeline)

  • Deep chains (8+ nodes deep)

  • High fan-out risk (10+ downstream dependents)

  • Naming inconsistencies

  • Unused columns (>50% not referenced downstream)

Use nodeIDs to scope the review to a specific pipeline section (e.g., from a subgraph).

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDsNoOptional list of node IDs to scope the review. If omitted, reviews the entire workspace (up to 50 nodes in detail).
workspaceIDYesThe workspace ID to review

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeNo
summaryNo
findingsNo
warningsNo
nodeCountNo
analyzedAtNo
graphStatsNo
methodologyNo
workspaceIDNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: it explains the tool walks the node DAG, inspects transforms, join conditions, etc., and returns findings sorted by severity. Since annotations already declare readOnlyHint and idempotentHint, the description enriches with operational details without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise opening sentence followed by bullet points listing specific checks. Every sentence adds value; no fluff. 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description fully covers what it does, the checks performed, and parameter usage. The presence of an output schema means return values need not be detailed. The description is complete for an agent to understand when and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers both parameters with descriptive descriptions (100% coverage). The description's additional note about using nodeIDs to scope the review largely repeats schema info, adding minimal new meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Analyze an existing pipeline in a Coalesce workspace and suggest improvements.' It specifies the verb 'analyze' and the resource 'pipeline', and enumerates specific checks (e.g., redundant passthrough nodes, missing join conditions, layer violations), making it highly distinct from siblings like analyze_impact or analyze_workspace_patterns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when reviewing an existing pipeline) and mentions scoping via nodeIDs, but it does not explicitly state when not to use it or suggest alternative tools for different scenarios. Provides basic usage context but no comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_and_waitRun and WaitA

Start a Coalesce refresh run and poll until completion or timeout. Returns a task that can be polled for status.

Requires Snowflake auth via environment variables (Key Pair or PAT). Provide exactly one of runDetails.environmentID or runDetails.workspaceID. If the user provides a job name instead of an ID, look it up with find_jobs_by_name (or list_environment_jobs) first.

Args:

  • runDetails.environmentID (string, optional): Target deployed environment (numeric ID as string)

  • runDetails.workspaceID (string, optional): Target workspace for a development run (numeric ID as string)

  • runDetails.jobID (string, optional): Specific job to run

  • runDetails.includeNodesSelector (string, optional): Node filter

  • runDetails.excludeNodesSelector (string, optional): Node exclusion

  • runDetails.parallelism (number, optional): Max parallel nodes

  • runDetails.forceIgnoreWorkspaceStatus (boolean, optional): Force run

  • confirmRunAllNodes (boolean): Required when no job/node scope

  • parameters (object, optional): Runtime parameters

  • pollInterval (number, optional): Seconds between checks (default: 10, range: 5–300)

  • timeout (number, optional): Max wait seconds (default: 1800, range: 30–3600)

Returns: { status, results, resultsError?, incomplete?, timedOut? }

Inspect timedOut, incomplete, and resultsError fields before continuing.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoMax seconds to wait (default: 1800, min: 30, max: 3600)
parametersNoArbitrary key-value parameters to pass to the run
runDetailsYes
pollIntervalNoSeconds between status checks (default: 10, min: 5, max: 300)
confirmRunAllNodesNoMust be set to true when no jobID, includeNodesSelector, or excludeNodesSelector is provided. This confirms you intend to run ALL nodes in the target.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
resultsNo
timedOutNo
incompleteNo
resultsErrorNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and non-destructive nature. The description adds context: it initiates a long-running refresh, polls until timeout, and requires inspecting fields like timedOut and incomplete. It also mentions auth requirements. However, it does not detail potential side effects (e.g., data changes from the run), though the annotations suggest non-destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a brief overview, prerequisites, bullet-pointed arguments, and return value section. It front-loads the main purpose. While slightly verbose (e.g., repeating 'Returns a task that can be polled for status' is redundant given the polling behavior), it remains clear and organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (nested objects, 5 top-level params) and the presence of an output schema, the description covers the key aspects: authentication, parameter constraints, return fields, and post-execution inspection. It lacks details on error messages or pagination but is sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already describes most parameters. The description adds value by explaining default values (pollInterval:10, timeout:1800), ranges, and the mutual exclusivity of environmentID/workspaceID. It clarifies that confirmRunAllNodes is required when no job/node scope is specified, which the schema also notes but the description reiterates concisely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Start a Coalesce refresh run and poll until completion or timeout.' This specific verb-resource combination distinguishes it from siblings like start_run (no wait) and run_status (status-only). The title 'Run and Wait' reinforces the dual action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit prerequisites (Snowflake auth via env vars), mutual exclusivity of environmentID/workspaceID, and a lookup resolution if job name is provided. It also notes when confirmRunAllNodes is required. While it gives some guidance, it does not explicitly contrast with alternative tools (e.g., when to use retry_and_wait instead) beyond implying it's for starting and waiting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_statusRun StatusA
Read-onlyIdempotent

Get the current status of a Coalesce run by run counter.

Terminal statuses: completed, failed, canceled. Non-terminal: waitingToRun, running.

Args:

  • runCounter (number, required): The numeric run counter

Returns: { runCounter, runStatus, message }

ParametersJSON Schema
NameRequiredDescriptionDefault
runCounterYesThe run counter number (non-negative integer)

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
runStatusNo
runCounterNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral details: it returns a status and message, enumerates possible statuses (e.g., completed, running), and specifies the return format. This goes beyond structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for purpose, one for statuses, and a structured Args/Returns section. No filler, each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (1 param, output schema exists, no nested objects), the description covers the return structure and possible statuses. It is complete enough for an agent to use, though it could mention that the tool is safe/read-only (already in annotations).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter (runCounter) described as non-negative integer. The description repeats 'numeric run counter' but adds no new semantics beyond the schema. Baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the current status of a Coalesce run by run counter.' It specifies the action (get), resource (run), and key (run counter), distinguishing it from sibling tools like 'get_run' or 'get_run_details'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists terminal and non-terminal statuses, giving context on expected outputs, but does not explicitly state when to use this tool versus alternatives like 'get_run' or 'get_run_details'. No guidance on when to avoid or choose sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_node_type_variantsSearch Node Type VariantsA
Read-onlyIdempotent

Search the generated node-type corpus snapshot by normalized family, package, primitive, or support status. This tool queries the committed snapshot and does not require access to the original external node source repo at runtime.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of matches to return. Defaults to 25, max 200.
primitiveNoCase-insensitive match against a primitive used in the node definition, such as tabular or materializationSelector.
packageNameNoCase-insensitive exact match against one of the package names that carries the variant.
supportStatusNoFilter by current MCP support classification.
normalizedFamilyNoCase-insensitive exact match against the normalized family name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchesNo
summaryYes
matchedCountNo
totalMatchesNo
returnedCountNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds value by clarifying that the tool works on a snapshot, not the live repo, reinforcing its read-only and idempotent nature. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the core purpose and filters in the first sentence. The second sentence adds critical context about the snapshot and access requirements. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has a full output schema (hasOutputSchema: true) and 5 well-documented parameters, the description sufficiently covers the tool's purpose, use case (snapshot search), and constraints. It is complete for an agent to understand when and how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (all 5 parameters have descriptions in the input schema). The description repeats the filter categories but does not add new semantic information (e.g., order of precedence, default behavior when multiple parameters are combined). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches a specific resource ('generated node-type corpus snapshot') with a specific verb ('search') and lists the filtering dimensions (normalized family, package, primitive, support status). It differentiates from siblings like 'get_node_type_variant' (single variant retrieval) and 'list_repo_node_types' (list all types from repo) by focusing on snapshot search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that the tool queries a committed snapshot and does not need runtime access to the original external node source repo. This helps agents decide when to use it (e.g., when snapshot data suffices). However, it does not explicitly state when not to use it or mention alternatives like 'get_node_type_variant' for single variants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_workspace_contentSearch Workspace ContentA
Read-onlyIdempotent

Search across node names, SQL, column names, descriptions, and config values in a workspace using the lineage cache as the data source.

Args: workspaceID: Workspace to search query: Text to search for (case-insensitive substring match) fields: (optional) Array of fields to search β€” any of: name, nodeType, sql, columnName, columnDataType, description, config. Defaults to all fields. nodeType: (optional) Filter results to a specific node type limit: (optional) Max results to return (1-200, default 50)

Returns: Matching nodes with the fields that matched and content snippets. Efficient for large workspaces β€” searches the in-memory cache instead of making per-node API calls.

Requires a populated lineage cache β€” will fetch all workspace nodes with detail=true on first call (may take a moment for large workspaces). Subsequent calls use the cached data (default TTL: 30 min).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 50)
queryYesSearch text (case-insensitive)
fieldsNoFields to search β€” defaults to all if omitted
nodeTypeNoFilter to a specific node type
workspaceIDYesWorkspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryNo
fieldsNo
resultsNo
cacheAgeNo
truncatedNo
totalMatchesNo
returnedCountNo
nodeTypeFilterNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnly, idempotent), description discloses caching behavior: first call fetches all workspace nodes (may be slow), subsequent calls use in-memory cache with 30 min TTL. This adds significant behavioral context not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured: first sentence states purpose, followed by parameter list in docstring style, then returns and two paragraphs on efficiency and caching. Front-loaded and no wasted sentences, though could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main aspects: purpose, all parameters with defaults, return format, caching behavior, and performance implications. Omitted details like error handling or pagination are acceptable given the output schema and simplicity of the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for each parameter. The description adds default values (limit default 50, fields defaults to all), return format, and groups parameters logically. This goes 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches across node names, SQL, column names, descriptions, and config values using the lineage cache. It distinguishes from siblings by specifying the data source and efficiency, but does not explicitly name alternative search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use: it is efficient for large workspaces and uses cached data after initial fetch. Also states requirement of populated cache and default TTL. However, does not explicitly mention when not to use or compare to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

select_pipeline_node_typeSelect Pipeline Node TypeA
Read-onlyIdempotent

Rank and select the best Coalesce node type for a specific pipeline step. When repoPath or COALESCE_REPO_PATH is configured, scans the local repo for committed node type definitions. Otherwise, falls back to workspace-observed node types. Scores candidates against the provided context and returns ranked candidates with confidence levels.

Use this after parse_sql_structure to select node types for each structural piece (e.g., each CTE, or the main query). Provide structural hints like sourceCount, hasJoin, hasGroupBy for more accurate selection.

The tool runs the full deliberative selection loop: score all candidates, challenge the top pick against the intent corpus, disqualify if challenged, re-rank, and challenge again (2 rounds max).

Returns the selected node type, confidence level, full ranking with scores, and any warnings. Use the selectedNodeType in subsequent plan_pipeline, create_workspace_node_from_predecessor, or create_workspace_node_from_scratch calls.

This tool reads workspace node type inventory for ranking but does not mutate anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNoOptional SQL for this step β€” used for structural analysis during scoring.
goalNoNatural-language description of what this pipeline step does. Be specific β€” 'staging layer for raw customer data' is better than 'stage'. Include the transform pattern (join, aggregate, filter, rename, etc.).
hasJoinNoDoes this step involve a JOIN? Prevents view-family selection and provides structural context for ranking.
repoPathNoOptional local committed Coalesce repo path. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted.
hasGroupByNoDoes this step involve a GROUP BY? Influences selection toward aggregation-capable types.
targetNameNoOptional target node name β€” used for naming-signal scoring.
sourceCountYesNumber of source/predecessor nodes feeding into this step.
workspaceIDYesThe workspace ID β€” used to fetch observed node types for ranking context.
targetNodeTypeNoOptional explicit node type override β€” bypasses ranking and validates this specific type.
hasBusinessKeysNoAre business keys explicitly defined? Influences dimensional/data-vault type selection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningNo
warningsNo
selectionNo
autoExecutableNo
selectedFamilyNo
semanticSignalsNo
selectedNodeTypeNo
templateWarningsNo
selectionDegradedNo
selectedDisplayNameNo
missingDefaultFieldsNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the deliberative selection loop (score, challenge, re-rank, 2-round max) and explicitly states it reads workspace node types but does not mutate anything. This adds significant transparency beyond the annotations (readOnlyHint, destructiveHint).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly detailed and front-loaded with purpose, but several sentences describe the internal algorithm which may not be necessary for usage. Still, it's well-structured and clear. Could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (10 parameters, 2 required), the description explains input hints, the selection algorithm, and the return value (selectedNodeType, confidence, ranking, warnings). It also mentions subsequent tool calls. Annotations cover safety. Output schema presence (not shown) likely documents return fields. Complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The description reinforces using structural hints like sourceCount, hasJoin, hasGroupBy but adds no new semantic meaning per parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool selects the best Coalesce node type for a pipeline step. It differentiates from sibling tools like parse_sql_structure, specifying it should be used after that. The verb 'Rank and select' and resource 'node type' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this after parse_sql_structure' and advises providing structural hints. It also tells how to use the output in subsequent calls. However, it doesn't specify when not to use it or alternative tools, so not a perfect 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

serialize_workspace_node_to_disk_yamlSerialize Workspace Node to Disk YAMLA
Read-onlyIdempotent

Fetch a workspace node from the cloud and convert it to the on-disk coa YAML shape (the nodes/*.yml format). Returns both the parsed disk-shape object and a YAML string ready to write to disk.

Use this when an editor or local-dev workflow needs the disk representation of a cloud node β€” for example, to drop the YAML into a coa project and run coa create --dry-run to preview the generated SQL without an extra round-trip.

The conversion handles the schema diff (top-level β†’ operation: wrapper, nodeID/columnID β†’ stepCounter/columnCounter, sources[] β†’ sourceColumnReferences[], synthesized columnReference per column, fileVersion: 1 header).

UUIDs round-trip; a node serialized this way and pushed back via parse_disk_node_to_workspace_body produces the same cloud body. The converter is lossy on cloud-only metadata (createdAt, updatedAt, etc.) β€” those are dropped.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID to serialize.
workspaceIDYesThe workspace ID containing the node.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes return format (parsed object + YAML string), schema diff handling, round-trip UUIDs, and lossiness on cloud-only metadata, adding value beyond annotations that already declare readOnly and idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Highly concise and well-structured: first sentence states purpose, second gives usage, third details conversion, fourth mentions round-trip and losses. No superfluous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the output (parsed disk-shape object and YAML string), transformation details, and limitations (lossy on cloud-only metadata). Sufficient for an agent to understand tool behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description does not add additional meaning beyond what the schema provides, maintaining baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool serializes a workspace node to disk YAML format, distinguishing it from siblings like get_workspace_node (fetch only) and parse_disk_node_to_workspace_body (reverse operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: for editor/local-dev workflows needing disk representation, e.g., to run coa create --dry-run. Also implies alternatives by naming reverse tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_env_roleSet Env RoleA
Idempotent

Set a user's role for a specific environment. Idempotent.

Args:

  • userID (string, required): The user ID

  • environmentID (string, required): The environment ID

  • role (string, required): Role to assign

Returns: Updated role assignment.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesThe environment role to assign (e.g., 'admin', 'developer', 'viewer')
userIDYesThe user ID
environmentIDYesThe environment ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds 'Idempotent' and mentions the return type ('Updated role assignment'), which provides some additional behavioral context but does not go beyond what annotations already cover in terms of safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a single sentence followed by a brief structured 'Args' section. Every sentence is necessary and front-loaded, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter idempotent mutation tool with full schema coverage and output schema, the description provides all necessary context. It covers purpose, parameters, and return value adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes all three parameters adequately. The description lists the parameters in a concise 'Args' section, but this adds little beyond the schema descriptions (e.g., role description already gives examples).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Set a user's role for a specific environment.' It uses a specific verb+resource and implicitly differentiates from siblings like delete_env_role, set_org_role, and set_project_role by specifying the scope (environment).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for assigning a role to a user for an environment, but it does not explicitly state when to use this tool over alternatives (e.g., set_org_role, set_project_role) or provide any exclusions or prerequisites. The usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_org_roleSet Org RoleA
Idempotent

Set the organization-level role for a user. Idempotent β€” safe to call multiple times.

Args:

  • userID (string, required): The user ID

  • role (string, required): Role to assign (e.g., 'admin', 'member', 'viewer')

Returns: Updated role assignment.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesThe organization role to assign (e.g., 'admin', 'member', 'viewer')
userIDYesThe user ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false. Description echoes idempotence but adds no new behavioral context such as permission requirements 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded with purpose and key trait (idempotent). Could benefit from bullet parameter list but remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, two-parameter tool with output schema present, the description covers purpose, idempotence, and return value fully. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. Description merely restates parameter descriptions with example role values, adding minimal additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'set' and resource 'organization-level role', and title reinforces. Distinguishes from sibling tools like set_env_role and set_project_role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions idempotence, implying safe repeated calls, but does not explicitly contrast with alternative tools or provide when-to-use guidance. Name and description suffice for purpose-driven selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_project_roleSet Project RoleA
Idempotent

Set a user's role for a specific project. Idempotent.

Args:

  • userID (string, required): The user ID

  • projectID (string, required): The project ID

  • role (string, required): Role to assign (e.g., 'admin', 'developer', 'viewer')

Returns: Updated role assignment.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesThe project role to assign (e.g., 'admin', 'developer', 'viewer')
userIDYesThe user ID
projectIDYesThe project ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds an explicit 'Idempotent' statement, reinforcing the annotation. No additional behavioral context (e.g., authorization, side effects) is provided, but the annotations carry the burden well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is minimal: two sentences plus a structured args/returns list. Every element is necessary and front-loaded with the primary purpose. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter tool with full schema coverage, annotations, and an output schema, the description is complete. It states idempotency and the return type, which is sufficient for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds value by listing parameters with examples for 'role' (admin, developer, viewer) and a 'Returns' line, slightly augmenting schema information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (set) and the resource (user's role for a project), with idempotency noted. Distinguished from sibling tools like set_org_role or set_env_role by specifying 'for a specific project'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for project-specific role assignments but does not explicitly compare to alternative tools (e.g., set_org_role, set_env_role) or provide when-not-to-use guidance. The context is clear but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_workspace_nodeSet Workspace NodeA
Idempotent

Update a workspace node's full body. Reads current state, merges changes, validates, and writes back.

This is the primary mutation tool for workspace nodes. It handles column linkage preservation, passthrough transform stripping, required API field injection, and metadata cleaning automatically.

Args:

  • workspaceID (string, required): The workspace ID

  • nodeID (string, required): The node ID

  • body (object, required): Fields to update β€” name, description, nodeType, config, metadata.columns, etc.

Returns: { nodeID, created, warning?, validation?, configCompletion? }

Do NOT set overrideSQL or metadata.sourceMapping through this tool. Use apply_join_condition or convert_join_to_aggregation for join/aggregation changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesComplete node data to set. Common fields include name, description, nodeType, table, database, schema, locationName, storageLocations, config, and metadata. Do not include overrideSQL β€” it is auto-preserved.
nodeIDYesThe node ID
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description details the read-merge-write process, automatic handling of column linkages, passthrough transforms, API field injection, and metadata cleaning. It explains the return structure, adding significant behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, behavior paragraph, bullet-point args, return info, and usage warnings. It is front-loaded but slightly lengthy; every sentence adds value, so it earns a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested objects, 3 required params), the description covers the update process, automatic behaviors, and return fields. It could mention relationship with get_workspace_node for reading state, but overall it's complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by listing typical body fields (name, description, nodeType, config, metadata.columns) and warns against including overrideSQL (auto-preserved). This aids understanding beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a workspace node's full body with merge semantics. It identifies itself as the 'primary mutation tool' and lists automatic behaviors, distinguishing from tools like apply_join_condition. However, it does not differentiate from the sibling tool 'update_workspace_node', which may cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given on when to use (for workspace node updates) and when not to use (avoid setting overrideSQL or metadata.sourceMapping, use apply_join_condition/convert_join_to_aggregation for joins/aggregations). It lacks explicit mention of when to prefer alternative mutation tools like update_workspace_node.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_runStart RunA

Start a new Coalesce refresh run. Returns a task that resolves once the run has been submitted.

Requires Snowflake auth β€” credentials read from environment variables (Key Pair: SNOWFLAKE_KEY_PAIR_KEY, or PAT: SNOWFLAKE_PAT, plus SNOWFLAKE_USERNAME, SNOWFLAKE_WAREHOUSE, SNOWFLAKE_ROLE).

Provide exactly one of runDetails.environmentID or runDetails.workspaceID. If the user provides a job name, look up the ID with find_jobs_by_name (or list_environment_jobs) first.

Args:

  • runDetails.environmentID (string, optional): Target deployed environment (numeric ID as string)

  • runDetails.workspaceID (string, optional): Target workspace for a development run (numeric ID as string)

  • runDetails.jobID (string, optional): Specific job to run

  • runDetails.includeNodesSelector (string, optional): Node filter for ad-hoc runs

  • runDetails.excludeNodesSelector (string, optional): Node exclusion filter

  • runDetails.parallelism (number, optional): Max parallel nodes (default: 16)

  • runDetails.forceIgnoreWorkspaceStatus (boolean, optional): Allow run even if last deploy failed

  • confirmRunAllNodes (boolean): Required when no job/node scope is provided

  • parameters (object, optional): Key-value runtime parameters

Returns: { runCounter: number, runStatus: string, message: string }

Prefer run_and_wait when you need the final outcome in a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
parametersNoArbitrary key-value parameters to pass to the run
runDetailsYes
confirmRunAllNodesNoMust be set to true when no jobID, includeNodesSelector, or excludeNodesSelector is provided. This confirms you intend to run ALL nodes in the target.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNo
runStatusNo
runCounterNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only and non-destructive. Description adds value by explaining auth setup, that it returns a task for submission, and that it requires Snowflake credentials. Could be improved by noting possible async behavior or failure modes, but overall good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured: one-sentence purpose, followed by auth, parameter guidance, args list with types, returns format, and alternative tool. No wasted words, every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complexity (nested objects, auth dependencies, multiple run types), the description covers key aspects: submission mechanism, parameter constraints, and return value. Mentions output schema indirectly via 'Returns: {...}'. Could mention polling status or concurrency limits, but run_and_wait covers final outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, but description significantly augments with usage rules: 'Provide exactly one of environmentID or workspaceID', 'If the user provides a job name, look up the ID...', default parallelism, and note on confirmRunAllNodes. Adds clear meaning beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Start a new Coalesce refresh run' with specific verb and resource. Distinguishes from sibling tools like run_and_wait by mentioning it returns a task for submission, not the final outcome.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: prefers run_and_wait for final outcome. Details required auth (Snowflake env vars), mutual exclusivity of environmentID/workspaceID, and mentions looking up job IDs with other tools. Covers confirmRunAllNodes requirement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_git_accountUpdate Git AccountA
Idempotent

Update an existing Git account. Partial update β€” only provided fields are changed.

Args:

  • gitAccountID (string, required): The account ID

  • name (string, optional): Updated name

  • gitUsername (string, optional): Updated git username

  • gitAuthorName (string, optional): Updated author name for git commits

  • gitAuthorEmail (string, optional): Updated email for git commits

  • gitToken (string, optional): Updated personal access token

  • provider (enum, optional): 'github' | 'gitlab' | 'bitbucket' | 'azureDevOps'

  • accountOwner (string, optional): User ID of the account owner

Returns: Updated Git account object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated name for the git account
gitTokenNoUpdated personal access token for the git provider
providerNoGit provider type
gitUsernameNoUpdated git username for authentication
accountOwnerNoUser ID of the account owner (org admins can manage other users' accounts)
gitAccountIDYesThe git account ID
gitAuthorNameNoUpdated author name for git commits
gitAuthorEmailNoUpdated email for git commits

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds 'Partial update' detail beyond annotations. Annotations already indicate non-destructive and idempotent. No contradictions; description aligns with and supplements annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise; single sentence for behavior then bullet list of parameters. Efficient and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given rich schema and annotations, plus output schema exists, the description provides all necessary context: partial update, return type, and parameter list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and descriptions in schema are detailed. Tool description repeats similar info without adding significant new meaning, thus baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Update an existing Git account' with specific verb and resource. Partial update distinction differentiates from create and delete siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Indicates partial update behavior, implying use when only certain fields need modification. Does not explicitly state when not to use or name alternatives, but siblings provide context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectUpdate ProjectA
Idempotent

Update an existing Coalesce project. Partial update β€” only provided fields are changed.

Args:

  • projectID (string, required): The project ID

  • name (string, optional): Updated name

  • description (string, optional): Updated description

  • gitAccountID, gitRepo, gitBranch (string, optional): Updated git settings

  • includeWorkspaces, includeJobs (boolean, optional): Expand response

Returns: Updated project object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated project name
gitRepoNoGit repository URL
gitBranchNoDefault git branch name
projectIDYesThe project ID
descriptionNoUpdated project description
includeJobsNoInclude nested job data in the response
gitAccountIDNoGit account ID to link to the project
includeWorkspacesNoInclude nested workspace data in the response

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds context of partial update and lists returned object, aligning with annotations and providing clarity beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear two-part structure: purpose statement followed by parameter list. Every sentence is informative, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters, 100% schema coverage, and an output schema, the description covers the partial update behavior and all parameters. It is complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description repeats parameter names and types in an Args section, adding no new semantics beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing Coalesce project' with 'Partial update β€” only provided fields are changed', specifying verb, resource, and behavior. It distinguishes from siblings like create_project, delete_project, and get_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when updating a project, but provides no explicit guidance on when to use this tool versus alternatives like update_workspace or update_git_account. No exclusions or context given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_workspace_jobUpdate Workspace JobB

Update an existing workspace job.

Args:

  • workspaceID (string, required): The workspace ID

  • jobID (string, required): The job ID

  • name (string, required): Updated job name

  • includeSelector (string, required): Node selector. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'

  • excludeSelector (string, required): Node exclusion selector. Same format as includeSelector

Returns: Updated job object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUpdated name for the job
jobIDYesThe job ID to update
workspaceIDYesThe workspace ID
excludeSelectorYesNode exclusion selector string. Same format as includeSelector. Use empty string to exclude nothing.
includeSelectorYesNode selector string. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-readonly, non-destructive, and non-idempotent. Description adds minimal behavioral detail beyond stating it updates and returns an object.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Fairly concise, front-loaded with the main purpose. Uses a clear list format for parameters, but could be slightly more efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Basic purpose and parameters are covered; output schema exists so return details are optional. Lacks usage context and differentiation from sibling tools, making it minimally complete for a 5-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description repeats parameters and adds minor format hints for selectors, but does not significantly enhance understanding beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action 'Update' and the resource 'existing workspace job'. Distinguishes from sibling tools like create_workspace_job and delete_workspace_job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use versus alternatives, no prerequisites mentioned, and no conditions for use provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_workspace_nodeUpdate Workspace NodeA
Idempotent

Safely update selected fields of a workspace node by fetching the current node, applying partial changes, then writing back the full merged body. Object fields are deep-merged; arrays replace the existing array when provided. Use list_workspaces to find workspace IDs.

Do not use overrideSQL or override.* fields; SQL override is disallowed in this project.

NOTE: Arrays (like metadata.columns) are replaced, not merged. For complex column transformations (e.g., converting from join to aggregation), consider using replace_workspace_node_columns instead.

For guidance on SQL platforms and tool usage patterns, see resources: coalesce://context/sql-platform-selection, coalesce://context/tool-usage

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIDYesThe node ID
changesYesPartial node fields to update. Common fields include name, description, database, schema, locationName, storageLocations, config, and metadata. Object fields are deep-merged; arrays replace the existing array when provided.
workspaceIDYesThe workspace ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
nodeIDNo
createdNo
warningNo
nextStepsNo
validationNo
joinSuggestionsNo
configCompletionNo
nodeTypeValidationNo
configCompletionSkippedNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the internal fetch-merge-write behavior, merge vs replacement semantics, and forbidden fields (overrideSQL). Annotations indicate idempotentHint=true and destructiveHint=false, which is consistent. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and uses efficient sentences. Every sentence adds essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the tool's complexity, the description adequately covers the update process, merge semantics, forbidden fields, and references to external resources. No gaps in requirements or behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% description coverage for parameters. The description adds value by clarifying the changes parameter structure ('Partial node fields...'), emphasizing array replacement vs object merge, and listing common fields. This enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (update) and resource (workspace node), explains the safe fetch-merge-write approach, and distinguishes from sibling tools like replace_workspace_node_columns by providing a specific alternative. It includes explicit mention of object deep-merge and array replacement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and when-not-to-use guidance, including a warning against using overrideSQL/override.* fields and a pointer to list_workspaces for finding workspace IDs. Also suggests an alternative tool for complex column transformations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_workspace_subgraphUpdate Workspace SubgraphA

Update a subgraph's name and member nodes. Replaces the entire steps array. Pass either subgraphID (fastest) or subgraphName β€” if only the name is given, the ID is resolved from (1) the local UUID cache, (2) {repoPath}/subgraphs/*.yml. The public Coalesce API has no subgraph list endpoint, so a subgraph created outside this MCP session cannot be resolved by name without a repo checkout.

Args:

  • workspaceID (string, required): The workspace ID

  • subgraphID (string, optional): The subgraph ID. Preferred when known.

  • subgraphName (string, optional): The subgraph name. Used to resolve the ID when subgraphID is absent.

  • repoPath (string, optional): Coalesce repo path for subgraph YAML lookup.

  • name (string, required): Updated name

  • steps (string[], required): Updated node IDs

Returns: { subgraphID, subgraph, resolvedFrom } where resolvedFrom is "input" | "cache" | "repo".

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUpdated name for the subgraph
stepsYesUpdated array of node IDs to include in the subgraph
repoPathNoOptional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile.
subgraphIDNoThe subgraph ID. Preferred when known β€” fastest path.
workspaceIDYesThe workspace ID
subgraphNameNoThe subgraph name. Used to resolve the ID from the local cache or repo subgraphs/ folder when subgraphID is absent (the Coalesce API has no subgraph list endpoint).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
nameNo
messageNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the steps array is entirely replaced (destructive to previous steps) and explains the ID resolution mechanism. This adds valuable context beyond annotations, which only hint at non-readonly, non-idempotent, non-destructive behavior. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points for arguments and returns, front-loading the main action. It is thorough but could be slightly more concise; however, the detail is warranted given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisites (ID resolution), side effects (replaces steps), return values, and edge cases (subgraph created outside session). With an output schema implied and the description providing return field details, it is complete for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds context about resolution order, fallback to environment variables, and the return object structure. This significantly aids the agent in understanding parameter relationships beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it updates a subgraph's name and member nodes, replaces the entire steps array. The verb 'update' and resource 'subgraph' are specific, distinguishing it from siblings like create_workspace_subgraph and delete_workspace_subgraph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on using subgraphID vs subgraphName, explains the resolution order (fastest path), and mentions the API limitation. However, it does not explicitly state when not to use this tool or list alternative tools for similar tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 115 tool updatesv0.10.1
    • First observedanalyze_impact
    • First observedanalyze_workspace_patterns
    • First observedapply_join_condition
    • First observedapply_sql_to_workspace_node
    • First observedaudit_documentation_coverage
    • First observedbuild_pipeline_from_intent
    • First observedcache_environment_nodes
    • First observedcache_org_users
    • First observedcache_runs
    • First observedcache_workspace_nodes
    • First observedcancel_run
    • First observedclear_data_cache
    • First observedcoa_add_warehouse_sources
    • First observedcoa_bootstrap_workspaces
    • First observedcoa_create
    • First observedcoa_deploy
    • First observedcoa_describe
    • First observedcoa_doctor
    • First observedcoa_dry_run_create
    • First observedcoa_dry_run_run
    • First observedcoa_list_project_nodes
    • First observedcoa_list_warehouse_sources
    • First observedcoa_plan
    • First observedcoa_refresh
    • First observedcoa_remove_warehouse_sources
    • First observedcoa_run
    • First observedcoa_validate
    • First observedcomplete_node_configuration
    • First observedconvert_join_to_aggregation
    • First observedcreate_environment
    • First observedcreate_git_account
    • First observedcreate_node_from_external_schema
    • First observedcreate_pipeline_from_plan
    • First observedcreate_pipeline_from_sql
    • First observedcreate_project
    • First observedcreate_workspace_job
    • First observedcreate_workspace_node_from_predecessor
    • First observedcreate_workspace_node_from_scratch
    • First observedcreate_workspace_subgraph
    • First observeddelete_env_role
    • First observeddelete_environment
    • First observeddelete_git_account
    • First observeddelete_project
    • First observeddelete_project_role
    • First observeddelete_workspace_job
    • First observeddelete_workspace_node
    • First observeddelete_workspace_subgraph
    • First observeddiagnose_run_failure
    • First observeddiagnose_setup
    • First observedfind_jobs_by_name
    • First observedgenerate_set_workspace_node_template
    • First observedgenerate_set_workspace_node_template_from_variant
    • First observedget_column_lineage
    • First observedget_downstream_nodes
    • First observedget_environment
    • First observedget_environment_health
    • First observedget_environment_job
    • First observedget_environment_node
    • First observedget_environment_overview
    • First observedget_git_account
    • First observedget_job_run_details_by_name
    • First observedget_node_type_variant
    • First observedget_pipeline_workshop_status
    • First observedget_project
    • First observedget_repo_node_type_definition
    • First observedget_run
    • First observedget_run_details
    • First observedget_run_results
    • First observedget_upstream_nodes
    • First observedget_user_roles
    • First observedget_workspace
    • First observedget_workspace_node
    • First observedget_workspace_subgraph
    • First observedlist_environment_jobs
    • First observedlist_environment_nodes
    • First observedlist_environments
    • First observedlist_git_accounts
    • First observedlist_job_nodes
    • First observedlist_org_users
    • First observedlist_projects
    • First observedlist_repo_node_types
    • First observedlist_repo_packages
    • First observedlist_runs
    • First observedlist_user_roles
    • First observedlist_workspace_node_types
    • First observedlist_workspace_nodes
    • First observedlist_workspaces
    • First observedparse_disk_node_to_workspace_body
    • First observedparse_sql_structure
    • First observedpersonalize_skills
    • First observedpipeline_workshop_close
    • First observedpipeline_workshop_instruct
    • First observedpipeline_workshop_open
    • First observedplan_pipeline
    • First observedpropagate_column_change
    • First observedreplace_workspace_node_columns
    • First observedretry_and_wait
    • First observedretry_run
    • First observedreview_pipeline
    • First observedrun_and_wait
    • First observedrun_status
    • First observedsearch_node_type_variants
    • First observedsearch_workspace_content
    • First observedselect_pipeline_node_type
    • First observedserialize_workspace_node_to_disk_yaml
    • First observedset_env_role
    • First observedset_org_role
    • First observedset_project_role
    • First observedset_workspace_node
    • First observedstart_run
    • First observedupdate_git_account
    • First observedupdate_project
    • First observedupdate_workspace_job
    • First observedupdate_workspace_node
    • First observedupdate_workspace_subgraph

TDQS

A3.6/5.0

Scored across 115 tools

Disambiguation2/5

The tool set contains many overlapping tools for similar operations. For example, there are multiple node-creation tools (create_workspace_node_from_scratch, create_workspace_node_from_predecessor, create_node_from_external_schema, create_pipeline_from_plan, create_pipeline_from_sql, build_pipeline_from_intent, pipeline_workshop) and multiple update tools (set_workspace_node, update_workspace_node, replace_workspace_node_columns, apply_join_condition, convert_join_to_aggregation) whose boundaries require very detailed descriptions to disambiguate. Similarly, run-related tools (start_run, run_and_wait, retry_run, retry_and_wait, get_run, get_run_details, run_status, get_run_results) heavily overlap in purpose.

Naming Consistency3/5

Naming is mostly snake_case verb_noun (list_workspaces, create_environment, get_run), but there is inconsistency: some tools use different verb forms (set_env_role vs delete_env_role; create vs update vs set), some omit the noun (run_status vs get_run_status), and there are several variants that break the pattern (coa_doctor, coa_bootstrap_workspaces, pipeline_workshop_open, plan_pipeline). The coa_* prefix family is consistent internally but the overall set mixes generic verbs (get, list, create, update, delete, set, run, start, retry, build, plan) without a clear convention about which verb to use for which operation.

Tool Count1/5

115 tools is an extreme count for an MCP server. Even for a full Coalesce platform surface (projects, environments, workspaces, nodes, jobs, runs, roles, git accounts, pipelines, coa CLI), the count is bloated by many composite/derived tools (get_run_details, get_environment_overview, run_and_wait, retry_and_wait) and near-duplicate variants. This will cause selection overhead and confusion for an agent.

Completeness5/5

Within its broad domain, the tool surface is remarkably complete: CRUD for projects, environments, workspaces, node mutations, role management, git accounts, jobs, runs, subgraphs, plus pipeline planning/creation, lineage analysis, caching, and a full coa CLI wrapper. There are no obvious dead ends β€” even setup diagnosis and skill personalization are covered.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    This MCP server enables database migration between heterogeneous systems (Oracle, PostgreSQL, SQL Server, Netezza to PostgreSQL or SQL Server) through AI assistants by providing tools for command preview, execution, validation, and workflow suggestions.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for executing Databricks SQL queries and comparing table data, supporting CLI and VS Code integration.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides tools to interact with dbt, including dbt Core, Cloud CLI, Semantic Layer, and Discovery API.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enterprise-grade MCP server for Microsoft SQL Server, enabling semantic schema discovery, table profiling, safe data operations with preview/confirm, and multi-environment support.
    33
    MIT