Описание
Force Fabric — Model Context Protocol server
README
Force Fabric MCP Server
Detect issues. Auto-fix problems. Optimize your Fabric tenant.
An MCP server that scans Lakehouses, Warehouses, Eventhouses, Semantic Models, and Gateways with 158+ diagnostic rules — and can auto-fix 67 of them.
Quick Start • Detect • Auto-Fix • Rules • Architecture
Key Features
Detect — 158+ Rules Across 5 Fabric Item Types
| Item | Rules | What's Scanned |
|---|---|---|
| Lakehouse | 35 | SQL Endpoint + OneLake Delta Log (VACUUM history, file sizes, partitioning, retention, V-Order, CDF, deletion vectors) |
| Warehouse | 44 | Schema, query performance, security (PII, RLS), database config, FK indexes, computed columns |
| Eventhouse | 27/db | Extent fragmentation, caching/retention/merge/encoding/partitioning/sharding/autocompaction policies, ingestion, streaming, materialized views |
| Semantic Model | 41 | DAX anti-patterns, model structure, COLUMNSTATISTICS BPA, relationships, disconnected tables, implicit measures |
| Gateway | 12 | Gateway status, version, unused datasources, connectivity health, excess admins, orphaned connections, duplicates |
| 158+ total |
Fix — 67 Auto-Fixable Issues
| Item | Auto-Fixes | Method |
|---|---|---|
| Warehouse | 16 fixes | SQL DDL executed directly |
| Lakehouse | 20 fixes | Livy Spark SQL + REST API |
| Semantic Model | 19 fixes | XMLA/TMSL atomic commands + BIM/TMDL fallback |
| Eventhouse | 11 fixes | KQL management commands (with dry-run preview) |
| Gateway | 4 fixes | Fabric + Power BI REST API |
| 67 total |
Unified Output
Every scan returns a clean results table — only issues shown, passed rules counted in summary:
29 rules — 18 passed | 1 failed | 10 warning
| Rule | Status | Finding | Recommendation |
|------|--------|---------|----------------|
| LH-007 Key Columns Are NOT NULL | FAIL | 16 key column(s) allow NULL | Add NOT NULL constraints |
| LH-017 Regular VACUUM Executed | WARN | 4 table(s) need VACUUM | Run VACUUM weekly |
Quick Start
Prerequisites
- Node.js 18+
- Azure CLI with
az logincompleted - Fabric capacity with items to scan
Install
git clone https://github.com/tmdaidevs/Force-Fabric-MCP-Server.git
cd Force-Fabric-MCP-Server
npm install
npm run build
Configure VS Code
Add to .vscode/mcp.json in your project:
{
"servers": {
"fabric-optimization": {
"type": "stdio",
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/Force-Fabric-MCP-Server"
}
}
}
Use
1. "Login to Fabric with azure_cli"
2. "List all lakehouses in workspace <id>"
3. "Scan lakehouse <id> in workspace <id>"
4. "Fix warehouse <id> in workspace <id>"
Detect & Scan
Available Scan Tools
| Tool | What It Does |
|---|---|
lakehouse_optimization_recommendations |
Scans SQL Endpoint + reads Delta Log files from OneLake |
warehouse_optimization_recommendations |
Connects via SQL and runs 44 diagnostic queries |
warehouse_analyze_query_patterns |
Focused analysis of slow/frequent/failed queries |
eventhouse_optimization_recommendations |
Runs KQL diagnostics on each KQL database |
semantic_model_optimization_recommendations |
Executes DAX + MDSCHEMA DMVs for BPA analysis |
gateway_optimization_recommendations |
Scans all gateways and connections for health, usage, and security |
Data Sources
┌─────────────────────────────────────┐
│ Fabric REST API │
│ Workspaces, Items, Gateways, │
│ Connections, Metadata │
└──────────────┬──────────────────────┘
│
┌──────────────┬───────────────┼───────────────┬──────────────┬──────────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌─────────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ SQL Client │ │ KQL REST │ │ OneLake ADLS │ │ DAX API │ │ MDSCHEMA DMV │ │ Power BI API │
│ (tedious) │ │ API │ │ Gen2 API │ │executeQry│ │ via REST │ │ Gateways │
└──────┬──────┘ └────┬─────┘ └──────┬───────┘ └────┬─────┘ └──────┬───────┘ └──────┬───────┘
│ │ │ │ │ │
Lakehouse SQL Eventhouse Delta Log JSON Semantic Semantic Gateway
Warehouse SQL KQL DBs File Metadata Model DAX Model Meta Datasources
Auto-Fix
All fix tools support dry-run mode (dryRun: true) to preview commands before execution.
Warehouse Fixes — warehouse_fix
| Rule ID | What It Fixes | SQL Command |
|---|---|---|
| WH-001 | Missing primary keys | ALTER TABLE ADD CONSTRAINT PK NOT ENFORCED |
| WH-008 | Stale statistics (>30 days) | UPDATE STATISTICS [table] |
| WH-009 | Disabled constraints | ALTER TABLE WITH CHECK CHECK CONSTRAINT ALL |
| WH-016 | Missing audit columns | ALTER TABLE ADD created_at DATETIME2 DEFAULT GETDATE() |
| WH-018 | Unmasked sensitive data | ALTER COLUMN ADD MASKED WITH (FUNCTION='...') |
| WH-026 | Auto-update statistics off | ALTER DATABASE SET AUTO_UPDATE_STATISTICS ON |
| WH-027 | Result set caching off | ALTER DATABASE SET RESULT_SET_CACHING ON |
| WH-028 | Snapshot isolation off | ALTER DATABASE SET ALLOW_SNAPSHOT_ISOLATION ON |
| WH-029 | Page verify not CHECKSUM | ALTER DATABASE SET PAGE_VERIFY CHECKSUM |
| WH-030 | ANSI settings off | ALTER DATABASE SET ANSI_NULLS ON; ... |
| WH-032 | Missing statistics | UPDATE STATISTICS [table] |
| WH-036 | NOT NULL without defaults | ALTER TABLE ADD DEFAULT ... FOR column |
| WH-040 | Auto-create statistics off | ALTER DATABASE SET AUTO_CREATE_STATISTICS ON |
| WH-041 | Query Store off | ALTER DATABASE SET QUERY_STORE = ON |
| WH-044 | FK columns missing indexes | CREATE NONCLUSTERED INDEX ON [table]([col]) |
Eventhouse Fixes — eventhouse_fix
| Rule ID | What It Fixes | KQL Command |
|---|---|---|
| EH-002 | Fragmented extents | .merge table ['name'] |
| EH-004 | Missing caching policy | .alter database policy caching hot = 30d |
| EH-005 | Missing retention policy | .alter database policy retention softdelete = 365d |
| EH-006 | Unhealthy materialized views | .enable materialized-view ['name'] |
| EH-014 | Missing ingestion batching | .alter database policy ingestionbatching ... |
| EH-016 | Large tables without partitioning | .alter table policy partitioning ... |
| EH-017 | Suboptimal merge policy | .alter table policy merge ... |
| EH-021 | Autocompaction disabled | .alter database policy autocompaction ... |
| EH-022 | Extent tags retention missing | .alter database policy extent_tags_retention ... |
| EH-024 | High-volume tables without streaming | .alter table policy streamingingestion enable |
| EH-025 | Stale materialized views | .refresh materialized-view ['name'] |
Lakehouse Fixes — lakehouse_fix / lakehouse_auto_optimize
Executes Spark SQL via Livy API (no notebook needed). Falls back to temporary notebook if Livy is unavailable.
| Fix ID | What It Fixes | Spark SQL |
|---|---|---|
| auto-optimize | Auto-optimize disabled | SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'='true') |
| retention | No log retention policy | SET TBLPROPERTIES ('delta.logRetentionDuration'='interval 30 days') |
| data-skipping | Data skipping not configured | SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols'='32') |
| audit-columns | Missing created_at/updated_at | ADD COLUMNS (created_at TIMESTAMP, updated_at TIMESTAMP) |
| v-order | V-Order compression disabled | SET TBLPROPERTIES ('delta.parquet.vorder.enabled'='true') |
| change-data-feed | Change Data Feed not enabled | SET TBLPROPERTIES ('delta.enableChangeDataFeed'='true') |
| column-mapping | Column mapping disabled | SET TBLPROPERTIES ('delta.columnMapping.mode'='name') |
| checkpoint-interval | Checkpoint interval too high | SET TBLPROPERTIES ('delta.checkpointInterval'='10') |
| deletion-vectors | Deletion vectors not enabled | SET TBLPROPERTIES ('delta.enableDeletionVectors'='true') |
| compute-stats | Statistics missing or stale | ANALYZE TABLE ... COMPUTE STATISTICS |
Semantic Model Fixes — semantic_model_fix
Uses XMLA/TMSL for atomic per-object changes. Falls back to BIM/TMDL download-modify-upload if XMLA is unavailable.
| Fix ID | What It Fixes |
|---|---|
| SM-FIX-FORMAT | Add format strings to unformatted measures |
| SM-FIX-DESC | Add descriptions to visible tables |
| SM-FIX-HIDDEN | Set IsAvailableInMDX=false on hidden columns |
| SM-FIX-DATE | Mark date/calendar tables as Date table |
| SM-FIX-KEY | Set IsKey=true on PK columns in relationships |
| SM-FIX-AUTODATE | Remove auto-date tables |
| SM-FIX-IFERROR | Replace IFERROR with IF(ISERROR()) |
| SM-FIX-EVALLOG | Strip EVALUATEANDLOG debug wrappers |
| SM-FIX-ADDZERO | Remove +0 anti-pattern from measures |
| SM-FIX-DIRECTREF | Remove duplicate direct-reference measures |
| SM-FIX-SUMX | Replace SUMX(T, T[Col]) with SUM(T[Col]) |
| SM-FIX-MEASUREDESC | Auto-generate measure descriptions |
| SM-FIX-MEASURENAME | Clean whitespace/tabs from measure names |
| SM-FIX-HIDEDESC | Hide description/comment columns |
| SM-FIX-HIDEGUID | Hide GUID/UUID columns |
| SM-FIX-CONSTCOL | Remove constant columns (1 distinct value) |
| SM-FIX-REMOVEFILTERS | Replace ALL() with REMOVEFILTERS() |
| SM-FIX-BIDI | Switch bidirectional cross-filters to single direction |
| SM-FIX-SUMMARIZE | Set SummarizeBy=None on implicit measure columns |
Gateway Fixes — gateway_fix
| Rule ID | What It Fixes | API Action |
|---|---|---|
| GW-004 | Unused datasources (no bindings) | DELETE /gateways/{id}/datasources/{id} |
| GW-006 | Excessive admins (>5 per datasource) | DELETE /gateways/{id}/datasources/{id}/users/{email} |
| GW-008 | Orphaned cloud connections | DELETE /v1/connections/{id} |
| GW-010 | Duplicate datasources on same gateway | DELETE duplicate datasource |
Rule Reference
Summary
| Category | Rules | Auto-Fixable | Scan Method |
|---|---|---|---|
| Lakehouse | 35 | 20 | SQL + Delta Log + Livy |
| Warehouse | 44 | 16 | SQL DDL |
| Eventhouse | 27/db | 11 | KQL management commands |
| Semantic Model | 41 | 19 | DAX + DMV + XMLA/TMSL |
| Gateway | 12 | 4 | Fabric + Power BI REST |
| Total | 158+ | 67 |
Lakehouse — 35 Rules (click to expand)
| # | Rule | Category | Severity | Fixable |
|---|---|---|---|---|
| LH-001 | SQL Endpoint Active | Availability | HIGH | — |
| LH-002 | Medallion Architecture Naming | Maintainability | LOW | — |
| LH-003 | All Tables Use Delta Format | Performance | HIGH | Spark |
| LH-004 | Table Maintenance Recommended | Performance | MEDIUM | REST |
| LH-005 | No Empty Tables | Data Quality | MEDIUM | Spark |
| LH-006 | No Over-Provisioned String Columns | Performance | MEDIUM | — |
| LH-007 | Key Columns Are NOT NULL | Data Quality | HIGH | — |
| LH-008 | No Float/Real Precision Issues | Data Quality | MEDIUM | — |
| LH-009 | Column Naming Convention | Maintainability | LOW | Spark |
| LH-010 | Date Columns Use Proper Types | Data Quality | MEDIUM | — |
| LH-011 | Numeric Columns Use Proper Types | Data Quality | MEDIUM | — |
| LH-012 | No Excessively Wide Tables | Maintainability | LOW | — |
| LH-013 | Schema Has NOT NULL Constraints | Data Quality | MEDIUM | — |
| LH-014 | Tables Have Audit Columns | Maintainability | LOW | Livy |
| LH-015 | Consistent Date Types Per Table | Data Quality | LOW | — |
| LH-016 | Large Tables Are Partitioned | Performance | MEDIUM | — |
| LH-017 | Regular VACUUM Executed | Maintenance | MEDIUM | REST |
| LH-018 | Regular OPTIMIZE Executed | Performance | MEDIUM | REST |
| LH-019 | No Small File Problem | Performance | HIGH | REST |
| LH-020 | Auto-Optimize Enabled | Performance | MEDIUM | Livy |
| LH-021 | Retention Policy Configured | Maintenance | LOW | Livy |
| LH-022 | Delta Log Version Count Reasonable | Performance | LOW | REST |
| LH-023 | Low Write Amplification | Performance | MEDIUM | — |
| LH-024 | Data Skipping Configured | Performance | LOW | Livy |
| LH-025 | Z-Order on Large Tables | Performance | MEDIUM | REST |
| LH-026 | V-Order Enabled | Performance | MEDIUM | Livy |
| LH-027 | Change Data Feed on Large Tables | Data Management | LOW | Livy |
| LH-028 | Column Mapping Enabled | Maintainability | LOW | Livy |
| LH-029 | Deletion Vectors Enabled | Performance | LOW | Livy |
| LH-030 | Checkpoint Interval Appropriate | Performance | LOW | Livy |
| LH-031 | No Deeply Nested Types | Performance | LOW | — |
| LH-S01 | No Unprotected Sensitive Data | Security | HIGH | — |
| LH-S02 | Large Tables Identified | Performance | INFO | — |
| LH-S03 | No Deprecated Data Types | Maintainability | HIGH | — |
| LH-S04 | All Tables Have Key Columns | Data Quality | MEDIUM | Spark |
Warehouse — 44 Rules (click to expand)
| # | Rule | Category | Severity | Fixable |
|---|---|---|---|---|
| WH-001 | Primary Keys Defined | Data Quality | HIGH | SQL |
| WH-002 | No Deprecated Data Types | Maintainability | HIGH | — |
| WH-003 | No Float/Real Precision Issues | Data Quality | MEDIUM | — |
| WH-004 | No Over-Provisioned Columns | Performance | MEDIUM | — |
| WH-005 | Column Naming Convention | Maintainability | LOW | — |
| WH-006 | Table Naming Convention | Maintainability | LOW | — |
| WH-007 | No SELECT * in Views | Maintainability | LOW | — |
| WH-008 | Statistics Are Fresh | Performance | MEDIUM | SQL |
| WH-009 | No Disabled Constraints | Data Quality | MEDIUM | SQL |
| WH-010 | Key Columns Are NOT NULL | Data Quality | HIGH | — |
| WH-011 | No Empty Tables | Maintainability | MEDIUM | — |
| WH-012 | No Excessively Wide Tables | Maintainability | MEDIUM | — |
| WH-013 | Consistent Date Types | Data Quality | LOW | — |
| WH-014 | Foreign Keys Defined | Maintainability | MEDIUM | — |
| WH-015 | No Large BLOB Columns | Performance | MEDIUM | — |
| WH-016 | Tables Have Audit Columns | Maintainability | LOW | SQL |
| WH-017 | No Circular Foreign Keys | Data Quality | HIGH | — |
| WH-018 | Sensitive Data Protected | Security | HIGH | SQL |
| WH-019 | Row-Level Security | Security | MEDIUM | — |
| WH-020 | Minimal db_owner Privileges | Security | MEDIUM | — |
| WH-021 | No Over-Complex Views | Maintainability | LOW | — |
| WH-022 | Minimal Cross-Schema Dependencies | Maintainability | LOW | — |
| WH-023 | No Very Slow Queries | Performance | HIGH | — |
| WH-024 | No Frequently Slow Queries | Performance | HIGH | — |
| WH-025 | No Recent Query Failures | Reliability | MEDIUM | — |
| WH-026 | AUTO_UPDATE_STATISTICS Enabled | Performance | HIGH | SQL |
| WH-027 | Result Set Caching Enabled | Performance | MEDIUM | SQL |
| WH-028 | Snapshot Isolation Enabled | Concurrency | MEDIUM | SQL |
| WH-029 | Page Verify CHECKSUM | Reliability | MEDIUM | SQL |
| WH-030 | ANSI Settings Correct | Standards | LOW | SQL |
| WH-031 | Database ONLINE | Availability | HIGH | — |
| WH-032 | All Tables Have Statistics | Performance | MEDIUM | SQL |
| WH-033 | Optimal Data Types | Performance | MEDIUM | — |
| WH-034 | No Near-Empty Tables | Maintainability | LOW | — |
| WH-035 | Stored Procedures Documented | Maintainability | LOW | — |
| WH-036 | NOT NULL Columns Have Defaults | Data Quality | MEDIUM | SQL |
| WH-037 | Consistent String Types | Maintainability | LOW | — |
| WH-038 | Schemas Are Documented | Maintainability | LOW | — |
| WH-039 | Query Performance Healthy | Performance | MEDIUM | — |
| WH-040 | AUTO_CREATE_STATISTICS Enabled | Performance | HIGH | SQL |
| WH-041 | Query Store Enabled | Performance | MEDIUM | SQL |
| WH-042 | No Excessive Computed Columns | Maintainability | LOW | — |
| WH-043 | No Forced Query Hints | Performance | LOW | — |
| WH-044 | FK Columns Have Indexes | Performance | MEDIUM | SQL |
Eventhouse — 27 Rules per KQL Database (click to expand)
| # | Rule | Category | Severity | Fixable |
|---|---|---|---|---|
| EH-001 | Query Endpoint Available | Availability | HIGH | — |
| EH-002 | No Extent Fragmentation | Performance | HIGH | KQL |
| EH-003 | Good Compression Ratio | Performance | MEDIUM | — |
| EH-004 | Caching Policy Configured | Performance | MEDIUM | KQL |
| EH-005 | Retention Policy Configured | Data Management | MEDIUM | KQL |
| EH-006 | Materialized Views Healthy | Reliability | HIGH | KQL |
| EH-007 | Data Is Fresh | Data Quality | MEDIUM | — |
| EH-008 | No Slow Query Patterns | Performance | HIGH | — |
| EH-009 | No Recent Failed Commands | Reliability | MEDIUM | — |
| EH-010 | No Ingestion Failures | Reliability | HIGH | — |
| EH-011 | Streaming Ingestion Config | Performance | INFO | — |
| EH-012 | Continuous Exports Healthy | Reliability | MEDIUM | — |
| EH-013 | Hot Cache Coverage | Performance | MEDIUM | — |
| EH-014 | Ingestion Batching Configured | Performance | LOW | KQL |
| EH-015 | Update Policies Configured | Data Management | INFO | — |
| EH-016 | Partitioning on Large Tables | Performance | MEDIUM | KQL |
| EH-017 | Merge Policy Configured | Performance | LOW | KQL |
| EH-018 | Encoding Policy for Poorly Compressed | Performance | MEDIUM | — |
| EH-019 | Row Order Policy | Performance | LOW | — |
| EH-020 | Stored Functions Inventory | Data Management | INFO | — |
| EH-021 | Autocompaction Policy Enabled | Performance | MEDIUM | KQL |
| EH-022 | Extent Tags Retention Configured | Data Management | LOW | KQL |
| EH-023 | Sharding Policy Configured | Performance | INFO | — |
| EH-024 | Streaming on High-Volume Tables | Performance | LOW | KQL |
| EH-025 | Materialized Views Fresh | Data Quality | MEDIUM | KQL |
| EH-026 | Query Volume Health | Performance | INFO | — |
| EH-027 | Ingestion Latency Within SLA | Data Quality | MEDIUM | — |
Semantic Model — 41 Rules (click to expand)
| # | Rule | Category | Severity | Fixable |
|---|---|---|---|---|
| SM-001 | Avoid IFERROR Function | DAX | MEDIUM | XMLA |
| SM-002 | Use DIVIDE Function | DAX | MEDIUM | — |
| SM-003 | No EVALUATEANDLOG in Production | DAX | HIGH | XMLA |
| SM-004 | Use TREATAS not INTERSECT | DAX | MEDIUM | — |
| SM-005 | No Duplicate Measure Definitions | DAX | LOW | — |
| SM-006 | Filter by Columns Not Tables | DAX | MEDIUM | — |
| SM-007 | Avoid Adding 0 to Measures | DAX | LOW | XMLA |
| SM-008 | Measures Have Documentation | Maintenance | LOW | XMLA |
| SM-009 | Model Has Tables | Maintenance | HIGH | — |
| SM-010 | Model Has Date Table | Performance | MEDIUM | XMLA |
| SM-011 | Avoid 1-(x/y) Syntax | DAX | MEDIUM | — |
| SM-012 | No Direct Measure References | DAX | LOW | XMLA |
| SM-013 | Avoid Nested CALCULATE | DAX | MEDIUM | — |
| SM-014 | Use SUM Instead of SUMX | DAX | LOW | XMLA |
| SM-015 | Measures Have Format String | Formatting | LOW | XMLA |
| SM-016 | Avoid FILTER(ALL(...)) | DAX | MEDIUM | — |
| SM-017 | Measure Naming Convention | Formatting | LOW | XMLA |
| SM-018 | Reasonable Table Count | Performance | LOW | — |
| SM-021 | Bidirectional Cross-Filter Overuse | Performance | MEDIUM | XMLA |
| SM-022 | No Implicit Measures | DAX | MEDIUM | XMLA |
| SM-023 | No Disconnected Tables | Data Modeling | MEDIUM | — |
| SM-024 | Use REMOVEFILTERS() not ALL() | DAX | LOW | XMLA |
| SM-025 | No Excessive USERELATIONSHIP | DAX | LOW | — |
| SM-026 | No Complex Relationship Webs | Data Modeling | LOW | — |
| SM-027 | Inactive Relationships Documented | Data Modeling | LOW | — |
| SM-028 | All Measures Have Format Strings | Usability | LOW | XMLA |
| SM-029 | No Pseudo-Hierarchies | Usability | INFO | — |
| SM-B01 | No High Cardinality Text Columns | BPA | HIGH | — |
| SM-B02 | No Description/Comment Columns | BPA | HIGH | XMLA |
| SM-B03 | No GUID/UUID Columns | BPA | HIGH | XMLA |
| SM-B04 | No Constant Columns | BPA | MEDIUM | XMLA |
| SM-B05 | No Booleans Stored as Text | BPA | MEDIUM | — |
| SM-B06 | No Dates Stored as Text | BPA | MEDIUM | — |
| SM-B07 | No Numbers Stored as Text | BPA | MEDIUM | — |
| SM-B08 | Integer Keys Not String Keys | BPA | MEDIUM | — |
| SM-B09 | No Excessively Wide Tables | BPA | MEDIUM | — |
| SM-B10 | No Extremely Wide Tables | BPA | HIGH | — |
| SM-B11 | No Multiple High-Cardinality Columns | BPA | HIGH | — |
| SM-B12 | No Single Column Tables | BPA | LOW | — |
| SM-B13 | No High-Precision Timestamps | BPA | MEDIUM | — |
| SM-B14 | No Low Cardinality in Fact Tables | BPA | LOW | — |
Gateway — 12 Rules (click to expand)
| # | Rule | Category | Severity | Fixable |
|---|---|---|---|---|
| GW-001 | Gateway Online | Availability | HIGH | — |
| GW-002 | Gateway Version Current | Maintenance | MEDIUM | — |
| GW-003 | No Unused Gateways | Hygiene | MEDIUM | — |
| GW-004 | No Unused Datasources | Hygiene | MEDIUM | REST |
| GW-005 | Datasource Connectivity Healthy | Availability | HIGH | — |
| GW-006 | No Excessive Admins | Security | MEDIUM | REST |
| GW-007 | Credentials Not Expired | Security | HIGH | — |
| GW-008 | No Orphaned Cloud Connections | Hygiene | MEDIUM | REST |
| GW-009 | VNet Gateway Configured | Configuration | MEDIUM | — |
| GW-010 | No Duplicate Datasources | Hygiene | LOW | REST |
| GW-011 | Privacy Level Configured | Security | LOW | — |
| GW-012 | Connections Have Display Names | Maintainability | LOW | — |
Architecture
src/
├── index.ts MCP server entry point (stdio transport)
├── auth/
│ └── fabricAuth.ts Azure AD auth (6 methods, token caching)
├── clients/
│ ├── fabricClient.ts Fabric REST API + Power BI API + DAX + model CRUD
│ ├── sqlClient.ts SQL via tedious (Lakehouse + Warehouse)
│ ├── kqlClient.ts KQL/Kusto REST API (Eventhouse)
│ ├── livyClient.ts Livy Spark API (Lakehouse fixes)
│ ├── onelakeClient.ts OneLake ADLS Gen2 + Delta Log parser
│ └── xmlaClient.ts XMLA/TMSL SOAP client (Semantic Model fixes)
└── tools/
├── ruleEngine.ts Shared RuleResult type + unified report renderer
├── auth.ts auth_login, auth_status, auth_logout
├── workspace.ts workspace_list, capacity_info, optimization_report
├── lakehouse.ts 35 rules + 10 Livy fixes + table maintenance
├── warehouse.ts 44 rules + 16 SQL fixes
├── eventhouse.ts 27 rules + 11 KQL fixes + materialized view repair
├── semanticModel.ts 41 rules + 19 XMLA/TMSL fixes
└── gateway.ts 12 rules + 4 REST API fixes
Authentication
| Method | Use Case |
|---|---|
azure_cli |
Recommended — uses your existing az login session |
interactive_browser |
Opens browser for interactive login |
device_code |
Headless or remote environments |
vscode |
Uses VS Code Azure account |
service_principal |
CI/CD pipelines (requires tenantId, clientId, clientSecret) |
default |
Auto-detect best available method |
License
MIT
Установка Force Fabric
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/tmdaidevs/Force-Fabric-MCP-ServerFAQ
Force Fabric MCP бесплатный?
Да, Force Fabric MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Force Fabric?
Нет, Force Fabric работает без API-ключей и переменных окружения.
Force Fabric — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Force Fabric в Claude Desktop, Claude Code или Cursor?
Открой Force Fabric на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Force Fabric with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
