add_context_log_entry
ChatGPTAppend a new entry to the Context Log spreadsheet for the chosen business context. Only works for contexts with type="context_log". Use when the user asks to record a business event. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, ask them which context to log against (options come from load_project.businessContexts, filter by type="context_log").
add_context_log_entry
ChatGPTAppend a new entry to the Context Log spreadsheet for the chosen business context. Only works for contexts with type="context_log". Use when the user asks to record a business event. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, ask them which context to log against (options come from load_project.businessContexts, filter by type="context_log").
add_context_log_entry
ChatGPTAppend a new entry to the Context Log spreadsheet for the chosen business context. Only works for contexts with type="context_log". Use when the user asks to record a business event. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, ask them which context to log against (options come from load_project.businessContexts, filter by type="context_log").
describe_columns
ChatGPTReturn business descriptions for specific columns of a table. Use this AFTER get_table_schema when you need to understand what columns mean (picking the right metric, interpreting an enum, deciding which fields to JOIN on). Always pass only the columns you actually need — full schema descriptions can be very large.
describe_columns
ChatGPTReturn business descriptions for specific columns of a table. Use this AFTER get_table_schema when you need to understand what columns mean (picking the right metric, interpreting an enum, deciding which fields to JOIN on). Always pass only the columns you actually need — full schema descriptions can be very large.
describe_columns
ChatGPTReturn business descriptions for specific columns of a table. Use this AFTER get_table_schema when you need to understand what columns mean (picking the right metric, interpreting an enum, deciding which fields to JOIN on). Always pass only the columns you actually need — full schema descriptions can be very large.
get_business_context
ChatGPTReturn a business context. Behaviour depends on the context type: • type="text" — returns the company/product description (name, description, content). • type="context_log" — returns the Context Log, a timeline of business events (rebrands, launches, campaigns, structural changes). Optional date/category filters apply. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, fetch the options from load_project.businessContexts (which includes the type field) and ask them. If they decline, do not call this tool.
get_business_context
ChatGPTReturn a business context. Behaviour depends on the context type: • type="text" — returns the company/product description (name, description, content). • type="context_log" — returns the Context Log, a timeline of business events (rebrands, launches, campaigns, structural changes). Optional date/category filters apply. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, fetch the options from load_project.businessContexts (which includes the type field) and ask them. If they decline, do not call this tool.
get_business_context
ChatGPTReturn a business context. Behaviour depends on the context type: • type="text" — returns the company/product description (name, description, content). • type="context_log" — returns the Context Log, a timeline of business events (rebrands, launches, campaigns, structural changes). Optional date/category filters apply. Requires business_context_id — there is NO automatic selection. If the user has not picked one yet, fetch the options from load_project.businessContexts (which includes the type field) and ask them. If they decline, do not call this tool.
get_table_schema
ChatGPTReturn the BigQuery schema (fields, types, modes) for a specific tableId. Use the full tableId returned by list_tables (with suffix). Field descriptions are NOT included here to keep responses lean — call describe_columns for the columns you actually want to understand.
get_table_schema
ChatGPTReturn the BigQuery schema (fields, types, modes) for a specific tableId. Use the full tableId returned by list_tables (with suffix). Field descriptions are NOT included here to keep responses lean — call describe_columns for the columns you actually want to understand.
get_table_schema
ChatGPTReturn the BigQuery schema (fields, types, modes) for a specific tableId. Use the full tableId returned by list_tables (with suffix). Field descriptions are NOT included here to keep responses lean — call describe_columns for the columns you actually want to understand.
list_data_sources
ChatGPTRefresh the list of active data sources for the current project. Same shape as load_project.dataSources. Call this only if you need an updated registry mid-session (e.g. after a solution was just executed and produced new tables).
list_data_sources
ChatGPTRefresh the list of active data sources for the current project. Same shape as load_project.dataSources. Call this only if you need an updated registry mid-session (e.g. after a solution was just executed and produced new tables).
list_data_sources
ChatGPTRefresh the list of active data sources for the current project. Same shape as load_project.dataSources. Call this only if you need an updated registry mid-session (e.g. after a solution was just executed and produced new tables).
list_documents
ChatGPTGeneric listing of project documentation. Returns summaries (no content) so it is cheap on tokens. Filter by slug prefix or free-text search. Slugs are path-like, e.g. 'aio/tables/aio_main', 'solutions/customer-analysis/introduction'.
list_documents
ChatGPTGeneric listing of project documentation. Returns summaries (no content) so it is cheap on tokens. Filter by slug prefix or free-text search. Slugs are path-like, e.g. 'aio/tables/aio_main', 'solutions/customer-analysis/introduction'.
list_documents
ChatGPTGeneric listing of project documentation. Returns summaries (no content) so it is cheap on tokens. Filter by slug prefix or free-text search. Slugs are path-like, e.g. 'aio/tables/aio_main', 'solutions/customer-analysis/introduction'.
list_projects
ChatGPTCall this tool first. Returns all projects the user has access to. Present the list to the user and ask which project (or projects) they want to work on. Then call load_project with the chosen project_id.
list_projects
ChatGPTCall this tool first. Returns all projects the user has access to. Present the list to the user and ask which project (or projects) they want to work on. Then call load_project with the chosen project_id.
list_projects
ChatGPTCall this tool first. Returns all projects the user has access to. Present the list to the user and ask which project (or projects) they want to work on. Then call load_project with the chosen project_id.
list_tables
ChatGPTList BigQuery tables in the project dataset with classification (which dataSource each table belongs to). Tables that cannot be classified (no AIO suffix and no matching solution instance ID) are hidden. Use this BEFORE run_query to discover the full tableId (which always includes a suffix) and partitioning info.
list_tables
ChatGPTList BigQuery tables in the project dataset with classification (which dataSource each table belongs to). Tables that cannot be classified (no AIO suffix and no matching solution instance ID) are hidden. Use this BEFORE run_query to discover the full tableId (which always includes a suffix) and partitioning info.
list_tables
ChatGPTList BigQuery tables in the project dataset with classification (which dataSource each table belongs to). Tables that cannot be classified (no AIO suffix and no matching solution instance ID) are hidden. Use this BEFORE run_query to discover the full tableId (which always includes a suffix) and partitioning info.
load_project
ChatGPTLoad a project after the user has picked one. Returns project identifiers, available data sources, and business contexts. REQUIRED: immediately after calling this tool, call read_document with slug "introduction" — that document contains all instructions on how to guide the user through the session. For cross-project analysis, call this tool once per project — results accumulate in context.
load_project
ChatGPTLoad a project after the user has picked one. Returns project identifiers, available data sources, and business contexts. REQUIRED: immediately after calling this tool, call read_document with slug "introduction" — that document contains all instructions on how to guide the user through the session. For cross-project analysis, call this tool once per project — results accumulate in context.
load_project
ChatGPTLoad a project after the user has picked one. Returns project identifiers, available data sources, and business contexts. REQUIRED: immediately after calling this tool, call read_document with slug "introduction" — that document contains all instructions on how to guide the user through the session. For cross-project analysis, call this tool once per project — results accumulate in context.
read_document
ChatGPTRead the full markdown content of a document by its slug. Slugs are path-like, e.g. 'aio/tables/aio_main'. Use list_documents to discover slugs first.
read_document
ChatGPTRead the full markdown content of a document by its slug. Slugs are path-like, e.g. 'aio/tables/aio_main'. Use list_documents to discover slugs first.
read_document
ChatGPTRead the full markdown content of a document by its slug. Slugs are path-like, e.g. 'aio/tables/aio_main'. Use list_documents to discover slugs first.
run_query
ChatGPTExecute a SELECT query against the project BigQuery dataset. PREREQUISITES: call list_tables and (when needed) get_table_schema / read_document for any table you query. RULES: - Use fully qualified names: googleCloudProjectId.datasetId.tableId (the full suffixed tableId from list_tables) - ALWAYS include a partition filter for any partitioned table to keep scans cheap. Use the partitioning field returned by list_tables: • partitioning.field === "_PARTITIONTIME" → ingestion-time partitioning; filter on _PARTITIONTIME or _PARTITIONDATE • any other field (e.g. "event_date") → column- or range-partitioning; filter on that exact column name • partitioning is null → no partition filter needed - Only SELECT queries are allowed; DML keywords are rejected by the backend - Cross-source JOIN (AIO × solution table) is supported because everything lives in one dataset
run_query
ChatGPTExecute a SELECT query against the project BigQuery dataset. PREREQUISITES: call list_tables and (when needed) get_table_schema / read_document for any table you query. RULES: - Use fully qualified names: googleCloudProjectId.datasetId.tableId (the full suffixed tableId from list_tables) - ALWAYS include a partition filter for any partitioned table to keep scans cheap. Use the partitioning field returned by list_tables: • partitioning.field === "_PARTITIONTIME" → ingestion-time partitioning; filter on _PARTITIONTIME or _PARTITIONDATE • any other field (e.g. "event_date") → column- or range-partitioning; filter on that exact column name • partitioning is null → no partition filter needed - Only SELECT queries are allowed; DML keywords are rejected by the backend - Cross-source JOIN (AIO × solution table) is supported because everything lives in one dataset
run_query
ChatGPTExecute a SELECT query against the project BigQuery dataset. PREREQUISITES: call list_tables and (when needed) get_table_schema / read_document for any table you query. RULES: - Use fully qualified names: googleCloudProjectId.datasetId.tableId (the full suffixed tableId from list_tables) - ALWAYS include a partition filter for any partitioned table to keep scans cheap. Use the partitioning field returned by list_tables: • partitioning.field === "_PARTITIONTIME" → ingestion-time partitioning; filter on _PARTITIONTIME or _PARTITIONDATE • any other field (e.g. "event_date") → column- or range-partitioning; filter on that exact column name • partitioning is null → no partition filter needed - Only SELECT queries are allowed; DML keywords are rejected by the backend - Cross-source JOIN (AIO × solution table) is supported because everything lives in one dataset