mcp-data-platform-v1.80.0
Overview
This release brings relevance search to the portal's Knowledge & Memory page. Users can type a free-text query on either tab and get results ranked by relevance, always scoped server-side to their own records. Previously the page offered only status and dimension filter buttons.
The MCP surface already supported semantic and lexical recall through the memory_recall tool. This release brings the equivalent experience to the portal UI and makes both surfaces rank through the same primitives, so the portal and the agent see the same ordering.
Highlights
- Free-text search on both tabs. A debounced search box on the Knowledge and Memory tabs ranks results by relevance to the typed query. Search refines by the active status/dimension filters; pagination is replaced by a ranked top-K while a query is active.
- Hybrid ranking with graceful fallback. When an embedding provider is configured, results are ranked by a hybrid of vector and lexical similarity. When no embedder is configured, the embedder errors, or it returns a zero vector, search falls back to lexical-only so results still appear. This mirrors
memory_recallexactly. - One store, both tabs. Knowledge insights are stored as knowledge-dimension memory records (
memoryInsightAdapter) sharing thememory_recordstable and the same embeddings as memories. The Memory tab searches across dimensions; the Knowledge tab scopes todimension = knowledge. There is no separate insight index. - Fail-closed scoping. Every search is scoped server-side by the caller's email (
created_by). If the authenticated identity carries no email, the search returns403rather than running unscoped, so a search never executes without a scoping key.
What changed
New portal endpoints (pkg/portal)
Two authenticated endpoints, behind the same auth middleware as the existing portal list routes. The response uses the standard paginated shape with a score field added per row.
| Method | Path | Params |
|---|---|---|
| GET | /api/v1/portal/memory/records/search |
q (required), dimension, status, limit |
| GET | /api/v1/portal/knowledge/insights/search |
q (required), status, limit |
Search primitives (pkg/memory)
- Added
CreatedByandDimensionscope toVectorQuery,HybridQuery, andLexicalQuery, enforced in SQL through a sharedscopeFiltershelper. - The default exclude-archived predicate now applies only when no explicit status is requested. An explicit status (including
archived) is honored rather than producing a contradictorystatus <> 'archived' AND status = 'archived'that matches nothing. Recall semantics are unchanged:memory_recallpasses no explicit status, so archived records stay excluded there.
Knowledge adapter (pkg/toolkits/knowledge)
- Added an
InsightSearchercapability to the memory-backed adapter. It delegates to the shared memory search with the same owner andknowledge-dimension scope and the same status post-filter as the list path, then maps scored records back to insights. - The knowledge-search route registers only when the wired store implements
InsightSearcher, so the legacy separate-table store (used only when the memory layer is disabled) does not get a non-functional route.
Shared helper (pkg/embedding)
- Extracted
IsZeroVectorso the portal search andmemory_recallshare one hybrid-vs-lexical decision and cannot drift apart.
Frontend (ui)
- Debounced search box on both the Knowledge and Memory tabs, ranking by relevance and refining by the active filters.
- Pagination is hidden in search mode in favor of a ranked top-K.
- Lexical results still appear when no embedding provider is configured.
Documentation
- Updated
docs/server/portal-user.mdanddocs/llms-full.txt; regenerated swagger.
Compatibility
- No database migration. Search reuses the existing
memory_recordstable and embeddings. - Additive change only: two new endpoints plus a UI search box. No existing endpoint, tool, or recall behavior changes.
memory_recallordering is unchanged; the portal now ranks the same way.
Out of scope
- The
recall_insightMCP tool (#442) is a separate surface and is not part of this release.
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.80.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_1.80.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_1.80.0_linux_amd64.tar.gzFull changelog: v1.79.2...v1.80.0