CLI for Power BI semantic models and PBIR reports - direct .NET connection for token-efficient AI agent usage
Project description
Give Claude Code the Power BI skills it needs. Install once, then just ask Claude to work with your semantic models and reports.
Get Started • Skills • All Commands • REPL Mode • Contributing
What is this?
pbi-cli gives Claude Code (and other AI agents) the ability to manage Power BI semantic models and reports. It ships with 12 skills that Claude discovers automatically. You ask in plain English, Claude uses the right pbi commands.
You Claude Code pbi-cli Power BI
"Add a YTD measure ---> Uses Power BI ---> CLI commands ---> Desktop
to the Sales table" skills (12)
Two layers, one CLI:
- Semantic Model -- Direct .NET interop to Power BI Desktop (measures, tables, DAX, security)
- Report Layer -- Reads/writes PBIR JSON files directly (visuals, pages, themes, filters)
Get Started
Fastest way: Just give Claude the repo URL and let it handle everything:
Install and set up pbi-cli from https://github.com/MinaSaad1/pbi-cli.git
Or install manually (two commands):
pipx install pbi-cli-tool # 1. Install (handles PATH automatically)
pbi-cli skills install # 2. Register Claude Code skills (one-time setup)
pbi connect # 3. Connect to Power BI Desktop
Open Power BI Desktop with a .pbix file, run the three commands above, and start asking Claude.
Requires: Windows with Python 3.10+ and Power BI Desktop running.
Using pip instead of pipx?
pip install pbi-cli-tool
On Windows, pip install often places the pbi command in a directory that isn't on your PATH.
Fix: Add the Scripts directory to PATH
Find the directory:
python -c "import site; print(site.getusersitepackages().replace('site-packages','Scripts'))"
Add the printed path to your system PATH, then restart your terminal. We recommend pipx to avoid this entirely.
Skills
After running pbi-cli skills install, Claude Code discovers 12 Power BI skills. Each skill teaches Claude a different area. You don't need to memorize commands.
Semantic Model (require pbi connect)
| Skill | What you say | What Claude does |
|---|---|---|
| DAX | "Top 10 products by revenue?" | Writes and executes DAX queries |
| Modeling | "Create a star schema" | Creates tables, relationships, measures |
| Deployment | "Save a snapshot" | Exports/imports TMDL, diffs snapshots |
| Security | "Set up RLS" | Creates roles, filters, perspectives |
| Docs | "Document this model" | Generates data dictionaries |
| Partitions | "Show the M query" | Manages partitions, expressions |
| Diagnostics | "Why is this slow?" | Traces queries, benchmarks |
Report Layer (no connection needed)
| Skill | What you say | What Claude does |
|---|---|---|
| Report | "Create a new report" | Scaffolds PBIR reports, validates, previews |
| Visuals | "Add a bar chart" | Adds, binds, bulk-manages 32 visual types |
| Pages | "Add a new page" | Manages pages, bookmarks, drillthrough |
| Themes | "Apply brand colours" | Themes, conditional formatting |
| Filters | "Show top 10 only" | TopN, date, categorical filters |
All Commands
27 command groups covering both the semantic model and the report layer.
| Category | Commands |
|---|---|
| Queries | dax execute, dax validate, dax clear-cache |
| Model | table, column, measure, relationship, hierarchy, calc-group |
| Deploy | database export-tmdl/import-tmdl/export-tmsl/diff-tmdl, transaction |
| Security | security-role, perspective |
| Connect | connect, disconnect, connections list/last |
| Data | partition, expression, calendar, advanced culture |
| Diagnostics | trace start/stop/fetch/export, model stats |
| Report | report create/info/validate/preview/reload, report add-page/delete-page/get-page |
| Visuals | visual add/get/list/update/delete/bind, visual bulk-bind/bulk-update/bulk-delete |
| Filters | filters list/add-categorical/add-topn/add-relative-date/remove/clear |
| Formatting | format get/clear/background-gradient/background-conditional/background-measure |
| Bookmarks | bookmarks list/get/add/delete/set-visibility |
| Tools | setup, repl, skills install/list/uninstall |
Use --json for machine-readable output:
pbi --json measure list
pbi --json visual list --page overview
32 Supported Visual Types
Charts: bar, line, column, area, ribbon, waterfall, stacked bar, clustered bar, clustered column, scatter, funnel, combo, donut/pie, treemap
Cards/KPIs: card, cardVisual (modern), cardNew, multi-row card, KPI, gauge
Tables: table, matrix • Slicers: slicer, text, list, advanced • Maps: Azure Map
Decorative: action button, image, shape, textbox, page navigator
REPL Mode
For interactive work, the REPL keeps a persistent connection:
$ pbi repl
pbi> connect --data-source localhost:54321
Connected: localhost-54321
pbi(localhost-54321)> measure list
pbi(localhost-54321)> dax execute "EVALUATE TOPN(5, Sales)"
pbi(localhost-54321)> exit
Tab completion, command history, and a dynamic prompt.
Development
git clone https://github.com/MinaSaad1/pbi-cli.git
cd pbi-cli
pip install -e ".[dev]"
ruff check src/ tests/ # Lint
mypy src/ # Type check
pytest -m "not e2e" # Run tests (488 tests)
Bundled third-party software
pbi-cli-tool ships with Microsoft Analysis Services client library
assemblies (Microsoft.AnalysisServices.*.dll) inside the PyPI wheel
under src/pbi_cli/dlls/. These binaries are not covered by
pbi-cli's MIT license. They are redistributed unmodified under the
Microsoft Software License Terms for Microsoft Analysis Management
Objects (AMO) and Microsoft Analysis Services - ADOMD.NET. Full terms
are in THIRD_PARTY_LICENSES.md
and the companion NOTICE
file. By installing pbi-cli-tool you agree to those terms in addition
to the MIT License that applies to the rest of the package.
Contributing
Contributions are welcome! Please open an issue first to discuss what you'd like to change.
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Open a pull request
MIT License — bundled Microsoft DLLs are licensed separately, see THIRD_PARTY_LICENSES.md
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 pbi_cli_tool-3.11.1.tar.gz.
File metadata
- Download URL: pbi_cli_tool-3.11.1.tar.gz
- Upload date:
- Size: 3.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41ce15d9309499d586a3164862f936bb6c886ef636ae7eebf328ac75b49835a9
|
|
| MD5 |
347d60822b99773cc53f80d5288a4c29
|
|
| BLAKE2b-256 |
c0d6eccbcd1ffe9d7d6a9b4fdeb251e3083f9485e58be86a0c93a9cc9a6362e8
|
Provenance
The following attestation bundles were made for pbi_cli_tool-3.11.1.tar.gz:
Publisher:
release.yml on MinaSaad1/pbi-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pbi_cli_tool-3.11.1.tar.gz -
Subject digest:
41ce15d9309499d586a3164862f936bb6c886ef636ae7eebf328ac75b49835a9 - Sigstore transparency entry: 1437849145
- Sigstore integration time:
-
Permalink:
MinaSaad1/pbi-cli@26f631b4af45465288e626c41caec7eef469e22f -
Branch / Tag:
refs/tags/v3.11.1 - Owner: https://github.com/MinaSaad1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26f631b4af45465288e626c41caec7eef469e22f -
Trigger Event:
push
-
Statement type:
File details
Details for the file pbi_cli_tool-3.11.1-py3-none-any.whl.
File metadata
- Download URL: pbi_cli_tool-3.11.1-py3-none-any.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5187c7f0db2ad1471bde4d33432bfe6a20023c25525474418d51658465cba286
|
|
| MD5 |
74c16ee06c7fecb3c0245fe3702d85f0
|
|
| BLAKE2b-256 |
6b8e3353e8624a6c6c598b9f2642c18c34d86c1e19fffb967ad5c8e6ba3217ff
|
Provenance
The following attestation bundles were made for pbi_cli_tool-3.11.1-py3-none-any.whl:
Publisher:
release.yml on MinaSaad1/pbi-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pbi_cli_tool-3.11.1-py3-none-any.whl -
Subject digest:
5187c7f0db2ad1471bde4d33432bfe6a20023c25525474418d51658465cba286 - Sigstore transparency entry: 1437849154
- Sigstore integration time:
-
Permalink:
MinaSaad1/pbi-cli@26f631b4af45465288e626c41caec7eef469e22f -
Branch / Tag:
refs/tags/v3.11.1 - Owner: https://github.com/MinaSaad1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@26f631b4af45465288e626c41caec7eef469e22f -
Trigger Event:
push
-
Statement type: