semantic-model-kit
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SEMKIT_MCP_TOKEN | No | Bearer token clients must send as `Authorization: Bearer <token>`. Required when running the server with `--transport http`; the server refuses to start over HTTP without it. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_entitiesA | List every entity (table) in the semantic model with its description and synonyms. |
| describe_entityA | Describe one entity in full detail. Args: name: entity name, as returned by list_entities, e.g. "invoices". Returns description, synonyms, source table, primary key, and every dimension, time
dimension, fact, and filter declared on it. Raises a tool error naming the known
entities if |
| list_metricsA | List every certified metric with its description, owner, and synonyms. |
| describe_metricA | Describe one metric in full detail. Args: name: metric name, as returned by list_metrics, e.g. "revenue". Returns description, SQL expression, filters applied, owner, synonyms, its time
dimension (if any), any dimensions it is declared non_additive_over (grouping by these
would produce a misleading result), and allowed_dimensions: every entity.field dimension
reachable from the metric by exactly one unambiguous join, safe to pass to query_metric's
|
| query_metricA | Compile a metric query and run it against the model's DuckDB warehouse. Args: metric: metric name, e.g. "revenue". by: dimensions to group by, each as "entity.field", e.g. ["customers.region"]. See describe_metric's allowed_dimensions for what is safe to pass here. where: filter clauses, each as "entity.field op value", e.g. ["calendar.fiscal_year = 2025"]. limit: maximum rows to return (default 100). Returns columns, rows, and the exact SQL that was run, so the caller can show its work
rather than just asserting a number. Raises a tool error, never a guess, if a dimension
is unknown, a join between two required entities is ambiguous or unreachable, or the
metric is declared non_additive_over a dimension in |
| search_semanticsA | Search entity, dimension, time dimension, fact, filter, and metric names, descriptions, and synonyms for a free-text term. Args: text: free-text search, e.g. "region" or "revenue". Case-insensitive substring match. Returns every match, tagged with kind (entity, dimension, time_dimension, fact, filter, or metric) and the owning entity when there is one, so an agent can tell whether a term like "region" resolves to more than one place before guessing which is meant. |
| explain_joinA | Explain, in words, the preferred join path between two entities and what it avoided. Args: from_entity: starting entity name, e.g. "invoices". to_entity: destination entity name, e.g. "customers". Returns the chosen path described as a sequence of hops (or null with |
| verified_questionsA | List this model's verified questions: known-good question, metric, dimensions, and the gold SQL each one is checked against. These are the model's own regression tests. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| answer_a_business_question | A prompt template for answering a business question using only this model's governed metrics, never a raw table. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| semantic_model_summary | A short summary of the loaded semantic model: name, description, owner, and the names of its entities and metrics. |
| semantic_context_pack | The full context pack as Markdown: every entity's fields, the preferred join between every reachable pair of entities, every metric's plain description and SQL, the verified questions, and this model's own llm_context instructions and do-not-answer rules. |
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: listing entities/metrics, describing them in detail, querying metrics, free-text searching, explaining join paths, and retrieving verified questions. There is no overlap or ambiguity between tools; an agent can reliably select the right one for a given task.
All tool names follow a consistent verb_noun (or verb_noun_noun) pattern in snake_case, such as list_entities, describe_entity, query_metric, and explain_join. The naming is uniform and predictable, with no mixed conventions or vague verbs.
With 8 tools, the server is well-scoped for its purpose of exploring and querying a semantic model. Each tool serves a necessary function—discovery, description, querying, search, join explanation, and regression testing—and none feels redundant or missing.
The tool surface fully covers the domain of semantic model interaction: listing and describing entities and metrics, querying metrics with validation, searching across all semantic elements, explaining join paths, and checking verified questions. There are no obvious gaps; even potential needs like filtering dimensions are handled within query_metric and describe_entity.