Skip to main content
Glama
enelyse

Power BI Desktop MCP Server

by enelyse
README.md
# Power BI Desktop MCP Server

![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
![License](https://img.shields.io/badge/license-MIT-green)
![Tests](https://img.shields.io/badge/tests-not%20run-lightgrey)
![Coverage](https://img.shields.io/badge/coverage-unknown-lightgrey)

> ⚠️ **Alpha version** – APIs and behaviours may change without notice.

Power BI Desktop MCP Server lets Claude (or any MCP client) talk to a running Power BI Desktop instance using natural language. It bridges the Model Context Protocol to the Tabular Object Model so you can inspect, optimize, and author DAX without leaving chat.

## Installation

Step-by-step setup (Power BI prerequisites, .NET libraries, environment variables) lives in [INSTALLATION.md](INSTALLATION.md).

For local development:

```bash
pip install -e .
# or install from the current directory:
pip install .
```

## Quick Example

List the tables in your current Power BI model:

```bash
python examples/list_model_info.py --include-columns
```

Export measures to the knowledge base:

```bash
python examples/export_measures_to_knowledge_base.py --project "Executive Dashboard"
```

Run the optimizer on an expression:

```bash
python examples/optimize_dax.py --expr "CALCULATE(SUM(Sales[Amount]), FILTER(ALL(Date), Date[Year] = 2024))"
```

## Configuration

- Copy `.env.example` to `.env` and set `TOM_DLL_PATH` if the Microsoft Analysis Services DLLs are not auto-detected. Optional variables include `LOG_LEVEL`, `MCP_KNOWLEDGE_BASE`, and `POWERBI_WORKSPACE_NAME`.
- Add the CLI entry point to Claude Desktop (or any MCP host):

  ```json
  {
    "mcpServers": {
      "powerbi": {
        "command": "powerbi-mcp-server",
        "args": []
      }
    }
  }
  ```

- The CLI is a thin wrapper around `python -m powerbi_mcp.server`, so either invocation works for deployments and debugging.

## Features

- DAX code generation and measure creation
- Measure and table metadata inspection
- DAX optimizer with rule-based suggestions
- TMDL import/export helpers
- Knowledge base bridge for storing curated measures
- Example scripts for quick automation (`examples/` directory)

## Known Issues

- Power BI visuals live outside the XMLA endpoint, so visual creation/editing is not supported.
- The server connects to the most recently opened Power BI Desktop workspace; multiple instances are not yet multiplexed.
- Write operations require the Power BI model to allow external tools and, in some scenarios, elevated permissions.
- `pythonnet` relies on local Microsoft Analysis Services DLLs; misconfigured `TOM_DLL_PATH` is the most common setup failure.

## Contributing

Pull requests are welcome. Please:

1. Open an issue describing the change if it alters behaviour or APIs.
2. Keep additions formatted with `ruff`/`black` style conventions (if configured) and include type hints.
3. Add or update example scripts/tests where it helps illustrate new functionality.
4. Run the example scripts or manual smoke tests before submitting.

Issues and feature requests are tracked at the repository’s GitHub Issues page.