mcp-fabric-api
Provides tools for integrating with Git repositories, enabling version control operations such as connecting, committing, updating, and managing credentials for Fabric items.
Provides tools for managing GraphQL APIs in Microsoft Fabric, including creating, updating, and deleting GraphQL API endpoints.
Click on "Install 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., "@mcp-fabric-apilist my workspaces"
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.
mcp-fabric-api
MCP (Model Context Protocol) server for the Microsoft Fabric REST APIs. Built for data engineers and data analysts who want to use AI assistants beyond Copilot — such as Claude, Claude Code, or any MCP-compatible client — to build and manage their Fabric components. Covers workspaces, lakehouses, warehouses, notebooks, pipelines, semantic models, reports, dataflows, eventhouses, eventstreams, reflexes, GraphQL APIs, SQL endpoints, variable libraries, git integration, deployment pipelines, mirrored databases, KQL databases, ML models, ML experiments, copy jobs, external data shares, and environments (Spark compute + libraries, with notebook attach/detach).
Safe by default: This server blocks all destructive operations (create, update, delete) until you explicitly configure the
WRITABLE_WORKSPACESenvironment variable. Read operations always work. SetWRITABLE_WORKSPACES="*"to allow writes to all workspaces, or use patterns to limit access. See Workspace Safety Guard for details.
Prerequisites
Node.js 18+
Access to a Microsoft Fabric workspace
One of:
Azure CLI (
az login) — easiest on WindowsAzure app registration with device code flow enabled — best for Mac / Claude Desktop
Service principal credentials — best for headless / automated scenarios
Related MCP server: Fabric-Analytics-MCP
Quick Start
Windows (Azure CLI):
az login
npx @einlogic/mcp-fabric-apiMac / Claude Desktop (Device Code):
AUTH_METHOD=device-code AZURE_CLIENT_ID=your-app-id AZURE_TENANT_ID=your-tenant-id npx @einlogic/mcp-fabric-apiOn first API call, a sign-in URL and code will appear in the logs. Open the URL in your browser, enter the code, and authenticate.
Setup
Claude Desktop
Add to your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Windows (uses Azure CLI credentials):
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["-y", "@einlogic/mcp-fabric-api"]
}
}
}macOS (uses device code flow):
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["-y", "@einlogic/mcp-fabric-api"],
"env": {
"AUTH_METHOD": "device-code",
"AZURE_CLIENT_ID": "your-app-client-id",
"AZURE_TENANT_ID": "your-tenant-id"
}
}
}
}When the server starts, check the Claude Desktop logs for a sign-in prompt:
macOS:
~/Library/Logs/Claude/mcp-server-fabric.logWindows:
%APPDATA%\Claude\logs\mcp-server-fabric.log
The prompt will say: "To sign in, use a web browser to open https://microsoft.com/devicelogin and enter the code XXXXXXX". Complete the sign-in once and the token is cached for the session.
Claude Code CLI
Windows:
claude mcp add fabric -- npx -y @einlogic/mcp-fabric-apimacOS:
claude mcp add fabric -e AUTH_METHOD=device-code -e AZURE_CLIENT_ID=your-app-id -e AZURE_TENANT_ID=your-tenant-id -- npx -y @einlogic/mcp-fabric-apiTo verify it was added:
claude mcp listHTTP Mode (Remote)
For remote deployments, set environment variables:
export TRANSPORT=http
export PORT=3000
export AZURE_CLIENT_ID=your-client-id
export AZURE_CLIENT_SECRET=your-client-secret
export AZURE_TENANT_ID=your-tenant-id
npx @einlogic/mcp-fabric-apiThe server exposes:
POST /mcp— MCP endpoint (StreamableHTTP)GET /mcp— SSE stream for server notificationsDELETE /mcp— Session cleanupGET /.well-known/oauth-protected-resource— OAuth metadata
Authentication Methods
The server supports multiple authentication methods via the AUTH_METHOD environment variable. Choose the method that fits your platform and scenario:
Method |
| Required env vars | Best for |
Azure CLI (default) |
| None | Windows with |
Device Code |
|
| Mac / Claude Desktop |
Client Secret |
|
| Headless / automated |
Interactive Browser |
| None (optional: | Systems with browser access |
Default (Azure CLI): Uses the DefaultAzureCredential chain from the Azure Identity SDK. On a developer machine this picks up credentials from az login. No extra configuration needed. This is the original behavior and works best on Windows where Claude Desktop can access the Azure CLI token cache.
Device Code: On first API call, prints a URL and one-time code to stderr. You open the URL in any browser, enter the code, and sign in with your Azure account. The token is cached in memory for the session. This is the recommended method for Mac users with Claude Desktop, because the Claude Desktop process on macOS cannot access the Azure CLI token cache.
To use device code flow, you need an Azure app registration with "Allow public client flows" enabled:
Go to Azure Portal > App registrations > New registration
Name it (e.g., "Fabric MCP") and register
Under Authentication > Advanced settings, set "Allow public client flows" to Yes
Under API permissions, add
https://api.fabric.microsoft.com/Workspace.ReadWrite.All(or the scopes your tools need)Copy the Application (client) ID and your Directory (tenant) ID
Client Secret: Uses a service principal with client credentials. Requires an Azure app registration with a client secret. Suitable for CI/CD pipelines, automated scripts, or any headless environment where interactive sign-in is not possible.
Interactive Browser: Opens a browser window for OAuth sign-in. Works on systems where the server process can launch a browser. Optional AZURE_CLIENT_ID and AZURE_TENANT_ID can be provided to target a specific app and tenant.
Workspace Safety Guard
Control which workspaces allow write operations (create, update, delete) via the WRITABLE_WORKSPACES environment variable. Only workspaces matching the configured name patterns will permit CUD (Create, Update, Delete) operations. Read operations are never restricted.
Default behavior: When
WRITABLE_WORKSPACESis not set or empty, all destructive operations are blocked. You must explicitly configure this variable to enable writes.
| Behavior |
Not set / empty | All writes blocked (safe default) |
| All workspaces writable |
| Only matching workspaces writable |
Set comma-separated glob patterns:
WRITABLE_WORKSPACES=*-Dev,*-Test,Sandbox*Wildcard examples:
*matches all workspaces (allow everything)*-Devmatches "Sales-Dev", "Finance-Dev"Sandbox*matches "Sandbox-123", "Sandbox-Mike"Exact-Namematches only "Exact-Name" (case-insensitive)
Guarded tools (102 total) — every tool that creates, updates, or deletes workspace items:
Domain | Guarded tools |
Workspace |
|
Lakehouse |
|
Warehouse |
|
Notebook |
|
Pipeline |
|
Semantic Model |
|
Report |
|
Dataflow |
|
Eventhouse |
|
Eventstream |
|
Reflex |
|
GraphQL API |
|
Variable Library |
|
Git Integration |
|
Deployment Pipeline |
|
Mirrored Database |
|
KQL Database |
|
ML Model |
|
ML Experiment |
|
Copy Job |
|
External Data Share |
|
Environment |
|
Not guarded: Read operations (list, get, get_definition, get_bim, get_tmdl), query execution (DAX, KQL, SQL, GraphQL), run/refresh/cancel operations, export operations, and deployment pipeline CRUD (tenant-level, not workspace-scoped).
Claude Desktop config with guard (Windows):
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["-y", "@einlogic/mcp-fabric-api"],
"env": {
"WRITABLE_WORKSPACES": "*-Dev,*-Test,Sandbox*"
}
}
}
}Claude Desktop config with guard (macOS):
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["-y", "@einlogic/mcp-fabric-api"],
"env": {
"AUTH_METHOD": "device-code",
"AZURE_CLIENT_ID": "your-app-client-id",
"AZURE_TENANT_ID": "your-tenant-id",
"WRITABLE_WORKSPACES": "*-Dev,*-Test,Sandbox*"
}
}
}
}Claude Code CLI with guard:
WRITABLE_WORKSPACES="*-Dev,*-Test" claude mcp add fabric -- npx -y @einlogic/mcp-fabric-apiError when not configured:
WRITABLE_WORKSPACES is not configured. Destructive actions are blocked by default. Set WRITABLE_WORKSPACES to a comma-separated list of workspace name patterns, or "*" to allow all.Error when workspace not in allow list:
Workspace "Production-Analytics" is not in the writable workspaces list. Allowed patterns: *-Dev, *-Test, Sandbox*Debug Logging
Enable verbose debug logging to diagnose API errors, inspect request/response details, and trace long-running operations. All log output goes to stderr (visible in Claude Desktop's log files, never interferes with JSON-RPC on stdout).
Set the LOG_LEVEL environment variable to debug:
Claude Desktop config:
{
"mcpServers": {
"fabric": {
"command": "npx",
"args": ["-y", "@einlogic/mcp-fabric-api"],
"env": {
"LOG_LEVEL": "debug"
}
}
}
}Claude Code CLI:
LOG_LEVEL=debug claude mcp add fabric -- npx -y @einlogic/mcp-fabric-apiWhat gets logged at debug level:
Category | Details logged |
HTTP requests | Method, full URL, request body size in bytes |
HTTP responses | Status code, duration (ms), |
Definition uploads | Part paths, payload types, payload sizes — never payload content |
API errors | Full error body including |
LRO polling | Operation ID, poll count, elapsed time, final status |
Pagination | Page count, items per page, total items |
SQL/KQL queries | Server, database, duration, column/row counts — never query text or result data |
Rate limiting | Retry-after duration, affected endpoint |
Compliance: Debug logging never captures actual data content — no query text, no query results, no definition payloads, no bearer tokens. Only structural metadata (URLs, sizes, counts, timing, error details) is logged.
Viewing logs in Claude Desktop:
macOS:
~/Library/Logs/Claude/mcp-server-fabric.logWindows:
%APPDATA%\Claude\logs\mcp-server-fabric.log
You can also tail the log in real time:
# macOS
tail -f ~/Library/Logs/Claude/mcp-server-fabric.log
# Windows (PowerShell)
Get-Content "$env:APPDATA\Claude\logs\mcp-server-fabric.log" -WaitThe x-ms-request-id value logged with every API error is the key identifier needed when opening a support case with Microsoft for Fabric API issues.
Read vs Write Tool Annotations
Every tool declares MCP ToolAnnotations so MCP clients can distinguish read-only tools from mutations when presenting them in a configuration UI. This lets users enable all read tools in a single toggle while requiring explicit approval for writes.
Annotation | Meaning | Typical tool names |
| Pure read, no state change |
|
| Creates or updates state |
|
| Deletes, cancels, or removes |
|
All 219 tools carry these hints. The workspace safety guard (WRITABLE_WORKSPACES) still applies independently on top of whatever the client permits.
File-Based I/O
To avoid large payloads overwhelming MCP clients, definition tools use file paths instead of inline content. The server reads files from disk when sending definitions to Fabric, and writes files to disk when retrieving definitions from Fabric.
Input tools — the server reads definition files from the specified path and uploads to Fabric:
Tool | Parameter | Description |
|
| Path to model.bim JSON file |
|
| Path to model.bim JSON file |
|
| Directory of |
|
| Directory of |
|
| Directory containing notebook definition files |
|
| Directory containing eventstream definition files |
|
| Directory of PBIR report definition files |
|
| Directory of PBIR report definition files |
|
| Directory of |
|
| Directory of |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of definition files (or inline |
|
| Directory of environment definition files to seed on create |
|
| Directory of environment definition files |
|
| Path to an |
|
| Path to |
Output tools — the server retrieves definitions from Fabric and writes them to disk:
Tool | Parameter | What gets written |
|
| Single |
|
| TMDL files preserving folder structure |
|
| Notebook definition files |
|
| Lakehouse definition files |
|
| Warehouse definition files |
|
| Pipeline definition files |
|
| Report definition files (report.json, pages, visuals) |
|
| Dataflow definition files |
|
| Eventstream definition files |
|
| GraphQL schema definition files |
|
| Reflex definition files |
|
| Variable library files (variables.json, valueSets/) |
|
| Mirrored database definition files |
|
| KQL database definition files |
|
| Copy job definition files |
|
| Environment definition files |
|
| Staging |
|
| Published |
TMDL directory structure example:
/tmp/my-model/
model.tmdl
definition.pbism
definition/
tables/
Sales.tmdl
Product.tmdl
relationships.tmdlDevelopment
git clone https://github.com/your-org/mcp-fabric-api.git
cd mcp-fabric-api
npm install
npm run build
npm start
npm run dev # Watch mode
npm run inspect # Launch MCP InspectorTools (219 total)
Auth (4 tools)
Tool | Description |
| Show current Azure identity, tenant, and token expiry |
| List subscriptions/tenants from local |
| Switch to a different Azure tenant (with rollback on failure) |
| Clear cached tokens to force re-acquisition |
Workspace (6 tools)
Tool | Description |
| List all accessible Fabric workspaces |
| Get details of a specific workspace |
| Create a new workspace |
| Update a workspace's name or description |
| Delete a workspace |
| List all items in a workspace (with optional type filter) |
Lakehouse (14 tools)
Tool | Description |
| List all lakehouses in a workspace |
| Get lakehouse details (SQL endpoint, OneLake paths) |
| Create a new lakehouse (LRO, schemas enabled by default) |
| Update lakehouse name or description |
| Delete a lakehouse |
| List all tables in a lakehouse (falls back to SQL endpoint for schema-enabled lakehouses) |
| Load data into a table from OneLake (LRO). Not supported for schema-enabled lakehouses |
| Create a OneLake shortcut (file, folder, table, or schema level) with support for multiple target types |
| Get SQL endpoint details |
| Get lakehouse definition (LRO). Writes files to |
| Update lakehouse definition (LRO). Reads from |
| List all OneLake shortcuts in a lakehouse |
| Get details of a specific OneLake shortcut |
| Delete a OneLake shortcut |
Warehouse (9 tools)
Tool | Description |
| List all warehouses in a workspace |
| Get warehouse details including connection string and provisioning status |
| Create a new warehouse (LRO) |
| Update warehouse name or description |
| Delete a warehouse |
| Get SQL connection details for a warehouse |
| List all tables in a warehouse |
| Get warehouse definition (LRO). Writes files to |
| Update warehouse definition (LRO). Reads from |
Notebook (12 tools)
Tool | Description |
| List all notebooks in a workspace |
| Get notebook details |
| Create a new notebook (LRO) |
| Update notebook name or description |
| Delete a notebook |
| Get notebook definition (LRO). Writes files to |
| Update notebook definition (LRO). Reads files from |
| Run a notebook on demand |
| Get notebook run status |
| Cancel a running notebook |
| Attach a Fabric Environment to a notebook by mutating its definition metadata (handles both |
| Remove the attached environment from a notebook |
Pipeline (15 tools)
Tool | Description |
| List all data pipelines |
| Get pipeline details |
| Create a new pipeline |
| Update pipeline name or description |
| Delete a pipeline |
| Run a pipeline on demand |
| Get pipeline run status |
| Cancel a running pipeline |
| List all run instances |
| List pipeline schedules |
| Create a pipeline schedule |
| Update a pipeline schedule |
| Delete a pipeline schedule |
| Get pipeline definition (LRO). Writes files to |
| Update pipeline definition (LRO). Reads from |
Semantic Model (15 tools)
Tool | Description |
| List all semantic models |
| Get semantic model metadata (name, ID, description) — does not return the definition |
| Create a semantic model from a BIM/JSON file (LRO). Reads |
| Create a semantic model from TMDL files (LRO). Reads |
| Update semantic model name or description — does not modify the definition |
| Delete a semantic model |
| Trigger a model refresh (Power BI API) |
| Execute a DAX query (Power BI API) |
| Get definition in BIM/JSON format (LRO). Writes |
| Get definition in TMDL format (LRO). Writes TMDL files to |
| Update definition from BIM/JSON file (LRO). Reads |
| Update definition from TMDL files (LRO). Reads |
| Get refresh history (Power BI API) |
| Take over ownership of a semantic model (Power BI API) |
| Get data sources of a semantic model (Power BI API) |
Report (13 tools)
Tool | Description |
| List all reports |
| Get report details |
| Create a new report from PBIR definition files (LRO). Reads from |
| Update report name or description |
| Delete a report |
| Clone a report (Power BI API) |
| Export report to file format (PDF, PPTX, PNG, etc.) via Power BI API |
| Check report export status |
| Get report definition (LRO). Writes files to |
| Update report definition from PBIR directory (LRO). Reads from |
| Rebind a report to a different semantic model/dataset (Power BI API) |
| Get the list of pages in a report (Power BI API) |
| Get data sources used by a report (Power BI API) |
Dataflow Gen2 (8 tools)
Tool | Description |
| List all Dataflow Gen2 items |
| Get dataflow details |
| Create a new dataflow |
| Update dataflow name or description |
| Delete a dataflow |
| Trigger a dataflow refresh |
| Get refresh job status |
| Get dataflow definition (LRO). Writes files to |
Eventhouse (7 tools)
Tool | Description |
| List all eventhouses |
| Get eventhouse details |
| Create a new eventhouse (LRO) |
| Update eventhouse name or description |
| Delete an eventhouse |
| Get query service URI and connection details |
| Execute a KQL query against a KQL database |
Eventstream (7 tools)
Tool | Description |
| List all eventstreams |
| Get eventstream details |
| Create a new eventstream (LRO) |
| Update eventstream name or description |
| Delete an eventstream |
| Get eventstream definition (LRO). Writes files to |
| Update eventstream definition (LRO). Reads from |
Reflex / Activator (7 tools)
Tool | Description |
| List all Reflex (Activator) items |
| Get reflex details |
| Create a new reflex |
| Update reflex name or description |
| Delete a reflex |
| Get reflex definition (LRO). Writes files to |
| Update reflex definition (LRO). Reads from |
GraphQL API (7 tools)
Tool | Description |
| List all GraphQL API items |
| Get GraphQL API details |
| Create a new GraphQL API |
| Update GraphQL API name or description |
| Delete a GraphQL API |
| Get GraphQL schema definition (LRO). Writes files to |
| Execute a GraphQL query |
SQL Endpoint (4 tools)
Tool | Description |
| List all SQL endpoints |
| Get SQL endpoint details |
| Get TDS connection string |
| Execute a T-SQL query against a lakehouse or warehouse SQL endpoint |
Variable Library (7 tools)
Tool | Description |
| List all variable libraries in a workspace |
| Get variable library details including active value set name |
| Create a variable library, optionally with definition files from |
| Update name, description, or active value set |
| Delete a variable library |
| Get definition (LRO). Writes files (variables.json, valueSets/) to |
| Update definition from directory of |
Git Integration (9 tools)
Tool | Description |
| Get Git connection details for a workspace |
| Get Git status of items (sync state between workspace and remote) |
| Connect a workspace to a Git repository (Azure DevOps or GitHub) |
| Disconnect a workspace from its Git repository |
| Initialize a Git connection after connecting (LRO) |
| Commit workspace changes to the connected Git repository (LRO) |
| Update workspace from the connected Git repository (LRO) |
| Get Git credentials configuration for the current user |
| Update Git credentials configuration for the current user |
Deployment Pipeline (12 tools)
Tool | Description |
| List all deployment pipelines accessible to the user |
| Get details of a specific deployment pipeline |
| Create a new deployment pipeline |
| Update deployment pipeline name or description |
| Delete a deployment pipeline |
| List all stages in a deployment pipeline |
| List all items in a specific stage |
| Assign a workspace to a pipeline stage |
| Unassign a workspace from a pipeline stage |
| Deploy items from one stage to another (LRO) |
| List operations (deployment history) |
| Get details of a specific deployment operation |
Mirrored Database (11 tools)
Tool | Description |
| List all mirrored databases in a workspace |
| Get details of a specific mirrored database |
| Create a new mirrored database (LRO) |
| Update mirrored database name or description |
| Delete a mirrored database |
| Get mirrored database definition (LRO). Writes files to |
| Update definition (LRO). Reads from |
| Start mirroring for a mirrored database |
| Stop mirroring for a mirrored database |
| Get the mirroring status |
| Get mirroring status of individual tables |
KQL Database (7 tools)
Tool | Description |
| List all KQL databases in a workspace |
| Get details of a specific KQL database |
| Create a new KQL database (LRO). Requires a parent eventhouse |
| Update KQL database name or description |
| Delete a KQL database |
| Get KQL database definition (LRO). Writes files to |
| Update definition (LRO). Reads from |
ML Model (5 tools)
Tool | Description |
| List all ML models in a workspace |
| Get details of a specific ML model |
| Create a new ML model (LRO) |
| Update ML model name or description |
| Delete an ML model |
ML Experiment (5 tools)
Tool | Description |
| List all ML experiments in a workspace |
| Get details of a specific ML experiment |
| Create a new ML experiment (LRO) |
| Update ML experiment name or description |
| Delete an ML experiment |
Copy Job (11 tools)
Tool | Description |
| List all copy jobs in a workspace |
| Get details of a specific copy job |
| Create a new copy job |
| Update copy job name or description |
| Delete a copy job |
| Get copy job definition (LRO). Writes files to |
| Update definition (LRO). Reads from |
| Run a copy job on demand |
| Get copy job run status |
| Cancel a running copy job |
| List all run instances for a copy job |
External Data Share (4 tools)
Tool | Description |
| List all external data shares for an item |
| Get details of a specific external data share |
| Create a new external data share for an item |
| Revoke an external data share |
Environment (20 tools)
Fabric Environments are the attachable runtime unit for notebooks and Spark job definitions — they bundle a runtime version, a Spark compute configuration, and a set of libraries. Tools cover the full CRUD surface plus the staging/publish lifecycle.
Tool | Description |
| List all environments in a workspace |
| Get environment metadata including publish state |
| Create a new environment (optionally seeded with a definition from |
| Update environment display name or description |
| Delete an environment |
| Get the environment public definition (LRO). Writes files to |
| Override the environment public definition (LRO). Reads from |
| Trigger a publish to make staging changes effective (LRO) |
| Cancel an ongoing publish operation |
| List staging libraries (published + pending) |
| Export staging external libraries as |
| Upload |
| Upload a |
| Delete a custom library from staging by filename |
| Remove a single external library from staging (one at a time) |
| Get the staging Spark compute configuration |
| Update staging Spark compute (pool, cores, memory, runtime, sparkProperties) |
| List published (currently effective) libraries |
| Get published Spark compute configuration |
| Export published external libraries as |
License
AGPL-3.0
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mkoziel2000/mcp-fabric-api'
If you have feedback or need assistance with the MCP directory API, please join our Discord server