Connector guide12-minute read35 MCP tools7 languages

How to Connect Microsoft Power BI to Microsoft Copilot via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

HCBy HelpCode teamUpdated 12 min read Open-source on GitHub

No credit card · 7-day trial · Self-host alternative available

Microsoft Power BI

Microsoft Power BI

Let your AI work with Power BI: list workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, run DAX queries against a model, check data sources, parameters, refresh history and schedules, and start or cancel refreshes. Power BI REST API, signed in with your Microsoft work account.

tools

35

Region

INTL

Category

Analytics

Authentication

OAuth 2.0

Required env vars

MICROSOFT_CLIENT_IDMICROSOFT_CLIENT_SECRETMICROSOFT_TENANT_ID
Install in one click on Cloud

7-day free trial · No credit card

  • 7-day free trial
    No credit card required
  • GDPR & SOC 2 ready
    EU data residency, audit logs
  • Open-source on GitHub
    Open source · AGPL-3.0
  • Works with ChatGPT, Claude, Gemini
    Any MCP-compatible client

Skip the install. Get this working in under 2 minutes.

Start a free trial on cloud.anythingmcp.com, add the Microsoft Power BI in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.

Start free trial

Summary

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Try asking

Example prompts for Microsoft Power BI

Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.

Microsoft Power BI · live via MCP
Share
Opus 4.7

Claude is AI and can make mistakes. Please double-check responses.

💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Microsoft Power BI, paste your credentials, mint an MCP API key and you're done. No Docker, no git clone, no local server.

Microsoft Power BI + Microsoft Copilot

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Prerequisites

See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:

MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET, MICROSOFT_TENANT_ID

Step 1 — Get credentials

Setting up takes about 10 minutes, once. You need a Microsoft work or school account with a Power BI licence (Free, Pro or Premium Per User) and an app registration in Microsoft Entra, which is free. Some organisations only let an admin grant consent.

  1. Open https://entra.microsoft.com, then Applications, App registrations, New registration. The app registration of another Microsoft connector can be reused.
  2. Supported account types: Accounts in this organizational directory only is the usual choice. Power BI works only with work or school accounts, not with personal Microsoft accounts.
  3. Redirect URI: platform Web, https://cloud.anythingmcp.com/api/mcp-oauth/callback on AnythingMCP Cloud, or <your AnythingMCP URL>/api/mcp-oauth/callback when you host AnythingMCP yourself. It must match character for character, otherwise Microsoft answers AADSTS50011.
  4. API permissions, Add a permission, Power BI Service, Delegated permissions: tick Workspace.Read.All, Dataset.ReadWrite.All, Report.Read.All, Dashboard.Read.All, Dataflow.ReadWrite.All, Gateway.Read.All and App.Read.All. For a connector that may only read, take Dataset.Read.All and Dataflow.Read.All instead. Then click Grant admin consent if your organisation does not let users consent for themselves.
  5. Certificates & secrets, New client secret: copy the secret's Value (shown once), not the Secret ID.
  6. Paste the Application (client) ID into MICROSOFT_CLIENT_ID and the secret value into MICROSOFT_CLIENT_SECRET. Set MICROSOFT_TENANT_ID to the Directory (tenant) ID, to your domain such as contoso.onmicrosoft.com, or to organizations for a multi-tenant app; common and consumers do not apply. Install the connector.
  7. On the connector page click Authorize with Provider and sign in with a user who has a Power BI licence. The refresh token is stored encrypted and access tokens are renewed automatically. Run power_bi_list_workspaces to check.

Scope: the connector asks for https://analysis.windows.net/powerbi/api/.default offline_access. .default grants the Power BI permissions ticked in step 4 (add or remove them there, then authorize again), and offline_access gives the refresh token. Do not add Microsoft Graph scopes to this connector: one token serves one API.

Whose access: the AI sees exactly what the signed-in user may see in the Power BI service. Models with row-level security return only the rows that user may see.

What it reads: workspaces and who has access to them with which role; per workspace the semantic models (datasets), the reports and their pages, the dashboards and their tiles, the dataflows and the imports of .pbix, .rdl, .xlsx or .json files; the content of the user's My workspace, which has no workspace id, through power_bi_list_my_datasets, power_bi_list_my_reports and power_bi_list_my_dashboards; installed apps with their reports and dashboards; the data sources and Power Query parameters of a model; refresh history (a failed refresh carries its error in serviceExceptionJson), the details of an enhanced refresh and the refresh schedule; refresh transactions and data sources of dataflows; the on-premises gateways the user administers, their data sources and whether a gateway can reach one of them.

DAX queries: power_bi_execute_dax_query answers questions with numbers from a semantic model. It needs the tenant setting Dataset Execute Queries REST API (called Semantic model Execute Queries REST API in newer admin portals; Admin portal, Tenant settings, Integration settings) and Read and Build permission on the model. Models hosted in Azure Analysis Services are not supported. One query per call, starting with EVALUATE (optionally after DEFINE), DAX only. To learn a model, EVALUATE COLUMNSTATISTICS() lists its tables and columns and EVALUATE TOPN(5, 'Table') shows sample rows. The API does not list measures (INFO functions and DMV queries are refused), so the AI asks you for measure names or uses the ones the report shows, and prefers the model's measures to summing raw columns. impersonated_user_name tests another user's view under row-level security and needs write permission on the model.

What it writes: power_bi_refresh_dataset, power_bi_cancel_refresh and power_bi_refresh_dataflow are on at install. A refresh loads the sources and counts toward the daily refresh limit, so the AI confirms with you before starting one. A dataset refresh answers 202 with no body; the new run appears at the top of power_bi_get_refresh_history with status Unknown while it runs. Shared capacity (Pro) allows 8 refreshes a day per model, scheduled ones included, and only notify_option. Options such as type, objects or commit_mode make it an enhanced refresh, which needs Premium, PPU or Fabric capacity and must not send notify_option. Only enhanced refreshes can be followed with power_bi_get_refresh_details and cancelled with power_bi_cancel_refresh.

Switched off at install: power_bi_update_dataset_parameters, which changes Power Query parameters of a model (for example which server or which period it loads) and takes effect at the next refresh. Turn it on per tool only if the AI should do that.

Data formats: lists come as {"value": [...]}. Ids are GUIDs. Times are ISO 8601 in UTC. webUrl opens the item in the Power BI service. DAX results come back in results[0].tables[0].rows, with column keys as Table[Column] and computed columns as [Name].

Paging and filters: list tools return everything at once, except power_bi_list_workspaces and power_bi_list_workspace_users, which page with top and skip. Workspaces can be filtered with OData, for example contains(name,'Sales').

Limits: a DAX query returns one table with at most 100,000 rows or 1,000,000 values, whichever comes first, and 15 MB; each user can run 120 queries per minute. The Power BI REST API throttles per user and per tenant, and a 429 answer carries Retry-After. Premium capacities slow down refreshes when they are overloaded, and a refresh throttled for more than an hour fails.

Common errors: 401 means the authorization expired or was revoked, or the client secret expired: paste a new secret if needed and click Authorize with Provider again. 403 PowerBINotAuthorizedException or Unauthorized means the user has no access to that workspace or item, a permission from step 4 is missing, or for DAX the Build permission or the tenant setting is missing. 404 ItemNotFound or PowerBIEntityNotFound means a wrong id or an item in another workspace. 400 DatasetExecuteQueriesError means the DAX query is invalid; the message from the engine says why. 400 on a refresh means notify_option was sent with enhanced options, enhanced options were used on shared capacity, or a refresh is already running.

The connector does not create, edit or delete reports, dashboards or models, does not upload .pbix files and does not use Microsoft Graph. It does not work with personal Microsoft accounts.

Step 2 — Install the adapter

curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d

Step 3 — Add the connector in Microsoft Copilot

Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide shows YOUR_SERVER_ID.

Microsoft Copilot uses MCP servers through agents built in Copilot Studio: you add AnythingMCP to an agent as a tool, then publish the agent to Microsoft 365 Copilot and Teams. Copilot Studio connects from Microsoft's cloud over Streamable HTTP, which AnythingMCP supports.

  1. In Copilot Studio, open your agent (or create one), go to Tools and choose Add a tool → New tool → Model Context Protocol.
  2. Enter a Server name (for example AnythingMCP), a Server description that says what the connector does, and the Server URL https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID. Copilot Studio uses the description to decide when to call the server.
  3. Under authentication, choose API key, set Type to Header and the header name to X-API-Key, then select Create.
  4. In Add tool, choose Create a new connection, paste an MCP API key from AnythingMCP (MCP Servers → your server → API keys) and select Add to agent.
  5. Try it in the agent's Test pane: ask for something that needs the Microsoft Power BI tools.
  6. Select Publish, then Channels → Microsoft 365 and Microsoft Teams, keep Make agent available in Microsoft Copilot selected and choose Add channel. See agent in Teams installs it for you; in Microsoft 365 Copilot, type @ and pick the agent.

Prefer per-user sign-in? Choose OAuth 2.0 → Dynamic discovery instead of an API key: each user then signs in to AnythingMCP the first time the agent calls it.

Self-hosting? Use your instance's public HTTPS address instead of https://cloud.anythingmcp.com. Copilot Studio connects from Microsoft's cloud, so localhost does not work.

Available tools

ToolWhat it does
power_bi_list_workspacesList the workspaces (groups) the signed-in user can access: id, name, isReadOnly, isOnDedicatedCapacity (Premium or Fabric capacity) and…
power_bi_get_workspaceRead one workspace: name, read-only flag, capacity and default semantic model storage format
power_bi_list_workspace_usersList who has access to a workspace: email or app id, display name, principalType (User, Group, App) and groupUserAccessRight (Admin…
power_bi_list_datasetsList the semantic models (datasets) of a workspace: id, name, configuredBy (owner), isRefreshable, isOnPremGatewayRequired…
power_bi_list_my_datasetsList the semantic models (datasets) in the signed-in user's My workspace
power_bi_get_datasetRead one semantic model (dataset) of a workspace: name, owner (configuredBy), isRefreshable, storage mode, whether it needs a gateway or an…
power_bi_execute_dax_queryRun a DAX query against a semantic model and get the rows back as JSON (results[0].tables[0].rows, keys like "Table[Column]" or "[Measure]")
power_bi_list_dataset_datasourcesList the data sources of a semantic model: datasourceType (Sql, AnalysisServices, SharePointList, Web, File, ...), connectionDetails…
power_bi_list_dataset_parametersList the Power Query parameters of a semantic model: name, type, currentValue, isRequired and suggestedValues
power_bi_get_refresh_historyRefresh history of a semantic model, newest first: requestId, refreshType (Scheduled, OnDemand, ViaApi, ...), startTime, endTime, status…
power_bi_get_refresh_detailsExecution details of one refresh of a semantic model (enhanced refreshes started through the API on Premium, PPU or Fabric capacity)…
power_bi_get_refresh_scheduleThe scheduled refresh of a semantic model: enabled, days, times, localTimeZoneId and notifyOption
power_bi_list_reportsList the reports of a workspace: id, name, reportType (PowerBIReport or PaginatedReport), the datasetId it reads, description and webUrl
power_bi_list_my_reportsList the reports in the signed-in user's My workspace: id, name, type, datasetId and webUrl
power_bi_get_reportRead one report of a workspace: name, type, the datasetId (semantic model) behind it, description and webUrl
power_bi_list_report_pagesList the pages of a Power BI report: name (the internal id used in URLs), displayName and order
power_bi_list_dashboardsList the dashboards of a workspace: id, displayName, isReadOnly and webUrl
power_bi_list_my_dashboardsList the dashboards in the signed-in user's My workspace: id, displayName, isReadOnly and webUrl
power_bi_list_dashboard_tilesList the tiles of a dashboard: id, title, the reportId and datasetId each tile comes from, and its size (rowSpan, colSpan)
power_bi_list_dataflowsList the dataflows (Gen1) of a workspace: objectId, name, description and configuredBy
power_bi_list_dataflow_transactionsRefresh transactions of a dataflow, newest first: id, refreshType, startTime, endTime and status
power_bi_list_dataflow_datasourcesList the data sources a dataflow reads: type, connection details and gateway ids
power_bi_list_gatewaysList the on-premises data gateways the signed-in user administers: id, name, type and gatewayStatus
power_bi_list_gateway_datasourcesList the data sources configured on a gateway: id, datasourceName, datasourceType, connectionDetails and credentialType
power_bi_get_gateway_datasource_statusCheck whether a gateway can reach one of its data sources
power_bi_list_appsList the Power BI apps installed for the signed-in user: id, name, description, publishedBy and lastUpdate
power_bi_get_appRead one installed app: name, description, publisher and last update
power_bi_list_app_reportsList the reports of an installed app (ids are the app copies; datasetId names the semantic model)
power_bi_list_app_dashboardsList the dashboards of an installed app: id, displayName, isReadOnly and webUrl
power_bi_list_importsList the imports (uploads of .pbix, .rdl, .xlsx or .json files) of a workspace: id, name, importState (Publishing, Succeeded, Failed)…
power_bi_get_importRead one import of a workspace: its state and the reports and semantic models it created
power_bi_refresh_datasetStart a refresh of a semantic model
power_bi_cancel_refreshCancel a running enhanced refresh of a semantic model (one started through the API with enhanced options)
power_bi_refresh_dataflowStart a refresh of a dataflow
power_bi_update_dataset_parametersChange Power Query parameter values of a semantic model (for example a server name or a date range)

Example prompts

  • "Which semantic models in the Sales workspace failed their last refresh, and why?"
  • "Using the model behind the Sales Overview report, what was revenue by region in Q3 2026?"
  • "Show me the tables and columns of the Finance model and five sample rows of the Orders table."
  • "List the pages of the Executive Summary report and the tiles of the KPI dashboard."
  • "Show today's refresh history of the Inventory model, then start a refresh once I confirm."

FAQ

Which Copilot is this for? Microsoft 365 Copilot at work, through agents built in Copilot Studio. The Microsoft Copilot app for personal accounts has no option to add your own MCP server.

What do I need? A work account with access to Copilot Studio (a license or a trial) to build the agent. People who use it in Microsoft 365 Copilot or Teams need access to the agent: share it with them, or ask an admin to publish it to the organization. If your organization applies data policies to Power Platform connectors, they cover MCP servers too.

The agent doesn't call the tools. Check that the header name is exactly X-API-Key and that the key belongs to the same MCP server as the URL, and make the server description specific: Copilot Studio uses it to decide when to call the server. Publish the agent again after each change; in an open chat, type "start over" to get the new version.

Next steps

Was this guide helpful?

Your Microsoft Power BI agent is one click away.

Install the connector, paste the key, prompt Microsoft Copilot. Free for 7 days, no credit card.

Related guides

Connectors

How to Connect Microsoft Power BI to ChatGPT via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Connectors

How to Connect Microsoft Power BI to Claude via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Connectors

How to Connect Microsoft Power BI to Cursor via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Connectors

How to Connect Microsoft Power BI to Gemini via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Connectors

How to Connect Microsoft Power BI to Meta Muse via MCP

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.

Connectors

Microsoft Power BI to MCP: DAX Queries, Semantic Models, Reports and Refreshes in any AI Agent

Power BI REST API, signed in with your Microsoft work account: workspaces, semantic models, reports, dashboards, dataflows, gateways and apps, DAX queries against a model, data sources, parameters, refresh history and schedules, and starting or cancelling refreshes. Changing model parameters installs switched off.