Skip to content

Power BI MCP: re-auth fails after token expiry (no refresh token from Fabric endpoint) #1965

Description

@ericchansen

Summary

The powerbi-remote MCP server (Fabric Power BI endpoint) fails to re-authenticate after the access token expires (~1 hour), producing AADSTS50011 (redirect URI mismatch). This blocks all Power BI tool calls in sessions longer than 1 hour.

Dataverse MCP servers do not have this issue because they receive refresh tokens.

Reproduction

  1. Start a new CLI session with a plugin that defines a type: "http" Power BI MCP server:
    {
      "powerbi-remote": {
        "type": "http",
        "url": "https://api.fabric.microsoft.com/v1/mcp/powerbi"
      }
    }
  2. Authenticate when the browser prompt appears at session start — this succeeds.
  3. Wait ~1 hour for the access token to expire (or work in the session until it expires naturally).
  4. Call any Power BI tool (e.g., ExecuteQuery, GetSemanticModelSchema).
  5. A new browser login prompt appears, then fails with:
    AADSTS50011: The redirect URI 'http://127.0.0.1:60759/' specified in the request
    does not match the redirect URIs configured for the application 'aebc6443-996d-45c2-90f0-388ff96faa56'.
    

Root Cause

Inspecting ~/.copilot/mcp-oauth-config/, the cached OAuth data reveals the difference:

Property Power BI (Fabric) Dataverse
accessToken Present Present
refreshToken Missing Present
Re-auth on expiry Full browser flow, FAILS Silent token refresh, works

When the Power BI access token expires:

  1. There is no refresh token, so the CLI must do a full authorization code flow.
  2. The CLI opens a local HTTP server on a new random port (e.g., :60759).
  3. The Azure AD app (aebc6443-...) only has the original port (e.g., :53820 from session start) registered.
  4. Azure AD rejects the new redirect URI.

Dataverse avoids this entirely by issuing a refresh token, allowing silent renewal without a browser flow.

Expected Behavior

Power BI tools should continue working after the initial 1-hour token expires, either by:

  1. Obtaining a refresh token from the Fabric endpoint (preferred — matches Dataverse behavior)
  2. Reusing the original redirect URI port when re-authentication is required
  3. Re-registering the new redirect URI via Dynamic Client Registration before attempting re-auth

Environment

  • CLI Version: 1.0.4
  • OS: Windows 11
  • Plugins affected: Any plugin using type: "http" with the Fabric Power BI endpoint
  • Not affected: Dataverse MCP servers (they have refresh tokens), stdio MCP servers

Workaround

Restart the CLI session to get a fresh token. All Power BI calls must complete within ~1 hour of session start.

Activity

FranFdezColoma commented on Mar 18, 2026

@FranFdezColoma

Same problem here with Dataverse MCP server, I can see the refreshtoken param but still expires after 1 hour and need to restart terminal

added
area:authenticationLogin, OAuth, device auth, token management, and keychain integration
on Apr 6, 2026
added
area:mcpMCP server configuration, discovery, connectivity, OAuth, policy, and registry
on Apr 6, 2026

examon commented on Apr 8, 2026

@examon

This appears to have been addressed across several releases starting in v1.0.4, with additional OAuth fixes through v1.0.17. The CLI now handles MCP OAuth re-authentication more reliably, including avoiding redirect URI mismatch failures during re-auth, requesting offline_access when supported so Entra ID can issue refresh tokens, and adding /mcp auth in v1.0.15 as a manual re-auth fallback. If you still see this on the latest version, please reopen the issue with your current MCP server/config details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:authenticationLogin, OAuth, device auth, token management, and keychain integrationarea:mcpMCP server configuration, discovery, connectivity, OAuth, policy, and registry

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions