MCP App Store
by KeenEthics
Data-Analytics

Overview

Ask questions about your business and get answers straight from your own data - no spreadsheets, no waiting on a report. WitCloud connects Claude to all your marketing, sales, and ecommerce data in one place, so you can explore customers, campaigns, and revenue just by chatting. Claude understands the context of your business, so the answers actually make sense for you.

Tools

add_context_log_entry

ChatGPT
Append 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

ChatGPT
Return 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

ChatGPT
Return 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

ChatGPT
Return 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

ChatGPT
Refresh 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

ChatGPT
Generic 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

ChatGPT
Call 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

ChatGPT
List 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

ChatGPT
Load 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

ChatGPT
Read 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

ChatGPT
Execute 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

add_context_log_entry

Claude

check_onboarding_step

Claude

complete_onboarding_step

Claude

describe_columns

Claude

get_business_context

Claude

get_channel_grouping

Claude

get_integration_status

Claude

get_onboarding_status

Claude

get_table_schema

Claude

list_data_sources

Claude

list_documents

Claude

list_projects

Claude

list_tables

Claude

load_project

Claude

read_document

Claude

reprocess_channel_grouping

Claude

run_query

Claude

upsert_business_context

Claude

upsert_channel_grouping

Claude

App Stats

30

Tools

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily