Skip to content

mcp-data-platform-v1.100.1

Choose a tag to compare

@github-actions github-actions released this 06 Jul 20:24
b0f7a57

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 gateway POST /api/v1/gateway/{connection}/invoke and the admin "Call a tool" endpoint are no longer refused with SESSION_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, and curl;
  • 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 PlatformContext reader (gates, reflexive capture, tracing, metrics, audit, provenance, enrichment) requires the auth/authz middleware that writes it;
  • audit, tracing, and client-logging read pc.EnrichmentApplied after 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/analyze 4.36.2 to 4.36.3 (#804)
  • goreleaser-action 7.2.2 to 7.2.3 (#805)
  • docker/setup-qemu-action 4.1.0 to 4.2.0 (#806)
  • golangci-lint-action 9.2.1 to 9.3.0 (#807)
  • codeql-action/upload-sarif 4.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

  • b0f7a57 fix(session): exempt stateless in-memory shims from the session-handle gate (#811) (#812)
  • 019a05b ci(deps): consolidate GitHub Actions version bumps (#804 through #808) (#810)
  • 8c70f9a feat(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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v1.100.1

Verification

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