mcp-data-platform-v1.100.0
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_reviewnow returnsoldest_pending_at,oldest_pending_age_days, andpending_over_30don both the counts anditemizepaths. The fields are omitted for an empty queue, so there is no misleading "0 days" reading.platform_infoexposesfeatures.knowledge_apply.review_queue(pending,oldest_pending_age_days,pending_over_30d) for callers who can reachapply_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-sidecreated_at ASC).
Admin API
GET /api/v1/admin/knowledge/insights/statsnow includesoldest_pending_atandpending_over_30d.GET /api/v1/admin/knowledge/insightsacceptsorder=oldestfor 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: falseChangelog
Features
- feat(knowledge): surface review-queue staleness so pending insights do not silently age (#764) (#802) (@cjimti)
Bug Fixes
Full changelog: v1.99.0...v1.100.0
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.0Verification
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