Install
$ agentstack add skill-kaelio-ktx-analytics ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
ktx Analytics Workflow
You have access to ktx MCP tools for data discovery, semantic-layer analysis, raw read-only SQL, wiki context, and memory ingest. Follow this workflow.
- Discover - call
discover_datafirst to see what exists across wiki pages, semantic-layer sources, metrics, dimensions, raw tables, and columns. Returns refs only. - Inspect top hits in parallel - for each promising ref:
kind: 'wiki'->wiki_readkind: 'sl_source',kind: 'sl_measure', orkind: 'sl_dimension'->sl_read_sourcekind: 'table'orkind: 'column'->entity_details
- Resolve business values - if the user named a value such as "Acme Corp", "enterprise", or "status=shipped", call
dictionary_searchto find which column holds it. - Plan the analysis - identify the grain, metrics, dimensions, filters, time window, and expected row limits before querying.
- Query -
- Prefer
sl_querywhen the semantic layer covers the question. - Use
sql_executiononly for questions the semantic layer does not cover.
- Validate and explain - sanity-check totals, filters, null handling, and time zones. State the source tables or semantic-layer objects used.
- Capture durable learnings - call
memory_ingestwhenever a turn produces something worth remembering (business rules, metric definitions, schema gotchas, recurring findings) or whenever the user asks you to remember something. Pass markdown incontentincluding any source context the memory agent should weigh. Each call is a feedback loop; better notes today mean smarterdiscover_dataandwiki_searchresults tomorrow.
- Always run
discover_databefore writing SQL. Do not guess table names. - Prefer the semantic layer over raw SQL when both can answer the question; measures are the source of truth.
- Read entity details before writing SQL against an unfamiliar table. Do not assume column names.
- Treat
sql_executionas read-only. Writes are rejected by the server. - Validate value mentions with
dictionary_searchinstead of guessing case or spelling. Treat adictionary_searchmiss as non-authoritative. The index is built from profile-sampled values, so a missing value may simply have been outside the sample. Follow up withsql_executionagainst the most plausible columns before concluding the value is absent. connectionIdscoping whenconnection_listshows multiple connections:- Always pass it:
entity_details,sl_read_source,sql_execution. - Pass it when intent pins a warehouse, otherwise omit for unscoped discovery:
sl_query,discover_data,dictionary_search. memory_ingest: pass it for warehouse-specific knowledge (e.g. "in our warehouse"); without it the memory lands as wiki-only and cannot update the semantic layer.- Never pass it:
connection_list,wiki_search,wiki_read,memory_ingest_status. - If scoping is required but intent is ambiguous, ask which warehouse before calling.
- Show compact result tables for small outputs. For broad results, summarize the top findings and mention the applied limit.
- Ask a concise clarification only when the metric, date range, entity, or grain is genuinely ambiguous and cannot be inferred from context.
Input: "How many orders did Acme Corp place last month?"
Workflow:
dictionary_search({ values: ["Acme Corp"] })findscustomers.name.discover_data({ query: "orders customer monthly" })finds an orders semantic-layer source.sl_read_source({ connectionId: "warehouse", sourceName: "orders_facts" })confirms the source grain, measures, and dimensions.sl_query({ connectionId: "warehouse", measures: ["order_count"], filters: ["customer_name = 'Acme Corp'"] })answers through the semantic layer.memory_ingest({ connectionId: "warehouse", content: "Acme Corp order analysis used orders_facts.order_count filtered by customers.name = 'Acme Corp'. Source: current analysis turn." })captures the durable finding.
Input: "What columns does the events table have?"
Workflow:
discover_data({ query: "events table" })returns atableref.entity_details({ connectionId: "warehouse", entities: [{ table: "analytics.events" }] })returns columns, types, and foreign keys.- Answer directly. No query is needed.
Input: "Heads up: ARR is always reported in cents in our warehouse."
Workflow:
- If multiple connections exist, call
connection_listand identify the warehouse the user means. Ask if ambiguous. memory_ingest({ connectionId: "warehouse", content: "ARR is reported in cents (not dollars) in this warehouse. Multiply by 0.01 for dollar amounts. Source: user clarification." })remembers the warehouse-specific rule without running an analysis turn.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Kaelio
- Source: Kaelio/ktx
- License: Apache-2.0
- Homepage: https://docs.kaelio.com/ktx
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.