Skip to content

MCP tools reference

This page is generated from the MCP server's tool registry. It lists the tools returned by tools/list to a customer workspace. Descriptions and parameters are the ones the server advertises; only the first sentence of each description is shown.

The list is the same for every role. Permissions are enforced when a tool is called: a tool that changes the context layer queues the change for approval if your role may only propose edits, and SQL tools apply your role's schema, column and row permissions.

Every tool also accepts two optional parameters that are not repeated below: client_id (the workspace to act on, needed only if you belong to more than one) and user_intent (a short statement of what the user asked for, recorded for audit).

analyze_term_patterns

Resolve ambiguous business terms, abbreviations, and domain jargon by looking up how they're used in production SQL queries and certified metric definitions.

Parameter Type Required Description
terms array of string yes Business terms to analyze (e.g., ['d0', 'conversion', 'TS2P'])

browse_warehouse

Browse the LIVE connected data warehouse at dataset/schema/table granularity, including tables NOT yet in the context layer.

Parameter Type Required Description
level string (datasets, tables, columns) yes Granularity to browse. One of: datasets | tables | columns.
dataset_id string no Schema/dataset filter (tables level) or target (columns).
table_name string no Table to inspect at the columns level. May be a fully-qualified dataset.table — it's split for you.
table_id string no Alias for table_name at the columns level: pass the table_id returned by level=tables verbatim.

call_api

Gateway to rarely-used / power-user operations that are not individual MCP tools: admin ops (view_as_role, view_as_person, manage_people, manage_members to list, invite, re-role or remove workspace members, upsert/delete_app_dataset, manage_vdm_access to create VDM schemas and grant roles on them), manage_sharing to share a data app or chat inside the workspace and answer access requests, context-table management (manage_context_tables: editors poll status, add/remove are owner-only), audit-log queries, restoring deleted context entities, triggering a context build (run_builder), area/skill/workflow housekeeping, data-app action registry, missions, join diagnostics, eval-set management, Eval Lab runs (run_evals for the whole set, one area or single questions; get_eval_run for the verdicts), and the context-edit approval queue (review_context_queue to list pending edits, review_pending_edit to approve/reject them by id or in bulk), and this workspace's credit usage this billing cycle (get_credit_usage).

Parameter Type Required Description
operation string yes Operation name — see list_operations.
params object no Arguments for the operation, per its schema in list_operations.

call_procedure

Invoke a pre-approved warehouse stored procedure by name (Redshift only).

Parameter Type Required Description
proc string yes Schema-qualified procedure name, e.g. 'analytics.sp_refresh_redshift_queries'. Must be allowlisted.
args array of any no Optional positional scalar args (str/int/float/bool/null), bound as parameters — never string-interpolated.

create_area

Create a domain area (maps 1:1 with metric categories).

Parameter Type Required Description
name string yes Area display name (e.g. 'Revenue', 'Engagement'). Also becomes the metric category.
description string no Short description of this domain area.

describe_action

Inspect a single integration action — returns its agent-facing summary, side-effect classification, typed JSON Schema for the params argument to execute_action, and any registered usage examples.

Parameter Type Required Description
integration string yes Integration name (e.g. 'slack', 'notion').
action_type string yes Action type within the integration (e.g. 'send_message', 'create-page').

dry_run_sql

Estimate a SQL query's scan WITHOUT executing it, on engines that support a dry run (BigQuery, Snowflake, Redshift); other engines return skipped.

Parameter Type Required Description
sql string yes The SQL query to estimate cost for
metric_id string no Optional UUID of the certified metric this query is derived from. Used by certified-query enforcement; see execute_sql.metric_id.

execute_action

Execute an integration action.

Parameter Type Required Description
integration string yes Integration name (e.g. 'slack', 'notion').
action_type string yes Action type within the integration (e.g. 'send_message', 'create-page').
params object yes Action input parameters. Must conform to the typed schema returned by describe_action(integration, action_type) — unknown keys are rejected at the MCP boundary.

execute_sql

Execute a SQL query on the user's data warehouse and return results.

Parameter Type Required Description
sql string yes The SQL query to execute on the warehouse
is_intermediate boolean no Set true when this is an intermediate lookup/discovery step (e.g., finding a name, checking values) — NOT the final answer. Intermediate results won't be validated against the question.
skip_dry_run boolean no Skip the automatic pre-flight column validation (EXPLAIN runs before execution by default and catches undefined/misspelled columns without scanning data). Leave false unless you've already validated this exact SQL or the pre-flight is producing a false rejection on a valid query.
rules_token string or array of string no The rules_token from the final page of your get_usage_rules read (one, or a list from several reads). Each queried table that has rules must be covered by one, or the result carries a non-fatal rules_incomplete.
max_rows integer no Cap on rows returned in the response (default: 100, max: 500). When the warehouse returns more rows than this, the response is truncated to max_rows and truncated: true is set — bump max_rows up to 500 if you need more.
no_limit boolean no Skip the auto-injected SQL LIMIT clause (use when you have your own LIMIT, or for aggregations). Independent of max_rows: the response is still capped at max_rows regardless. To fetch more rows, raise max_rows (up to 500), don't just set no_limit.
metric_id string no Optional UUID of the certified metric this query is derived from. Required when the client has certified-query enforcement enabled and the caller's role lacks sql_full_access — the SQL must be structurally equivalent to that metric's sql_template (predicate-only deltas allowed).
label string no Short human title for this result set (e.g. 'Monthly revenue'), shown as its section header in the app. Give one whenever a turn runs multiple non-intermediate queries.

execute_workflow

Trigger a workflow execution.

Parameter Type Required Description
workflow_id string yes UUID of the workflow to execute
input_data object no Input parameters for the workflow (e.g. user_id, date_range). Check trigger node's input_schema for required fields.
trigger_type string (test, manual) no Trigger type (default 'test', or 'manual' when send_slack is true; a send_slack run can't be 'test')
send_slack boolean no Default false. Set true ONLY when the user has explicitly asked for this run to post its Slack messages for real (e.g. a scheduled job delivering a digest). Enables the workflow's Slack send_message nodes and nothing else: Slack approval cards, email, HubSpot, Attio, webhooks and every other integration stay skipped, and so does a Slack node marked schedule_only. Must be a JSON boolean; anything else is refused. The reply's integrations_enabled / integrations_skipped say per node what will happen.
from_scratch boolean no Re-run VDM (structured-map) nodes from scratch: ignore the per-row LLM cache and re-enrich every row. Default false — an ordinary run reuses cached per-row results even after a prompt edit. Use this to deliberately re-classify the whole model (e.g. after changing a prompt).
max_rows integer no Rows processed per source. Omit for the default capped test run (a data node with materialize that sets no max_rows of its own builds in full instead — up to 50,000 rows — when the workflow has no per-row LLM fan-out, since a capped read could never refresh the model); pass 0 to process ALL records (a full run: up to 50,000 rows per source when the run executes on the AWS Batch tier; 5,000 when it executes on the app server — environments without a Batch tier, workflows with agent/checklist nodes or a skill node that renders outside a skill bundle (they need the context layer), a failed Batch submit, or local dev). The run result reports if/where it was capped — do a test run first, then re-run with max_rows=0 once it looks right.
bypass_row_cap boolean no Only meaningful together with max_rows=0, and only for a run that executes on the app server rather than the AWS Batch tier (environments without a Batch tier, workflows with agent/checklist nodes or a skill node that renders outside a skill bundle (they need the context layer), a failed Batch submit, or local dev): there a full run is capped at 5,000 rows so an unbounded per-row LLM fan-out can't wedge the shared workers, and this raises it to 50,000 for a pure-SQL build — e.g. a data node with materialize set building a mart straight from the warehouse. The server ENFORCES the precondition: if the workflow contains any per-row LLM fan-out (a loop node with mode each_row, or a node with loop_mode each_row), the request is ignored, the run stays at 5,000, and the run's notices say so. On the AWS Batch tier a full run already reaches 50,000 rows, per-row steps included, so the flag changes nothing there — but it is harmless to pass when unsure where the run will execute.

find_join

Find how two tables can be joined, or list all tables joinable to one table.

Parameter Type Required Description
from_table string yes Source table (fully qualified, e.g. 'analytics.dim_user')
to_table string no Optional target table — if provided, returns the join path

generate_sql

DEPRECATED — does NOT generate SQL.

Parameter Type Required Description
tables array of string yes List of table IDs to use in the query
question string yes The natural language question (echoed back; no longer used to generate SQL)

get_area

Get a hydrated domain area bundle: area metadata plus all tagged tables, metrics in this category, scoped docs (filenames — fetch contents with get_document), usage-rule pointers, and business terms.

Parameter Type Required Description
area_id string yes Area ID (slug, e.g. 'revenue', 'engagement')

get_business_context

Get the business primer for this client's data warehouse.

Parameter Type Required Description
area_id string no Optional area ID. When set, returns area-specific context (tables, metrics, usage-rule pointers, docs, and the global rules in full) instead of the global overview. Full rule text: get_usage_rules(area_id=...).

get_document

Read the full markdown of an area-scoped Domain Context Pack doc.

Parameter Type Required Description
filename string yes Document filename as returned in get_area's docs[].filename (e.g. 'area_conversion.md').
section string no Optional ## heading to return on its own. Omit for the whole document; the response always lists the available headings under sections.

get_pipeline_health

Health snapshot of every pipeline Rig runs for this client: data-ingestion source syncs (what came in overnight, rows loaded, errors), post-sync dbt model builds, the context engine's scheduled gardener/builder, and scheduled workflows.

Parameter Type Required Description
all_clients boolean no Rig platform admins only: roll up health across ALL app.rig.so clients instead of just this one.

get_pipeline_runs

Recent pipeline run history for this client — ingestion syncs, workflow executions, dbt model builds, and context builder/gardener runs, newest first, with status, trigger, duration and error.

Parameter Type Required Description
days integer no Lookback window in days (default 7, max 90).
limit integer no Max runs to return (default 100, max 500).

get_playbook

Load a specific playbook by name.

Parameter Type Required Description
name string yes Playbook name (e.g. 'workflows', 'sql_authoring')
section string no Optional ## heading to return on its own (e.g. 'Dashboard output'). Omit for the whole playbook; the response always lists the available headings under sections.

get_shared_state

Read state that people curated in data apps and shared across the platform — review statuses, overrides, classifications, notes — keyed by namespace: 'org' / 'org:' (tenant-wide), 'area:' (an area), 'entity::' (one business entity, e.g. entity:account:acme).

Parameter Type Required Description
namespace string no e.g. 'org', 'area:finance', 'entity:account:acme'. Omit to list namespaces.
prefix string no Only keys starting with this.
since string no Change-log cursor; returns changes after it.

get_table_columns

Get the full schema for one or more warehouse tables: all columns with their data types, descriptions, and sample values.

Parameter Type Required Description
table_id string or array of string yes Fully-qualified table name(s) — pass a single string, or a list to fetch multiple in one call.
column_filter array of string or string no Columns to return — a list of names/patterns (a column is kept if it matches ANY), or a single one. Each entry is an exact name, a fuzzy substring (e.g. 'revenue') or a LIKE pattern (e.g. '%_id'). Put every column you need in one list rather than calling once per column.
include_all boolean no Return all columns even if >60. Default false.
include_empty boolean no Include all-NULL / dead columns (e.g. dlt _v variant fossils) that are hidden by default. Default false.

get_usage_rules

Get non-obvious routing rules, at table, area, or global (context-wide) scope.

Parameter Type Required Description
table_ids array of string or string no Table IDs to get rules for — pass a JSON array (e.g. ['analytics.fct_orders', 'analytics.dim_customers']), a single table string, or a comma-separated string.
area_id string no Filter to rules scoped to this area, plus the rules on its tagged tables.
cursor string no Continue a paged read — only ever the quoted token inside a response's next_page (cursor='…'), with the same other arguments.
scope string (global) no scope='global' alone fetches only global (context-wide) rules — no table_ids needed. Combined with table_ids/area_id, the full scoped read runs.
include_global boolean no Include the tenant-wide global rules (default true). Pass false when you already have them from get_business_context or an earlier call.
include_area_rules boolean no With table_ids: also include the area-scoped rules of every area those tables are tagged to (default true). Pass false for just the tables' own rules.

inspect_table

Get details about a specific warehouse table.

Parameter Type Required Description
table_id string yes Fully-qualified table name (e.g. 'analytics.dim_user') or partial name for what='resolve'
what string (resolve, samples, lineage, upstream, patterns) yes What to inspect about the table
depth integer no For what='upstream' or 'lineage': depth 1-3
column_name string no For what='lineage'/'upstream': trace ONE column through synced warehouse view definitions (source object/field -> landed column -> view columns, with parsed/inferred marks) via the response's view_lineage
column_names array of string no For what='samples': filter to these columns

inspect_template

Read a node's template — whole, in part, or as a map.

Parameter Type Required Description
workflow_id string yes UUID of the workflow — or whatever the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/), both resolve to it
node_id string yes Node ID to inspect
target string no Read one element: '#id', 'tag#id', or '[attr=value]'.
region string no Read one named region by id.
inner boolean no With target/region: return the contents without the wrapper element or markers.
outline boolean no Force the outline (regions + addressable ids) regardless of size.
versions boolean no Return this node's template version history instead of its content.
full boolean no Return the entire body even when it is large.
max_depth integer no Outline nesting depth (default 8). Raise it if elements_omitted reports ids deeper than the cut.

inspect_workflow_run

Inspect a workflow run.

Parameter Type Required Description
run_id string yes UUID of the workflow run
what string (detail, errors, node_output) yes
node_id string no Required for what='node_output'
include_outputs boolean no For what='detail': embed each node's full output payload. Default false (summary-only).
row_filter string no For what='node_output': filter rows where a column equals a value, formatted as 'column=value' (e.g. 'status=open'). Default returns full output.
max_chars integer no For what='node_output': character cap on the returned payload. Default 4000.

invoke_workflow_action

Operate one of a data app's declared actions (a button) by id — the same effect as a user clicking it.

Parameter Type Required Description
workflow_id string yes UUID of the workflow — or whatever the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/), both resolve to it
action_id string yes Action id from list_workflow_actions
params object no Per-invocation values merged over the action's declared defaults (e.g. the account_id this decision applies to).

list_actions

List integration actions available to the current user.

Parameter Type Required Description
integration string no Optional filter — pass an integration name (e.g. 'slack', 'notion', 'hubspot', 'chargebee') to list only that integration's actions. Omit to return all integrations.

list_playbooks

List the task-specific playbooks available for this MCP server.

list_skills

List skills visible to the current user, newest-first.

Parameter Type Required Description
owner string (me, org) no Filter by ownership.
tag string no Filter to skills tagged with this string.
limit integer no Max results (default 50).

list_workflow_actions

List the interactive actions (buttons) a data app exposes — e.g. an approve/reject or a custom action that records a decision to a VDM or fires an integration.

Parameter Type Required Description
workflow_id string yes UUID of the workflow — or whatever the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/), both resolve to it

load_skill

Return the full markdown of a specific skill, by id.

Parameter Type Required Description
skill_id string yes Skill UUID from search_skills / list_skills.
version integer no Optional version number; defaults to the current published version.
agent_key string no Optional deterministic agent key for Smart Skills attribution, e.g. chat:semantic or workflow::.
trace_id string no Optional trace id to join skill usage to cost/outcome telemetry.
run_id string no Optional chat/workflow run id to join skill usage to outcomes.
session_id string no Optional external agent session id.

manage_business_term

Create, update, or delete a business term (domain vocabulary entry). action='create' (term_data); action='update' (term_id + term_data); action='delete' (term_id).

Parameter Type Required Description
action string (create, update, delete) yes
term_id string no Required for update/delete
term_data object no Required for create/update. Keys: 'term', 'definition', 'aliases', 'category', 'area_id', plus 'table_refs' / 'metric_refs' — lists of table ids / metric names this term maps to. THIS IS THE ONLY WAY TO LINK A METRIC OR TABLE TO A TERM: metrics have no business_term_refs field, so the relation is written here in both directions. Omitting a refs key leaves it untouched; passing [] clears it.

manage_ingest

Trigger and monitor data-connection syncs (rig_ingest).

Parameter Type Required Description
action string (status, list_connectors, fabric_coverage, trigger, set_streams, route_streams, set_schedule, pause, resume, cancel) no 'status' (default) reads sync state; 'list_connectors' lists addable connectors; 'trigger' starts a sync; 'set_streams' turns streams on/off; 'set_schedule' sets the sync frequency; 'pause' / 'resume' switch the source off/on; 'cancel' stops a running sync; 'fabric_coverage' reads what Fabric Link already lands; 'route_streams' moves streams between Fabric Link and Rig.
source_name string no Source to act on or report on (e.g. 'fireflies'). Required for every action but 'status' / 'fabric_coverage' (omit = all sources) and 'list_connectors'.
full_resync boolean no action='trigger' only: re-pull ALL history instead of an ordinary sync. Owner only; confirm with the user first.
enable array of string no action='set_streams': stream names to turn on (e.g. ['adset_daily']).
disable array of string no action='set_streams': stream names to turn off.
to string (fabric, rig) no route_streams only: 'fabric' = let Fabric Link supply them, 'rig' = sync currently skipped/excluded streams with Rig again.
streams array of string no route_streams only: stream names (e.g. ['accounts']). Omit with to='fabric' for every covered stream.
frequency string (nightly, hourly, manual, custom) no action='set_schedule': 'nightly' / 'hourly' (UTC), 'manual' (no automatic syncs), or 'custom' (with cron).
cron string no frequency='custom' only: 5-field cron (e.g. '30 6 * * 1-5') or '@workday N HH:MM'.
timezone string no frequency='custom' only: IANA zone the schedule runs in (omitted = the source's current zone).
search string no action='list_connectors': filter by name, display name or category (e.g. 'crm', 'pendo').

manage_metric

Create, update, or delete a certified metric. action='create' (metric_data); action='update' (metric_id + metric_data); action='delete' (metric_id).

Parameter Type Required Description
action string (create, update, delete) yes
metric_id string no Required for update/delete
metric_data object no Required for create/update — full metric spec (readable_name, description, sql, primary_table, entity, measure, grain, derived, etc.). When 'sql' is supplied it is persisted verbatim — no LLM rewrite. When 'sql' is omitted on create, an LLM drafts SQL from description; on update, an LLM re-drafts SQL only if 'description' is supplied without an explicit 'sql'. 'category' is the metric's primary/home area (the area display name). 'area_ids' is an optional list of additional area slugs the metric also belongs to (secondary/tertiary areas) — it makes the metric surface in those areas' bundles without changing its home area. 'dependent_tables' (alias 'table_ids') is the metric's source tables. To link a metric to a business term use manage_business_term's 'metric_refs' — metrics have no business_term_refs field.

manage_usage_rule

Create, update, or delete a usage rule (non-obvious routing rule — wrong-table traps, required filters, grain surprises).

Parameter Type Required Description
action string (create, update, delete) yes
rule_id string no Required for update/delete
rule_data object no Required for create; optional on update (only 'rule_id' is required there — supplied keys are applied as edits; 'table_id' is ignored on update). Create keys: 'rule_text' (the rule body the agent should follow), plus one of three scopes: 'table_id' (single canonical id, not a list — use search_tables to resolve) for a table-scoped rule; 'scope'='area' PLUS 'area_id' for an area-scoped rule (a bare 'area_id' is not enough — the scope must be explicit); or 'scope'='global' for a tenant-wide rule (applies everywhere, no table_id/area_id needed). Optional: 'rule_type' (usage_note|required_filter|wrong_table_trap, default usage_note). On update, 'scope'/'area_id' RE-SCOPE the rule (scope='global' makes an area rule tenant-wide; an area_id on a global rule confines it to that area). Do NOT pass 'tables', 'title', 'description', 'user_intent' — those are not part of the schema and the call will be rejected.
table_id string no Top-level convenience form of rule_data.table_id.
rule_text string no Top-level convenience form of rule_data.rule_text.
content string no Alias for rule_text.
rule_type string no Top-level convenience form of rule_data.rule_type (usage_note|required_filter|wrong_table_trap).
scope string no Rule scope: table (default) | area | global. area/global apply beyond the analysis at hand — use them only when the user explicitly asked to record the rule, or confirmed one you proposed; a convention merely stated as an FYI is not an ask. On action='update' this RE-SCOPES the rule (e.g. scope='global' moves an area rule to tenant-wide). Top-level convenience form of rule_data.scope.
area_id string no Area for scope='area'. On action='update', setting it on a global rule re-scopes that rule to the area. To go the other way send scope='global' — a null area_id is only honoured inside rule_data. Top-level convenience form of rule_data.area_id.

manage_workflow

Workflow definition CRUD. action='create' (workflow_data), action='update' (workflow_id + updates: nodes merges by id and never drops a node you leave out; remove_node_ids is the only way to delete a node — an unrecognised update field is an error, not ignored), action='get' (workflow_id), action='list' (optional is_active + search filters), action='delete' (workflow_id) — soft delete, same as the app UI's delete: the workflow disappears from lists and stops running, but its materialized derived.* tables are retained (the response lists any; drop one with manage_derived_model action='delete').

Parameter Type Required Description
action string (create, update, get, list, delete, set_schedule, clear_schedule) yes
workflow_id string no Required for get/update/delete/set_schedule/clear_schedule. A workflow UUID, or anything the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/) — both resolve to the workflow.
schedule object no Required for action='set_schedule'. Writes the workflow_schedules row the scheduler actually reads.
workflow_data object no Required for create
updates object no Required for update — partial node/config changes. Also accepts the /data-apps organisation fields: category (the folder) and lifecycle_state ('draft' | 'published', a curation label that never gates visibility or execution). An update touching ONLY those is filing, not authoring: it takes no version snapshot and does not bump the version. Accepted fields: name, description, nodes, remove_node_ids, context_layer, category, lifecycle_state, plus expected_revision — anything else is rejected by name, as are fields placed beside updates instead of inside it.
is_active boolean no Optional filter for action='list'
search string no Optional name/description substring filter for action='list'
authoring_notes object no REQUIRED when creating or updating a skill node. Capture the WHY behind this skill, drawn from your own conversation context — not a transcript dump. Three short paragraphs (each 1–4 sentences): user_question — the original ask, as close to verbatim as you can reproduce exploration — what you checked: tables searched, columns inspected, SQL drafts tried, what worked vs didn't design_decisions — why these tables/joins/templates were chosen over alternatives Concrete > vague. Mention specific table/column names, SQL snippets, and rejected paths. Optional for non-skill workflows but encouraged.

prepare_skill_run

Prepare a skill workflow for execution by an external agent.

Parameter Type Required Description
workflow_id string yes UUID of the skill workflow
force_revalidate boolean no If true, re-validate even templates verified within the last 24h. Default false.

propose_chart

Propose a chart to visualize your LAST tabular result — an execute_sql query OR a workflow run's data read via inspect_workflow_run(what='node_output').

Parameter Type Required Description
data_ref string no Which result set to chart: a data_ref echoed by an earlier execute_sql result (e.g. 't3.q1'), including from previous turns. Omit to chart your latest result this turn.
chart_spec object yes

publish_template

Promote a staged draft to live, or roll back to an earlier version.

Parameter Type Required Description
workflow_id string yes UUID of the workflow — or whatever the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/), both resolve to it
node_id string yes Node ID with a staged draft, or whose template to restore
verify_render boolean no Load the dashboard headlessly before it goes live and refuse the publish if it throws or renders blank (default true).
restore_version integer no Roll this node's template back to the given workflow version instead of publishing the draft. Omit it to publish the draft (0 is treated as omitted).

refresh_table_schema

Re-scan the named tables against the LIVE warehouse schema and pull in any columns Rig hasn't indexed yet.

Parameter Type Required Description
table_ids array of string yes Schema-qualified table ids to re-scan, e.g. ['dbt_staging.stg_hubspot_companies']. Use the table_id values from search_tables / browse_warehouse.

regenerate_context

Regen of derived context state: rebuilds the DuckDB cache from the fde_* tables, recomputes embeddings for new/changed rows (existing embeddings hit cache), atomically swaps in the new file, exports parquet, and invalidates in-memory caches.

save_skill_run

Save the result of a skill execution run by an external agent (e.g. Claude Code / Cowork).

Parameter Type Required Description
workflow_id string yes UUID of the skill workflow this run belongs to
title string no Short title for the run (e.g. 'SME Churn Deep Dive — Q1 2026')
result_md string yes Markdown output of the skill investigation
result_html string no Optional HTML output (served directly at the run URL). If omitted, markdown is auto-rendered.
inputs object no Input parameters that were used (for audit trail)
metadata object no Extra context: tables queried, row counts, duration, etc.

search_columns

Search for columns across all warehouse tables by name or business concept.

Parameter Type Required Description
query string no Column name or concept to search for (e.g., 'revenue', 'user_id', 'subscription status')
table_filter string no Optional: limit search to columns in this table (e.g., 'analytics.fct_orders')
q string no Shorthand alias for query — prefer query.

search_metrics

Search for certified and draft business metrics (KPIs, measures, calculations) by natural language query.

Parameter Type Required Description
top_k integer no Maximum number of metrics to return (default: 5, max: 20)
area_id string no Filter to metrics in this area's category.
metric_ids array of string or string no Fetch these metrics in full (untruncated SQL and description) by metric_id, instead of searching — up to 5 per call. No query is needed.
query string no The user's question to match against metrics
q string no Shorthand alias for query — prefer query.

search_queries

Search for historical analyst SQL queries that match a question.

Parameter Type Required Description
top_k integer no Maximum number of queries to return (default: 5)
query string no The question to match against historical queries
q string no Shorthand alias for query — prefer query.

search_skills

Semantic search over the Skill Library — reusable markdown Claude skills (playbooks, workflows, debugging recipes) authored by you and your org.

Parameter Type Required Description
query string yes What you're trying to do (e.g. 'debug Redshift WLM queue saturation').
limit integer no Max results (default 10, max 50).

search_tables

Search for warehouse tables by name, description, or business concept.

Parameter Type Required Description
query string no Search query for finding tables
top_k integer no Maximum number of results to return (default: 10)
area_id string no Filter to tables tagged with this area (domain).
gold_star_only boolean no Restrict results to gold-star (vetted, dashboard/VDM-eligible) tables only. Gold-star tables are always ranked first regardless of this flag.
q string no Shorthand alias for query — prefer query.

search_values

Find which warehouse table and column contains a specific data value.

Parameter Type Required Description
value string yes The value to search for (e.g., 'Balance based workers', 'succeeded')
table_filter string no Optional: limit search to columns in this table

set_template_draft

Stage a node's output template in the draft slot — either as granular edits (preferred) or a whole content body.

Parameter Type Required Description
workflow_id string yes UUID of the workflow — or whatever the user pasted for the app: a data-apps URL (?workflow=...) or a public embed link / share id (/skills/embed/), both resolve to it
node_id string yes ID of the skill or llm node to update
content string no Whole template body. Mutually exclusive with edits. For dashboards, use as the data placeholder.
edits array of object no Granular changes applied atomically to the current template. Mutually exclusive with content.
format string (markdown, html_simple, dashboard) no Optional explicit format. Auto-detected from the resulting content if omitted.
assets array of object no External script imports; server injects into in array order.
auto_publish boolean no Promote the draft to live in the same call. Defaults to TRUE when edits is used, FALSE when content is used.
verify_render boolean no Load the dashboard in a headless browser before it goes live and refuse the publish if it throws or renders blank (default true; adds a few seconds). Set false only when you know the check cannot run.

tag_tables_to_area

Tag one or more tables to an area.

Parameter Type Required Description
area_id string yes Area ID (slug)
table_ids array of string yes List of table IDs to tag (e.g. ['analytics.fct_orders', 'analytics.dim_customers'])

test_sql

Test and validate a SQL query in a lightweight DuckDB sandbox before running it on the real warehouse.

Parameter Type Required Description
sql string yes The SQL query to test
rules_token string or array of string no The rules_token from the final page of your get_usage_rules read (one, or a list from several reads). Each queried table that has rules must be covered by one, or the result carries a non-fatal rules_incomplete.

untag_table_from_area

Remove a table from an area.

Parameter Type Required Description
area_id string yes Area ID (slug)
table_id string yes Table ID to remove

update_area

Update an area's name, description, or summary.

Parameter Type Required Description
area_id string yes Area ID (slug)
name string no Updated display name (cascades to metric category)
description string no Updated description
summary_md string no Summary markdown. When the call is attributable to a signed-in person it is labelled manually edited and the gardener will not overwrite it; from an unattributed agent session it is stored as generated text, refreshable by the next automated pass.

update_description

Update the description of a warehouse table or column, or of a derived model (VDM, table_id derived.<name>) and its columns.

Parameter Type Required Description
target_type string (table, column) yes
table_id string yes Fully-qualified table name
column_name string no Required if target_type='column'
description string yes New description text

upload_conversation

Land an external chat transcript (today: Claude Code) as a real Rig chat.

Parameter Type Required Description
dataset_id string no Rig dataset to bind a hosted report to (drives which warehouse follow-up SQL runs against). report_html only — an imported transcript resolves its warehouse from the client. If omitted, falls back to the client's default.
messages array of object no Pre-normalized list of message turns: [{role: 'user'|'assistant', content: str, timestamp?: ISO8601}]. Use this OR raw_events, not both.
raw_events array of object no Raw Claude Code JSONL events (one parsed line per item). The tool will filter to user/assistant turns and flatten tool-use / tool-result blocks into a readable markdown summary.
title string no Conversation title. Defaults to the first user turn (truncated).
source string no Provenance label, defaults to 'claude-code'. Stored in metadata.source.
source_session_id string no Original session id (e.g. Claude Code sessionId) — preserved for traceability.
source_metadata object no Free-form provenance bag — cwd, gitBranch, entrypoint, etc. Surfaced in the provenance header and stored under metadata.source_metadata.
owner_user_id string no Supabase user UUID to attribute the conversation to. Defaults to the calling token's user_id. AUTHZ: attributing to a different user requires tenant-admin (owner/admin role) in the caller's org, OR platform-admin (@rig.so email). Non-admins may only upload to themselves.
owner_email string no Alternative to owner_user_id — looked up via Supabase admin API. Falls back silently to the calling token's user_id on miss (warning logged). Same authz gate as owner_user_id.
report_html string no Full styled HTML document to host as a standalone, shareable report conversation (charts/inline