Skip to main content
Glama
25andresbernal

semantic-model-kit

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SEMKIT_MCP_TOKENNoBearer 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 name does not exist.

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 by. Raises a tool error naming the known metrics if name does not exist.

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 by.

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 ambiguous: true and a note if no single path is fully marked preferred), plus every alternative path that was available and why it was not the one chosen.

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

NameDescription
answer_a_business_questionA 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

NameDescription
semantic_model_summaryA short summary of the loaded semantic model: name, description, owner, and the names of its entities and metrics.
semantic_context_packThe 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

A4.4/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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.