name: bagofwords description: Query, visualize, and analyze data in a Bag of Words (BOW) workspace via the bagofwords MCP tools. Use for creating reports, running tracked queries, and building dashboards.
Bag of Words (BOW) Analytics
BOW is a data-analytics workspace connected to the organization's databases and
files. You drive it through the bagofwords MCP tools. This skill defines how to
use those tools well and the analytical standards to hold yourself to.
If the
bagofwordsMCP tools are not available in this conversation, the BOW connector isn't connected. Tell the user to connect the Bag of Words connector first, then retry — don't attempt to answer data questions without it.
Core workflow
Follow this sequence. Don't skip the research steps.
- Start a session —
create_report(once). At the start of an analysis, callcreate_reportwith a short descriptivetitlederived from the user's ask. Keep the returnedreport_idand pass it to every later call. Do NOT create a new report per question in the same analysis — reuse the same one. - Discover the data —
get_context. Before querying, callget_contextto see data sources/agents, tables, columns, and metadata resources. Optionally filter with regex. Never assume table or column names — confirm them here. - Validate assumptions —
inspect_data(optional, sparing). Use only for a quick peek (it returns ~3 sample rows): check nulls, distinct values, join keys, date formats. It is NOT analysis and is not saved. Max 2–3 probes. - Produce the answer —
create_data. This runs a tracked, reproducible query + visualization that is saved and shareable. Use it for any real result the user should keep. Never presentinspect_dataoutput as the answer. - Compose dashboards —
create_artifact/edit_artifact. Build a dashboard or slides from visualizations you already created.
Tools
create_report(title)— start an analysis; returnsreport_id. Call once, reuse.get_context(report_id, [regex filters])— list data sources, tables, columns, and metadata. Use before writing any query and to look up business definitions.inspect_data(report_id, ...)— quick 3-row preview for validation only.create_data(report_id, ...)— tracked query + chart/table. The real answer.create_artifact(report_id, mode)— dashboard (mode: "page") or presentation (mode: "slides") from existing visualizations (auto-uses up to 10).edit_artifact(report_id, artifact_id, ...)— targeted change to an existing artifact. Needsartifact_id. Prefer this over rebuilding for small edits.list_instructions(...)— read the org's business rules / metric definitions.create_instruction/delete_instruction— only if available to this user (permission-gated); don't rely on them being present.
Ask before you guess (clarify discipline)
There is no clarify tool here — when something is ambiguous, ask the user in plain text before calling a data tool. Ask when:
- The user names a business term, metric, or KPI that isn't defined in the org instructions and can't be mapped unambiguously to one column/table (e.g. "active users", "churn", "engagement", "high-value customer").
- They ask for a definition or "what counts as X".
- Scope is unclear: time window, entity, threshold, granularity, or which of several plausible interpretations applies.
- The data covers only part of the ask and you'd have to guess to fill the gap.
Never invent a definition. Offer 2–4 concrete candidate interpretations grounded in the schema/instructions, and end with "or specify your own." One clarifying question beats building the wrong thing.
Schema & semantic-layer discipline
- Never hallucinate table or column names — confirm via
get_context. - Tables flagged as having instructions carry business rules; read them
(
get_context/list_instructions) before writing queries against them. - For a business term, check org instructions first; use that definition if found.
- Tables under different connections are separate databases — you cannot join across connections.
Building dashboards
- Cold start (no existing visualizations): build ONE wide master table
covering the metrics + dimensions the dashboard needs, then
create_artifact. Don't fire off 3–4 narrow queries (separate KPI / trend / top-N) — the artifact derives those from one wide result. - Warm start (visualizations already exist): demonstratives like "this data",
"the above", or "great, build a dashboard" mean REUSE what's there. Go straight
to
create_artifactwith the existing visualizations — don't re-runcreate_dataunless a specific column the user named is missing from every existing viz. - Small change to an existing dashboard: use
edit_artifactwith itsartifact_id. Onlycreate_datafirst if the change needs new data. - When unsure which visualizations to use or the ask is generic ("a nice overview"), ask the user with 2–3 concrete options rather than guessing.
Analytical standards
- Shape output to the question: "how many" → a scalar/COUNT; "top N" → N rows; a list → rows with the fields the user cares about. Include identity columns (keys) on row results so follow-up drill-downs don't need a re-query.
- Ground every claim in the data; cite the table/column/source. Distinguish "the data shows X" from "I infer X".
- State confidence on inferences; acknowledge data limitations; flag anomalies (unexpected zeros, sudden changes, outliers).
- Don't fabricate data, secrets, or credentials. If something required is missing, ask the user.
- In your final message, summarize findings in plain language — don't dump raw rows or surface internal IDs (report/visualization/artifact ids).