Reported issues for fabric-dw
Pod holds 23 of 352 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to fabric-dw.
Most discussed
feat(observability): add opt-out telemetry (OpenTelemetry traces + metrics)
Goal
Add opt-out, anonymous, privacy-respecting usage telemetry to the CLI and MCP server so the project maintainers can understand how the tool is actually used — which commands are run, what errors occur, and where. Telemetry is enabled by default but must be trivially disable-able.
This is not about local observability (traces, spans, metrics for the operator's own infrastructure) — that is a separate concern. This issue is strictly about project-level usage telemetry sent fr
Read the thread · 2026-06-15 · closed · 5 comments
feat(permissions): dynamic data masking (column masks + UNMASK), depends on #916
DESIGN ONLY. Depends on #916 (the
permissionsgroup, for the UNMASK permission). Do not implement until #916 has shipped and this design is approved.
Summary
Dynamic data masking (DDM) in Fabric has two parts: (1) managing the mask on a column via ALTER TABLE ... ALTER COLUMN ... ADD/DROP MASKED, and (2) the UNMASK permission that lets a principal see unmasked values (reuses the #916 permissions sql plane). Supported on Warehouse and SQL analytics endpoint.
Docs: https://learn.mi
Read the thread · 2026-06-29 · closed · 3 comments
feat(permissions): row-level security (security policies + predicates), depends on #916
DESIGN ONLY. Depends on #916 (the
permissionsgroup). Do not implement until #916 has shipped and this design is approved.
Summary
Row-level security (RLS) in Fabric restricts which rows a principal can read/write via a SECURITY POLICY that attaches filter and/or block predicates (inline table-valued functions) to a table. This is a NEW surface that manages the POLICY lifecycle and references an EXISTING predicate function; it does NOT author the predicate function body (that is a user-
Read the thread · 2026-06-29 · closed · 3 comments
feat(permissions): column-level security (column-scoped GRANT/DENY), extends #916
DESIGN ONLY. Depends on #916 (the
permissions sqlplane). Do not implement until #916 has shipped and this design is approved.
Summary
Column-level security (CLS) in Fabric is implemented entirely through column-scoped object permissions: GRANT / DENY / REVOKE of SELECT (and a few other permissions) on a comma-delimited column list of a table. There is no separate CLS object; it is a thin extension of the #916 permissions sql commands, not a new group.
Docs: https://learn.mic
Read the thread · 2026-06-29 · closed · 3 comments
feat(permissions)!: new 'permissions' group for T-SQL granular permissions + relocate Fabric item-level permissions
DESIGN ONLY. This issue proposes the command/tool structure for review. No implementation should start until the maintainer approves the design (and the open questions at the bottom are decided).
Goal
Add a new top-level permissions command group that gives full CRUD over T-SQL granular (in-database) permissions on all warehouse securables (database, schema, table, view, function, procedure) via GRANT / REVOKE / DENY, plus reads of the current grants. Relocate the existing **F
Read the thread · 2026-06-29 · closed · 3 comments
Track: set SQL connection program_name to fdw.debruyn.dev (blocked on mssql-python#649)
Queries issued by this tool show up in the warehouse query history / sys.dm_exec_sessions with program_name = "MSSQL-Python", which is the mssql_python driver default. build_connection_string (src/fabric_dw/sql.py) augments the API connection string with Authentication, Encrypt, TrustServerCertificate and Database, but never sets an Application Name, so the driver default leaks through.
We want our connections to be identifiable as this tool: program_name should read "fdw.debruyn.dev".
Fix
Read the thread · 2026-06-27 · open · 3 comments
docs(restore): document Fabric warehouse restore-points REST endpoints
Coordinator-driven doc PR. No public v1 REST is documented for restore points (verified again on 2026-06-07 — Microsoft Learn still only describes the Fabric portal flow). Block on a quick DevTools capture from Sam, then a small `docs/internal/restore-api.md` lands in the repo and unblocks issue #27 (the restore service).
What Sam needs to do (≈10 min)
- Open the Fabric portal on a test warehouse in Edge/Chrome, F12 → Network.
- Filter on `restore`.
- Perform each action and
Read the thread · 2026-06-07 · closed · 3 comments
research: is the GPU query acceleration workspace toggle reachable through an API?
What this is
GPU query acceleration (CoddSpeed) has moved from "Coming Soon" to Early Access Preview. It is switched on per workspace through the Fabric portal: Workspace settings > Data Warehouse > Query acceleration (Preview), and it applies to every warehouse and SQL analytics endpoint in that workspace. It is real enough to have a published capacity rate: one Data Warehouse core with query acceleration enabled counts as 3.446 CUs ([Fabric operations](https://learn.microsoft.com/fabric/en
Read the thread · 2026-08-23 · closed · 2 comments
Most recent
refactor: remove all product telemetry and unwind telemetry-driven architecture
Decision
Remove product usage telemetry from fabric-dw completely.
This is a removal, not a default-off switch, dormant implementation, reduced event set, exporter swap, or abstraction kept for possible future reuse. The usage snapshot has already answered the useful directional questions: the project has real external use, SQL execution is the dominant workflow, and discovery/error UX is the useful product follow-up. The ongoing code, dependency, privacy, review, and runtime cost is not
Read the thread · 2026-08-25 · closed · 0 comments
docs: move protocol and transport detail off the README and install page
Problem
The README and docs/install.md carry protocol and transport detail that belongs neither on a landing page nor in an installation guide. Both sections were added with the SDK v2 migration (#1043) and describe things almost no reader needs.
The 4 MiB body limit
The same paragraph now exists in four places:
README.md:186docs/install.md:481docs/reference/hosting-mcp-server.md:20docs/troubleshooting.md:189(as a proper symptom-first entry, which is the right sh
Read the thread · 2026-08-25 · closed · 0 comments
security(telemetry): undocumented hourly control-plane poll from the Azure exporter
What happens
BaseExporter.__init__ in azure-monitor-opentelemetry-exporter starts a ConfigurationWorker daemon thread that polls
https://settings.sdk.monitor.azure.com/AzMonSDKDynamicConfigurationChanges
roughly hourly, sending the operating system, rp, attach, component, version, region and the instrumentation key. It also acts as a remote kill switch for the exporter's offline storage.
This is shared by the log exporter, so it is live on main today. It does not come
Read the thread · 2026-08-24 · closed · 1 comment
chore(telemetry): clean up the loose ends from the #1051 review
Context
Review of #1051 surfaced a set of small items that were deliberately kept out of that PR to keep the fix round focused. None is a defect that matters on its own; together they are worth one pass.
1. Losing the provider race now builds and discards a real Azure exporter
install_mcp_span_pipeline was changed to build the exporter and processor before claiming the global provider, which was the right fix for the ordering bug. The side effect is that an embedded-host process, wher
Read the thread · 2026-08-24 · closed · 1 comment
feat(telemetry): collect MCP protocol spans from the SDK
What
Collect the MCP SDK's OpenTelemetry protocol spans into the project's Application Insights, stripping request-supplied free-text values on the way out.
Why this is the cheap option
The SDK already produces this instrumentation. It covers every protocol message, it is maintained upstream, and it keeps covering new message types as the protocol evolves without anyone here remembering to add a field. Hand-rolled telemetry is the opposite: every new thing worth measuring is a code chan
Read the thread · 2026-08-24 · closed · 0 comments
security(mcp): non-loopback binds lose Host and Origin validation under SDK v2
What changes
Under the MCP SDK v2 migration (#1043 / PR #1045), a server started with a non-loopback host loses Host and Origin validation entirely. The default loopback path is unaffected.
This is not a change anyone made deliberately. It falls out of where the two SDK versions compute the setting.
v1: FastMCP.__init__ derived transport_security from the constructor's host argument, which this project never passed, so it defaulted to 127.0.0.1 and froze a loopback-only allow
Read the thread · 2026-08-24 · closed · 0 comments
chore(deps)!: migrate to MCP Python SDK v2
Summary
Migrate from MCP Python SDK 1.28.1 to 2.0.0. This is a real migration, not a version bump: the module tree mcp.server.fastmcp does not exist in v2. There is no alias, no shim and no deprecation period, so every module importing it fails at import time. That is why the dependabot PR #1039, which only widens the constraint to <3, fails Type check, Unit tests, Runtime smoke and Slow tests at once. #1039 is closed in favour of this.
#1042 has landed (cacc7b8). The shared test help
Read the thread · 2026-08-23 · closed · 0 comments
test(mcp): extract a shared tool-call helper for the MCP test suite
Why
The MCP test suite calls the SDK's private tool manager directly in roughly 590 places across 24 test files:
result = await mcp._tool_manager.call_tool("list_tables", {...})
Two problems. It reaches into a private SDK internal from 590 separate places, and in MCP SDK v2 the signature changes: context becomes a required positional argument, so every one of those sites breaks at once.
Extracting a single helper now removes the private-API dependency from the whole suite
Read the thread · 2026-08-23 · closed · 0 comments
chore(cli): clean up result renderer inconsistencies found reviewing #1036
Context
Three independent reviews of #1036 (zero-row SELECT rendering) surfaced a cluster of smaller inconsistencies in the result renderer that were deliberately left out of that PR to keep it focused. Collecting them here.
1. Inverted default for prune_null_columns
_render_positional_table in src/fabric_dw/cli/_render.py defaults prune_null_columns=True, while its only public wrapper, render_result_rows, defaults the same parameter to False. Reading either signature in i
Read the thread · 2026-08-23 · closed · 0 comments
chore(deps): bump mssql-python 1.9.0 to 1.13.0 (ODBC driver moves to a companion package)
What this is
uv.lock pins mssql-python at 1.9.0 (released 2026-06-12). Four minor releases have shipped since: 1.10.0 (2026-06-26), 1.11.0 (2026-07-10), 1.12.0 (2026-07-24), 1.13.0 (2026-08-07). This is the driver every SQL path in the tool runs on, so sitting two months behind is not a neutral state.
Dependabot has filed nothing for it, and that is expected given the setup: pyproject.toml declares mssql-python>=1.9.0, which already permits 1.13.0, so the pip ecosystem sees no con
Read the thread · 2026-08-23 · closed · 0 comments
fix(cli): zero-row SELECT in sql exec prints the DDL/DML success banner
Problem
sql exec decides how to render a result by looking at result.rows, not at result.columns:
if ctx.json_output:
render(...)
elif result.rows:
render_result_rows(...)
else:
click.echo(f"Query executed successfully. rowcount={result.rowcount}")
A SELECT that matches nothing returns columns=['session_id', ...] with rows=[], so it falls into the last branch and prints Query executed successfully. rowcount=0, the banner meant for DDL and DML. The us
Read the thread · 2026-08-23 · closed · 0 comments
Add live watch mode to sql exec for custom queries
Scope
Add --watch SECONDS to sql exec, so an arbitrary user-supplied query can be followed live the same way queries running, queries locks, and queries connections already can (see #1014).
While doing so, lift the existing watch loop out of queries.py into a shared CLI helper so both command groups run one implementation.
Design notes
- The loop currently lives in
src/fabric_dw/cli/commands/queries.pyas_watch_render, hardcoded toSequence[_JsonModel]plus `render(.
Read the thread · 2026-08-23 · closed · 0 comments
feat(mcp): add list_capabilities tool for tool discovery
Summary
Add a list_capabilities MCP tool that returns all available tools grouped by domain, so AI agents can discover dedicated tools before falling back to execute_sql.
Telemetry from #985 shows execute_sql still accounts for 51% of all MCP calls despite the instructions block (#986, #993). service_principal sessions use execute_sql for 90% of calls. A discovery tool is needed.
Acceptance criteria
- New
list_capabilitiesMCP tool (no parameters) returns `dict[str, lis
Read the thread · 2026-07-19 · closed · 0 comments
Add live watch mode for query inspection commands
Scope
Add --watch SECONDS to live query inspection:
queries runningqueries locksqueries connections
Acceptance criteria
- Positive integer intervals only.
- Render immediately, then redraw terminal output at the requested interval with a watch-style header.
- Preserve lock filters on every refresh.
- Reject
--watchcombined with--jsonbefore doing network work.
Verification
Focused CLI unit tests, lint, and type checks pass.
Read the thread · 2026-07-17 · closed · 0 comments
Add queries show command and remove always-null query_text from running queries
Summary
Two related changes:
Remove
query_textfrom theRunningQuerymodel and the_LIST_RUNNING_SQLquery. It is alwaysNULLbecausesys.dm_exec_sql_textis not supported on Fabric DW. Keeping it adds noise to JSON output and confuses MCP consumers. Thedist_statement_idcolumn (added in #1008) provides the correlation key to look up query text separately.Add
queries show <dist_statement_id>command (CLI + MCP tool) that looks up a specific query's full detail
Read the thread · 2026-07-17 · closed · 0 comments
The remaining reports are on the project's issue tracker.