/ Directory / Playground / mcp-engine-public
● Community maxanatsko ⚡ Instant

mcp-engine-public

by maxanatsko · maxanatsko/mcp-engine-public

Chat with your Power BI model — read schema, run DAX, create measures, manage relationships — all locally, no cloud round-trip.

MCP Engine (mcp-engine-public) by Maxim Anatsko connects to a local Power BI Desktop instance. Read model structure, run DAX queries, create and modify measures, and manage relationships via natural language. Runs locally (Windows/macOS) with zero telemetry.

Why use it

Key features

Live Demo

What it looks like in practice

engine-public.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "engine-public": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/maxanatsko/mcp-engine-public"
      ],
      "_inferred": true
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "engine-public": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/maxanatsko/mcp-engine-public"
      ],
      "_inferred": true
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "engine-public": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/maxanatsko/mcp-engine-public"
      ],
      "_inferred": true
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "engine-public": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/maxanatsko/mcp-engine-public"
      ],
      "_inferred": true
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "engine-public",
      "command": "TODO",
      "args": [
        "See README: https://github.com/maxanatsko/mcp-engine-public"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "engine-public": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/maxanatsko/mcp-engine-public"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add engine-public -- TODO 'See README: https://github.com/maxanatsko/mcp-engine-public'

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use mcp-engine-public

Write DAX without memorizing syntax

👤 Power BI analysts new to DAX ⏱ ~15 min intermediate

When to use: You know what you want in English; you don't want to debug CALCULATE for an hour.

Prerequisites
  • Power BI Desktop with a model open — Launch Power BI Desktop and open your .pbix
  • MCP Engine installed and connected — See mcpengine.dev — installer under 5 min
Flow
  1. Orient the model
    List the tables in the open model and key measures.✓ Copied
    → Model map
  2. Write the measure
    Create a DAX measure 'YoY Revenue' that returns current revenue minus same period prior year, using Date[Date] for time intelligence.✓ Copied
    → DAX + creation confirmation
  3. Validate
    Run the measure over 2024 vs 2025 and spot-check 3 rows.✓ Copied
    → Numbers that look right

Outcome: A working measure with validation, not a guess.

Pitfalls
  • Time intelligence requires a properly marked date table — Verify Date table is marked as a date table first
  • Model calculations differ between DirectQuery and Import — Be aware of your storage mode; DirectQuery imposes DAX restrictions

Auto-document an existing Power BI model

👤 Analysts inheriting a .pbix ⏱ ~25 min beginner

When to use: The original author is gone and the model has 40 tables of mystery.

Flow
  1. Dump structure
    Dump the model: every table's role, every measure's DAX, every relationship.✓ Copied
    → Full structural listing
  2. Write prose docs
    Write a one-page explanation of this model for a new analyst: what it reports on, main tables, key measures.✓ Copied
    → Human-readable model doc

Outcome: Useful documentation without reading every measure yourself.

Combine with: filesystem

Refactor measures to follow naming + modeling conventions

👤 Teams standardizing Power BI practices ⏱ ~30 min intermediate

When to use: Measures are named inconsistently (e.g. 'Total Sales' vs 'SumSales').

Flow
  1. Find violations
    List measures that don't follow the naming convention '<Verb> <Subject> [<Modifier>]'.✓ Copied
    → Violation list
  2. Rename safely
    Propose renames; list any visuals or calculated tables that reference each old name.✓ Copied
    → Rename plan with dependencies

Outcome: A consistent measure catalog with broken references caught before you hit Apply.

Combinations

Pair with other MCPs for X10 leverage

engine-public + filesystem

Export model documentation as a Markdown file alongside the .pbix

Document the model and save as ~/Docs/PBI/sales-model.md next to sales.pbix.✓ Copied
engine-public + postgres

Cross-check PBI measures against raw Postgres queries

PBI says Q1 revenue is $4.2M. Run the same query on the source Postgres DB and tell me if there's a discrepancy.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
get_model_structure (none) Session start free (local)
run_dax query: str Ad-hoc DAX query free (local)
create_measure table, name, expression Add new measure free (write)
update_measure table, name, expression Modify existing free (write)
manage_relationship from_table, from_col, to_table, to_col, action: create|delete|update Schema changes free (write)

Cost & Limits

What this costs to run

API quota
None — local only
Tokens per call
Model dumps can be large; focus queries
Monetary
Proprietary license with permitted personal + commercial use (see mcpengine.dev/license)
Tip
Ask for specific tables rather than a full model dump on complex reports.

Security

Permissions, secrets, blast radius

Credential storage: None required — uses PBI Desktop's session
Data egress: Zero telemetry claimed; all local to PBI Desktop

Troubleshooting

Common errors and fixes

No Power BI instance found

Ensure Power BI Desktop is running with a report open; the MCP connects to the local port it exposes.

Verify: Check Task Manager for msmdsrv process
DAX error: Column not found

Table/column reference is case-sensitive and must match exactly. Use the model structure dump to get names right.

Verify: get_model_structure
Changes don't persist after closing PBI

PBI Desktop doesn't auto-save — Ctrl+S after each batch of changes.

Verify: Title bar shows no asterisk

Alternatives

mcp-engine-public vs others

AlternativeWhen to use it insteadTradeoff
Tabular Editor 3 (scripting)You want a full scripting environment for PBI/SSAS modelsPaid; no MCP surface
DAX StudioYou only need a DAX query toolNo write operations; no AI layer

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills