coalesce-transform-mcp
OfficialAllows management of Coalesce nodes, pipelines, environments, jobs, and runs, and integrates with Snowflake's Cortex Code for AI-driven data pipeline development, including validation, preview, planning, and deployment.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@coalesce-transform-mcppreview DDL for the customer_pipeline"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
coalesce-transform-mcp
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 | |
ποΈ | Customize agent behavior | |
π | Find a specific tool | |
π¦ | Walk through the full setup | |
π | Authenticate (env var or | |
π | Run against multiple Coalesce environments | |
π₯ | Scaffold source nodes from warehouse tables | |
π | Lock prod down to read-only |
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.
βοΈ 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-mcpOr 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:
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:
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:
Manual: identical to the stable VS Code install - Insiders reads the same MCP config.
One-liner:
claude mcp add coalesce-transform -- npx coalesce-transform-mcpPass env vars inline if you need them:
claude mcp add coalesce-transform \
--env COALESCE_ACCESS_TOKEN=$COALESCE_ACCESS_TOKEN \
-- npx coalesce-transform-mcpManual: 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.
π 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 constraintstool-usage- Best practices for tool batching, parallelization, and SQL conversionid-discovery- Resolving project, workspace, environment, job, run, node, and org IDsstorage-mappings- Storage location concepts,{{ ref() }}syntax, and reference patternsecosystem-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 strategiessql-platform-selection- Determining the active SQL platform from project metadatasetup-guide- First-time MCP setup flow driven bydiagnose_setup(pairs with the/coalesce-setupprompt)
sql-snowflake- Snowflake-specific SQL conventions for node SQLsql-databricks- Databricks-specific SQL conventions for node SQLsql-bigquery- BigQuery-specific SQL conventions for node SQL
node-creation-decision-tree- Choosing between predecessor-based creation, updates, and full replacementsnode-payloads- Working with workspace node bodies, metadata, config, and array-replacement riskshydrated-metadata- Coalesce hydrated metadata structures for advanced node payload editingintelligent-node-configuration- How intelligent config completion works, schema resolution, automatic field detectionnode-operations- Editing existing nodes: joins, columns, config fields, and SQL-to-graph conversionaggregation-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, executionintent-pipeline-guide- Usingbuild_pipeline_from_intentto create pipelines from natural languagepipeline-review-guide- Usingreview_pipelinefor pipeline analysis and optimizationpipeline-workshop-guide- Using pipeline workshop tools for iterative, conversational pipeline building
run-operations- Starting, retrying, polling, diagnosing, and canceling Coalesce runsrun-diagnostics-guide- Usingdiagnose_run_failureto analyze failed runs and determine fixes
Tools
Legend
β οΈ Destructive - the tool needs
confirmed: truebefore it will run.π§° Bundled
coaCLI - runs locally against a project directory. The tool needs aprojectPathpointing at a folder that containsdata.yml.Preflight validation - destructive π§° tools run a safety check before shelling out. See Safety model.
Environments, workspaces, projects
list_environments- List all available environmentsget_environment- Get details of a specific environmentlist_workspaces- List all workspacesget_workspace- Get details of a specific workspacelist_projects- List all projectsget_project- Get project details
Nodes
list_environment_nodes- List nodes in an environmentlist_workspace_nodes- List nodes in a workspaceget_environment_node- Get a specific environment nodeget_workspace_node- Get a specific workspace nodeanalyze_workspace_patterns- Detect package adoption, pipeline layers, methodology, and generate recommendationslist_workspace_node_types- List distinct node types observed in current workspace nodes
Jobs, subgraphs, runs
list_environment_jobs- List all jobs for an environmentfind_jobs_by_name- Fuzzy-match environment jobs by name and return each match with its recent runsget_job_run_details_by_name- Fuzzy-match one environment job by name and return its latest run details + resultsget_environment_job- Get details of a specific joblist_job_nodes- Resolve a workspace job's selectors into concrete nodes, grouped by subgraphget_workspace_subgraph- Get details of a specific subgraph by UUID (the public API has no subgraph list endpoint β look up UUIDs via the repo'ssubgraphs/folder or the local cache populated on create)list_runs- List runs with optional filtersget_run- Get details of a specific runget_run_results- Get results of a completed runget_run_details- Run metadata plus results in one call
Search
search_workspace_content- Search node SQL, column names, descriptions, and config valuesaudit_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 repocreate_pipeline_from_plan- Execute an approved pipeline plan using predecessor-based creationcreate_pipeline_from_sql- Plan and create a pipeline directly from SQLbuild_pipeline_from_intent- Build a pipeline from a natural language goal with automatic entity resolution and node type selectionreview_pipeline- Analyze an existing pipeline for redundant nodes, missing joins, layer violations, naming issues, and optimization opportunitiesparse_sql_structure- Parse a SQL statement into structural components (CTEs, source tables, projected columns) without touching the workspaceselect_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-loadedpipeline_workshop_instruct- Send a natural language instruction to modify the current workshop planget_pipeline_workshop_status- Get the current state of a workshop sessionpipeline_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 predecessorscreate_workspace_node_from_predecessor- Create a node from predecessor nodes with column coverage verificationcreate_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 bodyupdate_workspace_node- Safely update selected fields of a workspace nodereplace_workspace_node_columns- Replacemetadata.columnswholesaledelete_workspace_node- Delete a node from a workspace β οΈ
Configure
complete_node_configuration- Intelligently complete a node's configuration by analyzing contextapply_join_condition- Auto-generate and write a FROM/JOIN/ON clause for a multi-predecessor nodeconvert_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-disknodes/*.ymlshape 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 forset_workspace_node/update_workspace_nodeapply_sql_to_workspace_node- Round-trip user edits on rendered DDL/DML SQL (coa_dry_run_create/coa_dry_run_runoutput) 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 visuallyupdate_workspace_subgraph- Update a subgraph's name and node membershipdelete_workspace_subgraph- Delete a subgraph (nodes are NOT deleted) β οΈcreate_workspace_job- Create a job in a workspace with node include/exclude selectorsupdate_workspace_job- Update a job's name and node selectorsdelete_workspace_job- Delete a job β οΈ
start_run- Start a new run; requires Snowflake authrun_and_wait- Start a run and poll until completionrun_status- Check status of a running jobretry_run- Retry a failed runretry_and_wait- Retry a failed run and poll until completioncancel_run- Cancel a running job β οΈdiagnose_run_failure- Classify errors, surface root cause, suggest actionable fixesget_environment_overview- Environment details with full node listget_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 (withalreadyExistsflags)π§°
coa_add_warehouse_sourcesβ οΈ - Scaffold source-node YAML files from warehouse tables; supportsdryRun: truefor 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 nodeget_downstream_nodes- Walk the full downstream dependency graph for a nodeget_column_lineage- Trace a column through the pipeline upstream and downstreamanalyze_impact- Downstream impact of changing a node or specific column - impacted counts, grouped by depth, and critical pathpropagate_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 repolist_repo_node_types- List exact resolvable committed node-type identifiers fromnodeTypes/get_repo_node_type_definition- Resolve one node type and return its outer definition plus parsednodeMetadataSpecgenerate_set_workspace_node_template- Generate a YAML-friendlyset_workspace_nodebody templatesearch_node_type_variants- Search the committed node-type corpus by normalized family, package, primitive, or support statusget_node_type_variant- Load one exact node-type corpus variant by variant keygenerate_set_workspace_node_template_from_variant- Generate a template from a committed corpus variant
create_environment- Create a new environment within a projectdelete_environment- Delete an environment β οΈcreate_project- Create a new projectupdate_project- Update a projectdelete_project- Delete a project β οΈlist_git_accounts- List all git accountsget_git_account- Get git account detailscreate_git_account- Create a new git accountupdate_git_account- Update a git accountdelete_git_account- Delete a git account β οΈ
list_org_users- List all organization usersget_user_roles- Get roles for a specific userlist_user_roles- List all user rolesset_org_role- Set organization role for a userset_project_role- Set project role for a userdelete_project_role- Remove project role from a user β οΈset_env_role- Set environment role for a userdelete_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 metadatacache_environment_nodes- Fetch every page of environment nodes, write a full snapshotcache_runs- Fetch every page of run results, write a full snapshotcache_org_users- Fetch every page of organization users, write a full snapshotclear_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 customizationdiagnose_setup- Stateless probe reporting configured setup pieces; pairs with the/coalesce-setupMCP promptπ§°
coa_doctor- Check config, credentials, and warehouse connectivity end-to-end for a local projectπ§°
coa_bootstrap_workspacesβ οΈ - Runcoa doctor --fixto write a starterworkspaces.ymlfromlocations.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 ascoalesce://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/coaCLI 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-projectDon'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 definitionsV1 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.
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_workspacestool (it needsconfirmed: true, so the agent will ask before running).WARNINGThe generated file contains placeholder values. The bootstrap tool seeds
database/schemawith defaults that won't match your real warehouse. Ask the agent to open the file with you and replace every placeholder before callingcoa_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_describetool (topic: "schema",subtopic: "workspaces") - no top-level wrapper, nofileVersion.# 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: ANALYTICSThe 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_PROFILEKey mapping - each profile key maps to an env var of the same concept:
Profile key | Env var |
|
|
|
|
|
|
|
|
|
|
|
|
Notes:
snowflakeAuthTypeis read by COA itself (no env var) - include it when using key-pair auth.orgID,repoPath, andcacheDirare 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 configfor 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 |
| Bearer token from the Coalesce Deploy tab. Optional when | β |
| Selects which |
|
| Region-specific base URL. |
|
| Fallback org ID for cancel-run. Also readable from | β |
| Local repo root for repo-backed tools and pipeline planning. Also readable from | β |
| Base directory for the local data cache. When set, cache files are written here instead of the working directory. Also readable from | β |
| JSON size threshold before auto-caching to disk. |
|
| Forces large responses inline as text instead of auto-caching them to disk and returning a |
|
| In-memory lineage cache TTL in milliseconds. |
|
| Max outbound API request body size. |
|
| Default per-request timeout for Coalesce API calls. Raise on large workspaces where paginated reads exceed the default. |
|
| Per-page timeout for detail=true paginated fetches of large node lists. |
|
| 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. |
|
| In-memory TTL for the workspace node-type inventory. Set to |
|
| In-memory TTL for the workspace node-index (id/name/type/location) cache used by SQL- and intent-ref resolution. Set to |
|
| In-memory TTL for the workspace node-detail (full body) cache used by review and predecessor lookups. Set to |
|
| When |
|
| 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 |
| Yes | Snowflake account identifier (e.g., |
| Yes | Snowflake account username |
| No | Path to PEM-encoded private key (required if SNOWFLAKE_PAT not set) |
| No | Snowflake Programmatic Access Token (alternative to key pair) |
| No | Passphrase for encrypted keys |
| Yes | Snowflake compute warehouse |
| 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__*vscoalesce-dev__*, so an agent can't accidentally mutate the wrong environment.Per-environment safety. Pair prod with
COALESCE_MCP_READ_ONLY=trueto 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 marksdestructiveHint: truetools.COALESCE_MCP_READ_ONLY=truehides 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_refreshall requireconfirmed: true.
More configuration
Prerelease channel - point
npxat@previewfor preview builds.Diagnosing setup - the
diagnose_setupprobe and/coalesce-setupMCP prompt.
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 rejectoverrideSQLfields.Caching. Large responses are auto-cached to disk. Use
cache_workspace_nodesand siblings when you want a reusable snapshot. Configure the threshold withCOALESCE_MCP_AUTO_CACHE_MAX_BYTES.Repo-backed tools. Set
COALESCE_REPO_PATH(or addrepoPath=to your ~/.coa/config profile) to your local Coalesce repo root (containingnodeTypes/,nodes/,packages/), or passrepoPathon 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
@nexttag. 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.
Links
Resource | ||
π | Product documentation | |
π | REST API reference | |
π§° | Bundled CLI docs | |
π | Node type packages | |
π | MCP spec & ecosystem |
Contributing
Issues and PRs welcome.
π Bug reports - open an issue
π‘ Feature requests - start a discussion
License
MIT Β© Coalesce - built on top of the open Model Context Protocol.
Available Tools
115 toolsanalyze_impactAnalyze ImpactARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | Node ID to analyze impact for | |
| columnID | No | Optional column ID β if provided, only analyzes impact of that specific column | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| byDepth | No | |
| criticalPath | No | |
| sourceNodeID | No | |
| impactedNodes | No | |
| sourceColumnID | No | |
| sourceNodeName | No | |
| sourceNodeType | No | |
| impactedColumns | No | |
| sourceColumnName | No | |
| totalImpactedNodes | No | |
| totalImpactedColumns | No |
TDQS
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.
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.
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.
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.
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.
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 PatternsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceID | Yes | The workspace ID to analyze |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeCount | No | |
| analyzedAt | No | |
| methodology | No | |
| workspaceID | No | |
| layerPatterns | No | |
| packageAdoption | No | |
| recommendations | No |
TDQS
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.
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.
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.
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.
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.
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 ConditionAIdempotent
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? }
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID of the multi-predecessor node | |
| joinType | No | Type of JOIN to use between predecessors. Defaults to INNER JOIN. | |
| whereClause | No | Optional WHERE clause to append after the JOIN (without the WHERE keyword). | |
| workspaceID | Yes | The workspace ID | |
| qualifyClause | No | Optional QUALIFY clause to append (without the QUALIFY keyword). | |
| joinColumnOverrides | No | Explicit column mappings for joins when column names differ across predecessors. Overrides auto-detected common columns for the specified predecessor pair. |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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[].transformis updated and source-mapping inference is re-run to refreshcolumnReferencesif the new transform references different upstream columns.New columns β for DML inputs, source-mapping inference resolves the column's
transformagainst upstream predecessors (alias-prefix match, all-pred name fallback, multi-source COALESCE/GREATEST). For DDL inputs, new columns are added with emptycolumnReferences[](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.joinConditionwith 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.orderbyflag andconfig.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-leveldatabase/locationName/namefields. 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? }
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The 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[]. | |
| dryRun | No | When true, returns the diff and updated metadata.columns[] without writing to the workspace. Useful for previewing what would change before pushing. | |
| nodeID | Yes | The node ID to update. | |
| workspaceID | Yes | The workspace ID containing the node. |
TDQS
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.
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.
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.
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.
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.
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 CoverageARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceID | Yes | Workspace ID to audit |
Output Schema
| Name | Required | Description |
|---|---|---|
| auditedAt | No | |
| totalNodes | No | |
| workspaceID | No | |
| totalColumns | No | |
| documentedNodes | No | |
| truncatedColumns | No | |
| documentedColumns | No | |
| undocumentedNodes | No | |
| undocumentedColumns | No | |
| undocumentedNodeList | No | |
| undocumentedColumnList | No | |
| nodeDocumentationPercent | No | |
| columnDocumentationPercent | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | When true, return the generated plan without creating nodes. | |
| intent | Yes | Natural language description of the pipeline to build. Mention table/node names, join keys, aggregations, and filters. | |
| schema | No | Optional target schema | |
| database | No | Optional target database | |
| repoPath | No | Optional 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. | |
| confirmed | No | Set to true only after presenting the plan to the user and receiving explicit approval. | |
| targetName | No | Optional target node name override | |
| workspaceID | Yes | The workspace ID | |
| locationName | No | Optional target locationName | |
| targetNodeType | No | Optional node type override. When omitted, the planner selects the best type automatically. | |
| confirmationToken | No | The token returned in the STOP_AND_CONFIRM response. Required when confirmed=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| error | No | |
| dryRun | No | |
| reason | No | |
| created | No | |
| warning | No | |
| cancelled | No | |
| nodeCount | No | |
| incomplete | No | |
| workspaceID | No | |
| createdNodes | No | |
| cleanupFailures | No | |
| STOP_AND_CONFIRM | No | |
| failedPlanNodeID | No | |
| cleanupFailedNodeIDs | No |
TDQS
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.
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.
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.
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.
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.
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 NodesAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | When true, fetches expanded node details. Defaults to true. | |
| orderBy | No | Optional sort field used for paginated collection. Defaults to id. | |
| pageSize | No | Optional API page size used while collecting the full snapshot. Defaults to 250. | |
| environmentID | Yes | The environment ID | |
| orderByDirection | No | Optional sort direction used for paginated collection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| fileUri | No | |
| message | No | |
| metaUri | No | |
| orderBy | No | |
| runType | No | |
| cachedAt | No | |
| pageSize | No | |
| toolName | No | |
| pageCount | No | |
| runStatus | No | |
| sizeBytes | No | |
| totalRuns | No | |
| autoCached | No | |
| totalNodes | No | |
| totalUsers | No | |
| resourceUri | No | |
| workspaceID | No | |
| environmentID | No | |
| maxInlineBytes | No | |
| orderByDirection | No |
TDQS
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.
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.
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.
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.
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.
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 UsersAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| orderBy | No | Optional sort field used for paginated collection. Defaults to id. | |
| pageSize | No | Optional API page size used while collecting the full snapshot. Defaults to 250. | |
| orderByDirection | No | Optional sort direction used for paginated collection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| fileUri | No | |
| message | No | |
| metaUri | No | |
| orderBy | No | |
| runType | No | |
| cachedAt | No | |
| pageSize | No | |
| toolName | No | |
| pageCount | No | |
| runStatus | No | |
| sizeBytes | No | |
| totalRuns | No | |
| autoCached | No | |
| totalNodes | No | |
| totalUsers | No | |
| resourceUri | No | |
| workspaceID | No | |
| environmentID | No | |
| maxInlineBytes | No | |
| orderByDirection | No |
TDQS
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.
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.
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.
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.
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.
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 RunsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | When true, fetches expanded run details. Defaults to false. | |
| orderBy | No | Optional sort field used for paginated collection. Defaults to id. | |
| runType | No | Optional run type filter | |
| pageSize | No | Optional API page size used while collecting the full snapshot. Defaults to 250. | |
| runStatus | No | Optional run status filter | |
| environmentID | No | Optional environment ID filter | |
| orderByDirection | No | Optional sort direction used for paginated collection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| fileUri | No | |
| message | No | |
| metaUri | No | |
| orderBy | No | |
| runType | No | |
| cachedAt | No | |
| pageSize | No | |
| toolName | No | |
| pageCount | No | |
| runStatus | No | |
| sizeBytes | No | |
| totalRuns | No | |
| autoCached | No | |
| totalNodes | No | |
| totalUsers | No | |
| resourceUri | No | |
| workspaceID | No | |
| environmentID | No | |
| maxInlineBytes | No | |
| orderByDirection | No |
TDQS
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.
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.
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.
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.
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.
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 NodesAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | When true, fetches expanded node details. Defaults to true. | |
| orderBy | No | Optional sort field used for paginated collection. Defaults to id. | |
| pageSize | No | Optional API page size used while collecting the full snapshot. Defaults to 250. | |
| workspaceID | Yes | The workspace ID | |
| orderByDirection | No | Optional sort direction used for paginated collection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| fileUri | No | |
| message | No | |
| metaUri | No | |
| orderBy | No | |
| runType | No | |
| cachedAt | No | |
| pageSize | No | |
| toolName | No | |
| pageCount | No | |
| runStatus | No | |
| sizeBytes | No | |
| totalRuns | No | |
| autoCached | No | |
| totalNodes | No | |
| totalUsers | No | |
| resourceUri | No | |
| workspaceID | No | |
| environmentID | No | |
| maxInlineBytes | No | |
| orderByDirection | No |
TDQS
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.
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.
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.
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.
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.
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 RunADestructive
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
orgIDin the active ~/.coa/config profile.confirmed (boolean, optional): Set to true after the user explicitly confirms cancellation
Returns: Confirmation with updated run status.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | No | The organization ID. Optional if COALESCE_ORG_ID is set, or if `orgID` is present in the active ~/.coa/config profile. | |
| runID | Yes | The numeric run ID (integer) of the run to cancel | |
| confirmed | No | Set to true after the user explicitly confirms the cancellation. | |
| environmentID | Yes | The environment ID the run belongs to |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| runStatus | No | |
| runCounter | No |
TDQS
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.
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.
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.
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.
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.
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 CacheADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Set to true after the user explicitly confirms the cache clearing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sizeMB | No | |
| deleted | No | |
| message | No | |
| fileCount | No | |
| totalBytes | No |
TDQS
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.
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.
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.
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.
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.
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)ADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)ADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Set to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds 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.
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.
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.
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.
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.
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)ADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | COA node selector to exclude. | |
| include | No | COA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`. | |
| confirmed | No | Set to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 DeployADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Path to the coa-plan.json produced by coa_plan. Must exist before calling. | |
| token | No | Coalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input. | |
| profile | No | Profile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`). | |
| confirmed | No | Set to true after explicit user confirmation. | |
| environmentID | Yes | Target environment ID to deploy into. |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 DescribeARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Describe 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. | |
| refresh | No | Force bypass of the on-disk cache and re-run `coa describe`. Defaults to false. | |
| subtopic | No | Optional subtopic (command name for topic='command', schema type for topic='schema'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| topic | No | |
| source | No | |
| content | No | |
| subtopic | No | |
| coaVersion | No |
TDQS
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.
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.
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.
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.
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.
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 DoctorARead-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? }
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | COA node selector to exclude. | |
| include | No | COA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | COA node selector to exclude. | |
| include | No | COA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 NodesARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 SourcesARead-onlyIdempotent
List warehouse tables visible to each storage location in a COA project. Wraps coa sources list --json.
Three modes via flags:
Neither
locationnorall: 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 markedalreadyExists: trueif 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
locationinclude (string, optional): glob filter on table names
profile (string, optional)
Returns: { command, exitCode, stdout, stderr, json?, coaVersion }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and 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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Output path for the plan JSON. Relative paths resolve against the project root. Defaults to coa-plan.json in the project root. | |
| token | No | Coalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input. | |
| gitsha | No | Optional git SHA to embed in the plan manifest. | |
| profile | No | Profile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`). | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| enableCache | No | Enable coa's plan cache. Coalesce recommends leaving this off unless plan generation is slow. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). | |
| environmentID | Yes | Target environment ID for the deployment plan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 RefreshADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| jobID | No | Run a specific deployed job. | |
| token | No | Coalesce refresh token override. Prefer ~/.coa/config over passing tokens through tool input. | |
| exclude | No | Node selector to exclude. | |
| include | No | Node selector to scope the refresh. | |
| profile | No | Profile name in ~/.coa/config. Falls back to the COALESCE_PROFILE env var, then to COA's own default (`[default]`). | |
| confirmed | No | Set to true after explicit user confirmation. | |
| parameters | No | Runtime parameters to pass to the run. | |
| parallelism | No | Parallelism level. | |
| environmentID | Yes | Environment ID to refresh. | |
| forceIgnoreEnvironmentStatus | No | Proceed even if the environment has a failed deploy. May cause refresh failures β use only when you understand the state. |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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)ADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)ADestructive
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | COA node selector to exclude. | |
| include | No | COA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`. | |
| confirmed | No | Set to true after the user explicitly confirms. Without this, the tool returns a STOP_AND_CONFIRM response instead of executing. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 ValidateARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| exclude | No | COA node selector to exclude. | |
| include | No | COA node selector, e.g., '{ STG_ORDERS }' or '{ location: "SRC" }'. See `coa describe selectors`. | |
| workspace | No | COA workspace name from workspaces.yml. Defaults to 'dev'. | |
| projectPath | Yes | Absolute or relative path to the COA project root (the directory containing data.yml). |
Output Schema
| Name | Required | Description |
|---|---|---|
| json | No | |
| stderr | Yes | |
| stdout | Yes | |
| command | Yes | |
| exitCode | Yes | |
| timedOut | Yes | |
| coaVersion | Yes | |
| jsonParseError | No | |
| preflightWarnings | No |
TDQS
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.
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.
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.
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.
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.
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 ConfigurationAIdempotent
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? }
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID to configure | |
| repoPath | No | Optional path to local Coalesce repository for schema resolution | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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 AggregationAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID of the join to convert | |
| joinType | No | Type of JOIN to use. Defaults to INNER JOIN. | |
| repoPath | No | Optional path to local Coalesce repository for intelligent config completion | |
| aggregates | Yes | Aggregate columns with their functions and expressions | |
| workspaceID | Yes | The workspace ID | |
| maintainJoins | No | If true (default), analyzes predecessors, generates JOIN SQL, and writes the joinCondition to the node. If false, only replaces columns with aggregates without generating joins. | |
| groupByColumns | Yes | Columns to group by (dimensions). Use fully-qualified names like '"TABLE"."COLUMN"'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new environment | |
| devEnv | No | Defaults to false. | |
| projectID | Yes | The project ID to create the environment in | |
| tagColors | No | Optional tag colors for the environment | |
| oauthEnabled | No | Whether OAuth is enabled. Defaults to false. | |
| connectionAccount | No | Optional connection account identifier | |
| runTimeParameters | No | Optional runtime parameters |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the git account | |
| gitToken | Yes | Personal access token or authentication token for the git provider | |
| provider | No | Git provider type | |
| gitUsername | Yes | Git username for authentication | |
| accountOwner | No | User ID of the account owner (org admins can manage other users' accounts) | |
| gitAuthorName | Yes | Author name used for git commits | |
| gitAuthorEmail | Yes | Email address used for git commits |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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:
Creating a node from predecessor(s) (auto-populates columns from source)
Reconciling auto-populated columns against the external target schema
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | The goal or intent for this node. Used to validate the chosen nodeType. | |
| nodeType | Yes | The type of node to create. Call plan_pipeline first to discover and rank available node types. | |
| repoPath | No | Path to local Coalesce repository for automatic config completion. | |
| targetName | No | Name for the new node (e.g., 'STG_ORDER_HEADER'). If omitted, uses the auto-generated name from Coalesce. | |
| workspaceID | Yes | The workspace ID | |
| locationName | No | Storage location name for the new node. | |
| targetColumns | Yes | External column definitions describing the target table schema. Each column specifies name, dataType, and optionally nullable, description, and transform. | |
| predecessorNodeIDs | Yes | One or more predecessor node IDs to link to the new node |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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[] }
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | The plan object returned by plan_pipeline. | |
| dryRun | No | When true, validate the plan and return it without creating any nodes. | |
| confirmed | No | Set 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. | |
| workspaceID | Yes | The workspace ID | |
| confirmationToken | No | The token returned in the STOP_AND_CONFIRM response. Required when confirmed=true to prove the plan was presented to the user. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| error | No | |
| dryRun | No | |
| reason | No | |
| created | No | |
| warning | No | |
| cancelled | No | |
| nodeCount | No | |
| incomplete | No | |
| workspaceID | No | |
| createdNodes | No | |
| cleanupFailures | No | |
| STOP_AND_CONFIRM | No | |
| failedPlanNodeID | No | |
| cleanupFailedNodeIDs | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The 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. | |
| goal | No | Optional business goal or context for the SQL | |
| dryRun | No | When true, return the generated plan without creating nodes. | |
| schema | No | Optional target schema | |
| database | No | Optional target database | |
| repoPath | No | Optional 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. | |
| confirmed | No | Set 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. | |
| targetName | No | Optional target node name override | |
| description | No | Optional node description | |
| workspaceID | Yes | The workspace ID | |
| locationName | No | Optional target locationName | |
| targetNodeType | No | Optional node type override. When omitted, the planner ranks repo-backed and observed workspace node types for the use case. | |
| configOverrides | No | Optional config overrides to merge into the final node body. | |
| confirmationToken | No | The token returned in the STOP_AND_CONFIRM response. Required when confirmed=true to prove the plan was presented to the user. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| error | No | |
| dryRun | No | |
| reason | No | |
| created | No | |
| warning | No | |
| cancelled | No | |
| nodeCount | No | |
| incomplete | No | |
| workspaceID | No | |
| createdNodes | No | |
| cleanupFailures | No | |
| STOP_AND_CONFIRM | No | |
| failedPlanNodeID | No | |
| cleanupFailedNodeIDs | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new project | |
| gitRepo | No | Git repository URL | |
| gitBranch | No | Default git branch name | |
| description | No | Optional project description | |
| gitAccountID | No | Git account ID to link to the project | |
| platformKind | Yes | Target platform for the project |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the job | |
| workspaceID | Yes | The workspace ID | |
| excludeSelector | Yes | Node exclusion selector string. Same format as includeSelector. Use empty string to exclude nothing. | |
| includeSelector | Yes | Node selector string. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'. Use empty string to include nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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
joinSuggestionswith normalized column names and their left/right counterpartsReports 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? }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | The 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. | |
| changes | No | Optional partial fields to apply after successful auto-population validation, such as name, description, config, metadata, database, schema, or locationName. | |
| columns | No | Replace auto-populated columns with these specific columns and transforms. Mutually exclusive with groupByColumns/aggregates. | |
| joinType | No | JOIN type for multi-predecessor aggregation nodes. Defaults to INNER JOIN. | |
| nodeType | Yes | The 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. | |
| repoPath | No | Path to local Coalesce repository for automatic config completion after creation. | |
| aggregates | No | Aggregate columns. Must be provided with groupByColumns. Mutually exclusive with columns. | |
| workspaceID | Yes | The workspace ID | |
| groupByColumns | No | GROUP BY columns for aggregation. Must be provided with aggregates. Mutually exclusive with columns. | |
| whereCondition | No | WHERE filter to append to the joinCondition (without the WHERE keyword). Only valid with columns, not with groupByColumns/aggregates. | |
| predecessorNodeIDs | Yes | One or more predecessor node IDs to link to the new node |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | The 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. | |
| name | No | Optional node name to apply after creation. | |
| config | No | Optional config object to apply after creation. | |
| changes | No | Optional additional partial fields to merge after the node is created and fetched. | |
| metadata | No | Optional metadata object to apply after creation, including metadata.columns. | |
| nodeType | Yes | The 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. | |
| repoPath | No | Path to local Coalesce repository for automatic config completion after creation. | |
| description | No | Optional node description to apply after creation. | |
| workspaceID | Yes | The workspace ID | |
| completionLevel | No | How complete the node should be before the tool returns. Defaults to configured. | |
| storageLocations | No | Optional storageLocations array to apply after creation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the subgraph | |
| steps | Yes | Array of node IDs to include in the subgraph | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 EnvironmentADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| environmentID | Yes | The environment ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 RoleADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | The user ID | |
| confirmed | No | Set to true after the user explicitly confirms the role removal. | |
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 AccountADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| accountOwner | No | User ID of the account owner (org admins can manage other users' accounts) | |
| gitAccountID | Yes | The git account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 ProjectADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| projectID | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 RoleADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | The user ID | |
| confirmed | No | Set to true after the user explicitly confirms the role removal. | |
| projectID | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 JobADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobID | Yes | The job ID to delete | |
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodeADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID to delete | |
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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 SubgraphADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| repoPath | No | Optional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile. | |
| confirmed | No | Set to true after the user explicitly confirms the deletion. | |
| subgraphID | No | The subgraph ID to delete. Preferred when known. | |
| workspaceID | Yes | The workspace ID | |
| subgraphName | No | The subgraph name. Resolved via cache β repo when subgraphID is absent (the Coalesce API has no subgraph list endpoint). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 FailureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runID | Yes | The 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
| Name | Required | Description |
|---|---|---|
| runID | No | |
| endTime | No | |
| runType | No | |
| summary | No | |
| failures | No | |
| warnings | No | |
| runStatus | No | |
| startTime | No | |
| analyzedAt | No | |
| environmentID | No | |
| recommendations | No |
TDQS
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.
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.
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.
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.
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.
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 SetupARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ready | Yes | |
| repoPath | Yes | |
| coaConfig | Yes | |
| coaDoctor | Yes | |
| nextSteps | Yes | |
| accessToken | Yes | |
| snowflakeCreds | Yes | |
| projectWarnings | Yes |
TDQS
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.
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.
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.
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.
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.
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 NameARead-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 } }
| Name | Required | Description | Default |
|---|---|---|---|
| jobName | Yes | Substring to match against job names (case-insensitive) | |
| environmentID | Yes | The environment ID | |
| runLimitPerJob | No | Max recent runs per matched job (default 5, max 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, 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.
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.
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.
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.
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.
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 TemplateARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | No | Optional node ID for comparing inferred mappings to a live workspace node. | |
| schema | No | Optional schema value to include in the template. | |
| database | No | Optional database value to include in the template. | |
| nodeName | No | Optional node name to inject into the generated template. | |
| nodeType | No | Exact repo node type identifier in repo mode, or optional nodeType override in raw mode. | |
| repoPath | No | Optional local committed repo path for repo mode. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted. | |
| definition | No | Raw parsed node definition object for template generation in raw mode. | |
| workspaceID | No | Optional workspace ID for comparing inferred mappings to a live workspace node. | |
| locationName | No | Optional storage location name to include in the template. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| comparison | No | |
| nodeDefinition | No | |
| nodeMetadataSpecYaml | No | |
| setWorkspaceNodeBodyTemplate | No | |
| setWorkspaceNodeBodyTemplateYaml | No |
TDQS
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.
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.
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.
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.
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.
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 VariantARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | No | Optional node ID for comparing inferred mappings to a live workspace node. | |
| schema | No | Optional schema value to include in the template. | |
| database | No | Optional database value to include in the template. | |
| nodeName | No | Optional node name to inject into the generated template. | |
| nodeType | No | Optional nodeType override. Defaults to the variant definition capitalized field. | |
| variantKey | Yes | The exact node-type corpus variant key. | |
| workspaceID | No | Optional workspace ID for comparing inferred mappings to a live workspace node. | |
| allowPartial | No | When true, allow best-effort generation for variants currently marked partial. | |
| locationName | No | Optional storage location name to include in the template. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| comparison | No | |
| nodeDefinition | No | |
| nodeMetadataSpecYaml | No | |
| setWorkspaceNodeBodyTemplate | No | |
| setWorkspaceNodeBodyTemplateYaml | No |
TDQS
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.
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.
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.
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.
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.
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 LineageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | Node ID containing the column | |
| columnID | Yes | Column ID to trace lineage for | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| columnID | No | |
| nodeName | No | |
| upstream | No | |
| columnName | No | |
| downstream | No | |
| totalUpstream | No | |
| totalDownstream | No |
TDQS
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.
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.
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.
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.
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.
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 NodesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | Node ID to trace downstream from | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| nodeName | No | |
| nodeType | No | |
| ancestors | No | |
| dependents | No | |
| totalAncestors | No | |
| totalDependents | No |
TDQS
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.
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.
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.
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.
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.
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 EnvironmentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 HealthARead-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: ["..."] }
| Name | Required | Description | Default |
|---|---|---|---|
| environmentID | Yes | The environment ID to assess health for |
Output Schema
| Name | Required | Description |
|---|---|---|
| assessedAt | No | |
| staleNodes | No | |
| totalNodes | No | |
| healthScore | No | |
| nodesByType | No | |
| environmentID | No | |
| healthReasons | No | |
| nodeRunStatus | No | |
| dependencyHealth | No | |
| failedRunsLast24h | No |
TDQS
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.
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.
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.
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.
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.
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 JobARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobID | Yes | The job ID | |
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID | |
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the 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.
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.
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.
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.
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.
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 OverviewARead-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[] }
| Name | Required | Description | Default |
|---|---|---|---|
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodes | No | |
| environment | No |
TDQS
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.
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.
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.
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.
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.
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 AccountARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| accountOwner | No | User ID of the account owner (org admins can manage other users' accounts) | |
| gitAccountID | Yes | The git account ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NameARead-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? }
| Name | Required | Description | Default |
|---|---|---|---|
| jobName | Yes | Substring to match against job names (case-insensitive). Must match exactly one job. | |
| environmentID | Yes | The environment ID | |
| includeResults | No | Include per-node run results (default true) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond 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.
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.
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.
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.
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.
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 VariantARead-onlyIdempotent
Get one node-type corpus variant from the committed snapshot by variantKey. Use search_node_type_variants first when you need discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| variantKey | Yes | The exact node-type corpus variant key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| variantKey | No | |
| supportStatus | No | |
| nodeDefinition | No | |
| nodeMetadataSpec | No |
TDQS
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.
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.
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.
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.
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.
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 StatusARead-onlyIdempotent
Get the current state of a pipeline workshop session, including all planned nodes, their configuration, and the instruction history.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionID | Yes | The workshop session ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| nodes | No | |
| history | No | |
| warnings | No | |
| createdAt | No | |
| sessionID | No | |
| updatedAt | No | |
| workspaceID | No | |
| openQuestions | No | |
| resolvedEntities | No |
TDQS
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.
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.
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.
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.
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.
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 ProjectARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectID | Yes | The project ID | |
| includeJobs | No | Include nested job data for all workspaces | |
| includeWorkspaces | No | Include nested workspace data with workspace IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the 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.
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.
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.
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.
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.
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 DefinitionARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeType | Yes | Exact direct node type identifier or exact package-backed alias:::id value. | |
| repoPath | No | Optional 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
| Name | Required | Description |
|---|---|---|
| repoPath | No | |
| warnings | No | |
| filePaths | No | |
| parseError | No | |
| resolution | No | |
| repoWarnings | No | |
| usageSummary | No | |
| nodeDefinition | No | |
| outerDefinition | No | |
| resolvedNodeType | No | |
| resolvedRepoPath | No | |
| requestedNodeType | No | |
| nodeMetadataSpecYaml | No |
TDQS
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.
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.
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.
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.
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.
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 RunARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runID | Yes | The 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 DetailsARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| runID | Yes | The 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
| Name | Required | Description |
|---|---|---|
| run | No | |
| results | No | |
| resultsError | No |
TDQS
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.
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.
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.
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.
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.
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 ResultsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runID | Yes | The 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodesARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | Node ID to trace upstream from | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| nodeName | No | |
| nodeType | No | |
| ancestors | No | |
| dependents | No | |
| totalAncestors | No | |
| totalDependents | No |
TDQS
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.
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.
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.
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.
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.
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 RolesBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| userID | Yes | The user ID | |
| projectID | No | Optional project scope filter | |
| environmentID | No | Optional environment scope filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 WorkspaceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 SubgraphARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| subgraphID | Yes | The subgraph ID | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 JobsARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| startingFrom | No | Cursor from previous response's next field | |
| environmentID | Yes | The environment ID | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 NodesARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| detail | No | Include full node details in response | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| startingFrom | No | Cursor from previous response's next field | |
| environmentID | Yes | The environment ID | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 EnvironmentsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| detail | No | When true, returns expanded environment info | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| startingFrom | No | Cursor from previous response's next field | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 AccountsARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| accountOwner | No | User ID of the account owner (org admins can manage other users' accounts) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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)ARead-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) }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| job | No | |
| summary | No | |
| unattached | No | |
| unresolved | No | |
| nodesBySubgraph | No |
TDQS
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.
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.
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.
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.
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.
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 UsersARead-onlyIdempotent
List all users in the Coalesce organization.
Args:
limit, startingFrom, orderBy, orderByDirection: Pagination controls
Returns: { data: User[], next?: string, total?: number }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| startingFrom | No | Cursor from previous response's next field | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 ProjectsARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| includeJobs | No | Include nested job data for all workspaces | |
| includeWorkspaces | No | Include nested workspace data with workspace IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 TypesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| repoPath | No | Optional 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. | |
| inUseOnly | No | When true, return only identifiers currently referenced by committed nodes/*.yml operation.sqlType values. | |
| packageAlias | No | Optional exact package alias filter sourced from package YAML name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | No | |
| nodeTypes | No |
TDQS
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.
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.
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.
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.
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.
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 PackagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| repoPath | No | Optional 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
| Name | Required | Description |
|---|---|---|
| summary | No | |
| packages | No |
TDQS
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.
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.
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.
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.
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.
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 RunsARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| detail | No | Include full run details in response | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| runType | No | Filter by run type | |
| runStatus | No | Filter by run status | |
| startingFrom | No | Cursor from previous response's next field | |
| environmentID | No | Filter by environment ID | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 RolesBRead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| projectID | No | Optional project scope filter | |
| environmentID | No | Optional environment scope filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 NodesARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (max 500) | |
| detail | No | Include full node details in response | |
| orderBy | No | Field to sort by (required with startingFrom) | |
| workspaceID | Yes | The workspace ID | |
| startingFrom | No | Cursor from previous response's next field | |
| orderByDirection | No | Sort direction |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 TypesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| basis | No | |
| total | No | |
| counts | No | |
| nodeTypes | No | |
| workspaceID | No |
TDQS
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.
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.
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.
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.
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.
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 WorkspacesARead-onlyIdempotent
List all Coalesce workspaces.
Returns workspace IDs needed by node, job, and subgraph tools. Each workspace includes its projectID.
Returns: { data: Workspace[] }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| next | No | |
| total | No |
TDQS
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.
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.
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.
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.
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.
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 BodyBRead-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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 StructureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL statement to parse. Pass it exactly as provided β do not rewrite or modify it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ctes | No | |
| hasCtes | No | |
| hasJoin | No | |
| cteCount | No | |
| guidance | No | |
| warnings | No | |
| sourceRefs | No | |
| selectItems | No | |
| sourceCount | No | |
| selectItemCount | No | |
| supportedSelectCount | No | |
| unsupportedSelectCount | No |
TDQS
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.
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.
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.
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.
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.
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 SkillsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Directory to export skills to. Defaults to /root/.coalesce-mcp/skills |
Output Schema
| Name | Required | Description |
|---|---|---|
| created | Yes | |
| directory | Yes | |
| configHint | Yes | |
| totalSkills | Yes | |
| alreadyExisted | Yes |
TDQS
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.
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.
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.
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.
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.
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 CloseAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionID | Yes | The workshop session ID to close |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| closed | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionID | Yes | The workshop session ID from pipeline_workshop_open | |
| instruction | Yes | Natural language instruction to modify the plan |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| action | No | |
| changes | No | |
| warnings | No | |
| sessionID | No | |
| currentPlan | No | |
| openQuestions | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | Optional initial intent to bootstrap the session (e.g., 'join CUSTOMERS and ORDERS on CUSTOMER_ID') | |
| workspaceID | Yes | The workspace ID to build the pipeline in |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| nodes | No | |
| history | No | |
| warnings | No | |
| createdAt | No | |
| sessionID | No | |
| updatedAt | No | |
| workspaceID | No | |
| openQuestions | No | |
| resolvedEntities | No |
TDQS
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.
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.
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.
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.
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.
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 PipelineARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | The 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. | |
| goal | No | Optional natural-language pipeline goal | |
| schema | No | Optional target schema | |
| database | No | Optional target database | |
| repoPath | No | Optional 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. | |
| targetName | No | Optional target node name override | |
| description | No | Optional node description | |
| workspaceID | Yes | The workspace ID | |
| locationName | No | Optional target locationName | |
| sourceNodeIDs | No | Optional upstream node IDs when planning from a non-SQL goal. | |
| targetNodeType | No | Optional node type override. When omitted, the planner ranks repo-backed and observed workspace node types for the use case. | |
| configOverrides | No | Optional config overrides to merge into the planned node body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sql | No | |
| goal | No | |
| nodes | No | |
| intent | No | |
| status | No | |
| version | No | |
| warning | No | |
| platform | No | |
| warnings | No | |
| planCached | No | |
| assumptions | No | |
| instruction | No | |
| workspaceID | No | |
| openQuestions | No | |
| cteNodeSummary | No | |
| planSummaryUri | No | |
| STOP_AND_CONFIRM | No | |
| nodeTypeSelection | No | |
| USE_THIS_NODE_TYPE | No | |
| supportedNodeTypes | No | |
| nodeTypeDisplayName | No | |
| nodeTypeInstruction | No |
TDQS
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.
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.
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.
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.
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.
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 ChangeADestructive
β οΈ 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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | Node ID containing the source column | |
| changes | Yes | Changes to propagate β at least one of columnName or dataType required | |
| columnID | Yes | Column ID that was changed | |
| confirmed | No | Set to true after the user explicitly confirms the propagation. Required because this operation modifies multiple downstream nodes. | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| errors | No | |
| changes | No | |
| snapshotPath | No | |
| sourceNodeID | No | |
| totalUpdated | No | |
| updatedNodes | No | |
| sourceColumnID | No | |
| preMutationSnapshot | No |
TDQS
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.
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.
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.
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.
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.
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 ColumnsAIdempotent
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? }
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID | |
| columns | Yes | Complete 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. | |
| workspaceID | Yes | The workspace ID | |
| whereCondition | No | Optional 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' | |
| additionalChanges | No | Optional 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
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Max seconds to wait (default: 1800, min: 30, max: 3600) | |
| parameters | No | Arbitrary key-value parameters to pass to the rerun | |
| runDetails | Yes | ||
| pollInterval | No | Seconds between status checks (default: 10, min: 5, max: 300) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| results | No | |
| timedOut | No | |
| incomplete | No | |
| resultsError | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | Arbitrary key-value parameters to pass to the rerun | |
| runDetails | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| runStatus | No | |
| runCounter | No |
TDQS
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.
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.
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.
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.
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.
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 PipelineARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| nodeIDs | No | Optional list of node IDs to scope the review. If omitted, reviews the entire workspace (up to 50 nodes in detail). | |
| workspaceID | Yes | The workspace ID to review |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | No | |
| summary | No | |
| findings | No | |
| warnings | No | |
| nodeCount | No | |
| analyzedAt | No | |
| graphStats | No | |
| methodology | No | |
| workspaceID | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Max seconds to wait (default: 1800, min: 30, max: 3600) | |
| parameters | No | Arbitrary key-value parameters to pass to the run | |
| runDetails | Yes | ||
| pollInterval | No | Seconds between status checks (default: 10, min: 5, max: 300) | |
| confirmRunAllNodes | No | Must 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
| Name | Required | Description |
|---|---|---|
| status | No | |
| results | No | |
| timedOut | No | |
| incomplete | No | |
| resultsError | No |
TDQS
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.
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.
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.
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.
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.
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 StatusARead-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 }
| Name | Required | Description | Default |
|---|---|---|---|
| runCounter | Yes | The run counter number (non-negative integer) |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| runStatus | No | |
| runCounter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds 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.
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.
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.
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.
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.
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 VariantsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of matches to return. Defaults to 25, max 200. | |
| primitive | No | Case-insensitive match against a primitive used in the node definition, such as tabular or materializationSelector. | |
| packageName | No | Case-insensitive exact match against one of the package names that carries the variant. | |
| supportStatus | No | Filter by current MCP support classification. | |
| normalizedFamily | No | Case-insensitive exact match against the normalized family name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | No | |
| summary | Yes | |
| matchedCount | No | |
| totalMatches | No | |
| returnedCount | No |
TDQS
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.
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.
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.
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.
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.
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 ContentARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50) | |
| query | Yes | Search text (case-insensitive) | |
| fields | No | Fields to search β defaults to all if omitted | |
| nodeType | No | Filter to a specific node type | |
| workspaceID | Yes | Workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| fields | No | |
| results | No | |
| cacheAge | No | |
| truncated | No | |
| totalMatches | No | |
| returnedCount | No | |
| nodeTypeFilter | No |
TDQS
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.
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.
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.
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.
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.
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 TypeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | Optional SQL for this step β used for structural analysis during scoring. | |
| goal | No | Natural-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.). | |
| hasJoin | No | Does this step involve a JOIN? Prevents view-family selection and provides structural context for ranking. | |
| repoPath | No | Optional local committed Coalesce repo path. Falls back to COALESCE_REPO_PATH or `repoPath` in the active ~/.coa/config profile when omitted. | |
| hasGroupBy | No | Does this step involve a GROUP BY? Influences selection toward aggregation-capable types. | |
| targetName | No | Optional target node name β used for naming-signal scoring. | |
| sourceCount | Yes | Number of source/predecessor nodes feeding into this step. | |
| workspaceID | Yes | The workspace ID β used to fetch observed node types for ranking context. | |
| targetNodeType | No | Optional explicit node type override β bypasses ranking and validates this specific type. | |
| hasBusinessKeys | No | Are business keys explicitly defined? Influences dimensional/data-vault type selection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warning | No | |
| warnings | No | |
| selection | No | |
| autoExecutable | No | |
| selectedFamily | No | |
| semanticSignals | No | |
| selectedNodeType | No | |
| templateWarnings | No | |
| selectionDegraded | No | |
| selectedDisplayName | No | |
| missingDefaultFields | No |
TDQS
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.
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.
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.
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.
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.
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 YAMLARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID to serialize. | |
| workspaceID | Yes | The workspace ID containing the node. |
TDQS
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.
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.
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.
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.
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.
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 RoleAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The environment role to assign (e.g., 'admin', 'developer', 'viewer') | |
| userID | Yes | The user ID | |
| environmentID | Yes | The environment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 RoleAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The organization role to assign (e.g., 'admin', 'member', 'viewer') | |
| userID | Yes | The user ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 RoleAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The project role to assign (e.g., 'admin', 'developer', 'viewer') | |
| userID | Yes | The user ID | |
| projectID | Yes | The project ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodeAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Complete 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. | |
| nodeID | Yes | The node ID | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| parameters | No | Arbitrary key-value parameters to pass to the run | |
| runDetails | Yes | ||
| confirmRunAllNodes | No | Must 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
| Name | Required | Description |
|---|---|---|
| message | No | |
| runStatus | No | |
| runCounter | No |
TDQS
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.
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.
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.
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.
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.
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 AccountAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated name for the git account | |
| gitToken | No | Updated personal access token for the git provider | |
| provider | No | Git provider type | |
| gitUsername | No | Updated git username for authentication | |
| accountOwner | No | User ID of the account owner (org admins can manage other users' accounts) | |
| gitAccountID | Yes | The git account ID | |
| gitAuthorName | No | Updated author name for git commits | |
| gitAuthorEmail | No | Updated email for git commits |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 ProjectAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Updated project name | |
| gitRepo | No | Git repository URL | |
| gitBranch | No | Default git branch name | |
| projectID | Yes | The project ID | |
| description | No | Updated project description | |
| includeJobs | No | Include nested job data in the response | |
| gitAccountID | No | Git account ID to link to the project | |
| includeWorkspaces | No | Include nested workspace data in the response |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Updated name for the job | |
| jobID | Yes | The job ID to update | |
| workspaceID | Yes | The workspace ID | |
| excludeSelector | Yes | Node exclusion selector string. Same format as includeSelector. Use empty string to exclude nothing. | |
| includeSelector | Yes | Node selector string. Format: '{ location: LOC name: NAME } OR { location: LOC name: NAME }'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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 NodeAIdempotent
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
| Name | Required | Description | Default |
|---|---|---|---|
| nodeID | Yes | The node ID | |
| changes | Yes | Partial 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. | |
| workspaceID | Yes | The workspace ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| nodeID | No | |
| created | No | |
| warning | No | |
| nextSteps | No | |
| validation | No | |
| joinSuggestions | No | |
| configCompletion | No | |
| nodeTypeValidation | No | |
| configCompletionSkipped | No |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Updated name for the subgraph | |
| steps | Yes | Updated array of node IDs to include in the subgraph | |
| repoPath | No | Optional Coalesce repo path for subgraph YAML lookup. Falls back to COALESCE_REPO_PATH or the coa profile. | |
| subgraphID | No | The subgraph ID. Preferred when known β fastest path. | |
| workspaceID | Yes | The workspace ID | |
| subgraphName | No | The 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
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| message | No |
TDQS
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.
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.
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.
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.
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.
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.
115 tool updates
v0.10.1- First observed
analyze_impact - First observed
analyze_workspace_patterns - First observed
apply_join_condition - First observed
apply_sql_to_workspace_node - First observed
audit_documentation_coverage - First observed
build_pipeline_from_intent - First observed
cache_environment_nodes - First observed
cache_org_users - First observed
cache_runs - First observed
cache_workspace_nodes - First observed
cancel_run - First observed
clear_data_cache - First observed
coa_add_warehouse_sources - First observed
coa_bootstrap_workspaces - First observed
coa_create - First observed
coa_deploy - First observed
coa_describe - First observed
coa_doctor - First observed
coa_dry_run_create - First observed
coa_dry_run_run - First observed
coa_list_project_nodes - First observed
coa_list_warehouse_sources - First observed
coa_plan - First observed
coa_refresh - First observed
coa_remove_warehouse_sources - First observed
coa_run - First observed
coa_validate - First observed
complete_node_configuration - First observed
convert_join_to_aggregation - First observed
create_environment - First observed
create_git_account - First observed
create_node_from_external_schema - First observed
create_pipeline_from_plan - First observed
create_pipeline_from_sql - First observed
create_project - First observed
create_workspace_job - First observed
create_workspace_node_from_predecessor - First observed
create_workspace_node_from_scratch - First observed
create_workspace_subgraph - First observed
delete_env_role - First observed
delete_environment - First observed
delete_git_account - First observed
delete_project - First observed
delete_project_role - First observed
delete_workspace_job - First observed
delete_workspace_node - First observed
delete_workspace_subgraph - First observed
diagnose_run_failure - First observed
diagnose_setup - First observed
find_jobs_by_name - First observed
generate_set_workspace_node_template - First observed
generate_set_workspace_node_template_from_variant - First observed
get_column_lineage - First observed
get_downstream_nodes - First observed
get_environment - First observed
get_environment_health - First observed
get_environment_job - First observed
get_environment_node - First observed
get_environment_overview - First observed
get_git_account - First observed
get_job_run_details_by_name - First observed
get_node_type_variant - First observed
get_pipeline_workshop_status - First observed
get_project - First observed
get_repo_node_type_definition - First observed
get_run - First observed
get_run_details - First observed
get_run_results - First observed
get_upstream_nodes - First observed
get_user_roles - First observed
get_workspace - First observed
get_workspace_node - First observed
get_workspace_subgraph - First observed
list_environment_jobs - First observed
list_environment_nodes - First observed
list_environments - First observed
list_git_accounts - First observed
list_job_nodes - First observed
list_org_users - First observed
list_projects - First observed
list_repo_node_types - First observed
list_repo_packages - First observed
list_runs - First observed
list_user_roles - First observed
list_workspace_node_types - First observed
list_workspace_nodes - First observed
list_workspaces - First observed
parse_disk_node_to_workspace_body - First observed
parse_sql_structure - First observed
personalize_skills - First observed
pipeline_workshop_close - First observed
pipeline_workshop_instruct - First observed
pipeline_workshop_open - First observed
plan_pipeline - First observed
propagate_column_change - First observed
replace_workspace_node_columns - First observed
retry_and_wait - First observed
retry_run - First observed
review_pipeline - First observed
run_and_wait - First observed
run_status - First observed
search_node_type_variants - First observed
search_workspace_content - First observed
select_pipeline_node_type - First observed
serialize_workspace_node_to_disk_yaml - First observed
set_env_role - First observed
set_org_role - First observed
set_project_role - First observed
set_workspace_node - First observed
start_run - First observed
update_git_account - First observed
update_project - First observed
update_workspace_job - First observed
update_workspace_node - First observed
update_workspace_subgraph
TDQS
Scored across 115 tools
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 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.
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.
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
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
MCP server for Codat β companies, connections, invoices, bills and financial statements.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceThis 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.6MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for executing Databricks SQL queries and comparing table data, supporting CLI and VS Code integration.1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that provides tools to interact with dbt, including dbt Core, Cloud CLI, Semantic Layer, and Discovery API.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnterprise-grade MCP server for Microsoft SQL Server, enabling semantic schema discovery, table profiling, safe data operations with preview/confirm, and multi-environment support.32MIT