create-business-concept
ChatGPTCreate a new business concept definition for the organization. Admin-only — non-admin users will be rejected. A business concept captures a key business term or KPI definition that helps standardize how the organization talks about its data.
create-dashboard
ChatGPTCreate a new dashboard definition for the user organization — a structured grid of charts built from a JSON schema over SQL. This is NOT for persisting an artifact — use save-artifact for that. The schema is extended from Chart.js format — IMPORTANT: always call get-dashboard-schema first to get the exact definition format before building the JSON. Only works with SQL-based datasources — API provider data (Amplitude, Sensor Tower, etc.) cannot be used in dashboards. Remember to keep date ranges dynamic so the dashboard can refresh with new data in future. Also avoid timestamps on x axis in favor of truncated dates. Limitations: each dashboard is a single flat grid of charts (no tabs or pages). If the user asks for multiple views or dashboards, create separate dashboards via multiple create-dashboard calls.
create-metric
ChatGPTCreate a new SQL-based metric definition for the organization. Admin-only — non-admin users will be rejected. A metric captures a reusable SQL formula that can be evaluated against a datasource.
create-report
ChatGPTSet up a NEW scheduled/recurring report definition. Do NOT use this to generate report output — for that, query the data and produce the output directly. Before creating: 1) find-related-resources to check for existing saved queries or endpoint workflows, 2) only create a saved query/workflow for complex cases (multi-step chaining, dynamic lookups, 3+ queries or endpoint calls) — for simple cases (a single SQL query or 1-2 endpoint calls with known parameters), just describe what data to pull directly in the report prompt. Report output supports simple charts (Chart.js) — mention charting needs in the prompt if relevant. Ask the user for schedule, preferred time, and notify mode (ALWAYS vs CONDITION_MET).
execute-query
ChatGPTExecute SQL queries against the user's connected databases to analyze their actual data. IMPORTANT: DO NOT write SQL until you've verified the exact column names. Use sql from saved resources or get-table-context to get the exact column names.
export-excel
ChatGPTExport data to a downloadable Excel (.xlsx) file. Use this when the user wants to download query results or any tabular data as an Excel/spreadsheet file. Pass the raw data as an array of objects. Returns a temporary download URL valid for 10 minutes — the file is deleted after download or expiry. IMPORTANT: Tell the user the download link expires in 10 minutes and they should download it promptly.
find-related-resources
ChatGPTDiscover saved queries, business metrics, and business concepts related to the user analytics query. Helps with successful query execution.
get-business-concept
ChatGPTFetch a single business concept by id. Returns concept definition and example query when available.
get-dashboard
ChatGPTFetch a dashboard or a saved Claude artifact by ID (either kind, as listed by list-dashboards). A dashboard comes back with its full definition (charts, layout, data bindings); use this before update-dashboard. An artifact comes back with a short-lived downloadUrl instead of its HTML: fetch that to a local .html file, edit the file, then save-artifact with the same artifactId to update it in place.
get-dashboard-schema
ChatGPTReturns the full dashboard definition schema including chart, table, and KPI types plus dashboard-level parameters. Call this BEFORE create-dashboard or update-dashboard to understand the required JSON structure.
get-file
ChatGPTRead an agent file saved by an earlier session via upload-file. Returns the full file content as text. Use list-files first if you are not sure of the exact file name.
get-metric
ChatGPTFetch a single metric by id. Returns SQL or reference SQL when available.
get-report
ChatGPTFetch an existing report definition by ID. Returns the report's prompt, schedule, status, context hints, configuration and its most recent runs (status, timing, errors). Use this to review how a report is set up before updating it, or to check whether it ran. Does NOT run the report or return report output.
get-saved-query
ChatGPTFetch saved query by ID — or pass queryId "*" to list ALL saved queries for this org. Returns SQL, metadata, approval status, and a URL for admin actions (review, delete). Admins see all queries including pending/in-review.
get-table-context
ChatGPTGet detailed information about one or more tables including columns, data types, and descriptions. USE THIS TOOL when users want to understand table structures, ask "what columns does X table have", or need to know data types before writing queries. Always use this before writing queries for unfamiliar tables.
getOrgInfo
ChatGPTReturns context about the user's Contextflo organization: which data sources are connected and their types, the SQL dialect and query workflow for each, how many tables, metrics, and business concepts are available, and any organization-specific analysis guidance. This context differs per organization and cannot be inferred from the conversation — without it, table names, SQL dialect, and available metrics have to be guessed, which is the most common cause of failed queries. Calling it before other Contextflo tools improves query accuracy.
init-analytics-query
ChatGPTPrepares to answer the user's question about their data. Loads this organization's rules, definitions and saved queries, plus its connected data sources, SQL hints and the workflow to follow. Call it before running a query.
list-dashboards
ChatGPTList all dashboards and saved Claude artifacts in the user's organization. Use this when users ask about dashboards or artifacts they have created, or when you need to find an existing artifact to fix or update: take its id to get-dashboard for a download link, then re-save it with save-artifact.
list-files
ChatGPTList the org's agent files — scratch files saved by earlier sessions via upload-file. Returns name, size, content type, and timestamps for each file. Call this to discover what past sessions saved (e.g. a previous report output to diff against) before reading one with get-file.
list-tables
ChatGPTList all tables in the user's connected databases (Redshift, Snowflake, etc.). USE THIS TOOL when users ask about "my tables", "what data do I have", "my database schema", or want to explore their data structure. DO NOT assume table names - use this tool to see their ACTUAL tables.
onboard
ChatGPTGuided setup for Contextflo. Returns what Contextflo is and what the user can do with it, the workspace's current setup status, a checklist (needed vs good to have), and the next setup step with instructions and app links. Useful when the user wants to get set up, asks what Contextflo can do, or getOrgInfo reports setup as incomplete; each call reflects progress so far, so it also answers "what's next". Passing orgDescription and/or dataAnalysisGuidance saves the organization context for the org_context step: admin-only, and a field that is already set is never overwritten (it is edited inside the app instead).
read-messages
ChatGPTReturns the unread messages the Contextflo team sent this user (title, message, link) and marks them read. getOrgInfo reports when there are unread messages.
save-artifact
ChatGPTPersist an artifact to Contextflo so it outlives this conversation and the user can open and share it there. Call this only when the user asks to save, export, or publish to Contextflo — never persist something they did not ask for. Pass the artifact through byte-for-byte: it is stored and served back exactly as sent, so do not rewrite, re-style, reformat, or add anything to it. PREFERRED: call this WITHOUT content and PUT the artifact to the uploadUrl that comes back. That path is more reliable and handles artifacts of any size. Only if you have no way to make an HTTP request, call again with the SAME artifactId and pass content inline — reuse the id so it repairs the artifact already created rather than leaving an empty one behind. Returns the id and a viewing URL. Report it to the user as a name and a link once the content is actually stored.
save-query-pattern
ChatGPTSave a successful query pattern or endpoint workflow with natural language description to help with future similar requests. USE THIS TOOL when users want to save a query pattern that worked well for them, or when you think a query pattern would be useful to remember for similar future requests. For SQL queries, provide sql. For endpoint chaining workflows, provide workflowSteps instead.
send-feedback
ChatGPTSend generic feedback or a signal to the Contextflo team. Use this to report anything worth knowing: a user dismissed or declined a nudge, a stale/wrong definition for a concept, a data or connector issue (e.g. "CSV doesn't work with joins"), a confusing result, or a feature request the user voiced. Fire-and-forget — it does not affect the user's request. feedbackType is a short snake_case tag you choose (e.g. nudge_dismissed, stale_definition, data_issue, user_choice). summary is a one-line human-readable description. Put any structured details in data as string values.
set-table-context
ChatGPTSet the description for an already-synced table and/or its columns: the business context the agent reads back in get-table-context and that powers richer answers. Admin-only. The table must already be in Contextflo (run sync-tables first; uploaded CSVs are already in as managed_files.<table>); this never creates a table. Use it when the user has table/column knowledge (e.g. from a dbt repo) they want captured in Contextflo without opening the app. Overwrites any existing description on the fields you pass; fields you omit are left untouched. Describe up to 50 columns per call.
sync-tables
ChatGPTSync one or more tables from the data warehouse into Contextflo. Useful when tables the user is querying are not in list-tables results — syncing them enables table descriptions, saved queries, and dashboard support. Admin-only. Accepts up to 20 tables per call, so a whole set of tables syncs in one request instead of one call per table; a larger set takes more than one call. Returns per-table results — newly synced, already synced (which costs nothing), and failed — so a partial batch still reports exactly what landed. After syncing, the tables appear in list-tables and get-table-context.
update-business-concept
ChatGPTUpdate an existing business concept by id (from get-business-concept or find-related-resources). Admin-only. Only the fields passed change; renaming also changes the slug.
update-dashboard
ChatGPTUpdate an existing dashboard by ID. You can update name, description, and/or dashboard definition (including dashboard-level parameters for shared filters). Call get-dashboard-schema first if modifying the definition.
update-metric
ChatGPTUpdate an existing SQL metric by id (from get-metric or find-related-resources). Admin-only. Only the fields passed change; category, unit, targets and display settings are kept. New SQL is checked to be a valid read-only query against the metric's datasource. Composition metrics are edited in the web app.
update-report
ChatGPTUpdate an existing report's configuration — prompt logic, schedule, status, context hints, or metadata. Use get-report first to review the current config before making changes. All fields are optional; omitted fields are left unchanged.
update-saved-query
ChatGPTUpdate an existing saved query pattern. Changes the description, SQL, or workflow steps of a previously saved query. Admin changes are auto-approved; non-admin changes go to PENDING_REVIEW.
upload-csv
ChatGPTUpload a CSV as a queryable managed-file table in this org, so a user can ask you to clean or convert data (fix a messy CSV, turn a PDF table into CSV) and store the result as a table — no web app needed. It becomes managed_files.<tableName>, queryable with execute-query (DuckDB dialect — double-quote identifiers, since CSV headers often contain spaces). Max 100MB. PREFERRED: call this WITHOUT content and PUT the CSV to the uploadUrl that comes back (e.g. curl -X PUT --data-binary @file.csv "<uploadUrl>"). That path handles a file of any size and never routes the bytes through this conversation. Only pass content inline when you cannot make an HTTP request. This is for datasets to query with SQL — NOT agent scratch files (use upload-file for those).
upload-file
ChatGPTSave a text file to the org's agent file space — persistent scratch storage your future sessions can read back. Use it to keep working results (CSV, JSON, markdown) that a later conversation will need again, e.g. save today's report output so tomorrow's session can diff against it. Upsert by file name: uploading an existing name overwrites that file, so include a date in the name (e.g. "wau-report-2026-07-18.csv") when you want to keep versions side by side. Keep files compact (max 500KB) — aggregated results, not raw data dumps. For a file several people or sessions update (e.g. an artifact's state file), pass expectedUpdatedAt from your last get-file: if someone saved in between, the save is refused with CONFLICT, so re-read the file, reapply your change and save again. NOT for datasets to query with SQL: those are uploaded as managed files in the web app and queried via execute-query.
call-endpoint
Claudecreate-business-concept
Claudecreate-dashboard
Claudecreate-metric
Claudecreate-report
Claudeexecute-query
Claudeexport-excel
Claudefind-related-resources
Claudegenerate-temp-token
Claudeget-business-concept
Claudeget-dashboard
Claudeget-dashboard-schema
Claudeget-endpoint-details
Claudeget-metric
Claudeget-report
Claudeget-saved-query
Claudeget-table-context
ClaudegetOrgInfo
Claudeinit-analytics-query
Claudelist-dashboards
Claudelist-endpoints
Claudelist-tables
Claudesave-artifact
Claudesave-query-pattern
Claudesync-table
Claudeupdate-dashboard
Claudeupdate-report
Claudeupdate-saved-query
Claude