list_objectsLABSCO SUMMARY
The model as it actually is, not as the documentation claims.
Because metadata comes from DMV queries against the live instance, relationships and dependencies match what the report is really using. Two things make this safer than handing an assistant a query prompt: syntax can be checked without touching the model, and the obfuscation strategies let you keep sales figures visible while masking customer and product names. Output is capped at 500 rows by default, and the response says so rather than silently trimming.
What it is
MCPBI connects to a locally running tabular model — a PBIX open in Power BI Desktop — through ADOMD.NET. Metadata comes from DMV queries against the live instance, and it runs the DAX you give it, so an assistant can debug and compose measures against the model as it actually is.
What you get
- list_objects — every table, column, measure, and relationship in the model
- get_object_details — properties, data types, relationships, and dependencies for one object
- run_query — a custom DAX query, answered with the results plus totalRows, displayedRows, truncated, and hasMore
- validate_query — DAX syntax checked without executing anything
- analyze_query_performance — execution time, resource usage, and optimization suggestions
- list_functions and get_function_details — DAX functions filtered by category or origin, with signatures, parameter requirements, return type, and DirectQuery compatibility
- Obfuscation strategies for sensitive data: mask everything, mask only text and date fields, or mask only numeric fields
- A row limit that defaults to 500 and is raised with --max-rows
Requirements
Windows, Power BI Desktop with the PBIX file open, and the .NET 8.0 Runtime. Download the prebuilt release and run mcpbi.exe over stdio, or build from source with dotnet build. The server needs the port of the Power BI Desktop instance, passed as --port; the bundled discovery executable finds the running instance and writes PBI_PORT and PBI_DB_ID into a .env file your client can load instead. No account and no key — it connects to a process already running on your machine.
Setup effort
Build from source — clone the repository, then follow the project's own run instructions
USE CASES
Understanding a model you did not build
List every table, measure, and relationship, then open the ones the report actually depends on.
Writing a measure that matches existing conventions
Read the measures already in the model, then check the exact signature of the DAX functions you plan to use.
Iterating on a DAX expression without breaking anything
Check the syntax first, run it once the syntax is clean, and read the row-count metadata that comes back with it.
Finding out why a visual is slow
Run the underlying query through the performance analysis and read the timing and suggestions together.
Sharing query output without leaking customer names
Mask text and date fields while leaving the numbers visible, so the shape of the result survives the redaction.
7 tools
Listed in project docs. Your client may show a different list.
get_object_detailslist_functionsget_function_detailsrun_queryvalidate_queryanalyze_query_performanceBEFORE YOU INSTALL
What to know first
Tools you get
7 tools named in the project's documentation.
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
<YOUR_PATH_TO_RELEASE>\mcpbi.exe --port <YOUR_PBI_PORT>MCP Clients
Roo Code
{
"mcpServers": {
"mcpbi-dev": {
"type": "stdio",
"command": "dotnet",
"cwd": "<YOUR_PATH_TO_MCPBI>",
"envFile": "<YOUR_PATH_TO_MCPBI>\\.env",
"args": [
"exec",
"<YOUR_PATH_TO_MCPBI>\\pbi-local-mcp\\bin\\Debug\\net8.0\\pbi-local-mcp.dll"
],
"disabled": false
}
}
}