mcp-data-platform-v1.93.0
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
searchwith exactly onesourcesentry, nointent, and anoffset. It returns the complete set of that source with atotalcount and no relevance threshold. - Browsable sources are
knowledge_pagesandcontext_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
searchtool, not a new one, so it stays under the no-tool-explosion model. - Pagination is now stable:
knowledgepage.Store.Listorders 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,
fetchnow 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>andmcp:insight:<id>references, and both are dereferenceable withfetch, 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_knowledgeit becomes a catalog entity citable as itsurn:li:...form.ParseCitableRefrejects 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.ErrRecordNotFoundsentinel so a stale fetch is a clean not-found; the insight adapter'sGetis dimension-scoped like itsList/Searchso anmcp: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 regeneratedinternal/apidocs. The versions handler now returns a named response type (identical JSON) so its shape is documentable. - Documented the
500response on the knowledge-page write handlers, matching the reads and the handlers' actual behavior. - Added
TestAdminCatalogRouteParity, which AST-scans everyMETHOD /api/v1/...registration underpkg/andinternal/and asserts each appears in the catalog enumerated through the same production parserapi_list_endpointsuses. 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-citablemcp: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
fetchnow 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_knowledgepage-promotion responses include the newreferences_attached(always) andreferences_dropped(when non-empty) fields.
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.93.0Verification
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.gzFull 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