mcp-data-platform-v1.100.1
mcp-data-platform v1.100.1
A focused maintenance release. It restores the plain-HTTP automation surfaces (the REST gateway and the admin tool-runner) under the default session-handle gate, hardens the receiving-middleware chain against accidental reordering, and rolls up CI action bumps. No configuration changes are required to upgrade.
Highlights
- Automation surfaces work again under
session.require(the default). REST gatewayPOST /api/v1/gateway/{connection}/invokeand the admin "Call a tool" endpoint are no longer refused withSESSION_REQUIRED. - Middleware order is now a checked startup invariant. An accidental reorder of the ~19 receiving middlewares fails fast at startup instead of silently mis-wiring the request pipeline.
- CI action versions consolidated, including a CodeQL sub-action version-match fix.
Bug Fixes
Exempt stateless automation surfaces from the session-handle gate (#811, #812)
The explicit session-handle gate (session.require, default on, introduced in #800) refuses any non-exempt tool call that does not carry a platform_info-minted session_id. Two surfaces drive the assembled server over a fresh in-memory MCP session per HTTP request and therefore cannot mint or thread a handle:
- the gateway REST shim,
POST /api/v1/gateway/{connection}/invoke(and/invoke-raw), used by stateless automation such as Apache NiFi, Airflow, cronjobs, andcurl; - the admin "Call a tool" shim,
POST /api/v1/admin/tools/call, used by the portal tool-runner.
Both were refused with SESSION_REQUIRED, making the REST invoke path unusable and breaking the portal tool-runner for any gated tool.
Fix. The gate now exempts the two in-process shim sources (Source=rest, Source=admin) via a new isStatelessShimSource check. The requirement remains fully in force for real MCP-transport agents (Source=mcp), and an unset or unknown source stays gated, so the gate fails closed. The exemption is not agent-reachable: the shim sources are set only in-process via WithSource on the server connection context, so an external caller cannot forge them. Authentication, persona authorization, route policy, and audit are unchanged for every caller. The exemption is scoped strictly to the session handshake, not to access control.
Who should upgrade. Anyone running with session.require on (the default) who uses the REST gateway for automation or the admin portal's tool-runner.
Platform Hardening
Receiving-middleware order is a checked invariant (#758, #809)
finalizeSetup registered roughly 19 receiving middlewares in inverse execution order, with correctness (context-value visibility) documented only in comments at the registration site. A reorder was a one-line change that compiled and could pass narrower tests.
The inline sequence is replaced with a declared, ordered slice of {Name, Requires, Register} specs plus a validator, extracted into pkg/platform/mwchain. At startup, finalizeSetup validates the chain before touching the server and panics with a named error if any middleware is positioned inner to a dependency it requires to be outer, so an accidental reorder fails fast at startup instead of silently mis-wiring the chain.
The Requires edges encode the real cross-middleware dependencies, each verified against the middleware sources:
- every
PlatformContextreader (gates, reflexive capture, tracing, metrics, audit, provenance, enrichment) requires the auth/authz middleware that writes it; - audit, tracing, and client-logging read
pc.EnrichmentAppliedafter the handler runs, so they must be outer to enrichment; - audit, metrics, and reflexive-capture observe the normalized error, so the error contract is inner to all three.
Registration order and runtime behavior are unchanged; this release only makes an incorrect order impossible to ship silently. Unit tests pin the canonical order, assert the shipped chain validates, and assert the critical dependency edges are declared.
CI and Dependencies
Consolidated GitHub Actions bumps (#804 through #808, #810)
codeql-action/analyze4.36.2 to 4.36.3 (#804)goreleaser-action7.2.2 to 7.2.3 (#805)docker/setup-qemu-action4.1.0 to 4.2.0 (#806)golangci-lint-action9.2.1 to 9.3.0 (#807)codeql-action/upload-sarif4.36.2 to 4.36.3 (#808)
Also pins CodeQL init and autobuild to v4.36.3 to match analyze. CodeQL requires all sub-action steps in a run to share one version; the earlier mismatch failed analyze with "Loaded a configuration file for version '4.36.2', but running version '4.36.3'".
Changelog
b0f7a57fix(session): exempt stateless in-memory shims from the session-handle gate (#811) (#812)019a05bci(deps): consolidate GitHub Actions version bumps (#804 through #808) (#810)8c70f9afeat(platform): make receiving-middleware order a checked invariant (#758) (#809)
Full diff: v1.100.0...v1.100.1
Installation
Homebrew (macOS)
brew install txn2/tap/mcp-data-platformClaude Code CLI
claude mcp add mcp-data-platform -- mcp-data-platformDocker
docker pull ghcr.io/txn2/mcp-data-platform:v1.100.1Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_1.100.1_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_1.100.1_linux_amd64.tar.gz