npx skills add ...
npx skills add microsoft/skills-for-fabric --skill sqldw-authoring-cli
Execute authoring T-SQL (DDL, DML, data ingestion, transactions, schema changes) against Microsoft Fabric Data Warehouse and SQL endpoints via the MCP `fabric-sqlendpoint-execute_query` tool. Use when the user wants to: (1) create/alter/drop tables, (2) insert/update/delete/merge data, (3) run COPY INTO or OPENROWSET ingestion, (4) manage transactions or stored procedures, (5) perform schema evolution, (6) use time travel or snapshots, (7) generate ETL/ELT workflows, (8) create views/functions/procedures on Lakehouse SQLEP. Triggers: "create table in warehouse", "insert data via T-SQL", "load from ADLS", "COPY INTO", "run ETL with T-SQL", "alter warehouse table", "upsert with T-SQL", "merge into warehouse", "create T-SQL procedure", "warehouse time travel", "recover deleted warehouse data", "create warehouse schema", "deploy warehouse", "transaction conflict", "snapshot isolation error".
npx skills add microsoft/skills-for-fabric --skill sqldw-authoring-cli
Telemetry — MANDATORY. Every
api.fabric.microsoft.comcall must carryx-ms-fabric-skill: sqldw-authoring-cli(az rest:--headers "x-ms-fabric-skill=sqldw-authoring-cli"), including every LRO poll,fabric_lroand retry. Snippets omit it — add it anyway.
Update Check — ONCE PER SESSION (mandatory) The first time this skill is used in a session, run the check-updates skill before proceeding.
- GitHub Copilot CLI / VS Code: invoke the
check-updatesskill.- Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version.
- Skip if the check was already performed earlier in this session.
CRITICAL NOTES
- To find the workspace details (including its ID) from workspace name: list all workspaces and, then, use JMESPath filtering
- To find the item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace and, then, use JMESPath filtering
⚠️ SQL Execution Override: For SQL data-plane execution, this skill supersedes COMMON-CLI SQL/TDS guidance. Use MCP
fabric-sqlendpoint-execute_query(see Tool Stack) unless explicitly using Legacy CLI Fallback.
| Task | Reference | Notes |
|---|---|---|
| Finding Workspaces and Items in Fabric | COMMON-CLI.md § Finding Workspaces and Items in Fabric | Mandatory — READ link first [needed for finding workspace id by its name or item id by its name, item type, and workspace id] |
| Fabric Topology & Key Concepts | COMMON-CORE.md § Fabric Topology & Key Concepts | |
| Environment URLs | COMMON-CORE.md § Environment URLs | |
| Authentication & Token Acquisition | COMMON-CORE.md § Authentication & Token Acquisition | Wrong audience = 401; read before any auth issue |
| Core Control-Plane REST APIs | COMMON-CORE.md § Core Control-Plane REST APIs | Includes pagination, LRO polling, and rate-limiting patterns |
| OneLake Data Access | COMMON-CORE.md § OneLake Data Access | Requires storage.azure.com token, not Fabric token |
| Definition Envelope | ITEM-DEFINITIONS-CORE.md § Definition Envelope | Definition payload structure |
| Per-Item-Type Definitions | ITEM-DEFINITIONS-CORE.md § Per-Item-Type Definitions | Support matrix, decoded content, part paths — REST specs, CLI recipes |
| Job Execution | COMMON-CORE.md § Job Execution | |
| Capacity Management | COMMON-CORE.md § Capacity Management | |
| Gotchas, Best Practices & Troubleshooting (Platform) | COMMON-CORE.md § Gotchas, Best Practices & Troubleshooting | |
| Tool Selection Rationale | COMMON-CLI.md § Tool Selection Rationale | |
| Authentication Recipes | COMMON-CLI.md § Authentication Recipes | az login flows and token acquisition |
Fabric Control-Plane API via az rest | COMMON-CLI.md § Fabric Control-Plane API via az rest | Always pass --resource; includes pagination and LRO helpers |
OneLake Data Access via curl | COMMON-CLI.md § OneLake Data Access via curl | Use curl not az rest (different token audience) |
| SQL / TDS Data-Plane Access | COMMON-CLI.md § SQL / TDS Data-Plane Access | Legacy sqlcmd reference (MCP is primary — see Tool Stack) |
| Job Execution (CLI) | COMMON-CLI.md § Job Execution | |
| OneLake Shortcuts | COMMON-CLI.md § OneLake Shortcuts | |
| Capacity Management (CLI) | COMMON-CLI.md § Capacity Management | |
| Composite Recipes | COMMON-CLI.md § Composite Recipes | |
| Gotchas & Troubleshooting (CLI-Specific) | COMMON-CLI.md § Gotchas & Troubleshooting (CLI-Specific) | az rest audience, shell escaping, token expiry |
| Quick Reference | COMMON-CLI.md § Quick Reference | az rest template + token audience/tool matrix |
| Item-Type Capability Matrix | SQLDW-CONSUMPTION-CORE.md § Item-Type Capability Matrix | Shows read-only (SQLEP) vs read-write (DW) |
| Connection Fundamentals | SQLDW-CONSUMPTION-CORE.md § Connection Fundamentals | TDS, port 1433, Entra-only, no MARS |
| Supported T-SQL Surface Area (Consumption Focus) | SQLDW-CONSUMPTION-CORE.md § Supported T-SQL Surface Area | Read before writing T-SQL — includes data types (no nvarchar/datetime/money) |
| Read-Side Objects You Can Create | SQLDW-CONSUMPTION-CORE.md § Read-Side Objects You Can Create | Views, TVFs, scalar UDFs, procedures |
| Temporary Tables | SQLDW-CONSUMPTION-CORE.md § Temporary Tables | |
| Cross-Database Queries | SQLDW-CONSUMPTION-CORE.md § Cross-Database Queries | 3-part naming, same workspace only |
| Security for Consumption | SQLDW-CONSUMPTION-CORE.md § Security for Consumption | GRANT/DENY, RLS, CLS, DDM |
| Monitoring and Diagnostics | SQLDW-CONSUMPTION-CORE.md § Monitoring and Diagnostics | Includes query labels; DMVs (live) + queryinsights.* (30-day history) |
| Performance: Best Practices and Troubleshooting | SQLDW-CONSUMPTION-CORE.md § Performance: Best Practices and Troubleshooting | Statistics, caching, clustering, query tips |
| REST API: Refresh SQL Endpoint Metadata | SQLDW-CONSUMPTION-CORE.md § REST API: Refresh SQL Endpoint Metadata | Force metadata sync when SQLEP is stale after ETL |
| System Catalog Queries (Metadata Exploration) | SQLDW-CONSUMPTION-CORE.md § System Catalog Queries | sys.tables, sys.columns, sys.views, sys.stats |
| Common Consumption Patterns | SQLDW-CONSUMPTION-CORE.md § Common Consumption Patterns | Reporting views, cross-DB analytics, temp table staging |
| Gotchas and Troubleshooting (Consumption) | SQLDW-CONSUMPTION-CORE.md § Gotchas and Troubleshooting Reference | 18 numbered issues with cause + resolution |
| Quick Reference: Consumption Capabilities | SQLDW-CONSUMPTION-CORE.md § Quick Reference: Consumption Capabilities | |
| Authoring Capability Matrix | SQLDW-AUTHORING-CORE.md § Authoring Capability Matrix | Read first — DW vs SQLEP authoring scope |
| Table DDL (DW Only) | SQLDW-AUTHORING-CORE.md § Table DDL (DW Only) | CREATE, CTAS, ALTER, sp_rename, DROP, constraints, schema evolution, IDENTITY |
| DML Operations (DW Only) | SQLDW-AUTHORING-CORE.md § DML Operations (DW Only) | INSERT...SELECT, UPDATE, DELETE, TRUNCATE, MERGE |
| Data Ingestion (DW Only) | SQLDW-AUTHORING-CORE.md § Data Ingestion (DW Only) | COPY INTO, OPENROWSET, method comparison |
| Transactions (DW Only) | SQLDW-AUTHORING-CORE.md § Transactions (DW Only) | Snapshot isolation only; write-write conflict rules |
| Stored Procedures (Authoring Patterns) | SQLDW-AUTHORING-CORE.md § Stored Procedures (Authoring Patterns) | ETL procs, upsert, CTAS swap, cursor replacement |
| Time Travel and Warehouse Snapshots | SQLDW-AUTHORING-CORE.md § Time Travel and Warehouse Snapshots (DW Only) | FOR TIMESTAMP AS OF; 30-day retention; snapshots GA |
| Source Control and CI/CD | SQLDW-AUTHORING-CORE.md § Source Control and CI/CD (DW Only — Preview) | Git integration, SQL DB projects, deployment pipelines |
| Authoring Permission Model | SQLDW-AUTHORING-CORE.md § Authoring Permission Model | Contributor minimum for DDL/DML; Admin for GRANT |
| Authoring Gotchas and Troubleshooting | SQLDW-AUTHORING-CORE.md § Authoring Gotchas and Troubleshooting | 17-row issue/cause/resolution table |
| Common Authoring Patterns | SQLDW-AUTHORING-CORE.md § Common Authoring Patterns | Incremental load, SCD Type 1, SQLEP view layer |
| Quick Reference: Authoring Decision Guide | SQLDW-AUTHORING-CORE.md § Quick Reference: Authoring Decision Guide | Scenario → recommended approach lookup |
| Core Authoring via MCP | authoring-cli-quickref.md § Core Authoring via MCP [blocked] | Table DDL, DML, data ingestion via execute_query |
| Advanced Authoring Patterns via MCP | authoring-cli-quickref.md § Advanced Authoring Patterns via MCP [blocked] | Transactions, schema evolution, stored procedures, time travel |
| MCP Workflow Templates | authoring-script-templates.md § MCP Workflow Templates [blocked] | COPY INTO, ELT pipeline, upsert with retry, schema migration, time travel recovery |
| Tool Stack | SKILL.md § Tool Stack | fabric-sqlendpoint-execute_query MCP tool + az CLI; verify before first op |
| Connection | SKILL.md § Connection | workspaceId/itemId discovery, execute example |
| Query Execution | authoring-cli-quickref.md § Query Execution [blocked] | MCP tool call format, batch considerations |
| Agentic Workflows | SKILL.md § Agentic Workflows | Start here — discover schema before any write |
| Monitoring Authoring Operations | authoring-cli-quickref.md § Monitoring Authoring Operations [blocked] | Active DML/DDL, recent ETL, failed writes |
| Gotchas, Rules, Troubleshooting | SKILL.md § Gotchas, Rules, Troubleshooting | MUST DO / AVOID / PREFER checklists |
| Agent Integration Notes | authoring-cli-quickref.md § Agent Integration Notes [blocked] | Platform-specific tips (Copilot CLI, Claude Code) |
| Tool | Role | Install |
|---|---|---|
fabric-sqlendpoint-execute_query MCP tool | Primary: Execute DDL/DML T-SQL queries against Fabric SQL Endpoints. Returns CSV results. Auth handled by MCP protocol. | No install — server-side. Requires MCP server registration. |
az CLI | Auth (az login), Fabric REST for workspace/item discovery, snapshot management. | Pre-installed in most dev environments |
jq | Parse JSON from az rest | Pre-installed or trivial |
IMPORTANT — MCP vs sqlcmd: This skill uses the
fabric-sqlendpoint-execute_queryMCP tool for all T-SQL execution. Do not use COMMON-CLI SQL/TDS/sqlcmd sections for query execution.
Agent preflight — verify before first operation:
- Confirm the
fabric-sqlendpoint-execute_querytool is available in your tool list. This tool is provided by thefabric-sqlendpointMCP server, which is registered either by installing a Fabric skills plugin (the path for end users) or via this repo's.mcp.json— other MCP clients may register it through their own configuration.- If no matching tool is found, the user must register the Fabric SQL Endpoint MCP server. See mcp-setup/.
- Global URL:
https://api.fabric.microsoft.com/v1/mcp/dataPlane/sqlEndpoint- Item-scoped URL:
https://api.fabric.microsoft.com/v1/mcp/dataPlane/workspaces/{workspaceId}/items/{itemId}/sqlEndpoint
Tool name may differ:
execute_queryis the logical operation. Depending on how the server is registered, the concrete tool name in your tool list may be prefixed (e.g.fabric-sqlendpoint-execute_queryorsqlendpoint-global-execute_query). Invoke the concrete name shown in your tool list, always passingworkspaceId,itemId, andquery.
| Parameter | Type | Description |
|---|---|---|
workspaceId | string (UUID) | The workspace GUID containing the target item |
itemId | string (UUID) | The Fabric item GUID to target. For a Warehouse, use the item id. For a Lakehouse, use its SQL analytics endpoint id (properties.sqlEndpointProperties.id) — not the Lakehouse item id. |
query | string | T-SQL query text (single batch — no GO separators or sqlcmd meta-commands) |
Returns: CSV resource (RFC 4180) with tabular results + metadata text.
Batch guidance: Multiple statements without
GOare allowed in one call (e.g.,CREATE TABLE ...; INSERT INTO ...). However, only the last result set is returned, and an error in any statement fails the entire batch. Prefer separatefabric-sqlendpoint-execute_querycalls for independent DDL/DML operations — this gives clearer error messages and lets you verify each step succeeded before proceeding.
| Limit | Value | Notes |
|---|---|---|
| Max rows returned | 10,000 | For DDL/DML, row count metadata indicates affected rows |
| Query timeout | 300 seconds | Long-running operations may timeout |
| Rate limit | 20 requests/min per identity | HTTP 429 returned when exceeded |
These values are observed defaults, not a documented contract — the MCP service can change them. Treat them as guidance and confirm the current behavior from live
429/ timeout / truncation responses (or Microsoft Learn, if/when published) rather than relying on the exact numbers.
| Capability | Warehouse (DW) | Lakehouse/Mirrored DB SQLEP |
|---|---|---|
| Table DDL (CREATE/ALTER/DROP) | ✅ | ❌ |
| DML (INSERT/UPDATE/DELETE/MERGE) | ✅ | ❌ |
| COPY INTO, OPENROWSET (ingest) | ✅ | OPENROWSET read-only |
| Transactions | ✅ | ❌ |
| Time travel, snapshots | ✅ | ❌ |
| CREATE VIEW/FUNCTION/PROCEDURE | ✅ | ✅ |
| CREATE SCHEMA | ✅ | ✅ |
These constraints are hard requirements — violating them produces errors:
| Constraint | Details |
|---|---|
No DEFAULT in CREATE TABLE | Default values not supported. Set defaults in application/INSERT logic. |
No PRIMARY KEY inside CREATE TABLE | Must add via ALTER TABLE ... ADD CONSTRAINT ... PRIMARY KEY NONCLUSTERED (col) NOT ENFORCED |
DATETIME2 requires precision | Always use DATETIME2(6), never bare DATETIME2 |
| Unsupported data types | NCHAR, NVARCHAR, TEXT, IMAGE, MONEY, SMALLMONEY, DATETIME — use VARCHAR, DECIMAL, DATETIME2(6) instead |
No WITH DISTRIBUTION | Distribution is automatic in Fabric |
Constraints must be NOT ENFORCED | PRIMARY KEY NONCLUSTERED NOT ENFORCED, UNIQUE NONCLUSTERED NOT ENFORCED, FOREIGN KEY NOT ENFORCED |
PK columns must be NOT NULL | Declare PK columns as NOT NULL in CREATE TABLE before adding PK constraint |
ALTER TABLE scope | Add/drop nullable columns (must specify NULL) and add/drop constraints (NOT ENFORCED only) are GA; ALTER COLUMN type changes are in preview (see note below) |
MERGEandALTER COLUMNare NOT hard errors. Per T-SQL surface area,MERGEis a generally available Warehouse feature andALTER TABLE ... ALTER COLUMNis in preview. Prefer an explicitDELETE+INSERTwhen snapshot-conflict isolation matters, andCTAS+sp_renamefor production-critical column-type changes — as a robustness choice, not because the syntax is blocked.
Correct CREATE TABLE pattern:
Additional supported patterns:
CREATE TABLE [dbo].[clone] AS CLONE OF [dbo].[source] — duplicate table structure + dataCOPY INTO — highest-throughput ingestion from external storageYou need the workspace GUID and item GUID to call fabric-sqlendpoint-execute_query:
No additional connection setup needed — authentication is handled transparently by the MCP protocol.
For DDL (CREATE/ALTER/DROP), the tool returns success with metadata. Always verify:
Before any write operation, discover the target schema:
SELECT TOP 5 on relevant tables.fabric-sqlendpoint-execute_query(workspaceId, itemId, query). For multi-batch operations (e.g., CREATE PROCEDURE with BEGIN/END), use a single batch without GO.SELECT COUNT(*), SELECT TOP 5).For full authoring gotchas: SQLDW-AUTHORING-CORE.md Authoring Gotchas and Troubleshooting. For CLI-specific issues: COMMON-CLI.md Gotchas & Troubleshooting (CLI-Specific).
GET /v1/workspaces/{id} and check capacityId.fabric-sqlendpoint-execute_query MCP tool is available — check the tool list before the first operation. If unavailable, instruct the user to register the MCP server.workspaceId and itemId first — resolve the target Warehouse via az rest; the tool takes GUIDs, not an FQDN or -d <DatabaseName>.az login first (for discovery) — the az rest workspace/warehouse lookups need an Azure CLI session. The fabric-sqlendpoint MCP server itself ships headerless and authenticates via your MCP client's native Fabric session, not the Azure CLI token; no signed-in session → auth failure on either path.SET NOCOUNT ON; in scripts — suppresses row-count messages that corrupt output.GO separators and no -i file.sql; split multi-batch work (CREATE PROCEDURE, multi-step transactions) into separate fabric-sqlendpoint-execute_query calls.OPTION (LABEL = 'ETL_description').CAST() in CTAS to control output types.GO separators — the MCP tool accepts only a single T-SQL batch. Combine related DDL in one statement or call fabric-sqlendpoint-execute_query multiple times.:setvar, :r, -i) — not available in MCP tool. Inline all SQL in the query parameter.SELECT * — 10,000 row limit. Always use TOP N or WHERE to limit result sets.INSERT ... VALUES at scale — creates tiny Parquet files. Use INSERT...SELECT, CTAS, or COPY INTO.DROP TABLE IF EXISTS + CREATE TABLE to refresh — loses time-travel history. Use TRUNCATE TABLE + INSERT INTO.sp_rename for production-critical column-type changes (Schema Evolution).EXEC sp_executesql N'CREATE TABLE ...'.MultipleActiveResultSets from connection strings.CREATE TABLE + INSERT — parallel, single-operation.INSERT ... SELECT over singleton INSERTs.COPY INTO for external file ingestion — highest throughput.TRUNCATE TABLE over DELETE FROM without WHERE — faster, preserves history.fabric-sqlendpoint-execute_query call when no GO is required between statements.fabric-sqlendpoint-execute_query MCP tool over sqlcmd for all T-SQL operations.SET NOCOUNT ON; prefix — reduces metadata noise in results.TOP N or WHERE clauses — stay within 10K row limit.| Symptom | Fix |
|---|---|
| Error 24556/24706 snapshot conflict | Serialize writes to same table; retry with backoff |
| COPY INTO auth error | Grant Storage Blob Data Reader on ADLS; or SAS in CREDENTIAL |
| COPY INTO from OneLake fails | Provision workspace identity; check firewall rules |
| CTAS unexpected types | Use explicit CAST() in SELECT |
| Singleton INSERT poor perf | Remediate: CTAS + drop + rename to consolidate Parquet |
fabric-sqlendpoint-execute_query tool not available | MCP server not registered — user must add Fabric SQL Endpoint MCP server |
| HTTP 429 rate limit exceeded | Wait 60s and retry; consolidate queries into fewer calls |
| Query timeout (300s) | Break into smaller operations; for COPY INTO, check source file sizes |
| sp_rename on SQLEP fails | Only available on Warehouse, not Lakehouse/Mirrored DB |
| Deploy drops/recreates table | Avoid ALTER TABLE in DB project; apply manually |
| Only last result set returned | MCP returns only the final SELECT. Split multi-SELECT batches into separate calls. |
| Binary columns unreadable | Columns with [base64] suffix are base64-encoded. Decode if needed. |