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:
| 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 |
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/ |
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/ |
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/ |
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/ |
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/ |
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/ |
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
|