Skip to content

mcp-data-platform-v1.93.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 06:05
e57a50e

Overview

This release rounds out the knowledge layer's discover -> fetch -> cite loop and closes the gaps that let agents believe a capability or a citation existed when it did not. Three of the four changes touch knowledge and discovery: a browse mode for full corpus enumeration, fetchable memory and insight references, and honest reporting of references dropped during page promotion. The fourth makes every served admin route discoverable in the API catalog so agents stop concluding that working endpoints do not exist.

All changes are additive. There are no breaking API changes and no migrations.

Features

Browse mode: enumerate a knowledge source in full (#695, #700)

search is relevance-ranked with per-source flooring and capping, so it can never list a source completely, and knowledge pages and context documents had no MCP-surface enumeration at all. The search tool now has a browse mode for auditing, deduping, governing, or migrating a corpus an agent must first obtain whole.

  • Enter browse mode by calling search with exactly one sources entry, no intent, and an offset. It returns the complete set of that source with a total count and no relevance threshold.
  • Browsable sources are knowledge_pages and context_documents (the two tiers that had no prior enumeration). Browsing zero or several sources, an unknown source, or a non-browsable one returns a distinct, named error.
  • It is the same search tool, not a new one, so it stays under the no-tool-explosion model.
  • Pagination is now stable: knowledgepage.Store.List orders by (updated_at DESC, id), a deterministic total order whose unique tiebreaker keeps an offset sweep from skipping or double-returning a page when timestamps collide.
  • Context-document browse enumerates the whole corpus, drafts and hidden documents included, computed concurrently from a * document listing (the page) and a DOCUMENT-scoped count (the total) so the page and total describe the same set. No mcp-datahub change was required.
  • Because browse surfaces drafts, fetch now reads a draft context document by URN too; relevance search still hides drafts from its ranked view.

Memory and insights are fetchable by reference (#699, #701)

Memory and insights were the only two search sources whose hits carried no fetchable reference, making them second-class in the discover -> fetch -> cite loop.

  • Search hits now emit mcp:memory:<id> and mcp:insight:<id> references, and both are dereferenceable with fetch, scoped to the caller.
  • Fetch is owner-scoped and fail-closed: a non-owner, anonymous, or stale reference returns a structured not-found, never content.
  • Both forms are fetch-only and not citable on a shared knowledge page. An insight is per-user like memory, so a citation on a shared page would resolve only for its capturer. Once an insight is promoted via apply_knowledge it becomes a catalog entity citable as its urn:li:... form. ParseCitableRef rejects both per-user forms, and the inline body scanner uses the same check, so a per-user token in a page body is skipped rather than breaking the entity-reference insert.
  • Correctness fixes from review: the memory store exposes a memory.ErrRecordNotFound sentinel so a stale fetch is a clean not-found; the insight adapter's Get is dimension-scoped like its List/Search so an mcp:insight:<id> naming a non-knowledge record resolves to not-found; and insight fetch no longer gates on review status, since search can surface retracted insights to their owner under an explicit status query.

Bug Fixes

Every served admin route is discoverable in the catalog (#697, #702)

api_list_endpoints reads the admin OpenAPI catalog seeded from the embedded swagger document. Routes registered without swaggo annotations never reached that document, so working, authorized endpoints (knowledge-page get/list/search and others) were invisible to discovery, and agents concluded the capabilities did not exist.

  • Annotated the seven knowledge-page handlers and listEffectiveConnections, and regenerated internal/apidocs. The versions handler now returns a named response type (identical JSON) so its shape is documentable.
  • Documented the 500 response on the knowledge-page write handlers, matching the reads and the handlers' actual behavior.
  • Added TestAdminCatalogRouteParity, which AST-scans every METHOD /api/v1/... registration under pkg/ and internal/ and asserts each appears in the catalog enumerated through the same production parser api_list_endpoints uses. A small, documented exclusion list covers genuinely non-catalog routes (public login branding, Prometheus proxy passthroughs, gateway data-plane proxy), with a guard that fails on any stale exclusion.

Report references dropped during page promotion (#696)

When apply_knowledge promotes a capture to a knowledge page (sink=knowledge_page), the backend filters insight-carried and inline-body references to those whose targets still exist and drops the rest. Dropping a stale target is correct (a deleted entity or a typo in prose must not block or FK-fail the promotion), but it was silent: the apply response said nothing about references, so an agent that cited one could not learn it did not land.

The apply response now carries:

  • references_dropped: the de-duplicated URNs that did not attach, covering both a target the existence filter removed and an insight-carried reference that could not be parsed into a citable ref at all (a non-citable mcp:memory:/mcp:insight: reference, or a malformed token). Omitted when empty.
  • references_attached: an always-present count of the distinct references this apply wrote, so a consumer can reconcile intended against landed unconditionally.

Explicit page.references[] behavior is unchanged: a missing target there is still a hard error before any write, so the caller already learns about it.

Behavior changes to note

  • fetch now dereferences draft context documents by URN (surfaced by browse), in addition to published ones.
  • Knowledge-page listing is now ordered by (updated_at DESC, id) for stable offset pagination.
  • apply_knowledge page-promotion responses include the new references_attached (always) and references_dropped (when non-empty) fields.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

Full changelog

Features

  • feat(knowledge): enumerate a knowledge source via search browse mode (#695, #700) - 587300e
  • feat(knowledge): make memory and insights fetchable by reference (#699, #701) - 565aed0

Bug Fixes

  • fix(apigateway): make every served admin route discoverable in the catalog (#697, #702) - 06ee9a8
  • fix(knowledge): report references dropped during page promotion (#696, #703) - e57a50e

Full diff: v1.92.0...v1.93.0