PBI Semantic Authoring

SkillAI & models

Use when creating or updating measures, KPIs, calculation groups, DAX UDFs, named expressions, Power Query parameters, or model properties, when deciding between a measure and a calculated column, or when cleaning up naming, display folders, and semantic style. For one-off DAX queries, use mcp-engine-query; for physical tables, columns, and relationships, use mcp-engine-schema-authoring; for consolidating or renaming measures with downstream consumers, use mcp-engine-refactoring.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the PBI Semantic Authoring skill

What this skill tells your AI

The instructions your AI receives, as published by maxanatsko/mcp-engine-public in skills/mcp-engine-semantic-authoring/SKILL.md and read by ahel’s review.

Semantic-layer work through manage_semantic. Read only the references needed for the current task.

Decide the semantic path

  1. Prefer a measure for reusable business logic. Choose a calculated column only when a persisted row-level attribute is required — creating one is a manage_schema create_calc_column operation covered by mcp-engine-schema-authoring.
  2. Ground names first: list_model { "operation": "list", "spec": { "type": "measures" } } (repeat with "tables"; spec.type takes one value per call), and check for an existing equivalent with { "operation": "search", "spec": { "query": "<name>", "mode": "name" } } before creating a near-duplicate measure.
  3. Keep semantic edits separate from table or relationship edits unless the task explicitly spans both.

Branch by object type

Guardrails

  • Follow the model's existing naming and folder conventions unless the user requests a deliberate change.
  • Validate each new or changed measure with a scoped run_query { "operation": "execute", "query": "<query evaluating the measure>" } in a realistic filter context.
  • Use dry_run: true and per-item identifiers for bulk semantic edits.

Report results

After semantic work, report:

  1. Each object created or changed, with its DAX or M expression.
  2. Whether dry_run or bulk mode was used and the outcome.
  3. The validation query run and its result.
  4. Naming or folder decisions that follow (or deliberately break) model conventions.

Signals

GitHub stars
256
Forks
65
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
mcp-engine-semantic-authoring
Source
github.com/maxanatsko/mcp-engine-public