Repository navigation
v0.2.0 — the server as a container beside Open WebUI, with each user's own PAT
The server now runs as its own container next to Open WebUI. It serves MCP over Streamable HTTP, holds no PAT of its own, and every request carries the caller's own PAT, so Azure DevOps attributes every comment, vote, and queued build to the person who asked. stdio stays the default: Copilot, Claude Code, and every existing client keep working unchanged.
Added
- Streamable HTTP transport —
ADOS_TRANSPORT=httpserves a stateless MCP endpoint behind a shared bearer token. The guard runs on the endpoint routing selects, rejects unknown browser origins, and allows anonymous access only on loopback (#55) - Each caller's own PAT — every HTTP request carries its caller's PAT in
X-Azure-DevOps-Pat.ADOS_PATis refused over HTTP, so no request can fall back to a shared identity (#56, #61) - Health endpoint and container logging —
/healthzanswers probes without a token, and a healthy start logs nothing (#57, #63) - Container image —
ghcr.io/exoz00rd/azuremcp:0.2.0forlinux/amd64andlinux/arm64on the chiseled ASP.NET 10 runtime: non-root, no shell, signed with cosign, with a build provenance attestation and an SBOM (#58) - Helm chart —
oci://ghcr.io/exoz00rd/charts/azuremcpwith a hardened pod, aNetworkPolicyadmitting only Open WebUI, and an internal certificate authority from a ConfigMap that keeps the public roots (#59)
Changed
- The Open WebUI plugin calls the server over HTTP instead of downloading and starting a binary inside Open WebUI. Its valves are now the server URL, the server's token, and the timeout; the collection URL and certificate authority moved to the server. The self-contained linux-x64 binary is no longer attached (#60)
- The NuGet package needs the ASP.NET Core runtime in every mode, stdio included. The .NET 10 SDK already ships it (#55)
Upgrading from 0.1.3 with Open WebUI
The 0.1.3 plugin started the server inside Open WebUI; this one needs the server running beside it. Deploy the image or the chart first (Running over HTTP), then replace the plugin's code with azure_devops_openwebui.py from this release and set its valves: server_url (for example http://azuremcp:8080/mcp) and server_token. Replacing the code of the existing tool keeps the PAT each user already entered; a newly created tool starts without them.
Assets
| File | Purpose |
|---|---|
azure_devops_openwebui.py |
the Open WebUI plugin, generated from the tools this release registers |
62 tools, 469 tests.
Full changelog: v0.1.3...v0.2.0