Skip to content

v2026.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 25 Aug 12:30
· 5 commits to main since this release
719d95c

Highlights

Telemetry is gone

Nothing is collected any more, and nothing is sent anywhere. The Azure Monitor exporter, the install and session identifiers on disk, the first-run notice and the azure-monitor-opentelemetry dependency are all removed, along with the CLI, MCP, auth, config and shutdown machinery that only existed to serve them.

The opt-out surface goes with it. FABRIC_DW_TELEMETRY_OPT_OUT, DO_NOT_TRACK and the [telemetry] config section are no longer read, and fdw config set telemetry disabled now answers No such command 'telemetry'. If your config.toml has a [telemetry] section you can delete it, though leaving it costs nothing, since unknown sections are ignored. (#1058)

MCP Python SDK v2

The server now runs on MCP Python SDK 2.x. That is a migration rather than a version bump, because the module tree mcp.server.fastmcp does not exist in v2 and has no alias or shim, so every module that imported it had to move.

Four things are visible to clients:

  • Streamable HTTP caps request bodies at 4 MiB and returns HTTP 413 above that. v1 had no limit. max_request_body_size on run() is still there if you need to raise it, and stdio is unaffected.
  • The server speaks protocol revision 2026-07-28 and still serves 2025-11-25 clients from the same process, so nothing changes in your client configuration. ping was dropped in 2026-07-28, so a client that negotiates that revision now gets -32601 for it while a 2025-11-25 client still gets an answer.
  • Every outbound request carries "params": {"_meta": {}}. No configuration restores the v1 wire shape.
  • Streamable HTTP lifespan runs once at manager startup instead of once per session, so one session shutting down no longer clears server context for the others still in flight.

pydantic now needs 2.12 or newer, which is what mcp 2.x requires. (#1045)

--allowed-host for non-loopback binds

SDK v2 computes transport security from the runtime host instead of the constructor default, which left non-loopback binds without Host and Origin validation. fabric-dw-mcp --allowed-host puts it back. Run stdio or bind to loopback and you cannot tell any of this happened, because without the flag nothing extra is handed to the SDK and those paths behave exactly as before. (#1050)

list_capabilities for tool discovery

The new list_capabilities MCP tool returns all 121 tools grouped into their 20 domains, so an agent can look up the dedicated tool for a job instead of reaching for execute_sql. (#1019)

sql exec --watch

sql exec takes a --watch SECONDS flag now and refreshes in place, the way queries running, queries locks and queries connections already could. The statement is re-executed unchanged on every tick, because nothing parses it to work out whether it is read-only. Both commands share one watch loop now instead of carrying two drifting copies. (#1028)

Fixes

A SELECT that matches nothing prints its column headers instead of Query executed successfully. rowcount=0. Rendering branches on the columns a statement returns rather than its rows, so a question that found no answer no longer reports itself as a statement that succeeded. Watch mode made this one hard to miss. (#1036, with follow-up renderer cleanups in #1047)

Documentation

The 4 MiB body limit and the protocol-revision detail moved off the README and the install guide onto the hosting and troubleshooting pages, where the readers who need them already are. The ping deprecation warning became a proper troubleshooting entry, since the SDK's client emits it whether or not the call actually worked. (#1056)

Dependencies

  • mcp[cli] from 1.28.1 to 2.x, with the pydantic floor raised to 2.12 (#1045)
  • mssql-python to 1.13.0 (#1034)
  • pyarrow to 25.0.1 (#1035), cryptography to 50.0.0 (#1024), aiohttp to 3.14.3 (#1023), h2 to 4.4.1 (#1025), pymdown-extensions to 11.0.1 (#1026), and a grouped patch-and-minor bump (#1038)
  • azure-monitor-opentelemetry dropped (#1058)
  • Dev tooling: ruff pinned to 0.16.4 (#1022, #1029), ty to 0.0.73 (#1020), types-pyyaml (#1040), astral-sh/setup-uv to 10.0.1 (#1037)

Full changelog

  • Telemetry was extended and then removed inside the same cycle, so the net effect is that it is gone (#1051, #1058)
  • docs: move protocol and transport detail off README and install guide (#1056)
  • feat(mcp): add --allowed-host so non-loopback binds keep Host and Origin validation (#1050)
  • chore(cli): clean up result renderer inconsistencies from #1036 review (#1047)
  • chore(deps)!: migrate to MCP Python SDK v2 (#1045)
  • test(mcp): extract a shared tool-call helper for the MCP test suite (#1044)
  • fix(cli): render zero-row SELECT results as a table, not the DDL/DML banner (#1036)
  • chore(deps): bump mssql-python to 1.13.0 (#1034)
  • ci: let dependabot manage uv.lock and skip its docs preview (#1033)
  • feat(cli): add live watch mode to sql exec (#1028)
  • build(deps-dev): pin ruff to 0.16.4 instead of a widening range (#1029)
  • feat(mcp): add list_capabilities tool for domain-grouped tool discovery (#1019)
  • Dependency bumps: #1038, #1040, #1037, #1035, #1026, #1025, #1024, #1023, #1022, #1021, #1020

What's Changed

  • feat(mcp): add list_capabilities tool for domain-grouped tool discovery by @sdebruyn in #1019
  • chore(deps): bump h2 from 4.3.0 to 4.4.1 by @dependabot[bot] in #1025
  • chore(deps): bump aiohttp from 3.14.1 to 3.14.3 by @dependabot[bot] in #1023
  • chore(deps): bump cryptography from 48.0.1 to 50.0.0 by @dependabot[bot] in #1024
  • chore(deps): bump pymdown-extensions from 10.21.3 to 11.0.1 by @dependabot[bot] in #1026
  • chore(deps): bump the major group across 1 directory with 2 updates by @dependabot[bot] in #1021
  • chore(deps-dev): bump ty from 0.0.61 to 0.0.71 in the patch-and-minor group across 1 directory by @dependabot[bot] in #1020
  • chore(deps-dev): update ruff requirement from <0.16,>=0.15 to >=0.15,<0.17 by @dependabot[bot] in #1022
  • build(deps-dev): pin ruff to 0.16.4 instead of a widening range by @sdebruyn in #1029
  • feat(cli): add live watch mode to sql exec by @sdebruyn in #1028
  • ci: let dependabot manage uv.lock and skip its docs preview by @sdebruyn in #1033
  • chore(deps): bump mssql-python to 1.13.0 by @sdebruyn in #1034
  • chore(deps): bump pyarrow from 24.0.0 to 25.0.1 in the major group by @dependabot[bot] in #1035
  • chore(deps): bump astral-sh/setup-uv from 10.0.0 to 10.0.1 in the patch-and-minor group by @dependabot[bot] in #1037
  • chore(deps-dev): bump types-pyyaml from 6.0.12.20260518 to 6.0.12.20260815 by @dependabot[bot] in #1040
  • chore(deps): bump the patch-and-minor group across 1 directory with 8 updates by @dependabot[bot] in #1038
  • fix(cli): render zero-row SELECT results as a table, not the DDL/DML banner by @sdebruyn in #1036
  • test(mcp): extract a shared tool-call helper for the MCP test suite by @sdebruyn in #1044
  • chore(deps)!: migrate to MCP Python SDK v2 by @sdebruyn in #1045
  • chore(cli): clean up result renderer inconsistencies from #1036 review by @sdebruyn in #1047
  • feat(mcp): add --allowed-host so non-loopback binds keep Host and Origin validation by @sdebruyn in #1050
  • feat(telemetry): collect MCP protocol spans and record the connecting client by @sdebruyn in #1051
  • docs: move protocol and transport detail off README and install guide by @sdebruyn in #1056
  • refactor: remove all product telemetry and unwind telemetry-driven architecture by @sdebruyn in #1058

Full Changelog: v2026.7.3...v2026.8.0