Skip to main content

powerbi-report-mcp

An MCP server for reading and editing the report/visual layer of Power BI PBIP projects — pages, visuals, field bindings, formatting, and themes — directly on disk, so AI assistants can build and restyle reports alongside you.

It pairs with Microsoft's official powerbi-modeling-mcp (semantic model: tables, measures, relationships); this server deliberately never touches the semantic model.

Features

  • 37 tools covering connections, pages, visuals, field wells, format patching, themes, report settings, and style profiles.
  • Implicit active report — connection_name is optional on every tool; the most recently opened/used report is the default target.
  • Git-style undo — every edit is snapshotted per connection; undo() rolls back one step at a time (no redo), and list_history() shows the undo stack.
  • Atomic writes — files are written via temp-file rename so Power BI Desktop never sees a half-written JSON file.
  • Schema-validated models — Pydantic models mirror Microsoft's published PBIP JSON schemas, with a discriminated union per visual family.
  • Style profiles — capture fonts, colours, borders, and canvas size in a reusable JSON profile and distil it into a report, page, or single visual with apply_style; only the parts relevant to the scope are applied.
  • Extension visual types — register custom/AppSource visuals at runtime with the register_visual_extension tool; usable immediately, no restart.
  • stdio and HTTP transports — spawned per client (stdio, default) or one instance serving many clients via --transport http, with each client in its own isolated session.

Quick start

Requires uv (Python 3.12+ is fetched automatically). Two officially supported ways to run it:

Usage — PyPI, stdio (recommended for normal use):

{
  "powerbi-report-mcp": {
    "type": "stdio",
    "command": "uvx",
    "args": ["powerbi-report-mcp"]
  }
}

Development — local clone, HTTP (for working on the server itself, with live edits and no rebuild step). Run it yourself in a terminal, on a port you pick:

git clone https://github.com/mattbeard0/powerbi-report-mcp.git
cd powerbi-report-mcp
uv run powerbi-report-mcp --transport http --port 8731

...then point your client at http://127.0.0.1:8731/mcp — a custom connector for Claude Desktop, an mcpServers "url" entry for clients that support it directly. This is also the route to remote-only clients like ChatGPT, and to serving several clients from one process (each gets its own isolated session — connections and undo history — touching the same report only when each explicitly opens it).

Avoid running uv run powerbi-report-mcp as a stdio command on Windows — the extra uv.exe process layer can stall the client's connect handshake (confirmed with Claude Desktop and MCP Inspector); use HTTP instead.

Then in your assistant: "Open C:/Projects/MyReport.Report and add a card visual showing Total Sales."

docs/installation.md has copy-paste setup for Claude Desktop, Claude Code, Codex / Codex CLI, ChatGPT, VS Code, and Cursor — each from PyPI or from a local folder — plus the Microsoft modeling MCP.

Development

uv sync                                  # includes the dev dependency group
uv run pytest                            # unit tests (network tests excluded)
uv run pytest -m network                 # live schema-conformance tests
uv run ruff check src tests
uv run mypy src

License

MIT

Metadata

Release files for powerbi-report-mcp 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for powerbi-report-mcp 1.0.0
File Size Uploaded
powerbi_report_mcp-1.0.0.tar.gz 143.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for powerbi-report-mcp 1.0.0
File Interpreter ABI Platform
powerbi_report_mcp-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 218.9 kB

Release files / powerbi_report_mcp-1.0.0.tar.gz

Download URL powerbi_report_mcp-1.0.0.tar.gz
Size 143.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d3bfa67834cdb465ee2b3cf34bc65ec3ed29ceb37092881620e9623e0d82de4a
BLAKE2b-256 checksum
How to use checksums
f87338fe01313031cbf38a758b7a3c50134fa0cd74a86db6ef109988c5f72f85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / powerbi_report_mcp-1.0.0-py3-none-any.whl

Download URL powerbi_report_mcp-1.0.0-py3-none-any.whl
Size 75.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e3bea97ef010acff0be19b56e285587464a23fe4a338762d207be1bc2a1cb8ae
BLAKE2b-256 checksum
How to use checksums
17f3d0e8d50cbccafb58d5a2866be2b64ccb564b91e347d55066e039e5a6cac4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page