Unified MCP server for local Power BI PBIR/PBIP report authoring plus Microsoft's Power BI Modeling MCP proxy
22 tools with consistent verb-noun naming and complete JSON schemas. Descriptions present but generic (avg ~100 chars, below 194-char baseline). All tools have input schemas with type definitions and required arrays. Critical gaps: NO parameter descriptions (0/22 tools have param-level docs), NO output schemas documented, NO error handling guidance, NO security/permission declarations. Parameter names are clear (path, pageName, visualName) but lack inline constraints (enums, ranges, formats). Tools follow single-responsibility principle well. Composition is sound, tools chain naturally (open_report_project → get_report_structure → find_visuals → create_visual). Missing: pagination guidance, idempotency markers, recovery hints.
Bind semantic-model columns, measures, or hierarchies into explicit data roles on a visual with upfront binding validation.
Clone a PBIR report project to a new report name in the same parent directory.
Create a new report page and insert it into pages.json.
Create a new PBIR/PBIP report scaffold as a local companion authoring project.
Create a textbox visual for page titles or narrative text.
Create a visual container on a page with a specific Power BI visual preset and layout.
Delete a report page and remove it from pages.json.
ZERO parameter descriptions across all 22 tools. Parameters like 'path', 'pageName', 'visualType', 'bindings' lack inline documentation. LLMs cannot infer whether 'path' accepts PBIP file, .Report folder, or definition.pbir, the description says 'Optional PBIP file, .Report folder, or definition.pbir path' but this is buried in tool description, not param-level. Violates pattern:tool-description baseline (100% of A+ tools have param descriptions).
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2025-06-18+ | v2 |
Delete a verified PBIR report project directory and its PBIP file within configured report roots. Does not delete the semantic model folder.
Delete a visual from a page.
Duplicate an existing page, including its visuals, with a new page ID.
Find existing visuals by page, title, title fragment, text fragment, or visual type so an agent can edit them precisely.
Return authoritative unified MCP capabilities, security mode, transport details, report visual presets, and upstream dependency state.
Return non-secret diagnostics about the unified MCP server, environment, active report project, security mode, and upstream modeling MCP health.
Inspect one report project's key metadata, dataset reference, and pages.
Inspect the current PBIR structure, including pages, visuals, bindings, theme references, bookmarks, and sibling semantic-model metadata when available.
List report pages in page order.
List PBIR/PBIP report projects discovered under configured report roots.
Open a PBIP file, a .Report folder, or a definition.pbir file and make it the active report project for later report operations.
Rename a report page display name without changing its underlying page ID.
Rename a local PBIR report project directory and its PBIP file without touching the semantic model folder.
Change the visualType of an existing visual container while preserving the container.
Move or resize an existing visual by editing its layout block.
NO output schemas documented. Tools return structured results (via buildToolSuccess/encodeToolResult) but LLMs have no schema to plan downstream calls. E.g., list_report_projects returns a list but no field names, types, or pagination info are visible. Violates pattern:tool baseline (100% of A+ tools have documented return types).
Destructive tools (delete_report_project, delete_page, delete_visual) lack confirmation/dry-run support and error recovery guidance. No mention of what happens on failure or how to undo. Violates pattern:confirmation-request and pattern:recovery-guide.
No enum constraints on string parameters. 'visualType' accepts free-form strings (no enum list visible); 'displayOption' in create_page is unconstrained. LLMs will hallucinate invalid visual types. Should declare valid types: 'clusteredColumnChart', 'lineChart', 'table', etc.
No permission/security declarations. Tools like delete_report_project and bind_visual_fields lack scope hints (e.g., 'requires: write:report'). No audit trail guidance. Violates pattern:scope-declaration and pattern:audit-trail.