MCP server for editing Power BI PBIP report visualisations
Project description
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_nameis 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), andlist_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_extensiontool; 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file powerbi_report_mcp-1.0.0.tar.gz.
File metadata
- Download URL: powerbi_report_mcp-1.0.0.tar.gz
- Upload date:
- Size: 143.1 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3bfa67834cdb465ee2b3cf34bc65ec3ed29ceb37092881620e9623e0d82de4a
|
|
| MD5 |
9a3b93b9650476232498b150c4406c8b
|
|
| BLAKE2b-256 |
f87338fe01313031cbf38a758b7a3c50134fa0cd74a86db6ef109988c5f72f85
|
File details
Details for the file powerbi_report_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: powerbi_report_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 75.9 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3bea97ef010acff0be19b56e285587464a23fe4a338762d207be1bc2a1cb8ae
|
|
| MD5 |
d6c52c0a70cfd5c958c670076ed11e3c
|
|
| BLAKE2b-256 |
17f3d0e8d50cbccafb58d5a2866be2b64ccb564b91e347d55066e039e5a6cac4
|