MCP server for interacting with Power BI semantic models via REST API and DAX queries
pbi-mcp exposes 4 tools with basic descriptions and parameter documentation via C# attributes. All tools have descriptions (10-100 chars) and input schemas with typed parameters. However, output schemas are completely undocumented, tools return plain strings with no structure guidance for LLMs. Parameter descriptions are minimal (10-20 chars) and lack format/constraint details. No error handling guidance, no pagination support for list operations, and no tool annotations (readOnlyHint, etc.). The server follows a simple verb_noun naming pattern (ListWorkspaces, ListDatasets, ListTables, ExecuteDax) but descriptions are generic and lack WHEN/WHY context. Composition is reasonable, tools chain naturally (list workspace → list datasets → list tables → execute DAX), but responses lack the IDs and metadata needed for efficient chaining.
Execute a DAX query against a Power BI dataset using the REST API (requires workspace and dataset IDs)
List datasets in a Power BI workspace
List tables and columns in a Power BI dataset
List all Power BI workspaces accessible to the authenticated user
Output schemas completely undocumented. All tools return plain strings with no structure guidance. LLMs cannot parse results or plan downstream calls.
List tools (ListWorkspaces, ListDatasets, ListTables) lack pagination parameters (limit, offset, page_size) and no result count. Large result sets will blow context windows.
Parameter descriptions are minimal (10-20 chars) and lack format/constraint details. E.g., 'The workspace (group) ID' does not explain format, length, or how to obtain it.
No error handling guidance. Tools return plain strings with no recovery hints. If a DAX query fails or workspace ID is invalid, LLM has no actionable error message.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the schema, forcing LLMs to infer safety.