Skip to main content
Glama
snahrup

Microsoft Fabric MCP Server

by snahrup

Microsoft Fabric MCP Server

A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with Microsoft Fabric and Power BI services.

Features

  • 📊 Power BI Integration

    • List and query datasets

    • Execute DAX queries

    • Refresh datasets

    • Manage workspaces

  • 🏭 Microsoft Fabric Support

    • Create and manage notebooks

    • Upload data to warehouses

    • Access Fabric workspaces

Related MCP server: Power BI MCP Server

Installation

npm install -g @strainprint/microsoft-fabric-mcp

From Source

git clone https://github.com/strainprint/microsoft-fabric-mcp.git
cd microsoft-fabric-mcp
npm install
npm run build

Configuration

1. Azure App Registration

Create an Azure App Registration with the following permissions:

  • Power BI Service (Delegated or Application):

    • Dataset.Read.All

    • Workspace.Read.All

    • Dataset.Execute.All (for DAX queries)

2. Power BI Tenant Settings

Enable in Power BI Admin Portal → Tenant settings:

  • "Allow service principals to use Power BI APIs"

  • "Service principals can access read-only admin APIs"

3. Environment Variables

Create a .env file or set environment variables:

# Required
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret

# Optional
POWERBI_WORKSPACE_ID=workspace-id  # If not set, uses workspace-agnostic endpoints

4. Claude Desktop Configuration

Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "MicrosoftFabric": {
      "command": "npx",
      "args": [
        "-y",
        "@strainprint/microsoft-fabric-mcp"
      ],
      "env": {
        "AZURE_TENANT_ID": "your-tenant-id",
        "AZURE_CLIENT_ID": "your-client-id",
        "AZURE_CLIENT_SECRET": "your-client-secret",
        "POWERBI_WORKSPACE_ID": "optional-workspace-id"
      }
    }
  }
}

Usage

Once configured, Claude can use commands like:

  • "List my Power BI datasets"

  • "Execute this DAX query on dataset X"

  • "Refresh the sales dataset"

  • "Show me all workspaces"

Available Tools

get_workspaces

Get all accessible Power BI/Fabric workspaces

get_powerbi_datasets

List all datasets in the configured workspace

execute_dax_query

Execute DAX queries against a dataset

{
  "datasetId": "dataset-guid",
  "query": "EVALUATE TOPN(10, 'Sales')"
}

refresh_dataset

Trigger a dataset refresh

{
  "datasetId": "dataset-guid"
}

create_notebook

Create a new Fabric notebook

upload_to_datawarehouse

Upload data to a Fabric data warehouse

Troubleshooting

403 Forbidden Errors

  1. Check Service Principal Permissions

    • Ensure the service principal is added to the Power BI workspace

    • Verify API permissions in Azure Portal

  2. Power BI Tenant Settings

    • Confirm service principals are allowed to use Power BI APIs

    • Check if the service principal is in the allowed security group

  3. Token Issues

    • Verify client secret hasn't expired

    • Ensure correct tenant ID

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT © Strainprint Technologies

Credits

Developed by Steve Adams for the MCP community.

Special thanks to Anthropic for the Model Context Protocol specification.

Available Tools

6 tools
create_notebookC

Create a new notebook in Fabric workspace

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYesThe workspace ID
nameYesName of the notebook
contentYesNotebook content/definition

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Create' implies a write/mutation operation, the description doesn't disclose important behavioral traits: whether this requires specific permissions, what happens on failure, whether notebooks can be overwritten, or any rate limits. For a creation tool with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information. Every word earns its place, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a creation/mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after creation (e.g., returns notebook ID, success/failure indicators), doesn't mention error conditions, and provides minimal behavioral context. For a tool that creates resources, more information about the operation's behavior and outcomes would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with all three parameters clearly documented in the schema itself. The description adds no additional parameter semantics beyond what the schema already provides. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no parameter information in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('new notebook in Fabric workspace'), making the purpose immediately understandable. It doesn't differentiate from sibling tools, but since none of the listed siblings appear to be notebook creation tools, this isn't a significant gap. The description avoids tautology by specifying what's being created and where.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing workspace access), when not to use it, or what alternatives might exist for similar functionality. The agent must infer usage context solely from the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_dax_queryC

Execute a DAX query on a Power BI dataset

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetIdYesThe ID of the dataset
queryYesThe DAX query to execute

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but lacks details on permissions required, rate limits, whether the query is read-only or modifies data, error handling, or expected response format. This is inadequate for a tool that executes queries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of executing queries and lack of annotations or output schema, the description is incomplete. It doesn't cover behavioral aspects like safety, performance, or return values, leaving significant gaps for an AI agent to understand how to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents both parameters ('datasetId' and 'query'). The description adds no additional meaning beyond what's in the schema, such as query syntax examples or dataset ID sourcing. Baseline 3 is appropriate as the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a DAX query') and target resource ('on a Power BI dataset'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'refresh_dataset' or 'get_powerbi_datasets' in terms of specific use cases or scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing a dataset ID from 'get_powerbi_datasets'), appropriate contexts, or limitations compared to siblings like 'create_notebook' for data analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_powerbi_datasetsB

Get all Power BI datasets in the workspace

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves datasets but doesn't mention critical details like whether it's a read-only operation, if it requires authentication, potential rate limits, or what the return format looks like (e.g., list, pagination). This leaves significant gaps for a tool interacting with a data service like Power BI.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that front-loads the essential information ('Get all Power BI datasets in the workspace') with zero waste. It's appropriately sized for a simple tool with no parameters, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of Power BI operations and the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'datasets' entail, how results are returned (e.g., JSON structure, error handling), or prerequisites like workspace access. For a tool in a data analytics context, more detail is needed to ensure correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so there's no need for parameter documentation in the description. The description appropriately doesn't discuss parameters, which is efficient and avoids redundancy. A baseline of 4 is applied since no parameters exist, and the description doesn't add unnecessary information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('all Power BI datasets in the workspace'), making the tool's purpose immediately understandable. However, it doesn't differentiate from potential sibling tools like 'get_workspaces' or 'refresh_dataset', which would require more specificity for a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_workspaces' (which might list workspaces rather than datasets) or 'refresh_dataset' (which modifies datasets). It lacks explicit when-to-use or when-not-to-use instructions, leaving the agent to infer context from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_workspacesB

Get all Fabric/Power BI workspaces

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states what the tool does but doesn't disclose traits like whether it requires authentication, returns paginated results, includes filtering options, or has rate limits. This leaves significant gaps for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It front-loads the core action and resource, making it easy to parse quickly. Every word contributes directly to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema), the description is minimally adequate but lacks depth. Without annotations or output schema, it doesn't explain what 'Get all' entails (e.g., format, scope, limitations), leaving the agent to infer behavior from the name alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't add parameter details, earning a baseline score of 4 for matching the schema's simplicity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'all Fabric/Power BI workspaces', making the purpose unambiguous. It doesn't explicitly differentiate from sibling tools like 'get_powerbi_datasets', but the resource specificity (workspaces vs datasets) provides implicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. While the description implies it retrieves workspace information, it doesn't specify use cases, prerequisites, or contrast with sibling tools like 'create_notebook' or 'refresh_dataset' that might operate on workspaces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_datasetC

Refresh a Power BI dataset

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetIdYesThe ID of the dataset to refresh

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. 'Refresh' implies a mutation/write operation, but the description doesn't disclose whether this requires specific permissions, whether it's asynchronous/synchronous, what happens to dependent reports, or potential rate limits. For a mutation tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple tool with one parameter and gets straight to the point without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'refresh' entails (full/incremental, triggers recalculation), what the response looks like (success/failure indicators), or error conditions. Given the complexity of dataset refresh operations in Power BI, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single 'datasetId' parameter completely. The description adds no additional parameter context beyond what's in the schema (like format examples or where to find dataset IDs). Baseline 3 is appropriate when the schema does all the parameter documentation work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('refresh') and resource ('Power BI dataset'), making the tool's purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools like 'execute_dax_query' or 'upload_to_datawarehouse' that might also interact with datasets in different ways.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing dataset), when refresh is appropriate versus other dataset operations, or what happens after refresh. With siblings like 'get_powerbi_datasets' and 'execute_dax_query', this gap is significant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_to_datawarehouseC

Upload data to a Fabric Data Warehouse

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYesThe workspace ID
warehouseIdYesThe data warehouse ID
tableNameYesName of the table
dataYesArray of data rows to upload

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action ('Upload') which implies a write/mutation operation, but doesn't disclose critical traits like required permissions, whether data is appended/replaced, rate limits, error handling, or what happens on success/failure. This leaves significant gaps for a tool that modifies data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a tool with clear purpose and good schema documentation. Every word earns its place by conveying the essential action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a data mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after upload (success confirmation, error responses), data format requirements, or system constraints. The agent lacks critical context needed to use this tool effectively in production scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional meaning about parameters beyond what's in the schema descriptions. It doesn't explain the relationship between workspaceId/warehouseId/tableName or provide examples of the data array format. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Upload') and target resource ('data to a Fabric Data Warehouse'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'create_notebook' or 'execute_dax_query', which are distinct operations but could be related in a data workflow context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when-not scenarios, or how it relates to sibling tools like 'refresh_dataset' or 'execute_dax_query' in a data pipeline context. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting different resources and actions in the Microsoft Fabric ecosystem. For example, create_notebook handles notebook creation, execute_dax_query runs queries, get_powerbi_datasets retrieves datasets, get_workspaces lists workspaces, refresh_dataset updates datasets, and upload_to_datawarehouse uploads data, with no overlap or ambiguity between them.

Naming Consistency4/5

The tool names follow a mostly consistent verb_noun pattern, such as create_notebook, execute_dax_query, and refresh_dataset. However, there is a minor deviation with get_powerbi_datasets and get_workspaces using 'get' instead of 'list', which is slightly inconsistent but still readable and predictable.

Tool Count5/5

With 6 tools, the server is well-scoped for its purpose of managing Microsoft Fabric resources. Each tool earns its place by covering essential operations like data querying, workspace management, dataset handling, and data uploads, without being overly sparse or bloated.

Completeness4/5

The tool surface provides good coverage for core workflows in Microsoft Fabric, including workspace listing, dataset retrieval and refresh, query execution, notebook creation, and data upload. A minor gap exists in operations like updating or deleting resources, but agents can likely work around this for most tasks.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with Power BI datasets through natural language, allowing users to query data, generate DAX, and get insights without leaving their AI assistant.
    120
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to programmatically manage Power BI workspaces, reports, and dashboards while executing DAX queries and triggering dataset refreshes. It supports secure OAuth2 authentication for operations like report exporting, workspace management, and real-time push dataset updates.
    62
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with Databricks workspaces, running SQL queries, managing jobs, and exploring schemas via the Model Context Protocol.
    1
    GPL 3.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/snahrup/microsoft-fabric-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server