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" (browser login) or "service_principal". When
omitted, 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 (DEFAULT), simulate execution without modifying files or cloud resources. Pass dry_run=False explicitly to apply for real. confirm_each_step: If True, ask the user to approve every step before it runs. Declining (or having no interactive client) stops execution and reports the remaining steps as not run. 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" (browser login) or "service_principal". When omitted,
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". When omitted,
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%). workspace_id: Fabric / Power BI workspace ID holding the dataset. dataset_id: Published semantic model / dataset ID to query. auth_mode: "interactive" or "service_principal". tenant_id: Azure AD tenant ID. client_id: Azure AD client ID. fabric_client: Optional injected FabricClient instance (for testing). 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). max_rows: Maximum number of rows returned to the caller (default 1000, hard ceiling 10000). Prevents bulk extraction of business records into the model context. 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. after: Path to the target PBIP directory. 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 (DEFAULT), validate lint rules without writing to disk. Pass dry_run=False explicitly to persist the measure. runtime_check: Whether to execute the measure against an active engine if connected. measure_writer: Optional custom measure writer callable. Not reachable from an MCP client — the server wires the modeling engine instead. Returns: Dict with success status, lint findings, and modified file paths. |
| simplify_dax_measureA | Rewrite a DAX expression in its shorter, equivalent form. Use this tool when the user asks to:
Args: expression: The DAX expression to simplify. Mutually exclusive with pbip_path. pbip_path: A PBIP project to read the measures from. measure: The measure to simplify. Requires pbip_path. all_measures: Simplify every measure in the project and report which ones could be written shorter. Requires pbip_path. apply_lint: Include the linter verdict before and after, so a rewrite that silences a finding — or creates one — is visible. Returns: Dict with the simplified expression and the rewrites that produced it. The equivalence is structural: the expression is never evaluated against data, so the rewrite changes the shape and not the meaning, and a reader can check it. An expression that could not be parsed comes back unchanged, with the reason. |
| abstract_measuresA | Find the logic that is written more than once in a semantic model. Use this tool when the user asks to:
Args: pbip_path: Path to the root .pbip directory. table: Only look at the measures of this table. min_group_size: How many measures have to share a shape before it is reported. Two is the minimum. Returns: Dict with the groups found and, for each, what the duplication looks like: which measures share it and where exactly they differ. |
| abbreviate_namesA | Propose shorter names for the measures and columns that need them. Use this tool when the user asks to:
Args: pbip_path: Path to the root .pbip directory. kind: "measures", "columns" or "both". max_length: Above this length, a name is a candidate. abbreviate_words: Shorten the words that have a standard abbreviation ("Amount" to "Amt", "Quantity" to "Qty"). drop_filler_words: Drop the words that carry no meaning ("of", "the", "in"). Returns: Dict with the proposals and a rename map ready for plan_change(intent="safe_rename"). |
| 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 (DEFAULT), validate stages and gate checks without triggering actual promotion. Pass dry_run=False explicitly to promote for real — this moves live artifacts between stages. 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 31 tools
Most tools target clearly distinct operations across modeling, reporting, deployment, security, and governance. A few boundaries are softer, such as create_report_from_dataset versus design_report_page_from_requirements, and audit_report_ux_and_storytelling versus optimize_report_performance, but their descriptions generally disambiguate them.
The set is consistently snake_case and mostly follows a verb_noun pattern (e.g., execute_dax_query, create_report_from_dataset, set_sensitivity_labels). Minor deviations exist, such as powerbi_health and pre_deploy_check being noun-first, and inconsistent use of to/in connectors (deploy_to_workspace vs promote_in_pipeline).
With 31 tools, the surface is heavy for an agent to navigate and likely exceeds what is practical for reliable tool selection. Although the server's scope is broad, many advanced modeling and report-design operations could be grouped or layered behind fewer entry points.
The surface covers many lifecycle stages including connection, modeling, reporting, deployment, Git sync, security, and governance. However, there are notable gaps: no delete/remove operations for measures, visuals, roles, or workspace items, and no list/browse/discovery tools for workspaces, datasets, or reports, creating dead ends for common workflows.