Skip to main content
Glama
Microsoft Fabric MCP Server

Microsoft Fabric MCP Server

by Jasuni69

Microsoft Fabric MCP Server

A Python MCP server that lets you manage Microsoft Fabric through natural language in Claude Code or Claude Desktop. 77+ tools covering workspaces, lakehouses, warehouses, SQL, DAX, semantic models, notebooks, pipelines, OneLake, and Microsoft Graph.

Inspired by: https://github.com/Augustab/microsoft_fabric_mcp/tree/main

Quick Start

git clone https://github.com/Jasuni69/ms-core-mcp.git
cd ms-core-mcp
az login
python setup.py

The setup script checks prerequisites, installs dependencies, and configures your Claude client. It safely merges into existing config files without affecting other MCP servers.

Then restart VS Code or Claude Desktop and ask: "List my Fabric workspaces"

Related MCP server: Fabric-Analytics-MCP

Prerequisites

  • Python 3.12+ - Download

  • uv package manager - Install

  • Azure CLI - Install

  • ODBC Driver 18 (optional, for SQL tools) - Download

  • Access to a Microsoft Fabric workspace with Contributor or Admin role

How It Works

You (natural language) --> Claude --> MCP Server --> Fabric REST API --> Your Fabric Resources

Two transport modes:

  • STDIO (default) - fabric_mcp_stdio.py - used by Claude Code and Claude Desktop

  • HTTP - fabric_mcp.py --port 8081 - for custom integrations

Tools (77+)

Workspace & Resource Management (9 tools)

list_workspaces, create_workspace, set_workspace, list_lakehouses, create_lakehouse, set_lakehouse, list_warehouses, create_warehouse, set_warehouse

Delta Table Operations (10 tools)

list_tables, set_table, get_lakehouse_table_schema, get_all_lakehouse_schemas, table_preview, table_schema, describe_history, optimize_delta, vacuum_delta, load_data_from_url

SQL (4 tools)

sql_query, sql_explain, sql_export, get_sql_endpoint

  • Always pass type ("lakehouse" or "warehouse")

  • SQL endpoints are read-only - no DDL/DML

  • New delta tables take 5-10 min to appear in SQL endpoint

  • Requires ODBC Driver 18

Semantic Models & DAX (9 tools)

list_semantic_models, get_semantic_model, get_model_schema, list_measures, get_measure, create_measure, update_measure, delete_measure, analyze_dax_query

Reports (4 tools)

list_reports, get_report, report_export, report_params_list

Power BI (2 tools)

semantic_model_refresh, dax_query

Notebooks (16 tools)

list_notebooks, create_notebook, get_notebook_content, update_notebook_cell, create_pyspark_notebook, create_fabric_notebook, generate_pyspark_code, generate_fabric_code, validate_pyspark_code, validate_fabric_code, analyze_notebook_performance, run_notebook_job, get_run_status, cancel_notebook_job, install_requirements, install_wheel, cluster_info

Pipelines & Scheduling (8 tools)

pipeline_run, pipeline_status, pipeline_logs, create_data_pipeline, get_pipeline_definition, dataflow_refresh, schedule_list, schedule_set

OneLake File Operations (7 tools)

onelake_ls, onelake_read, onelake_write, onelake_rm, onelake_create_shortcut, onelake_list_shortcuts, onelake_delete_shortcut

Items & Permissions (4 tools)

resolve_item, list_items, get_permissions, set_permissions

Microsoft Graph (8 tools)

graph_user, graph_mail, graph_teams_message, graph_teams_message_alias, graph_drive, save_teams_channel_alias, list_teams_channel_aliases, delete_teams_channel_alias

Session (1 tool)

clear_context

Example Usage

"List all my Fabric workspaces"
"Set workspace to Analytics-Prod"
"Show me all tables in the sales lakehouse"
"What are the top 10 customers by revenue?"
"Create a DAX measure for total sales"
"Generate a PySpark ETL notebook"
"Run the daily pipeline and check status"

Manual Setup (without setup.py)

Claude Code (VS Code)

Create .mcp.json in the project root:

{
  "mcpServers": {
    "ms-fabric-core-tools-mcp": {
      "command": "uv",
      "args": ["--directory", "/full/path/to/ms-core-mcp", "run", "fabric_mcp_stdio.py"]
    }
  }
}

Add to ~/.claude/settings.json:

{
  "enableAllProjectMcpServers": true
}

Claude Desktop

Add to your claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ms-fabric-core-tools-mcp": {
      "command": "/full/path/to/uv",
      "args": ["--directory", "/full/path/to/ms-core-mcp", "run", "fabric_mcp_stdio.py"]
    }
  }
}

Note: Claude Desktop needs the full path to uv since it may not inherit your shell PATH.

Project Structure

ms-core-mcp/
  fabric_mcp.py          # HTTP server entry point
  fabric_mcp_stdio.py    # STDIO entry point (Claude Code / Desktop)
  setup.py               # Automated setup script
  pyproject.toml          # Dependencies
  CLAUDE.md              # AI assistant instructions
  tools/                 # MCP tool definitions
  helpers/
    clients/             # Fabric API, SQL, OneLake clients
    formatters/          # Output formatters
    utils/               # Auth, context, validators
  tests/                 # Tests
  docs/                  # Documentation

Known Limitations

  • SQL endpoints are read-only - use PySpark notebooks for writes

  • SQL sync delay - new tables take 5-10 min to appear

  • API rate limits - 50 requests/min/user (Fabric), 120 queries/min/user (Power BI)

  • Notebook lakehouse attachment - must be done manually in Fabric UI

  • ODBC Driver 18 required for sql_query, table_preview, sql_explain tools

  • Report creation not supported - can list, export, view params only

Troubleshooting

"Command not found: uv" - Install uv, then restart terminal

"Not authenticated" - Run az login, then verify with:

az account get-access-token --resource https://api.fabric.microsoft.com/

"Database not found" on SQL queries - SQL endpoint may not be provisioned yet. Wait a few minutes or check the lakehouse has tables in the Fabric portal.

MCP tools not appearing in Claude Desktop - Use full path to uv in config. Check Task Manager to fully close and restart Claude Desktop.

Only some tools showing - Check for import errors by running:

uv run python -c "from tools import *; from helpers.utils.context import mcp; print(f'Tools: {len(mcp._tool_manager._tools)}')"

Testing

uv run pytest tests/

License

MIT

Available Tools

83 tools
analyze_dax_queryA

Analyze a DAX query for performance insights and execution plan.

This tool executes a DAX query and returns performance metrics including
execution time, scan counts, and optionally the query execution plan.

Args:
    dax_query: DAX query to analyze
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    include_execution_plan: Whether to include detailed execution plan (default: True)
    ctx: Context object containing client information

Returns:
    A dictionary containing query results, execution metrics, and optionally the execution plan.

Inputs: dax_query (required), model, workspace, include_execution_plan.

analyze_notebook_performanceB

Analyze a notebook's code for performance optimization opportunities in Fabric.

Args:
    workspace: Name or ID of the workspace
    notebook_id: ID or name of the notebook
    ctx: Context object containing client information
Returns:
    A string containing performance analysis and optimization recommendations.

Inputs: workspace (required), notebook_id (required).

cancel_notebook_jobB

Cancel a running notebook job instance.

Inputs: job_id, notebook, workspace.

clear_contextA

Clear the current session context.

Returns:
    A string confirming the context has been cleared.

Inputs: no named parameters.

cluster_infoC

Retrieve Spark cluster information for the workspace.

Inputs: workspace.

create_data_pipelineA
Create a Data Pipeline in a Fabric workspace with custom activities and dependencies.

Perfect for orchestrating medallion architecture workflows (Bronze → Silver → Gold).

Args:
    pipeline_name: Name for the pipeline
    pipeline_definition: Pipeline JSON definition with activities and dependencies
    workspace: Workspace name or ID (optional, uses context if not provided)
    description: Optional description for the pipeline
    ctx: Context object

Returns:
    Dictionary with pipeline details including ID and status

Example - Bronze to Silver to Gold cascade:
    pipeline_definition = {
        "properties": {
            "activities": [
                {
                    "name": "Bronze_Ingestion",
                    "type": "Notebook",
                    "typeProperties": {
                        "notebook": {"name": "bronze_ingest_notebook"}
                    },
                    "dependsOn": []
                },
                {
                    "name": "Silver_Transform",
                    "type": "Notebook",
                    "typeProperties": {
                        "notebook": {"name": "silver_transform_notebook"}
                    },
                    "dependsOn": [
                        {
                            "activity": "Bronze_Ingestion",
                            "dependencyConditions": ["Succeeded"]
                        }
                    ]
                },
                {
                    "name": "Gold_Transform",
                    "type": "Notebook",
                    "typeProperties": {
                        "notebook": {"name": "gold_transform_notebook"}
                    },
                    "dependsOn": [
                        {
                            "activity": "Silver_Transform",
                            "dependencyConditions": ["Succeeded"]
                        }
                    ]
                }
            ]
        }
    }

    create_data_pipeline(
        pipeline_name="Medallion_ETL_Pipeline",
        pipeline_definition=pipeline_definition,
        workspace="PROD-Analytics",
        description="Orchestrates Bronze → Silver → Gold transformations"
    )

Inputs: pipeline_name (required), pipeline_definition (required), workspace, description.

create_fabric_notebookB

Create a new notebook optimized for Microsoft Fabric using advanced templates.

Args:
    workspace: Name or ID of the workspace
    notebook_name: Name of the new notebook
    template_type: Type of Fabric template ('fabric_integration', 'streaming')
    ctx: Context object containing client information
Returns:
    A string containing the ID of the created notebook or an error message.

Inputs: workspace (required), notebook_name (required), template_type.

create_lakehouseC

Create a new lakehouse in a Fabric workspace.

Args:
    name: Name of the lakehouse
    workspace: Name or ID of the workspace (optional)
    description: Description of the lakehouse (optional)
    ctx: Context object containing client information
Returns:
    A string confirming the lakehouse has been created or an error message.

Inputs: name (required), folder_id, workspace, description.

create_measureA

Create a new DAX measure in a semantic model.

Args:
    measure_name: Name of the measure to create
    dax_expression: DAX formula for the measure
    table_name: Name of the table to add the measure to
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    format_string: Display format string (e.g., "#,0.00", "0.0%") (optional)
    description: Description of the measure (optional)
    is_hidden: Whether to hide the measure from client tools (default: False)
    ctx: Context object containing client information

Returns:
    A dictionary containing success status and the created measure details.

Inputs: table_name (required), measure_name (required), dax_expression (required), model, +4 more.

create_notebookA

Create a new notebook in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace
    notebook_name: Name of the new notebook
    content: Content of the notebook (in JSON format). If not provided, creates a basic Hello Fabric notebook.
    ctx: Context object containing client information
Returns:
    A string containing the ID of the created notebook or an error message.

Inputs: workspace (required), content, notebook_name.

create_pyspark_notebookB

Create a new PySpark notebook from a template in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace
    notebook_name: Name of the new notebook
    template_type: Type of PySpark template ('basic', 'etl', 'analytics', 'ml')
    ctx: Context object containing client information
Returns:
    A string containing the ID of the created notebook or an error message.

Inputs: workspace (required), notebook_name (required), template_type.

create_warehouseB

Create a new warehouse in a Fabric workspace.

Args:
    name: Name of the warehouse
    workspace: Name or ID of the workspace (optional)
    description: Description of the warehouse (optional)
    ctx: Context object containing client information
Returns:
    A string confirming the warehouse has been created or an error message.

Inputs: name (required), folder_id, workspace, description.

create_workspaceA

Create a new Fabric workspace.

Args:
    display_name: Workspace display name
    capacity_id: Optional capacity ID
    description: Optional description
    domain_id: Optional domain identifier
    ctx: Context object containing client information
Returns:
    A string confirming creation or an error message.

Inputs: display_name (required), domain_id, capacity_id, description.

dataflow_refreshD

Inputs: dataflow, workspace.

dax_queryD

Inputs: query (required), dataset (required), workspace.

delete_measureB

Delete a DAX measure from a semantic model.

Args:
    measure_name: Name of the measure to delete
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    ctx: Context object containing client information

Returns:
    A dictionary containing success status and deletion details.

Inputs: measure_name (required), model, workspace.

delete_teams_channel_aliasB

Delete a saved Teams channel alias.

Inputs: alias (required).

describe_historyD

Inputs: limit, table, lakehouse, workspace.

generate_fabric_codeA

Generate Fabric-specific PySpark code for lakehouse operations.

Args:
    operation: Type of operation ('read_lakehouse', 'write_lakehouse', 'merge_delta', 'performance_monitor')
    lakehouse_name: Name of the lakehouse
    table_name: Name of the source table
    target_table: Name of the target table (for write/merge operations)
    ctx: Context object containing client information
Returns:
    A string containing the generated Fabric-specific PySpark code.

Inputs: operation (required), table_name, target_table, lakehouse_name.

generate_pyspark_codeB

Generate PySpark code for common operations.

Args:
    operation: Type of operation ('read_table', 'write_table', 'transform', 'join', 'aggregate')
    source_table: Source table name (format: lakehouse.table_name)
    target_table: Target table name (format: lakehouse.table_name)
    columns: Comma-separated list of columns
    filter_condition: Filter condition for data
    ctx: Context object containing client information
Returns:
    A string containing the generated PySpark code or an error message.

Inputs: operation (required), columns, source_table, target_table, +1 more.

get_all_lakehouse_schemasD

Inputs: lakehouse (required), workspace.

get_lakehouse_table_schemaD

Inputs: lakehouse (required), workspace (required), table_name.

get_measureA

Get a specific DAX measure definition by name.

Args:
    measure_name: Name of the measure to retrieve
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    ctx: Context object containing client information

Returns:
    The measure definition including DAX expression.

Inputs: measure_name (required), model, workspace.

get_model_schemaB

Get the complete schema of a semantic model including tables, columns, measures, and relationships.

This retrieves the model definition in TMSL format and parses the structure.

Args:
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    ctx: Context object containing client information

Returns:
    A dictionary containing the model schema with tables, columns, measures, and relationships.

Inputs: model, workspace.

get_notebook_contentA

Get the content of a specific notebook in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace
    notebook_id: ID or name of the notebook
    ctx: Context object containing client information
Returns:
    A string containing the notebook content in JSON format or an error message.

Inputs: workspace (required), notebook_id (required).

get_permissionsA

Retrieve the role assignments for a workspace.

Note: Fabric REST API does not support item-level permissions.
This returns workspace-level role assignments instead.

Inputs: item_id (required), workspace (required).

get_pipeline_definitionA
Get the definition of an existing Data Pipeline including activities and dependencies.

Args:
    pipeline: Pipeline name or ID
    workspace: Workspace name or ID (optional, uses context if not provided)
    ctx: Context object

Returns:
    Dictionary with pipeline definition including decoded activities

Example:
    get_pipeline_definition(
        pipeline="Medallion_ETL_Pipeline",
        workspace="PROD-Analytics"
    )

Inputs: pipeline (required), workspace.

get_reportC

Get a specific report by ID.

Args:
    workspace: Name or ID of the workspace (optional)
    report_id: ID of the report (optional)
    ctx: Context object containing client information

Returns:
    A string containing the report details or an error message.

Inputs: report_id, workspace.

get_run_statusC

Poll a notebook job run until completion.

Inputs: job_id, notebook, workspace.

get_semantic_modelA

Get a specific semantic model by ID.

Args:
    workspace: Name or ID of the workspace (optional)
    model_id: ID of the semantic model (optional)
    ctx: Context object containing client information

Returns:
    A string containing the details of the semantic model or an error message.

Inputs: model_id, workspace.

get_sql_endpointB
Retrieve the SQL endpoint for a specified lakehouse or warehouse.

Args:
    workspace: Name or ID of the workspace (optional).
    lakehouse: Name or ID of the lakehouse (optional).
    warehouse: Name or ID of the warehouse (optional).
    type: Type of resource ('lakehouse' or 'warehouse'). If not provided, it will be inferred.
    ctx: Context object containing client information.

Returns:
    A string containing the resource type, name/ID, and its SQL endpoint.

Inputs: type, lakehouse, warehouse, workspace.

graph_driveA

List files in a OneDrive or SharePoint drive via Microsoft Graph.

Inputs: drive_id (required), path.

graph_mailA

Send mail via Microsoft Graph on behalf of the current identity.

Inputs: to (required), body (required), subject (required).

graph_teams_messageB

Post a message to a Teams channel via Microsoft Graph.

Args:
    team_id: The target Microsoft Teams team identifier.
    channel_id: The channel identifier within the team.
    text: The message body to send.
    content_type: Graph contentType, defaults to "html". Can be "html", "text", "markdown".
    ctx: FastMCP context.

Inputs: text (required), team_id (required), channel_id (required), content_type.

graph_teams_message_aliasA

Post a message to a Teams channel using a saved alias.

Resolves the alias into `(team_id, channel_id)` and forwards to `graph_teams_message`.

Inputs: text (required), alias (required), content_type.

graph_userA

Query Azure AD user profile details via Microsoft Graph.

Inputs: email (required).

install_requirementsC

Install Python requirements for the workspace Spark environment.

Inputs: workspace, requirements_txt.

install_wheelC

Install a wheel package into the workspace Spark environment.

Inputs: wheel_url, workspace.

list_itemsC

List workspace items, optionally filtered by type or search term.

Inputs: top, skip, type, search, +1 more.

list_lakehousesA

List all lakehouses in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace (optional)
    ctx: Context object containing client information

Returns:
    A string containing the list of lakehouses or an error message.

Inputs: workspace.

list_measuresB

List all DAX measures in a semantic model.

Args:
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    ctx: Context object containing client information

Returns:
    A list of measures with their definitions.

Inputs: model, workspace.

list_notebooksA

List all notebooks in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace (optional)
    ctx: Context object containing client information
Returns:
    A string containing the list of notebooks or an error message.

Inputs: workspace.

list_reportsC

List all reports in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace (optional)
    ctx: Context object containing client information
Returns:
    A string containing the list of reports or an error message.

Inputs: workspace.

list_semantic_modelsA

List all semantic models in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace (optional)
    ctx: Context object containing client information

Returns:
    A string containing the list of semantic models or an error message.

Inputs: workspace.

list_tablesD

Inputs: lakehouse, workspace.

list_teams_channel_aliasesA

List all saved Teams channel aliases.

Inputs: no named parameters.

list_warehousesA

List all warehouses in a Fabric workspace.

Args:
    workspace: Name or ID of the workspace (optional)
    ctx: Context object containing client information

Returns:
    A string containing the list of warehouses or an error message.

Inputs: workspace.

list_workspacesA

List all available Fabric workspaces.

Args:
    ctx: Context object containing client information

Returns:
    A string containing the list of workspaces or an error message.

Inputs: no named parameters.

load_data_from_urlB

Load data from a URL into a delta table in a lakehouse via OneLake.

Args:
    url: The URL to download data from (CSV or Parquet supported).
    destination_table: The name of the table to load data into.
    workspace: Name or ID of the workspace (optional).
    lakehouse: Name or ID of the lakehouse (optional).
    warehouse: Name or ID of the warehouse (optional, uses SQL for warehouses).
    ctx: Context object containing client information.
Returns:
    A string confirming the data load or an error message.

Inputs: url (required), destination_table (required), lakehouse, warehouse, +1 more.

onelake_create_shortcutA
Create a OneLake shortcut from one lakehouse to another.

This allows you to reference data from a target lakehouse without duplicating it.
Perfect for medallion architectures where Dev/Test/Prod read from a central Bronze layer.

Args:
    lakehouse: Source lakehouse name or ID (where the shortcut will appear)
    shortcut_name: Name for the shortcut
    shortcut_path: Path in source where shortcut appears (e.g., "Tables", "Files/exports")
    target_workspace: Target workspace name or ID (containing the data)
    target_lakehouse: Target lakehouse name or ID (containing the data)
    target_path: Path in target to link to (e.g., "Tables/customers_raw", "Files/bronze")
    workspace: Source workspace name or ID (optional, uses context if not provided)
    conflict_policy: Action when shortcut exists (Abort, GenerateUniqueName, CreateOrOverwrite, OverwriteOnly)
    ctx: Context object

Returns:
    Dictionary with shortcut details including name, path, and target

Example:
    # Create shortcut from DEV silver lakehouse to central Bronze
    onelake_create_shortcut(
        workspace="DEV-Analytics",
        lakehouse="silver_dev",
        shortcut_name="bronze_customers",
        shortcut_path="Tables",
        target_workspace="RAW-Bronze-Central",
        target_lakehouse="bronze_central",
        target_path="Tables/customers_raw"
    )

Inputs: lakehouse (required), target_path (required), shortcut_name (required), shortcut_path (required), +4 more.

onelake_delete_shortcutA
Delete a OneLake shortcut from a lakehouse.

Args:
    lakehouse: Lakehouse name or ID containing the shortcut
    shortcut_path: Path where shortcut exists (e.g., "Tables", "Files/exports")
    shortcut_name: Name of the shortcut to delete
    workspace: Workspace name or ID (optional, uses context if not provided)
    ctx: Context object

Returns:
    Dictionary with success status

Example:
    onelake_delete_shortcut(
        workspace="DEV-Analytics",
        lakehouse="silver_dev",
        shortcut_path="Tables",
        shortcut_name="bronze_customers"
    )

Inputs: lakehouse (required), shortcut_name (required), shortcut_path (required), workspace.

onelake_list_shortcutsA
List all OneLake shortcuts in a lakehouse.

Args:
    lakehouse: Lakehouse name or ID
    workspace: Workspace name or ID (optional, uses context if not provided)
    ctx: Context object

Returns:
    Dictionary with list of shortcuts

Example:
    onelake_list_shortcuts(
        workspace="DEV-Analytics",
        lakehouse="silver_dev"
    )

Inputs: lakehouse (required), workspace.

onelake_lsC

List files and folders within a OneLake lakehouse path.

Inputs: lakehouse (required), path, workspace.

onelake_readC

Read file contents from OneLake.

Inputs: path (required), lakehouse (required), workspace.

onelake_rmC

Delete a file or directory from OneLake.

Inputs: path (required), lakehouse (required), recursive, workspace.

onelake_writeC

Write text or base64 content to OneLake.

Inputs: path (required), content (required), lakehouse (required), encoding, +3 more.

optimize_deltaD

Inputs: table, lakehouse, workspace, zorder_by.

pipeline_logsD

Inputs: run_id, pipeline, workspace.

pipeline_runD

Inputs: pipeline, workspace, parameters.

pipeline_statusD

Inputs: run_id, pipeline, workspace.

report_exportD

Inputs: format, report, workspace.

report_params_listD

Inputs: report, workspace.

resolve_itemC

Resolve an item name or ID to its canonical ID and metadata.

Inputs: workspace (required), name_or_id (required), type.

run_notebook_jobC

Submit a notebook job run with optional parameters and configuration.

Inputs: notebook, workspace, parameters, configuration.

save_teams_channel_aliasB

Create or update a named alias for a Teams channel (team_id + channel_id).

Inputs: alias (required), team_id (required), channel_id (required).

schedule_listD

Inputs: item, job_type, workspace.

schedule_setD

Inputs: item, job_type, schedule, workspace.

semantic_model_refreshD

Inputs: model, workspace, refresh_type.

set_lakehouseA

Set the current lakehouse for the session.

Args:
    lakehouse: Name or ID of the lakehouse
    ctx: Context object containing client information

Returns:
    A string confirming the lakehouse has been set.

Inputs: lakehouse (required).

set_permissionsA

Add a workspace role assignment (Admin, Member, Contributor, Viewer).

Note: Fabric REST API supports workspace-level roles, not item-level permissions.

Args:
    workspace: Workspace name or ID
    principal_id: User, group, or service principal ID (UUID)
    principal_type: "User", "Group", or "ServicePrincipal"
    role: "Admin", "Member", "Contributor", or "Viewer"

Inputs: workspace (required), principal_id (required), role, principal_type.

set_tableD

Inputs: table_name (required).

set_warehouseB

Set the current warehouse for the session.

Args:
    warehouse: Name or ID of the warehouse
    ctx: Context object containing client information

Returns:
    A string confirming the warehouse has been set.

Inputs: warehouse (required).

set_workspaceB

Set the current workspace for the session.

Args:
    workspace: Name or ID of the workspace
    ctx: Context object containing client information
Returns:
    A string confirming the workspace has been set.

Inputs: workspace (required).

sql_explainB

Retrieve an estimated execution plan for a query.

Inputs: query (required), type, lakehouse, warehouse, +1 more.

sql_exportC

Export query results to OneLake as CSV or Parquet.

Inputs: query (required), target_path (required), type, lakehouse, +5 more.

sql_queryC

Run a SQL query against a lakehouse or warehouse endpoint.

Inputs: query (required), type, max_rows, lakehouse, +2 more.

table_previewD

Inputs: limit, table, lakehouse, workspace.

table_schemaD

Inputs: table, lakehouse, workspace.

update_measureA

Update an existing DAX measure in a semantic model.

Args:
    measure_name: Current name of the measure to update
    workspace: Name or ID of the workspace (optional)
    model: Name or ID of the semantic model (optional)
    dax_expression: New DAX formula (optional)
    format_string: New display format string (optional)
    description: New description (optional)
    is_hidden: New hidden status (optional)
    new_name: New name for the measure (optional)
    ctx: Context object containing client information

Returns:
    A dictionary containing success status and the updated measure details.

Inputs: measure_name (required), model, new_name, is_hidden, +4 more.

update_notebook_cellA

Update a specific cell in a notebook.

Args:
    workspace: Name or ID of the workspace
    notebook_id: ID or name of the notebook
    cell_index: Index of the cell to update (0-based)
    cell_content: New content for the cell
    cell_type: Type of cell ('code' or 'markdown')
    ctx: Context object containing client information
Returns:
    A string confirming the update or an error message.

Inputs: workspace (required), cell_index (required), notebook_id (required), cell_content (required), +1 more.

vacuum_deltaD

Inputs: table, lakehouse, workspace, retain_hours.

validate_fabric_codeC

Validate PySpark code for Microsoft Fabric compatibility and performance.

Args:
    code: PySpark code to validate for Fabric compatibility
    ctx: Context object containing client information
Returns:
    A string containing detailed validation results and Fabric-specific recommendations.

Inputs: code (required).

validate_pyspark_codeB

Validate PySpark code for syntax and best practices.

Args:
    code: PySpark code to validate
    ctx: Context object containing client information
Returns:
    A string containing validation results and suggestions.

Inputs: code (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.1/5.0

    Scored across 83 tools

    Disambiguation2/5

    Several tools have overlapping purposes, such as create_notebook, create_pyspark_notebook, and create_fabric_notebook, or generate_pyspark_code vs generate_fabric_code. dax_query and analyze_dax_query, as well as table_schema and get_lakehouse_table_schema, also blur boundaries. Multiple empty descriptions like vacuum_delta and set_table make selection even more ambiguous.

    Naming Consistency3/5

    Most tools follow a readable snake_case pattern with a rough verb_noun structure like list_*, get_*, create_*, update_*, and delete_*. However, there are notable deviations such as onelake_ls, pipeline_run/status/logs, table_preview, and describe_history. The naming is generally predictable within subgroups but inconsistent across the full set.

    Tool Count1/5

    With 83 tools, this server is far beyond a manageable scope for agent tool selection and exceeds the 50+ extreme threshold. Even though Microsoft Fabric is a broad platform, consolidating this many operations into one MCP server creates significant cognitive overhead. This would be better split into focused servers by domain.

    Completeness2/5

    The tool surface covers many Fabric areas including workspaces, lakehouses, warehouses, notebooks, semantic models, pipelines, OneLake, SQL, and Graph integrations. However, CRUD coverage is incomplete: warehouses and lakehouses lack update/delete, reports lack create/delete, and pipelines lack list/update/delete. These gaps create dead ends for common lifecycle workflows.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A Python-based MCP server that enables interaction with Microsoft Fabric APIs for managing workspaces, lakehouses, warehouses, and tables through natural language.
      17
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      The Fabric-Analytics-MCP server enables AI agents to interact directly with Microsoft Fabric using natural language. It transforms complex data engineering tasks—such as workspace management, data exploration, and job execution—into intuitive, conversational workflows for LLMs like Claude or GitHub
      17 npm
      110
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server for Microsoft Fabric that enables AI agents to query and analyze Lakehouse and Eventhouse data, and manage Eventstreams, using natural language through the MCP interface.
      MIT