Skip to content

mcp-data-platform-v1.100.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 04:33
f0ecf28

Overview

v1.100.0 makes apply_knowledge review-queue staleness visible across the tools and the portal, so pending knowledge no longer ages silently, and it turns the explicit session-handle requirement from an inert flag into real enforcement.

Highlights

Review-queue staleness visibility (#802, closes #764)

The knowledge flywheel only turns if humans work the apply_knowledge review queue, but nothing surfaced how old that queue was getting: a pending insight could sit unreviewed for months with no signal, and while it did, captures stopped becoming shared knowledge and agents kept re-deriving the same facts. This release adds a staleness rollup everywhere the queue is reported, plus portal indicators.

Tools

  • bulk_review now returns oldest_pending_at, oldest_pending_age_days, and pending_over_30d on both the counts and itemize paths. The fields are omitted for an empty queue, so there is no misleading "0 days" reading.
  • platform_info exposes features.knowledge_apply.review_queue (pending, oldest_pending_age_days, pending_over_30d) for callers who can reach apply_knowledge, so an agent can nudge a reviewer (for example, "6 insights pending review, oldest 94 days"). It reads through a lightweight single-query path, so per-session orientation stays cheap rather than running the full stats aggregation.

Portal

  • The review queue badges each pending insight by age (fresh under 7 days, aging 7 to 30 days, stale at 30 days or more), shows the oldest age and the over-30-day debt on the Pending Review card (with a red border when debt exists), and adds a Newest / Oldest sort so a reviewer can page the stalest debt first (order=oldest, server-side created_at ASC).

Admin API

  • GET /api/v1/admin/knowledge/insights/stats now includes oldest_pending_at and pending_over_30d.
  • GET /api/v1/admin/knowledge/insights accepts order=oldest for oldest-first paging.

The staleness threshold ("aged 30 or more days") is defined once and shared by the Postgres store, the memory-backed store, and the portal badge, so the count and the badge always agree at the boundary and the tools never drift.

The optional operator alert/digest (part 3 of #764) is tracked separately in #803, pending the email-notification substrate in #631.

Session handles are now enforced (#801, closes #800)

Explicit session handles (introduced in #792 / #793) added a session_id argument minted by platform_info and a require flag defaulting on, but the requirement never actually fired: the resolver accepted the transport-level session (or the stdio sentinel) as a fallback before the require check ran. For a Streamable HTTP client the per-call Mcp-Session-Id is fresh and meaningless, so require was effectively a no-op, and related tool calls could not be correlated because each carried a different transport id.

This release makes the requirement real: when handles are required, only a validated platform_info handle satisfies the gate, on every transport. The stdio carve-out is removed (the constant sentinel collapsed every run into a single bucket and was no more a usable identity than the churning HTTP id), and platform_info stays exempt because it mints the handle and is the recovery path from an expired one. The platform_info handle thus becomes the single source of session identity that audit correlation, provenance grouping, and the search-before-query ordering all depend on.

Upgrade notes

Session enforcement now takes effect. require was already default-on, but the fallback made it inert, so this is the first release where it enforces. Under the default configuration, a client that never calls platform_info and threads the returned session_id will be refused on gated tools with SESSION_REQUIRED. This is self-healing for any compliant client: the error instructs the caller to call platform_info and retry, and it breaks no client that follows the protocol. Operators who want the previous permissive behavior during rollout can set:

sessions:
  handles:
    require: false

Changelog

Features

  • feat(knowledge): surface review-queue staleness so pending insights do not silently age (#764) (#802) (@cjimti)

Bug Fixes

  • fix(session): require a platform_info handle, drop the transport-session fallback (#801) (@cjimti)

Full changelog: v1.99.0...v1.100.0

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.0

Verification

All release artifacts are signed with Cosign. Verify with:

cosign verify-blob --bundle mcp-data-platform_1.100.0_linux_amd64.tar.gz.sigstore.json \
  mcp-data-platform_1.100.0_linux_amd64.tar.gz