This release is a pre-release and may not be stable for production use.
fabric-dw
Alpha — work in progress. The API and CLI interface may change without notice. See the open issues for current status.
Python CLI and MCP server for administering Microsoft Fabric Data Warehouses and SQL Analytics Endpoints.
Description
fabric-dw provides two interfaces for managing Microsoft Fabric Data Warehouses and SQL Analytics Endpoints:
- CLI — a command-line tool for common DW administration tasks.
- MCP server — a Model Context Protocol server that exposes DW operations as tools for AI assistants.
Authentication is configured via the FABRIC_AUTH environment variable. The default (FABRIC_AUTH=default) uses azure-identity DefaultAzureCredential, which walks environment variables, Workload/Managed Identity, Azure CLI, Azure Developer CLI, Azure PowerShell, and interactive browser in order — any of these will satisfy it. See the Authentication docs for the full chain, all supported sources, and debugging tips.
Installation
pip install fabric-dw
# or run without installing:
uvx fabric-dw --help
After installation, the fdw command is a short alias for fabric-dw — both invoke the same entry point.
Quick Start
CLI
The workspace is now a global root option -w / --workspace placed before the command group. Set a default once with fabric-dw config set workspace <NAME> and omit -w on every subsequent call.
Workspace resolution order: (1) -w flag, (2) FABRIC_DW_DEFAULT_WORKSPACE env var, (3) configured default.
# List all workspaces you have access to
uvx fabric-dw workspaces list
# Set a default workspace so you don't have to repeat -w every time
uvx fabric-dw config set workspace MyWorkspace
# List warehouses and SQL Analytics Endpoints in the default workspace
uvx fabric-dw warehouses list
# Or pass -w explicitly for a one-off override
uvx fabric-dw -w MyWorkspace warehouses list
# Execute a SQL query against a warehouse in the configured default workspace
uvx fabric-dw sql exec SalesWH -q "SELECT TOP 10 * FROM dbo.my_table"
# List restore points for a warehouse
uvx fabric-dw -w MyWorkspace restore-points list SalesWH
MCP Server
Add to your MCP client configuration (e.g. Claude Desktop, VS Code):
{
"mcpServers": {
"fabric-dw": {
"command": "uvx",
"args": ["--from", "fabric-dw", "fabric-dw-mcp"]
}
}
}
The MCP server exposes all CLI operations (workspaces, warehouses, SQL endpoints, audit, queries, snapshots, restore points, schemas, tables, views) as MCP tools. Set FABRIC_AUTH in the environment if you need a non-default auth mode.
Run in Docker
The Docker image's default ENTRYPOINT is the MCP server (fabric-dw-mcp). Use it as-is with your MCP client, or override the entrypoint to run the CLI instead.
docker pull ghcr.io/sdebruyn/fabric-dw:latest
# Run the MCP server (default entrypoint — connect via stdio from your MCP client):
docker run --rm -i \
-e AZURE_CLIENT_ID=… \
-e AZURE_TENANT_ID=… \
-e AZURE_CLIENT_SECRET=… \
-e FABRIC_AUTH=sp \
ghcr.io/sdebruyn/fabric-dw
# Run the CLI instead (override the entrypoint):
docker run --rm \
--entrypoint fabric-dw \
-e AZURE_CLIENT_ID=… \
-e AZURE_TENANT_ID=… \
-e AZURE_CLIENT_SECRET=… \
-e FABRIC_AUTH=sp \
ghcr.io/sdebruyn/fabric-dw --help
Dev images (built from every main merge): ghcr.io/sdebruyn/fabric-dw:main or :<version>.dev<N>.
Package page: ghcr.io/sdebruyn/fabric-dw
Security environment variables
| Variable | Default | Description |
|---|---|---|
FABRIC_MCP_READONLY |
unset | Set to 1 to restrict execute_sql to SELECT/WITH and block all mutating tools. |
FABRIC_MCP_ALLOW_DESTRUCTIVE |
unset | Set to 1 to enable permanently-destructive tools (delete_*, clear_table, restore_warehouse_in_place). Disabled by default. |
FABRIC_MCP_WORKSPACES |
unset | Comma-separated workspace names or GUIDs the server may touch. Unset = all workspaces allowed. |
FABRIC_MCP_ALLOW_REMOTE |
unset | Set to 1 to allow the HTTP transport (--transport http) to bind on a non-loopback address. A warning is logged; ensure an authenticating reverse proxy with TLS fronts the endpoint. |
HTTP transport
The MCP server can be started in HTTP mode for remote clients:
fabric-dw-mcp --transport http [--host 127.0.0.1] [--port 8000]
Binding to non-loopback addresses requires FABRIC_MCP_ALLOW_REMOTE=1. The HTTP transport has no built-in authentication or TLS — always front it with an authenticating reverse proxy.
Develop in a container
Open the repo in GitHub Codespaces or VS Code's Remote-Containers extension — the devcontainer pre-installs Python 3.13, uv, Azure CLI, and the GitHub CLI.
Contributing
See CONTRIBUTING.md for dev setup, branch flow, and how to run tests locally.
📖 Docs: fdw.debruyn.dev (or run uv run --only-group docs zensical serve locally).
Telemetry
fabric-dw collects anonymous, opt-out usage telemetry (install counts, surface usage, Python/OS version). No SQL, identifiers, or credentials are ever sent. To opt out, set FABRIC_DISABLE_TELEMETRY=1. See the Telemetry docs for the full list of collected fields and all opt-out methods. Telemetry is automatically disabled in CI environments.
Security
Please report vulnerabilities privately — see SECURITY.md.
Code of Conduct
This project follows the Contributor Covenant 2.1.
License
MIT — Copyright (c) 2026 Sam Debruyn
Metadata
Release files for fabric-dw 2026.6.0a1.dev275
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fabric_dw-2026.6.0a1.dev275.tar.gz | 1.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fabric_dw-2026.6.0a1.dev275-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.6 MB
Release files / fabric_dw-2026.6.0a1.dev275.tar.gz
| Download URL | fabric_dw-2026.6.0a1.dev275.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a863f4e6fc69ae90d0b0d4fcf64bf348888ca70181f6dc62fbcee7ed182e95d
|
|
BLAKE2b-256 checksum How to use checksums |
4820f65f80eb07bafbef0fabe0ef97210aa456c2aaf139a403f397ef0dc7e285
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / fabric_dw-2026.6.0a1.dev275-py3-none-any.whl
| Download URL | fabric_dw-2026.6.0a1.dev275-py3-none-any.whl |
|---|---|
| Size | 467.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
90e7251d12c7e95139328525ad207c7352bfdee0e9cc0ead9ce8a065d5defd48
|
|
BLAKE2b-256 checksum How to use checksums |
1f61dfd15df146ed110742d610248d9fb5e16987bb1172de52251a82fa1dcc6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|