Releases: txn2/mcp-data-platform
mcp-data-platform-v0.21.1
What's New in v0.21.1
Knowledge insights now track their origin, a unified connections tool replaces per-toolkit variants, and cleanup routines across the platform get proper structured logging.
Knowledge Insight Source Tracking
The capture_insight tool gains a source field that distinguishes where an insight came from:
| Source | When to use |
|---|---|
user (default) |
User shares domain knowledge during conversation |
agent_discovery |
Agent figures something out independently by sampling data, finding join relationships, or identifying quality patterns |
enrichment_gap |
Agent flags a metadata gap it cannot resolve from the data alone — needs admin attention |
Backward compatible: existing insights default to user. The field is filterable in both the MCP tool and admin API.
Migration 000010 adds source TEXT NOT NULL DEFAULT 'user' with an index to knowledge_insights.
Expanded agent guidance prompt — three new sections teach LLM agents when to self-capture discoveries vs. ask the user:
- Agent-Discovered Insights: When and how to record findings with
source: "agent_discovery"(e.g., discovering column semantics viaSELECT DISTINCT, finding undocumented joins, identifying refresh cadence) - When to Ask the User Instead: Ambiguous interpretations, high-impact classifications (PII, deprecation), insufficient data to draw conclusions
- When NOT to Capture: Trivially obvious gaps without added meaning, speculative interpretations without query evidence, repeated gaps within a session
Unified list_connections Tool
Per-toolkit connection listing tools (trino_list_connections, datahub_list_connections, s3_list_connections) are replaced by a single list_connections platform tool that reports all configured data connections across every toolkit in one call. This reduces tool clutter and gives agents a single entry point to discover what data sources are available.
{
"connections": [
{"kind": "trino", "name": "prod", "connection": "prod-trino"},
{"kind": "datahub", "name": "primary", "connection": "primary-datahub"},
{"kind": "s3", "name": "data-lake", "connection": "data-lake-s3"}
],
"count": 3
}The pkg/tools placeholder package is removed — it existed only to hold an example toolkit that was never used in production.
Structured Logging and Cleanup Improvements
LOG_LEVELenvironment variable: Configure slog JSON logging level at startup (debug,info,warn,error). Defaults toinfo.- Cleanup goroutines: Audit log cleanup, OAuth token/code expiration, and session cleanup routines now use
slog.Warnfor error reporting instead of silently discarding errors. - Lifecycle rollback: Extracted a
rollback()helper that logs individual stop-callback failures during startup rollback instead of ignoring them. - Config cleanup: Removed unused
UserPersonasfield from persona mapper and unusedIdleTimeoutfield from platform config. - Server factory simplification:
NewWithDefaults()returns(*mcp.Server, error)only — toolkit lifecycle is now fully managed by the platform, not the server factory.
Breaking Changes
- Per-toolkit
*_list_connectionstools removed: Agents that calledtrino_list_connections,datahub_list_connections, ors3_list_connectionsshould uselist_connectionsinstead. internal/server.NewWithDefaults()signature change: Returns(*mcp.Server, error)instead of(*mcp.Server, Toolkit, error). Only affects consumers using the library API directly.
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:v0.21.1Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.21.1_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.21.1_linux_amd64.tar.gzmcp-data-platform-v0.21.0
What's New in v0.21.0
Three new MCP protocol capabilities, improved error semantics, and comprehensive documentation for all features introduced since v0.19.0.
Elicitation: User Confirmation for Expensive and Sensitive Queries
The platform can now prompt users for confirmation before executing queries that exceed cost thresholds or access PII-tagged columns. This uses the MCP elicitation/create protocol — clients that support it (e.g., Claude Desktop) will see interactive confirmation prompts; clients without support gracefully skip the check.
Cost estimation runs EXPLAIN (TYPE IO, FORMAT JSON) against Trino to estimate row counts before execution. When the estimate exceeds the configured threshold (default: 1M rows), the user sees a confirmation dialog with the estimate.
PII consent checks DataHub column tags for pii and sensitive markers on every table referenced in the query. If any PII columns are found, the user must confirm before the query proceeds.
Both features are fully opt-in and independently configurable:
elicitation:
enabled: true
cost_estimation:
enabled: true
row_threshold: 1000000 # prompt above 1M estimated rows
pii_consent:
enabled: true # prompt when query accesses PII columnsWhen a user declines, the tool returns an informational message (categorized as user_declined in audit logs) instead of executing the query. If EXPLAIN fails or PII metadata is unavailable, the query proceeds without interruption — elicitation always degrades gracefully.
Icons: Visual Metadata for Tools, Resources, and Prompts
A new middleware layer injects config-driven icons into tools/list, resources/templates/list, and prompts/list responses. Upstream toolkits (mcp-trino, mcp-datahub, mcp-s3) provide default icons for all their tools; this configuration overrides or extends them.
icons:
enabled: true
tools:
trino_query:
src: "https://example.com/custom-trino.svg"
mime_type: "image/svg+xml"
resources:
"schema://{catalog}.{schema}/{table}":
src: "https://example.com/schema.svg"
prompts:
knowledge_capture:
src: "https://example.com/knowledge.svg"Icons appear in MCP clients that render visual metadata (e.g., Claude Desktop's tool picker). The middleware runs as the outermost layer in the 8-layer middleware chain, decorating list responses after all other processing.
JSON-RPC Error Sentinels for Malformed Requests
Malformed tools/call requests (missing tool name, nil params, wrong params type) now return proper JSON-RPC protocol errors with CodeInvalidParams (-32602) instead of tool-level error results. This distinction matters for clients:
- Protocol errors (
*jsonrpc.Error): The request itself is invalid — clients should not retry with the same parameters - Tool errors (
CallToolResult.IsError): The request was valid but the operation failed — agents can reason about the message and adjust
Auth and authz failures remain as tool-level errors because the request is structurally valid — only permissions are insufficient. MCP agents handle these better (they reason about the error message and try different approaches) compared to protocol errors (which may trigger retries or abort).
Resource Links in DataHub Results
When resource templates are enabled (resources.enabled: true), DataHub search and entity results now include MCP resource links pointing to schema:// and availability:// resource templates. This lets agents follow up with resource reads for detailed schema or availability info without additional tool calls — creating a browseable graph of data resources.
Explicit Server Capabilities
The platform now declares explicit ServerCapabilities during initialization instead of relying on SDK auto-inference. This makes the server's contract visible in capability negotiation:
- Tools: Always declared (every deployment has
platform_infoat minimum) - Logging: Always declared (supports client logging via
logging/setLevel) - Resources: Declared when
resources.enabled: true - Prompts: Declared when prompts are configured (platform prompts, prompts dir, or knowledge capture)
Startup Validation
A new validateAgentInstructions() check runs at startup, scanning agent_instructions text for tokens that look like tool names and warning when they don't match any registered tool. This catches stale references after tool renames or removals — particularly useful for large instruction blocks that reference dozens of tools.
Documentation
Comprehensive configuration reference added for all features introduced in v0.20.0 and v0.21.0:
- Elicitation: Cost estimation and PII consent configuration with examples
- Icons: Tool, resource, and prompt icon overrides
- Resource templates:
schema://,glossary://,availability://URI patterns - Progress notifications: Trino query progress with
_meta.progressToken - Client logging: Server-to-client enrichment messages via
logging/setLevel - Middleware reference: Updated with 8-layer chain diagram (was 6), including
MCPIconMiddlewareandMCPClientLoggingMiddleware llms.txt/llms-full.txt: Updated indexes for AI consumption
Middleware Chain (8 layers)
The full request processing chain is now:
Request → Icons → ToolVisibility → AppsMetadata → MCPToolCall → MCPAudit → ClientLogging → MCPRules → MCPEnrichment → Handler
Upgrading from v0.20.0
All new features are opt-in. Existing configurations work without changes.
To enable the new capabilities, add any combination of:
# Elicitation (requires Trino toolkit)
elicitation:
enabled: true
cost_estimation:
enabled: true
row_threshold: 1000000
pii_consent:
enabled: true
# Icons
icons:
enabled: trueNo database migrations are required for this release.
Changelog
Full diff: v0.20.0...v0.21.0
- feat: elicitation, icons, jsonrpc errors, and docs for MCP protocol capabilities (#112)
Closes #102
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:v0.21.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.21.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.21.0_linux_amd64.tar.gzmcp-data-platform-v0.20.0
Changelog
Features
- 415e776: feat: add resource templates, progress notifications, and client logging (#111) (@cjimti)
- 69268b2: feat: annotation config wiring + dependency bumps for MCP capabilities (#110) (@cjimti)
Others
- 483bd51: ci: bump github/codeql-action from 4.32.2 to 4.32.3 (#107) (@dependabot[bot])
- 1b2a240: deps: bump github.com/lib/pq from 1.11.1 to 1.11.2 (#104) (@dependabot[bot])
- 111cfd2: deps: bump github.com/swaggo/swag from 1.16.4 to 1.16.6 (#105) (@dependabot[bot])
- ad98274: deps: bump golang.org/x/crypto from 0.47.0 to 0.48.0 (#109) (@dependabot[bot])
- eeadbc9: docker: bump golang from 1.25-alpine to 1.26-alpine (#103) (@dependabot[bot])
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:v0.20.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.20.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.20.0_linux_amd64.tar.gzmcp-data-platform-v0.19.0
What's New in v0.19.0
Upgrades both core toolkit dependencies and introduces config-driven tool description overrides — deployers can now customize what AI agents see for each tool's description directly in YAML config, without code changes.
Improved Default Tool Descriptions
Both upstream toolkits ship significantly better default descriptions that tell agents not just what a tool does but when to use it:
trino_query— Now includescatalog.schema.tablepath format guidance,LIMITawareness,WHEREclause advice for large tables, and a nudge towardtrino_explainfor expensive queriestrino_explain— Now provides concrete triggers: large tables (millions of rows), filter verification, slow query debugging, and join strategy analysistrino_describe_table— Highlightsinclude_sample=truefor understanding data formats, positions it as the richest single-call for table structure- All 12 DataHub tools — Enhanced with decision context and cross-references to related tools
These improvements apply automatically with no configuration changes.
Config-Driven Description Overrides
When tools are composed into the platform, semantic enrichment middleware adds capabilities that standalone toolkits can't describe themselves. For example, trino_describe_table returns DataHub metadata (owners, tags, glossary terms, quality scores) via cross-injection — but the upstream description has no knowledge of this.
Deployers can now override any tool's description in platform.yaml:
toolkits:
trino:
config:
descriptions:
trino_describe_table: "Get table schema with DataHub context — the richest single-call way to understand a table"
trino_query: "Execute SQL with automatic column-level semantic enrichment from DataHub"
datahub:
config:
descriptions:
datahub_search: "Search the data catalog for datasets, dashboards, and pipelines"
datahub_get_entity: "Get full metadata for a catalog entity including query availability"When descriptions is absent or empty, the improved upstream defaults are used automatically. This is fully backward-compatible.
Dependency Upgrades
| Package | From | To |
|---|---|---|
github.com/txn2/mcp-trino |
v0.3.0 | v0.4.0 |
github.com/txn2/mcp-datahub |
v0.5.2 | v0.6.0 |
Documentation
- Configuration reference updated with
descriptionsoption for both Trino and DataHub toolkit tables - Example config (
configs/platform.yaml) includes commented description examples - LLM-readable docs (
docs/llms-full.txt) updated
Related
Partially addresses #100 (platform-level tool description overrides).
Upgrading from v0.18.x
No breaking changes. Run go get github.com/txn2/mcp-data-platform@v0.19.0 or pull the new Docker image. All existing configurations work without modification — you get improved tool descriptions automatically.
Optional: Add descriptions to your toolkit config blocks to customize tool descriptions for your deployment's specific enrichment setup.
Changelog
Features
- feat: upgrade mcp-trino v0.4.0 / mcp-datahub v0.6.0 with description overrides (#101)
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:v0.19.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.19.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.19.0_linux_amd64.tar.gzmcp-data-platform-v0.18.4
What's New in v0.18.4
Third round of admin UI polish plus comprehensive Admin Portal documentation with screenshots.
Admin UI Improvements
Reusable Errors Component
- Extracted
RecentErrorsListinto a shared component used by both the Dashboard and Audit Log pages - Eliminates duplicated error rendering logic — clickable error rows with status badges and detail drawers work identically in both locations
Tool Descriptions in Explore Tab
- The Tool Inventory table on the Tools Overview tab now displays descriptions pulled directly from each tool's MCP JSON schema
- Previously the description column was empty, requiring operators to execute a tool to understand what it does
Editable Insight Review Notes
- The review notes textarea in the Knowledge Insights detail drawer is now available on insights in any status (pending, approved, rejected, applied)
- Previously it only appeared during active review, preventing operators from adding context after the fact
Connection Parameter Display
- The Explore tab groups tools by their owning connection using the
/api/v1/admin/connectionsendpoint - Tools appear under their toolkit connection (e.g. "trino prod", "datahub pmgsc") rather than in a flat list
Documentation
New Admin Portal Page (docs/server/admin-portal.md)
- Complete visual guide with 6 screenshots covering every tab: Dashboard, Tools Overview, Tools Explore, Audit Events, Knowledge Overview, and Knowledge Insights
- Documents all dashboard widgets: activity timeline, top tools/users charts, performance percentiles, error monitoring, knowledge summary, connection health
- Documents the Explore tab's interactive tool execution: auto-generated parameter forms, rendered results, semantic enrichment context
- Documents audit event detail drawer fields: identity, execution, status, transport, parameters
- Documents knowledge insight lifecycle: metadata, suggested actions, related columns, review notes, approve/reject workflow
- Includes local development instructions with MSW mock data and full-stack setup
Homepage & Navigation
- Admin Portal card added to the
docs/index.mdfeature grid withmaterial-monitor-dashboardicon - MCP Apps icon changed from
monitor-dashboardtopalette-swatchto avoid duplicate icons mkdocs.ymlnav reorganized into logical subsections:- Administration — Admin Portal, Admin API
- Operations — Audit Logging, Operating Modes, Session Externalization
README
- Admin Portal section added with dashboard and tools explore screenshots
- Links to the full documentation page
LLM-readable docs — docs/llms.txt index and docs/llms-full.txt content updated per llmstxt.org spec
Changelog
Bug Fixes
- fix: admin UI round 3 — errors component, tool descriptions, docs (#99)
Installation
Homebrew (macOS)
```bash
brew install txn2/tap/mcp-data-platform
```
Claude Code CLI
```bash
claude mcp add mcp-data-platform -- mcp-data-platform
```
Docker
```bash
docker pull ghcr.io/txn2/mcp-data-platform:v0.18.4
```
Verification
All release artifacts are signed with Cosign. Verify with:
```bash
cosign verify-blob --bundle mcp-data-platform_0.18.4_linux_amd64.tar.gz.sigstore.json
mcp-data-platform_0.18.4_linux_amd64.tar.gz
```
mcp-data-platform-v0.18.3
What's New in v0.18.3
Continues the admin portal polish series with tool visibility indicators, configurable login branding, readable dashboard charts, and fixes for misclassified tools.
Admin UI Improvements
Tool Visibility Icons
- Eye/EyeOff icons now appear next to every tool in both the Explore tab (connection tree) and the Tool Inventory table on the Overview tab
- Icons reflect the global
tools.allow/tools.denyvisibility config — hidden tools are dimmed with an EyeOff indicator so operators can immediately see what LLM clients will and won't see - New
hidden_toolsfield in theGET /api/v1/admin/connectionsresponse powers this, reusing the existingIsToolVisibleglob-matching logic from the middleware layer
Login Screen Branding
- The login page now fetches the platform name from config and displays it as the heading
- New unauthenticated endpoint
GET /api/v1/admin/public/brandingreturnsnameandportal_titlefrom server config - Falls back to "MCP Data Platform" when the endpoint is unavailable or config is unset
- Public routes (
/api/v1/admin/public/*) bypass auth middleware entirely
Dashboard Bar Charts
- Completely rewrote
BreakdownBarChart— the YAxis width is now computed dynamically from the actual label lengths in each dataset - No more truncation: labels like
trino_describe_tableanddatahub_get_entityrender in full - Email addresses in the Top Users chart are shortened to the local part (e.g.
marcus.johnson) with the full address visible on hover via tooltip - Eliminated the fixed 80px left margin that was wasting space
Backend Changes
Audit User Breakdown Shows Emails
- The
GET /api/v1/admin/audit/metrics/breakdown?group_by=user_idquery now returnsCOALESCE(NULLIF(user_email, ''), user_id)as the dimension - Users with recorded emails display as their email address; users without fall back to user_id
- Eliminates raw UUIDs from the Top Users dashboard chart
Toolkit Tool List Fixes
- DataHub: Added
datahub_get_column_lineageto the adapter'sTools()return list — it was registered on the MCP server by upstreamRegisterAll()but missing from the adapter, causing it to appear as "platform built-in" in the admin UI - S3: When
read_only: true, the adapter now callsRegister(s, ReadTools()...)instead ofRegisterAll(), preventing write tools (s3_copy_object,s3_delete_object,s3_put_object) from being registered on the MCP server at all — previously they were registered but excluded fromTools(), causing the same misclassification
Exported IsToolVisible
- Renamed
isToolVisible→IsToolVisibleinpkg/middleware/mcp_visibility.goso the admin handler can reuse the same glob-matching logic without duplication
Changelog
Bug Fixes
- fix: admin UI — visibility icons, login branding, chart labels, toolkit tools (#98)
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:v0.18.3Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.18.3_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.18.3_linux_amd64.tar.gzmcp-data-platform-v0.18.2
What's New in v0.18.2
A UI polish release focused on improving the admin portal's usability across audit logs, tools, login, and persona management.
Admin UI Improvements
Audit Log Page
- New EventDrawer slide-out panel — click any audit event row to see full details (parameters, error messages, enrichment status, request/response sizes) without navigating away from the list
- User display labels — audit filter dropdowns now show
user_emailalongsideuser_idso operators can identify users at a glance instead of reading raw UUIDs - Extracted shared
formatDurationandformatUserhelpers for consistent display across pages
Tools Page
- Platform-level tools (e.g.
platform_info) now appear in the admin tools listing alongside toolkit-registered tools, giving a complete view of all available tools - EmbeddedResource content extracted in tool call responses — the admin "Try it" panel now renders
EmbeddedResourcetext content, not justTextContentblocks - Error-only tool responses with no content blocks now show a fallback message instead of an empty result
Login Form
- Server-side key validation — the login form now calls
GET /api/v1/admin/system/infowith the entered key before storing it, showing "Invalid API key" or "Unable to reach server" on failure instead of silently accepting bad credentials - Password manager friendly — switched from
<form onSubmit>to a standard<input>+<button>pattern withautoComplete="current-password"so browsers offer to save/fill credentials - Added loading spinner during validation
Dashboard
- Bar chart and timeseries chart layout polish — improved axis label formatting and responsive sizing
Personas Page
- Persona descriptions now displayed in the list view
Knowledge Page
- Minor layout refinements
Backend Changes
New API: DistinctPairs
GET /api/v1/admin/audit/events/filtersnow returnsuser_labels— auser_id→user_emailmapping built from audit log data via the newDistinctPairs(col1, col2)store method- Column allowlist (
user_id,user_emailonly) prevents SQL injection
platform.ToolInfo and PlatformTools()
- New
platform.ToolInfotype andPlatformTools()method expose tools registered directly on the platform (outside of any toolkit) so the admin API can include them inGET /api/v1/admin/tools - Renamed from
PlatformToolInfotoToolInfoto satisfyrevivestuttering lint rules
Vite Config
- Cleaned up proxy and build configuration for admin UI dev server
Changelog
Bug Fixes
- fix: admin UI polish — password manager, UUID display, persona descriptions, platform_info listing (#97)
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:v0.18.2Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.18.2_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.18.2_linux_amd64.tar.gzmcp-data-platform-v0.18.1
What's New in v0.18.1
Admin Portal Redirect Loop Fix
Fixed an infinite redirect loop that prevented the admin portal from loading at /admin/. The root cause was Go's http.FileServer treating requests for index.html as a directory index, issuing a 301 Location: ./ redirect — which, under the /admin/ prefix, created an infinite loop.
Fix: The SPA handler now pre-reads index.html into memory at startup and serves it directly via w.Write() for root, fallback, and /index.html requests, bypassing http.FileServer entirely for the index page. Static assets (JS, CSS, images) continue to be served by http.FileServer.
Testing: Rewrote all admin portal tests to use synthetic fstest.MapFS filesystems, making them independent of whether the real frontend was built. This eliminates CI coverage failures caused by make verify stripping embedded assets before running tests.
Changelog
Bug Fixes
- fix: admin portal redirect loop — serve index.html directly (#96)
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:v0.18.1Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.18.1_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.18.1_linux_amd64.tar.gzmcp-data-platform-v0.18.0
What's New in v0.18.0
Tool Visibility Filtering
Config-driven allow/deny filter on tools/list responses to reduce LLM token usage. Deployments that only use a subset of toolkits (e.g., only Trino) no longer pay the token cost of announcing all 25-32 tools.
tools:
allow:
- "trino_*"
- "datahub_*"
deny:
- "*_delete_*"- Visibility, not security — persona auth continues to gate
tools/callindependently - Uses
filepath.Matchglob patterns (same syntax as persona tool filtering) - No patterns configured = all tools visible (backward compatible)
- Outermost middleware layer — filters before any other processing
MCP SDK v1.3.0 Upgrade
Upgraded go-sdk from v1.2.0 to v1.3.0 and jsonschema-go from v0.3.0 to v0.4.2.
- SchemaCache — caches JSON schema reflection during tool registration for improved performance
- SetError/GetError — error result helpers now use the SDK's canonical
SetError()method, making errors programmatically inspectable viaGetError() - 405 Allow header — SSE and Streamable HTTP handlers now return RFC 9110-compliant
Allowheaders, fixing compatibility with strict API gateways - Race condition fix — resolved data race in SDK logging under concurrent load
Bug Fixes
- Admin portal gating — portal now correctly requires
admin.portal: truein config; previously could render without explicit opt-in - Production build cleanup —
mockServiceWorker.jsstripped from production admin portal builds
Changelog
Features
- config-driven tool visibility filtering for
tools/listtoken reduction (#94) - upgrade MCP SDK to v1.3.0 with SchemaCache and SetError adoption (#95)
Bug Fixes
- gate admin portal on config and strip mockServiceWorker.js from prod builds (#93)
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:v0.18.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.18.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.18.0_linux_amd64.tar.gzmcp-data-platform-v0.17.2
Performance fix: Disables SELECT COUNT(*) row estimation during DataHub query enrichment by default, eliminating full table scans that caused search timeouts.
Problem
When datahub_query_enrichment: true, every DataHub tool call (search, get_entity, get_schema, etc.) enriches results with Trino query context by calling GetTableAvailability() for each URN. This unconditionally ran SELECT COUNT(*) FROM table per URN — a search returning 10 results triggered 10 sequential COUNT() queries. On large PostgreSQL tables, each COUNT() caused a full table scan, making most DataHub searches timeout.
Fix
Added EstimateRowCounts config flag to the Trino query adapter, defaulting to false (disabled). When disabled, GetTableAvailability() still verifies table existence via DescribeTable but skips the expensive COUNT(*). Table availability, query table paths, and sample SQL are all still returned — only the row count estimate is omitted.
Upgrading
No config changes needed. The fix takes effect immediately on upgrade — COUNT(*) queries stop, DataHub searches become fast.
To restore row count estimates (if your tables are small enough), explicitly opt in:
injection:
datahub_query_enrichment: true
estimate_row_counts: true # opt-in to COUNT(*) per tableChanges
| File | Change |
|---|---|
pkg/query/trino/adapter.go |
Added EstimateRowCounts bool to Config; guarded COUNT(*) behind the flag; extracted estimateRowCount() helper to satisfy complexity limits |
pkg/platform/config.go |
Added EstimateRowCounts to InjectionConfig (yaml: estimate_row_counts) |
pkg/platform/platform.go |
Wired Injection.EstimateRowCounts into Trino adapter config |
pkg/query/trino/adapter_test.go |
Added TestGetTableAvailability_RowCountsDisabled; updated existing tests to explicitly set EstimateRowCounts: true |
pkg/platform/config_test.go |
Added assertion that EstimateRowCounts defaults to false |
Changelog
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:v0.17.2Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_0.17.2_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_0.17.2_linux_amd64.tar.gz