powerbi-orchestrator-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PBI_AUTH_MODE | Yes | Authentication mode for Power BI. In the example configuration it is set to 'interactive'. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connect_targetA | Connect to a Power BI target and initialize an orchestrator session. Use this tool when the user asks to:
Args: target_type: One of "pbi_desktop", "fabric_workspace", "pbip_folder", "pbix_file". target_ref: Reference path (for PBIP/PBIX) or workspace UUID (for Fabric). auth_mode: "interactive" (default, browser login) or "service_principal". tenant_id: Azure AD tenant ID (required when auth_mode is service_principal). Returns: ConnectResult with session_id, engines_available status, and any diagnostic warnings. |
| plan_changeA | Create a versionable, multi-step execution plan from an intent template. Use this tool when the user asks to:
Args: intent: One of the supported templates ("safe_rename", "audit", "deploy", "dax_regression"). options: Template-specific arguments (e.g. for safe_rename: old_path, new_path, scope). May also contain PlanOptions fields (auto_rollback, max_impact_threshold, dry_run_first). Returns: PlanResult with plan_id, plan_yaml, steps, risk_score, estimated_changes. |
| apply_planA | Execute an approved plan with automatic rollback on step failure. Use this tool when the user asks to:
Args: plan_id: ID of the plan previously created by plan_change. dry_run: If True, simulate execution without modifying files or cloud resources. confirm_each_step: Reserved hook for interactive step confirmations. Returns: ApplyResult with execution status, executed steps, and rollback details if needed. |
| audit_model_and_reportA | Composite quality and compliance audit on a Power BI project (PBIP). Use this tool when the user asks to:
Args: pbip_path: Path to the root .pbip directory or folder. bpa_ruleset: Best practice ruleset to run ("default", "strict", "lenient"). dax_measures_json: Optional JSON string or dictionary mapping measure names to DAX expressions. bpa: Whether to execute Tabular BPA checks. dax_lint: Whether to execute static DAX linting checks. accessibility: Whether to audit WCAG 2.1 accessibility on report pages. naming: Whether to validate column, measure, and table naming conventions. Returns: Dict with overall score (0-100), pass/fail status, and categorized findings. |
| deploy_to_workspaceA | Deploy a PBIP project to a Fabric/Power BI workspace with pre-deploy gates. Use this tool when the user asks to:
Args: pbip_path: Local filesystem path to the root .pbip directory. workspace_id: Target Fabric / Power BI workspace ID (UUID). refresh_daily_hour: Daily UTC hour (0-23) for scheduled refresh (default: 6 AM UTC). findings_json: Optional list or JSON string of pre-existing audit findings to evaluate. gate_profile: Quality gate profile ("strict", "standard", "lenient"). auth_mode: "interactive" (default, browser login) or "service_principal". tenant_id: Azure AD tenant ID. client_id: Azure AD client ID. client_secret: Azure AD client secret. mock: If True, simulate deployment without calling external APIs. Returns: Dict with deployment status, gate evaluation results, published item IDs, and refresh configuration. |
| run_refreshA | Trigger, monitor, and optionally wait for a Power BI dataset refresh. Use this tool when the user asks to:
Args: workspace_id: Fabric / Power BI workspace ID (UUID). dataset_id: Dataset / semantic model ID (UUID). refresh_type: "full", "automatic", "data_only", "calculate", or "clearValues". wait: Whether to poll and wait for the refresh to complete before returning. timeout_s: Maximum wait time in seconds (default: 1800). auth_mode: "interactive" or "service_principal". tenant_id: Azure AD tenant ID. client_id: Azure AD client ID. client_secret: Azure AD client secret. Returns: Dict with refresh status, duration, error details, and rollback status if applicable. |
| run_dax_regressionA | Run DAX queries against a baseline and assert regression tolerance. Use this tool when the user asks to:
Args: baseline_path: Path to the JSON baseline file containing expected results. queries_json: Optional list or JSON string of DAX queries to execute. tolerance_pct: Maximum allowed percentage difference between actual and expected numeric values (default: 0.1%). query_executor: Optional custom query execution callable. Returns: Dict containing diff summary, passed/failed queries, and variance details. |
| execute_dax_queryA | Execute a DAX query against a published Power BI semantic model / Fabric dataset. Use this tool when the user asks to:
Args: workspace_id: Fabric / Power BI workspace ID (UUID). dataset_id: Published semantic model / dataset ID (UUID). dax_query: The DAX query expression (e.g. "EVALUATE TOPN(10, 'Sales')" or "EVALUATE ROW("Total", [Total Sales])"). impersonated_user_name: Optional User Principal Name (UPN) to test RLS rules as that user. auth_mode: "interactive" (default, browser login) or "service_principal". tenant_id: Azure AD tenant ID (required for service_principal). client_id: Azure AD client ID (for service_principal). client_secret: Azure AD client secret (for service_principal). fabric_client: Optional injected FabricClient instance (for testing). Returns: Dict containing query execution results with tabular rows, columns, and execution metadata. |
| diff_modelsA | Compare two semantic models and report structural differences. Use this tool when the user asks to:
Args: before: Path to the baseline PBIP directory or snapshot. after: Path to the target PBIP directory or snapshot. inspector: Optional model inspector callable. Returns: Dict detailing added, removed, and modified tables, columns, measures, and relationships. |
| pre_deploy_checkA | Evaluate audit findings against a pre-deployment quality gate profile. Use this tool when the user asks to:
Args: findings_json: List or JSON string of audit findings to evaluate. profile: Gate profile to evaluate against ("strict", "standard", "lenient"). Returns: Dict with gate decision (passed=True/False), blocking findings, and warnings. |
| generate_data_dictionaryA | Generate Markdown documentation and Mermaid ER diagram for a semantic model. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory. output_path: Optional file path to save the generated Markdown. inspector: Optional model inspector. Returns: Dict with data dictionary markdown content, table count, measure count, and output path. |
| apply_theme_and_accessibility_rulesA | Apply a colorblind-safe theme, backfill visual alt text, and re-audit WCAG. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory. palette: Colorblind-safe palette name ("okabe_ito", "colorbrewer"). auto_backfill_alt_text: Whether to generate missing alt text on visuals. alt_text_template: Format template for generated alt text. Returns: Dict with updated WCAG score, modified visual count, and theme update details. |
| add_measure_with_validationA | Add a DAX measure to a semantic model with automated linting and validation. Use this tool when the user asks to:
Args: target: Target PBIP directory or TMDL path. measure_name: Name of the measure to create. table: Target table where the measure will reside. expression: DAX formula for the measure (e.g. "DIVIDE([Total Sales], [Units], 0)"). format_string: Format string (e.g. "$#,##0.00", "0.0%"). description: Measure documentation or business description. is_hidden: Whether the measure should be hidden in report view. fail_on_severity: Minimum lint severity that blocks creation ("error", "warning", "info"). dry_run: If True, validate lint rules without writing to disk. runtime_check: Whether to execute the measure against an active engine if connected. measure_writer: Optional custom measure writer callable. Returns: Dict with success status, lint findings, and modified file paths. |
| create_report_from_datasetA | Scaffold a PBIR report folder and layout from an existing semantic model. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory containing the dataset. page_name: Name of the initial report page (default: "Overview"). visual_count: Number of starter visuals to generate. theme: Theme name to apply (default: "okabe_ito"). include_card: Whether to generate a top-line KPI card visual. inspector: Optional model inspector. Returns: Dict with created page path, visual IDs, and scaffolded report files. |
| edit_report_visualA | Modify a visualContainer in a PBIR report page (type, fields, formatting, layout). Use this tool when the user asks to:
Args: pbip_path: Path to the root .pbip directory. page_name: Name of the page containing the visual. visual_id: Unique ID of the visualContainer to edit. type: New visual type if changing (e.g. "barChart", "lineChart", "card"). fields_json: Optional dict or JSON string specifying field bindings to update. format_json: Optional dict or JSON string specifying formatting options. position_json: Optional dict or JSON string with x, y, width, height layout. alt_text: New alt text for accessibility. is_hidden: Whether to hide the visualContainer. Returns: Dict with success status, changes applied, and page path. |
| refactor_to_calculation_groupsA | Consolidate repetitive measures (e.g. YTD, QTD, PY) into calculation groups. Use this tool when the user asks to:
Args: target: Target PBIP directory or TMDL path. min_candidates: Minimum measure patterns needed to trigger consolidation. reconcile_strategy: "strict" or "lenient". preserve_originals: Whether to keep original measures alongside the calculation group. auto_apply: If True, write calculation items immediately; if False, return proposed refactoring plan. inspector: Optional model inspector. measure_writer: Optional measure writer callable. Returns: Dict with proposed or applied calculation items, candidate measures, and impact assessment. |
| select_visuals_for_kpisA | Recommend optimal visual types and chart configurations for given KPIs. Use this tool when the user asks to:
Args: kpis_json: List of KPIs or JSON string (each with name, semantic_type, fields, etc.). audience: Target persona ("executive", "analytical", "operational"). max_results: Maximum number of alternative visual recommendations per KPI. inspector: Optional model inspector providing column cardinality and schema info. Returns: Dict with recommended primary visual, alternatives, and rationale for each KPI. |
| design_report_page_from_requirementsA | Synthesize a complete PBIR report page layout from a natural language brief. Use this tool when the user asks to:
Args: pbip_path: Path to the target .pbip directory. brief: Natural language description of what the report page should convey. page_name: Display name for the newly created report page (default: "Overview"). audience: Target audience ("executive", "analytical", "operational"). palette: Color palette name (default: "okabe_ito"). inspector: Optional model inspector for schema context. Returns: Dict containing synthesized visual containers, positions, and page metadata. |
| optimize_report_performanceA | Analyze PBIR report pages for visual performance bottlenecks and anti-patterns. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory. target_load_ms: Desired maximum page load latency in milliseconds (default: 5000 ms). Returns: Dict with performance score (0-100), estimated load time, and actionable recommendations. |
| audit_report_ux_and_storytellingA | Evaluate report storytelling, visual hierarchy, cognitive load, and UX design. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory. page_name: Optional specific page name to audit; audits all pages if omitted. audience_assumed: Target audience ("executive", "analytical", "operational"). strictness: Scoring strictness ("lenient", "standard", "strict"). Returns: Dict with UX score (0-100), category breakdowns (hierarchy, density, narrative), and suggestions. |
| screenshot_report_pagesA | Capture screenshots or structural wireframes of Power BI report pages. Use this tool when the user asks to:
Args: pbip_path: Path to the .pbip directory. pages: Optional list of specific page names to capture. format: Output format ("png", "svg", "pdf"). resolution: Target resolution ("desktop", "mobile", "tablet"). output_dir: Directory where captured images are written. wait_ms: Time in ms to wait for visual rendering. Returns: Dict with output image paths, warnings, and rendering metadata. |
| create_semantic_model_from_schemaA | Generate a TMDL semantic model and PBIP project from a declarative schema spec. Use this tool when the user asks to:
Args: spec_yaml: YAML specification of tables, columns, types, and relationships. spec_json: JSON specification (either as a string or a structured object/dict). output_pbip_path: Target directory to write the generated .pbip project. dry_run: If True, validate specification without writing files to disk. Returns: Dict with tables created, relationships created, hierarchies created, and validation status. |
| setup_rls_and_rolesA | Configure Row-Level Security (RLS) roles and validation rules in a TMDL model. Use this tool when the user asks to:
Args: target: Target PBIP directory or TMDL path. spec_yaml: YAML specification of security roles, members, and DAX filters. spec_json: JSON specification (either as a string or a structured object/dict). dry_run: If True, validate role specification without writing to disk. rollback_on_test_failure: Whether to revert modifications if test queries fail. Returns: Dict with roles created, test query outcomes, and rollback status if applicable. |
| promote_in_pipelineA | Promote artifacts across Microsoft Fabric Deployment Pipeline stages. Use this tool when the user asks to:
Args: pipeline_id: Fabric deployment pipeline ID (UUID). source_stage: Source stage ("dev", "test", "prod"). target_stage: Target stage ("test", "prod"). items: Optional list of specific item IDs to promote. Promotes all if omitted. dry_run: If True, validate stages and gate checks without triggering actual promotion. Returns: Dict with promotion status, gate outcomes, and affected items. |
| commit_workspace_to_gitA | Export and commit a Fabric workspace into a local Git repository. Use this tool when the user asks to:
Args: workspace_id: Source Fabric workspace ID (UUID). output_repo_path: Local path to destination Git repository. branch: Git branch to commit into. commit_message: Commit message describing the snapshot. exclude_items: Optional list of item IDs to exclude. dry_run: If True, inspect items without creating git commits. Returns: Dict with committed items, commit SHA, and repository status. |
| sync_git_to_workspaceA | Deploy a local Git repository with PBIP projects to a Fabric workspace. Use this tool when the user asks to:
Args: repo_path: Path to the local Git repository. workspace_id: Target Fabric workspace ID (UUID). branch_or_commit: Git ref to sync (default: "HEAD"). conflict_resolution: Conflict handling strategy ("manual", etc.). dry_run: If True, calculate changes without publishing. Returns: Dict with synchronized items, skipped items, and deployment results. |
| set_sensitivity_labelsA | Apply Microsoft Purview information protection sensitivity labels to items. Use this tool when the user asks to:
Args: items: List of dicts specifying item IDs and types (e.g. [{"id": "...", "type": "Report"}]). label_id: Microsoft Purview label GUID. label_name: Display name of the sensitivity label. admin_scopes: Optional list of administrative authorization scopes. redact_names: Whether to redact item names in returned logs for security. dry_run: If True, validate permissions without applying labels. Returns: Dict with updated items, failed items, and compliance status. |
| powerbi_healthA | Diagnose orchestrator health, detected modeling engines, and storage readiness. Use this tool when the user asks to:
Args: include_engine_details: Whether to return full diagnostic info and remediation tips for each engine. Returns: Dict with system status, engine availability matrix, active store counts, and remediation advice. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 28 tools
Most tools target distinct operations (plan vs apply, run_refresh vs execute_dax_query, diff_models vs audit), and detailed descriptions clarify boundaries. There is notable overlap among the report-generation tools (create_report_from_dataset vs design_report_page_from_requirements) and among the multiple audit tools (audit_model_and_report, audit_report_ux_and_storytelling, optimize_report_performance), which could cause occasional misselection.
The set overwhelmingly follows a snake_case verb_noun pattern (plan_change, apply_plan, connect_target, deploy_to_workspace, promote_in_pipeline). A couple of tools break the pattern with noun-first/phrase names like pre_deploy_check and powerbi_health, but these are minor deviations and still readable.
28 tools is on the heavy side and pushes toward the borderline-heavy band. However, the server spans many genuinely distinct domains (connection, planning, DAX, auditing, report design, accessibility, Git sync, RLS, deployment, security labels), so most tools earn their place rather than being redundant.
The surface covers an unusually full lifecycle: connect/plan/apply, DAX execution and regression, model/report creation, editing, auditing, deployment, Git bidirectional sync, RLS, and sensitivity labeling. The main gap is destructive/removal operations (no delete_measure, delete_visual, delete_role, disconnect), which agents may need alongside the abundant create/edit tools.