ms-fabric-mcp-server
This MCP server provides comprehensive access to Microsoft Fabric operations through 56+ tools, enabling AI agents to automate workspace management, data processing, and analytics. Note: This is development-focused and includes destructive operations.
Core Capabilities:
Workspace & Item Management: List workspaces, browse/filter/create/rename/move/delete items (notebooks, lakehouses, pipelines), and organize folders
Lakehouse Operations: Create lakehouses, upload/list/delete files, and attach lakehouses to notebooks
Notebook Development: Import local
.ipynbfiles, get/update content, execute as jobs, retrieve execution history and driver logs for debuggingInteractive Spark Sessions (Livy): Create/manage sessions (PySpark, Scala, SparkR), execute code interactively, monitor status, cancel statements, and retrieve logs
Data Pipeline Orchestration: Create pipelines, add activities (Copy, Notebook, Dataflow, custom JSON), manage dependencies, delete activities, and retrieve definitions/run history
Semantic Model & Power BI: Create models, add tables/columns/measures/relationships, refresh models, execute DAX queries, and get metadata (TMSL/TMDL formats)
Dataflow Management: Create dataflows, retrieve definitions, and execute as jobs
Job Monitoring: Run on-demand jobs for any Fabric item, check status, and retrieve results from async operations
SQL Querying (optional with pyodbc): Get SQL endpoints and execute queries/statements
Key Features:
Authentication: Uses Azure DefaultAzureCredential (environment, managed identity, Azure CLI, VS Code, PowerShell)
Integration: Supports VS Code, Claude Desktop, Codex, and programmatic library mode
Debugging: Configurable logging levels and detailed error tracebacks
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ms-fabric-mcp-server List all the notebooks in my 'Sales Analytics' workspace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ms-fabric-mcp-server
A Model Context Protocol (MCP) server for Microsoft Fabric. Exposes Fabric operations (workspaces, notebooks, SQL, Livy, pipelines, jobs) as MCP tools that AI agents can invoke.
⚠️ Warning: This package is intended for development environments only and should not be used in production. It includes tools that can perform destructive operations (e.g.,
delete_item,delete_lakehouse_file,delete_activity_from_pipeline) and execute arbitrary code via Livy Spark sessions. Always review AI-generated tool calls before execution.
Quick Start
The fastest way to use this MCP server is with uvx:
uvx ms-fabric-mcp-serverRelated MCP server: ms_fabric_mcp
Installation
# Using uv (recommended)
uv pip install ms-fabric-mcp-server
# Using pip
pip install ms-fabric-mcp-server
# With SQL support (requires pyodbc)
pip install ms-fabric-mcp-server[sql]
# With OpenTelemetry tracing
pip install ms-fabric-mcp-server[sql,telemetry]Authentication
Uses DefaultAzureCredential from azure-identity - no explicit credential configuration needed. This automatically tries multiple authentication methods:
Environment credentials (
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_CLIENT_SECRET)Managed Identity (when running on Azure)
Azure CLI credentials (
az login)VS Code credentials
Azure PowerShell credentials
No Fabric-specific auth environment variables are needed - it just works if you're authenticated via any of the above methods.
Usage
VS Code Integration
Add to your VS Code MCP settings (.vscode/mcp.json or User settings):
{
"servers": {
"MS Fabric MCP Server": {
"type": "stdio",
"command": "uvx",
"args": ["ms-fabric-mcp-server"]
}
}
}Claude Desktop Integration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"fabric": {
"command": "uvx",
"args": ["ms-fabric-mcp-server"]
}
}
}Codex Integration
Add to your Codex config.toml:
[mcp_servers.ms_fabric_mcp]
command = "uvx"
args = ["ms-fabric-mcp-server"]Running Standalone
# Using uvx (no installation needed)
uvx ms-fabric-mcp-server
# Direct execution (if installed)
ms-fabric-mcp-server
# Via Python module
python -m ms_fabric_mcp_server
# With MCP Inspector (development)
npx @modelcontextprotocol/inspector uvx ms-fabric-mcp-serverLogging & Debugging (optional)
MCP stdio servers must keep protocol traffic on stdout, so redirect stderr to capture logs.
Giving the agent read access to the log file is a powerful way to debug failures.
You can also set AZURE_LOG_LEVEL (Azure SDK) and MCP_LOG_LEVEL (server) to control verbosity.
VS Code (Bash):
{
"servers": {
"MS Fabric MCP Server": {
"type": "stdio",
"command": "bash",
"args": [
"-lc",
"LOG_DIR=\"$HOME/mcp_logs\"; LOG_FILE=\"$LOG_DIR/ms-fabric-mcp-$(date +%Y%m%d_%H%M%S).log\"; uvx ms-fabric-mcp-server 2> \"$LOG_FILE\""
],
"env": {
"AZURE_LOG_LEVEL": "info",
"MCP_LOG_LEVEL": "INFO"
}
}
}
}VS Code (PowerShell):
{
"servers": {
"MS Fabric MCP Server": {
"type": "stdio",
"command": "powershell",
"args": [
"-NoProfile",
"-Command",
"$logDir=\"$env:USERPROFILE\\mcp_logs\"; New-Item -ItemType Directory -Force -Path $logDir | Out-Null; $ts=Get-Date -Format yyyyMMdd_HHmmss; $logFile=\"$logDir\\ms-fabric-mcp-$ts.log\"; uvx ms-fabric-mcp-server 2> $logFile"
],
"env": {
"AZURE_LOG_LEVEL": "info",
"MCP_LOG_LEVEL": "INFO"
}
}
}
}Programmatic Usage (Library Mode)
from fastmcp import FastMCP
from ms_fabric_mcp_server import register_fabric_tools
# Create your own server
mcp = FastMCP("my-custom-server")
# Register all Fabric tools
register_fabric_tools(mcp)
# Add your own customizations...
mcp.run()Configuration
Environment variables (all optional with sensible defaults):
Variable | Default | Description |
|
| Fabric API base URL |
|
| OAuth scopes |
|
| API timeout (seconds) |
|
| Max retry attempts |
|
| Backoff factor |
|
| Livy timeout (seconds) |
|
| Livy polling interval |
|
| Livy statement wait timeout |
|
| Livy session wait timeout |
|
| Server name for MCP |
|
| Logging level |
|
| Azure SDK logging level |
Copy .env.example to .env and customize as needed.
Available Tools
The server provides 57 core tools, with 3 additional SQL tools when installed with [sql] extras (60 total).
Tool Group | Count | Tools |
Workspace | 1 |
|
Item | 9 |
|
Lakehouse | 4 |
|
Notebook | 6 |
|
Job | 4 |
|
Livy | 8 |
|
Pipeline | 11 |
|
Dataflow | 3 |
|
Semantic Model | 9 |
|
Power BI | 2 |
|
SQL (optional) | 3 |
|
SQL Tools (Optional)
SQL tools require pyodbc and the Microsoft ODBC Driver for SQL Server (Driver 18 or 17 — the service auto-detects which is installed and prefers Driver 18; set FABRIC_ODBC_DRIVER to override):
# Install with SQL support
pip install ms-fabric-mcp-server[sql]
# On Ubuntu/Debian, install the ODBC driver first:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 # or msodbcsql17If pyodbc is not available, the server starts with 57 tools (SQL tools disabled).
Development
# Clone and install with dev dependencies
git clone https://github.com/your-org/ms-fabric-mcp-server.git
cd ms-fabric-mcp-server
pip install -e ".[dev,sql,telemetry]"
# Run tests
pytest
# Run with coverage
pytest --cov
# Format code
black src tests
isort src tests
# Type checking
mypy srcIntegration tests
Integration tests run against live Fabric resources and are opt-in. They require a pre-provisioned Fabric workspace, Lakehouse, Warehouse, and (for Copy Activity tests) at least one external-source connection. See Setup prerequisites below before your first run.
To get started locally, copy the example env file:
cp .env.integration.example .env.integrationThen fill in values matching your provisioned resources. The full set of variables (with inline comments grouping by purpose) lives in .env.integration.example; this list is for orientation:
Required for all integration tests:
FABRIC_INTEGRATION_TESTS=1FABRIC_TEST_WORKSPACE_NAME— display name of the test workspaceFABRIC_TEST_LAKEHOUSE_NAME— Lakehouse item in the workspace (used as the destination for Copy Activities)FABRIC_TEST_LAKEHOUSE_SQL_DATABASE— the Lakehouse's SQL endpoint database name (typically same as the Lakehouse name)FABRIC_TEST_WAREHOUSE_NAME— Warehouse item in the workspace (used by SQL DML tests)
Required for Copy Activity tests (Pipeline Flow):
FABRIC_TEST_DEST_CONNECTION_ID— Fabric connection ID for the destination Lakehouse (used by all Copy Activity tests)
Per-engine source inputs — set all 5 vars of a block to enable that block's Copy Activity test; the test skips with a logged reason if any value is missing.
PostgreSQL source (e.g., VM-hosted Postgres reachable via a gateway):
FABRIC_TEST_POSTGRES_CONNECTION_IDFABRIC_TEST_POSTGRES_SOURCE_TYPE(defaultPostgreSqlSource)FABRIC_TEST_POSTGRES_SCHEMAFABRIC_TEST_POSTGRES_TABLEFABRIC_TEST_POSTGRES_DEST_TABLE_NAME
SQL Server source (e.g., VM-hosted SQL Server, Azure SQL DB):
FABRIC_TEST_SQLSERVER_CONNECTION_IDFABRIC_TEST_SQLSERVER_SOURCE_TYPE(defaultSqlServerSource)FABRIC_TEST_SQLSERVER_SCHEMAFABRIC_TEST_SQLSERVER_TABLEFABRIC_TEST_SQLSERVER_DEST_TABLE_NAME
Optional inputs (other flows skip cleanly when absent):
Semantic Model:
FABRIC_TEST_SEMANTIC_MODEL_TABLE,FABRIC_TEST_SEMANTIC_MODEL_COLUMNS,FABRIC_TEST_SEMANTIC_MODEL_TABLE_2,FABRIC_TEST_SEMANTIC_MODEL_COLUMNS_2,FABRIC_TEST_SEMANTIC_MODEL_SCHEMADataflow:
FABRIC_TEST_DATAFLOW_NAMEAzure SPN auth (when not using
az login):AZURE_TENANT_ID,AZURE_CLIENT_ID,AZURE_CLIENT_SECRETPower BI tuning:
POWERBI_BASE_URL,POWERBI_SCOPES,POWERBI_API_CALL_TIMEOUT,POWERBI_REFRESH_POLL_INTERVAL,POWERBI_REFRESH_WAIT_TIMEOUT
Run integration tests:
FABRIC_INTEGRATION_TESTS=1 pytest -m integrationOr filter to a specific test:
FABRIC_INTEGRATION_TESTS=1 pytest -m integration -k "copy_activity"Notes:
SQL tests require
pyodbcand a SQL Server ODBC driver (Microsoftmsodbcsql18recommended). The CI workflow installs it viaapt-get install msodbcsql18.Tests may skip when optional dependencies or environment variables are missing — this is intentional, not a failure.
These tests use live Fabric resources and may incur capacity-usage and storage costs. Run against a non-production workspace.
Setup prerequisites for integration tests
The tests assume the following Fabric / Azure infrastructure is already in place. This setup is one-time per environment and is not part of the test run itself:
A dedicated Fabric workspace on an active capacity. Do not use a production workspace — the tests create, modify, and delete items.
A Lakehouse and a Warehouse in that workspace, with display names matching
FABRIC_TEST_LAKEHOUSE_NAMEandFABRIC_TEST_WAREHOUSE_NAME. The Lakehouse's SQL endpoint database name (which usually matches the Lakehouse name) goes inFABRIC_TEST_LAKEHOUSE_SQL_DATABASE.Source databases reachable from Fabric (for Copy Activity tests). Options:
Azure-managed services (Azure SQL DB, Azure Database for PostgreSQL): create directly; Fabric reaches them over the public Azure backbone.
VM-hosted or on-premises databases: require an on-premises data gateway installed on a Windows host that can reach both the source database (on the source network) and Fabric (over the public internet).
Fabric connections to those source databases (one per source-engine you want to test). Create via Fabric portal → Settings → Manage connections and gateways → New connection. Use the Fabric REST API to read back the GUID for
FABRIC_TEST_*_CONNECTION_ID:TOKEN=$(az account get-access-token --resource https://api.fabric.microsoft.com --query accessToken -o tsv) curl -sS -H "Authorization: Bearer $TOKEN" https://api.fabric.microsoft.com/v1/connections \ | python3 -c "import json,sys for c in json.load(sys.stdin).get('value',[]): print(f\"{c['displayName']:40s} {c['id']}\")"A Lakehouse-destination Fabric connection (Cloud > Lakehouse). Used for
FABRIC_TEST_DEST_CONNECTION_ID. Pipeline Copy Activities target this connection when writing to the destination Lakehouse.Auth:
Local development:
az loginas a Fabric workspace member is sufficient (the server usesDefaultAzureCredential).CI / unattended: create an Azure service principal, add it to the test workspace as Member (Fabric portal → workspace → Manage access), grant it "Can use" on each Fabric connection (Settings → Manage connections → select connection → Share → add SP), and provide its credentials via
AZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_CLIENT_SECRET. Both ACL grants (workspace member + per-connection "Can use") are required — connection access does not inherit from workspace membership.
GitHub Actions (if running the bundled workflows): create an environment named
Integrationin your fork's repository settings and add everyFABRIC_TEST_*andAZURE_*variable above as an environment secret with the same name..github/workflows/integration-tests.ymllists the canonical secret-name set.
License
MIT
Available Tools
37 toolsadd_activity_to_pipelineAdd Activity to Pipeline from JSONA
Add a generic activity to an existing Fabric pipeline from a JSON template.
Retrieves an existing pipeline, adds an activity from the provided JSON template, and updates the pipeline definition. This is a more general-purpose tool compared to add_copy_activity_to_pipeline, allowing you to add any type of Fabric pipeline activity by providing its complete JSON definition.
Use this tool when:
You have a custom activity JSON template to add
You want to add activity types beyond Copy (e.g., Notebook, Script, Web, etc.)
You need full control over the activity definition
You're working with complex activity configurations
Activity JSON Requirements:
Must be a valid dictionary/object
Must include a "name" field (string)
Must include a "type" field (e.g., "Copy", "Notebook", "Script", "Web", etc.)
Should include all required properties for the specific activity type
Common fields: "dependsOn", "policy", "typeProperties"
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_json: Complete JSON dictionary representing the activity definition. Must include "name", "type", and all required properties.
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, activity_type, workspace_name, and message.
Example: ```python # Example 1: Add a Copy Activity from JSON template copy_activity = { "name": "CopyCustomData", "type": "Copy", "dependsOn": [], "policy": { "timeout": "0.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": False, "secureInput": False }, "typeProperties": { "source": { "type": "AzurePostgreSqlSource", "partitionOption": "None", "queryTimeout": "02:00:00", "datasetSettings": { "type": "AzurePostgreSqlTable", "schema": [], "typeProperties": { "schema": "public", "table": "products" }, "externalReferences": { "connection": "12345678-1234-1234-1234-123456789abc" } } }, "sink": { "type": "LakehouseTableSink", "tableActionOption": "Overwrite", "applyVOrder": True, "datasetSettings": { "type": "LakehouseTable", "typeProperties": { "table": "products" } } } } }
result = add_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Pipeline",
activity_json=copy_activity
)
# Example 2: Add a Notebook Activity
notebook_activity = {
"name": "RunTransformation",
"type": "Notebook",
"dependsOn": [
{
"activity": "CopyCustomData",
"dependencyConditions": ["Succeeded"]
}
],
"policy": {
"timeout": "1.00:00:00",
"retry": 0
},
"typeProperties": {
"notebookPath": "/Notebooks/TransformData",
"parameters": {
"table_name": "products"
}
}
}
result = add_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Pipeline",
activity_json=notebook_activity
)
```Inputs: workspace_name (required), pipeline_name (required), activity_json (required). Returns: object
add_copy_activity_to_pipelineAdd Copy Activity to PipelineA
Add a Copy Activity to an existing Fabric pipeline.
Retrieves an existing pipeline, adds a Copy Activity to it, and updates the pipeline definition. The Copy Activity will be appended to any existing activities in the pipeline.
Use this tool when:
You have an existing pipeline and want to add a new Copy Activity
You're building complex pipelines with multiple data copy operations
You want to incrementally build a pipeline
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. source_type: Type of source (e.g., "AzurePostgreSqlSource", "AzureSqlSource", "SqlServerSource"). source_connection_id: Fabric workspace connection ID for source database. source_table_schema: Schema name of the source table (e.g., "public", "dbo"). source_table_name: Name of the source table (e.g., "movie"). destination_lakehouse_id: Workspace artifact ID of the destination Lakehouse. destination_connection_id: Fabric workspace connection ID for destination Lakehouse. destination_table_name: Name for the destination table in Lakehouse. activity_name: Optional custom name for the activity (default: auto-generated). source_access_mode: Source access mode ("direct" or "sql"). Default is "direct". source_sql_query: Optional SQL query for sql access mode. table_action_option: Table action option (default: "Append", options: "Append", "Overwrite"). apply_v_order: Apply V-Order optimization (default: True). timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.
Example: ```python # First, get the lakehouse and connection IDs lakehouses = list_items(workspace_name="Analytics", item_type="Lakehouse") lakehouse_id = lakehouses["items"][0]["id"] lakehouse_conn_id = "a216973e-47d7-4224-bb56-2c053bac6831"
# Add a Copy Activity to an existing pipeline
result = add_copy_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Existing_Pipeline",
source_type="AzurePostgreSqlSource",
source_connection_id="12345678-1234-1234-1234-123456789abc",
source_table_schema="public",
source_table_name="orders",
destination_lakehouse_id=lakehouse_id,
destination_connection_id=lakehouse_conn_id,
destination_table_name="orders",
activity_name="CopyOrdersData",
table_action_option="Overwrite"
)
# Add another Copy Activity to the same pipeline
result = add_copy_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Existing_Pipeline",
source_type="AzurePostgreSqlSource",
source_connection_id="12345678-1234-1234-1234-123456789abc",
source_table_schema="public",
source_table_name="customers",
destination_lakehouse_id=lakehouse_id,
destination_connection_id=lakehouse_conn_id,
destination_table_name="customers",
activity_name="CopyCustomersData"
)
# SQL fallback mode (use when direct Lakehouse copy fails with
# "datasource type Lakehouse is invalid" error):
result = add_copy_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Existing_Pipeline",
source_type="LakehouseTableSource",
source_connection_id=sql_endpoint_conn_id, # SQL analytics endpoint connection
source_table_schema="dbo",
source_table_name="fact_sale",
destination_lakehouse_id=lakehouse_id,
destination_connection_id=lakehouse_conn_id,
destination_table_name="fact_sale_copy",
source_access_mode="sql",
source_sql_query="SELECT * FROM dbo.fact_sale" # optional
)
```Inputs: workspace_name (required), pipeline_name (required), source_type (required), source_connection_id (required), +13 more. Returns: object
add_dataflow_activity_to_pipelineAdd Dataflow Activity to PipelineA
Add a Dataflow Activity to an existing Fabric pipeline.
Retrieves an existing pipeline, adds a Dataflow Activity to it, and updates the pipeline definition. The Dataflow Activity will be appended to any existing activities in the pipeline.
Use this tool when:
You have an existing pipeline and want to add a new Dataflow Activity
You're building complex pipelines with multiple activities
You want to incrementally build a pipeline
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. dataflow_name: Name of the Dataflow to run. dataflow_workspace_name: Optional name of the workspace containing the Dataflow. activity_name: Optional custom name for the activity (default: auto-generated). depends_on_activity_name: Optional name of an existing activity this one depends on. timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.
Inputs: workspace_name (required), pipeline_name (required), dataflow_name (required), dataflow_workspace_name, +5 more. Returns: object
add_measures_to_semantic_modelAdd Measures to Semantic ModelC
Add measures to a table in an existing semantic model.
Inputs: workspace_name (required), table_name (required), measures (required), semantic_model_name, +1 more. Returns: object
add_notebook_activity_to_pipelineAdd Notebook Activity to PipelineA
Add a Notebook Activity to an existing Fabric pipeline.
Retrieves an existing pipeline, adds a Notebook Activity to it, and updates the pipeline definition. The Notebook Activity will be appended to any existing activities in the pipeline.
Use this tool when:
You have an existing pipeline and want to add a new Notebook Activity
You're building complex pipelines with multiple activities
You want to incrementally build a pipeline
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. notebook_name: Name of the notebook to run. notebook_workspace_name: Optional name of the workspace containing the notebook. activity_name: Optional custom name for the activity (default: auto-generated). depends_on_activity_name: Optional name of an existing activity this one depends on. session_tag: Optional session tag for the notebook execution. parameters: Optional parameters to pass to the notebook. timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.
Inputs: workspace_name (required), pipeline_name (required), notebook_name (required), notebook_workspace_name, +7 more. Returns: object
add_relationship_to_semantic_modelAdd Relationship to Semantic ModelC
Add a relationship between two tables in an existing semantic model.
Inputs: workspace_name (required), semantic_model_name (required), from_table (required), from_column (required), +5 more. Returns: object
add_table_to_semantic_modelAdd Table to Semantic ModelC
Add a table from a lakehouse to an existing semantic model.
Inputs: workspace_name (required), semantic_model_name (required), lakehouse_name (required), table_name (required), +1 more. Returns: object
attach_lakehouse_to_notebookAttach Default Lakehouse to NotebookA
Attach a default lakehouse to a notebook in Microsoft Fabric.
Updates the notebook definition to set a default lakehouse. This lakehouse will be automatically mounted when the notebook runs, providing seamless access to the lakehouse tables and files without additional configuration.
Use this tool when:
Setting up a new notebook with a lakehouse connection
Changing the default lakehouse for an existing notebook
Ensuring notebook code can access lakehouse tables via spark.read
Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook to update. lakehouse_name: Name of the lakehouse to attach as default. lakehouse_workspace_name: Optional workspace name for the lakehouse. If not provided, uses the same workspace as the notebook.
Returns: Dictionary with status, message, notebook_id, notebook_name, lakehouse_id, lakehouse_name, and workspace_id.
Example: ```python # Attach lakehouse in same workspace result = attach_lakehouse_to_notebook( workspace_name="Analytics Workspace", notebook_name="Data_Processing", lakehouse_name="Bronze_Lakehouse" )
# Attach lakehouse from different workspace
result = attach_lakehouse_to_notebook(
workspace_name="Analytics Workspace",
notebook_name="Data_Processing",
lakehouse_name="Shared_Lakehouse",
lakehouse_workspace_name="Shared Resources"
)
if result["status"] == "success":
print(f"Lakehouse {result['lakehouse_name']} attached successfully!")
```Inputs: workspace_name (required), notebook_name (required), lakehouse_name (required), lakehouse_workspace_name. Returns: object
create_blank_pipelineCreate Blank PipelineA
Create a blank Fabric pipeline with no activities.
Creates a Data Pipeline in the specified workspace with an empty activities array, ready to be populated with activities later using the add_copy_activity_to_pipeline tool.
Parameters: workspace_name: The display name of the workspace where the pipeline will be created. pipeline_name: Name for the new pipeline (must be unique in workspace). description: Optional description for the pipeline.
Returns: Dictionary with status, pipeline_id, pipeline_name, workspace_name, and message.
Example: ```python # Create a blank pipeline result = create_blank_pipeline( workspace_name="Analytics Workspace", pipeline_name="My_Data_Integration_Pipeline", description="Pipeline for data integration workflows" )
# Later, add activities to it
add_copy_activity_to_pipeline(
workspace_name="Analytics Workspace",
pipeline_name="My_Data_Integration_Pipeline",
source_type="AzurePostgreSqlSource",
source_connection_id=conn_id,
source_table_schema="public",
source_table_name="customers",
destination_lakehouse_id=lakehouse_id,
destination_connection_id=lakehouse_conn_id,
destination_table_name="customers"
)
```Inputs: workspace_name (required), pipeline_name (required), description. Returns: object
create_semantic_modelCreate Semantic ModelB
Create an empty Fabric semantic model.
Inputs: workspace_name (required), semantic_model_name (required). Returns: object
delete_activity_from_pipelineDelete Activity from PipelineA
Delete an activity from an existing Fabric pipeline.
Removes the specified activity from the pipeline definition. This will fail if any other activity depends on it. Use remove_activity_dependency to remove dependencies first.
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_name: Name of the activity to delete.
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.
Inputs: workspace_name (required), pipeline_name (required), activity_name (required). Returns: object
delete_itemDelete Item from WorkspaceB
Delete an item from a Fabric workspace.
Deletes the specified item from the workspace. The item is identified by its display name and type. Common item types include: Notebook, Lakehouse, Warehouse, Pipeline, Report, SemanticModel, Dashboard, etc.
Parameters: workspace_name: The display name of the workspace. item_display_name: Name of the item to delete. item_type: Type of the item to delete (e.g., "Notebook", "Lakehouse"). Supported types: Notebook, Lakehouse, Warehouse, Pipeline, DataPipeline, Report, SemanticModel, Dashboard, Dataflow, Dataset.
Returns: Dictionary with status and success/error message.
Example:
python result = delete_item( workspace_name="My Workspace", item_display_name="Old Notebook", item_type="Notebook" )
Inputs: workspace_name (required), item_display_name (required), item_type (required). Returns: object
delete_measures_from_semantic_modelDelete Measures from Semantic ModelC
Delete measures from a table in an existing semantic model.
Inputs: workspace_name (required), table_name (required), measure_names (required), semantic_model_name, +1 more. Returns: object
execute_dax_queryExecute DAX QueryC
Execute a DAX query and return the raw Power BI response.
Inputs: workspace_name (required), query (required), semantic_model_name, semantic_model_id. Returns: object
get_job_statusGet Job StatusA
Get status of a specific job instance.
Retrieves the current status and details of a running or completed job. The job state includes: NotStarted, InProgress, Completed, Failed, Cancelled.
Parameters: workspace_name: The display name of the workspace. item_name: Name of the item. item_type: Type of the item (Notebook, Pipeline, etc.). job_instance_id: ID of the job instance to check.
Returns: Dictionary with status, message, and job details including: - job_instance_id, item_id, job_type, job_status - invoke_type, root_activity_id, start_time_utc, end_time_utc - failure_reason (if failed) - is_terminal, is_successful, is_failed, is_running flags
Example: ```python result = get_job_status( workspace_name="My Workspace", item_name="analysis_notebook", item_type="Notebook", job_instance_id="12345678-1234-1234-1234-123456789abc" )
if result["job"]["is_terminal"]:
if result["job"]["is_successful"]:
print("Job completed successfully!")
else:
print(f"Job failed: {result['job']['failure_reason']}")
```Inputs: workspace_name (required), item_name (required), item_type (required), job_instance_id (required). Returns: object
get_job_status_by_urlGet Job Status by URLA
Get job status using the location URL from run_on_demand_job.
Retrieves job status using the location URL returned when the job was created. This is convenient when you have the location URL but not the individual workspace/item/job identifiers.
Parameters: location_url: The location URL returned from job creation.
Returns: Dictionary with status, message, and job details (same structure as get_job_status).
Example: ```python # Start a job start_result = run_on_demand_job(...)
# Check status using the location URL
status_result = get_job_status_by_url(start_result["location_url"])
```Inputs: location_url (required). Returns: object
get_notebook_contentGet Notebook ContentA
Get the content and definition of a notebook.
Retrieves the full notebook definition including all cells, metadata, and configuration from a Fabric workspace. The content is returned as a dictionary matching the Jupyter notebook format.
Parameters: workspace_name: The display name of the workspace. notebook_display_name: The name of the notebook.
Returns: Dictionary with status, workspace_name, notebook_name, and notebook definition. The definition contains the full notebook structure including cells, metadata, etc.
Example: ```python result = get_notebook_content( workspace_name="My Workspace", notebook_display_name="analysis/customer_analysis" )
if result["status"] == "success":
definition = result["definition"]
# Access notebook cells, metadata, etc.
```Inputs: workspace_name (required), notebook_display_name (required). Returns: object
get_notebook_driver_logsGet Notebook Driver LogsA
Get Spark driver logs for a notebook execution.
Retrieves the driver logs (stdout or stderr) from a completed notebook run. This is particularly useful for getting detailed error messages and Python tracebacks when a notebook fails.
Important Notes:
Python exceptions and tracebacks appear in
stdout, notstderrstderrcontains Spark/system logs (typically larger)For failed notebooks, check
stdoutfirst for the Python errorLook for "Error", "Exception", "Traceback" in the output
Use this tool when:
A notebook execution failed and you need to see the Python error
You want to debug notebook issues by examining driver logs
You need to analyze Spark driver behavior (stderr)
Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. job_instance_id: The job instance ID from execute_notebook or run_on_demand_job result. log_type: Type of log to retrieve - "stdout" (default) or "stderr". Use "stdout" for Python errors and print statements. Use "stderr" for Spark/system logs. max_lines: Maximum number of lines to return (default: 500, None for all). Returns the last N lines (most recent, where errors typically are).
Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - log_type: Type of log retrieved - log_content: The actual log content as a string - log_size_bytes: Total size of the log file - truncated: Whether the log was truncated - spark_application_id: The Spark application ID - livy_id: The Livy session ID
Example: ```python # Get Python error from a failed notebook result = get_notebook_driver_logs( workspace_name="Analytics", notebook_name="ETL_Pipeline", job_instance_id="12345678-1234-1234-1234-123456789abc", log_type="stdout" # Python errors are in stdout! )
if result["status"] == "success":
print(result["log_content"])
# Output will include Python traceback like:
# ZeroDivisionError: division by zero
# Traceback (most recent call last):
# Cell In[11], line 2
# result = x / 0
```Inputs: workspace_name (required), notebook_name (required), job_instance_id (required), log_type, +1 more. Returns: object
get_notebook_execution_detailsGet Notebook Execution DetailsA
Get detailed execution information for a notebook run by job instance ID.
Retrieves execution metadata from the Fabric Notebook Livy Sessions API, which provides detailed timing, resource usage, and execution state information.
Use this tool when:
You want to check the status and timing of a completed notebook run
You need to verify resource allocation for a notebook execution
You want to analyze execution performance (queue time, run time)
Note: This method returns execution metadata (timing, state, resource usage).
Cell-level outputs are only available for active sessions. Once a notebook job
completes, individual cell outputs cannot be retrieved via the REST API. To
capture cell outputs, use mssparkutils.notebook.exit() in your notebook and
access the exitValue through Data Pipeline activities.
Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. job_instance_id: The job instance ID from execute_notebook or run_on_demand_job result.
Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - session: Full Livy session details (state, timing, resources) - execution_summary: Summarized execution information including: - state: Execution state (Success, Failed, Cancelled, etc.) - spark_application_id: Spark application identifier - queued_duration_seconds: Time spent in queue - running_duration_seconds: Actual execution time - total_duration_seconds: Total end-to-end time - driver_memory, driver_cores, executor_memory, etc.
Example: ```python # After executing a notebook exec_result = run_on_demand_job( workspace_name="Analytics", item_name="ETL_Pipeline", item_type="Notebook", job_type="RunNotebook" )
# Get detailed execution information
details = get_notebook_execution_details(
workspace_name="Analytics",
notebook_name="ETL_Pipeline",
job_instance_id=exec_result["job_instance_id"]
)
if details["status"] == "success":
summary = details["execution_summary"]
print(f"State: {summary['state']}")
print(f"Duration: {summary['total_duration_seconds']}s")
print(f"Spark App ID: {summary['spark_application_id']}")
```Inputs: workspace_name (required), notebook_name (required), job_instance_id (required). Returns: object
get_operation_resultGet Operation ResultA
Get the result of a long-running operation.
Retrieves the result of an asynchronous operation using its operation ID. Operation IDs are typically returned in the x-ms-operation-id header from API calls that return 202 Accepted responses.
Parameters: operation_id: The operation ID (from x-ms-operation-id header).
Returns: Dictionary with status, operation_id, message, and operation result.
Example: ```python result = get_operation_result("12345678-1234-1234-1234-123456789abc")
if result["status"] == "success":
operation_result = result["result"]
# Process operation result
```Inputs: operation_id (required). Returns: object
get_semantic_model_definitionGet Semantic Model DefinitionC
Get semantic model definition parts in the requested format.
Inputs: workspace_name (required), semantic_model_name, semantic_model_id, format, +1 more. Returns: object
get_semantic_model_detailsGet Semantic Model DetailsB
Get semantic model metadata by name or ID.
Inputs: workspace_name (required), semantic_model_name, semantic_model_id. Returns: object
import_notebook_to_fabricImport Notebook to Fabric WorkspaceA
Upload a local .ipynb into a Fabric workspace identified by name.
Imports a Jupyter notebook from the local filesystem into a Microsoft Fabric workspace. The notebook file must be in .ipynb format. The notebook can be organized into folders using forward slashes in the display name (e.g., "demos/hello_world").
Parameters: workspace_name: The display name of the target workspace (case-sensitive as shown in Fabric). notebook_display_name: Desired name (optionally with folders, e.g. "demos/hello_world") inside Fabric. local_notebook_path: Path to the notebook file (absolute or repo-relative). description: Optional description for the notebook.
Returns: Dictionary with status, message, and artifact_id if successful.
Example:
python result = import_notebook_to_fabric( workspace_name="My Workspace", notebook_display_name="analysis/customer_analysis", local_notebook_path="notebooks/customer_analysis.ipynb", description="Customer behavior analysis notebook" )
Inputs: workspace_name (required), notebook_display_name (required), local_notebook_path (required), description. Returns: object
list_itemsList Items in WorkspaceA
List all items in a Fabric workspace, optionally filtered by type.
Returns all items in the specified workspace. If item_type is provided, only items of that type are returned. Supported types include: Notebook, Lakehouse, Warehouse, Pipeline, DataPipeline, Report, SemanticModel, Dashboard, Dataflow, Dataset, and 40+ other Fabric item types.
Parameters: workspace_name: The display name of the workspace. item_type: Optional item type filter (e.g., "Notebook", "Lakehouse"). If not provided, all items are returned.
Returns: Dictionary with status, workspace_name, item_type_filter, item_count, and list of items. Each item contains: id, display_name, type, description, created_date, modified_date.
Example: ```python # List all items result = list_items("My Workspace")
# List only notebooks
result = list_items("My Workspace", item_type="Notebook")
```Inputs: workspace_name (required), item_type. Returns: object
list_notebook_executionsList Notebook ExecutionsA
List all Livy sessions (execution history) for a notebook.
Retrieves a list of all Livy sessions associated with a notebook, providing an execution history with job instance IDs, states, and timing information.
Use this tool when:
You want to see the execution history of a notebook
You need to find a job instance ID for a past execution
You want to analyze execution patterns over time
Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. limit: Optional maximum number of sessions to return.
Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - sessions: List of session summaries, each containing: - job_instance_id: Unique identifier for the job - livy_id: Livy session identifier - state: Execution state (Success, Failed, Cancelled, etc.) - operation_name: Type of operation (Notebook Scheduled Run, etc.) - spark_application_id: Spark application identifier - submitted_time_utc: When the job was submitted - start_time_utc: When execution started - end_time_utc: When execution ended - total_duration_seconds: Total execution time - total_count: Total number of sessions found
Example: ```python history = list_notebook_executions( workspace_name="Analytics", notebook_name="ETL_Pipeline", limit=10 )
if history["status"] == "success":
print(f"Found {history['total_count']} executions")
for session in history["sessions"]:
print(f"{session['job_instance_id']}: {session['state']}")
```Inputs: workspace_name (required), notebook_name (required), limit. Returns: object
list_workspacesList WorkspacesA
List all accessible Fabric workspaces.
Returns a list of all workspaces the authenticated user has access to, including workspace ID, name, description, type, state, and capacity ID.
Parameters: None
Returns: Dictionary with status, workspace_count, and list of workspaces. Each workspace contains: id, display_name, description, type, state, capacity_id.
Example:
python result = list_workspaces()
Inputs: no named parameters. Returns: object
livy_cancel_statementCancel Livy StatementA
Cancel a running Livy statement without killing the session.
Cancels a statement that is currently 'waiting' or 'running'. The statement will transition to 'cancelling' then 'cancelled' state. The session remains available for new statements.
Note: Only works on statements in 'waiting' or 'running' state.
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. statement_id: Statement ID to cancel.
Returns: Dictionary with cancellation result (typically {"msg": "canceled"}).
Example:
python result = livy_cancel_statement( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", statement_id="1" )
Inputs: workspace_id (required), lakehouse_id (required), session_id (required), statement_id (required). Returns: object
livy_close_sessionClose Livy SessionA
Close (terminate) a Livy session.
Terminates the specified Livy session and releases its resources. Any running statements will be cancelled.
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID to close.
Returns: Dictionary with success/error status and message.
Example:
python result = livy_close_session( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0" )
Inputs: workspace_id (required), lakehouse_id (required), session_id (required). Returns: object
livy_create_sessionCreate Livy SessionA
Create a new Livy session for Spark code execution.
Creates a Spark session for executing PySpark, Scala, or SparkR code. Session creation can take 6+ minutes on first startup as Spark initializes. It's recommended to keep with_wait=True to ensure the session is ready before use.
Parameters: workspace_id: Fabric workspace ID (use list_workspaces tool to find by name). lakehouse_id: Fabric lakehouse ID (use list_items tool with item_type="Lakehouse"). environment_id: Optional Fabric environment ID for pre-installed libraries. kind: Session kind - 'pyspark' (default), 'scala', or 'sparkr'. conf: Optional Spark configuration as key-value pairs (e.g., {"spark.executor.memory": "4g"}). with_wait: If True (default), wait for session to become available before returning. timeout_seconds: Maximum time to wait for session availability (default: from config).
Returns: Dictionary with session details including id, state, kind, appId, appInfo, and log.
Example: ```python # Create a PySpark session result = livy_create_session( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", kind="pyspark", with_wait=True )
if result.get("state") == "idle":
session_id = result["id"]
# Session is ready to execute code
```Inputs: workspace_id (required), lakehouse_id (required), environment_id, kind, +3 more. Returns: object
livy_get_session_logGet Livy Session LogA
Fetch incremental Livy driver logs for a session.
Retrieves Spark driver logs for debugging session startup issues or statement problems. Supports incremental reads with start/size parameters for paging through logs.
Use Cases:
Debugging session startup issues
Troubleshooting failed statements
Investigating Spark driver problems
Monitoring session health
Note: Returns driver-side logs only, not executor logs.
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. start: Starting log line index (default: 0). size: Number of log lines to retrieve (default: 500).
Returns: Dictionary with log content and metadata: {"status": "success", "log_content": "", "log_size_bytes": , "offset": , "size": }.
Example: ```python # Get first 100 log lines result = livy_get_session_log( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", start=0, size=100 )
for log_line in result.get("log", []):
print(log_line)
# Get next 100 lines
result = livy_get_session_log(..., start=100, size=100)
```Inputs: workspace_id (required), lakehouse_id (required), session_id (required), start, +1 more. Returns: object
livy_get_session_statusGet Livy Session StatusA
Get the current status and details of a Livy session.
Retrieves detailed information about a session including its state, Spark application details, and configuration. Use this to check session health and readiness.
Session States:
'not_started': Session created but not yet started
'starting': Session is initializing
'idle': Session is ready to accept statements
'busy': Session is currently executing a statement
'shutting_down': Session is terminating
'error': Session encountered an error
'dead': Session has terminated
'killed': Session was forcefully terminated
'success': Session completed successfully
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID to check.
Returns: Dictionary with session status including state, appId, appInfo, kind, and log.
Example: ```python result = livy_get_session_status( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0" )
if result.get("state") == "idle":
# Session is ready to execute code
pass
elif result.get("state") == "busy":
# Session is executing a statement
pass
```Inputs: workspace_id (required), lakehouse_id (required), session_id (required). Returns: object
livy_get_statement_statusGet Livy Statement StatusA
Get the current status and output of a Livy statement.
Retrieves the status, output, and execution details of a statement. Use this for manual status checking without auto-polling.
Statement States:
'waiting': Statement is queued for execution
'running': Statement is currently executing
'available': Statement completed successfully
'error': Statement encountered an error
'cancelling': Statement is being cancelled
'cancelled': Statement was cancelled
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. statement_id: Statement ID to check.
Returns: Dictionary with statement status including id, state, output, and code. Output field contains execution results when state is 'available'.
Example: ```python result = livy_get_statement_status( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", statement_id="1" )
if result.get("state") == "available":
output = result.get("output", {})
print(f"Status: {output.get('status')}")
print(f"Result: {output.get('data', {}).get('text/plain')}")
```Inputs: workspace_id (required), lakehouse_id (required), session_id (required), statement_id (required). Returns: object
livy_list_sessionsList Livy SessionsA
List all Livy sessions in a workspace/lakehouse.
Retrieves all active Livy sessions for the specified workspace and lakehouse, including session IDs, states, and configuration details.
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID.
Returns: Dictionary with sessions list containing id, state, kind, appId, and other details.
Example: ```python result = livy_list_sessions( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321" )
for session in result.get("sessions", []):
print(f"Session {session['id']}: {session['state']}")
```Inputs: workspace_id (required), lakehouse_id (required). Returns: object
livy_run_statementRun Livy StatementA
Execute code in a Livy session.
Executes PySpark, Scala, or SparkR code in an existing Livy session. The session must be in 'idle' state to accept new statements.
Important Notes:
Use df.show() or df.printSchema() to inspect DataFrames before accessing columns
SHOW TABLES returns 'namespace' column, not 'database' in Fabric
Avoid direct Row attribute access without schema verification
When with_wait=False, returns immediately with statement ID - check status separately
Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID (must be in 'idle' state). code: Code to execute (PySpark, Scala, or SparkR). kind: Statement kind - 'pyspark' (default), 'scala', or 'sparkr'. with_wait: If True (default), wait for statement completion before returning. timeout_seconds: Maximum time to wait for statement completion (default: from config).
Returns: Dictionary with statement details including id, state, output, and execution details.
Example: ```python # Execute PySpark code result = livy_run_statement( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", code="df = spark.range(10)\ndf.count()", kind="pyspark", with_wait=True )
if result.get("state") == "available":
output = result.get("output", {})
if output.get("status") == "ok":
print(f"Result: {output.get('data', {}).get('text/plain')}")
```Inputs: workspace_id (required), lakehouse_id (required), session_id (required), code (required), +3 more. Returns: object
refresh_semantic_modelRefresh Semantic ModelC
Refresh a semantic model and wait for completion.
Inputs: workspace_name (required), semantic_model_name, semantic_model_id, refresh_type, +1 more. Returns: object
remove_activity_dependencyRemove Activity DependencyA
Remove dependsOn references to a target activity.
Removes dependsOn edges pointing to the target activity. If from_activity_name is provided, only removes edges from that activity.
Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_name: Name of the activity being depended on. from_activity_name: Optional activity to remove dependencies from.
Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, removed_count, workspace_name, and message.
Inputs: workspace_name (required), pipeline_name (required), activity_name (required), from_activity_name. Returns: object
run_on_demand_jobRun On-Demand JobA
Run an on-demand job for a Fabric item.
Executes a job for the specified item. Common job types include:
RunNotebook: Execute a notebook
Pipeline: Run a data pipeline
DefaultJob: Default job type for the item
The job runs asynchronously. Use get_job_status or get_job_status_by_url to check the job's progress and result.
Parameters: workspace_name: The display name of the workspace. item_name: Name of the item to run job for. item_type: Type of the item (Notebook, Pipeline, Lakehouse, Warehouse, etc.). job_type: Type of job to run (RunNotebook, DefaultJob, Pipeline, etc.). execution_data: Optional execution data payload for the job (e.g., notebook parameters).
Returns: Dictionary with status, message, job_instance_id, location_url, and retry_after.
Example: ```python # Run a notebook result = run_on_demand_job( workspace_name="My Workspace", item_name="analysis_notebook", item_type="Notebook", job_type="RunNotebook", execution_data={"parameters": {"start_date": "2025-01-01"}} )
# Use the location URL to check status
job_status = get_job_status_by_url(result["location_url"])
```Inputs: workspace_name (required), item_name (required), item_type (required), job_type (required), +1 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 37 tools
There is significant overlap between pipeline activity tools (add_copy_activity_to_pipeline, add_notebook_activity_to_pipeline, add_dataflow_activity_to_pipeline, add_activity_to_pipeline) where the generic tool can perform the same functions as the specific ones, causing potential confusion. However, descriptions help clarify the distinctions, and other tools like list_items vs list_workspaces or get_job_status vs get_job_status_by_url have clear boundaries.
Most tools follow a consistent verb_noun pattern (e.g., add_activity_to_pipeline, delete_activity_from_pipeline, list_items, get_job_status). There are minor deviations like livy_run_statement (prefix instead of verb_noun) and execute_dax_query (verb_noun but with a different verb style), but overall the naming is predictable and readable.
With 37 tools, the count is excessive for a single server, making it heavy and potentially overwhelming for agents. While the domain (Microsoft Fabric) is broad, the toolset includes many specialized tools (e.g., multiple Livy session management tools) that could be consolidated or scoped more narrowly.
The toolset provides comprehensive coverage for Fabric operations, including CRUD for pipelines, notebooks, semantic models, and jobs, with lifecycle management (create, update, delete, execute, monitor). Minor gaps exist, such as limited update operations for items beyond pipelines (e.g., no update_notebook), but agents can work around these with existing tools.
Maintenance
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
One place to build, share, and govern the skills and tools your AI agents use at work.
MCP facade over the Nebelus Construction API. ~48 tools give full agent build parity: create/update/probe agents, edit graphs, attach knowledge and vector stores, wire connectors, set governance policies and locked guardrails, enable grounding-trace, and read deployment wiring. Purpose-built for regulated industries: data residency is enforced per region (EU / GCC-KSA), with PII controls and an audit trail. Agents are created as drafts — no deploy tool is exposed over MCP by design; publishing happens in the Nebelus console.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceProvides full execution and management capabilities for Microsoft Fabric Data Engineering workloads, including notebooks, pipelines, Lakehouses, and Spark jobs. It enables users to trigger runs, monitor status, manage workspace items, and configure job schedules through natural language.-
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to query and explore schemas in Microsoft Fabric lakehouses, warehouses, and SQL databases using natural language, with tools for executing read-only SQL queries and searching tables, columns, and query patterns.3MIT
- AlicenseCqualityCmaintenanceExposes Microsoft Fabric operations as MCP tools, with 105 tools across 17 domains including lakehouses, warehouses, notebooks, pipelines, and real-time analytics, handling long-running operations and supporting multiple authentication modes.100MIT
- AlicenseBqualityBmaintenanceEnables AI agents to interact with Microsoft Fabric Real-Time Intelligence services, allowing for seamless data querying, analysis, and streaming capabilities.395,519 PyPI133MIT