Skip to content

Releases: txn2/mcp-data-platform

mcp-data-platform-v0.21.1

17 Feb 08:32
d46a761

Choose a tag to compare

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 via SELECT 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_LEVEL environment variable: Configure slog JSON logging level at startup (debug, info, warn, error). Defaults to info.
  • Cleanup goroutines: Audit log cleanup, OAuth token/code expiration, and session cleanup routines now use slog.Warn for 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 UserPersonas field from persona mapper and unused IdleTimeout field 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_connections tools removed: Agents that called trino_list_connections, datahub_list_connections, or s3_list_connections should use list_connections instead.
  • 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.21.1

Verification

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

mcp-data-platform-v0.21.0

16 Feb 21:43
20fdb01

Choose a tag to compare

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 columns

When 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_info at 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 MCPIconMiddleware and MCPClientLoggingMiddleware
  • 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: true

No 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.21.0

Verification

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

mcp-data-platform-v0.20.0

16 Feb 09:02
415e776

Choose a tag to compare

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

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:v0.20.0

Verification

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

mcp-data-platform-v0.19.0

15 Feb 22:04
89371ed

Choose a tag to compare

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 includes catalog.schema.table path format guidance, LIMIT awareness, WHERE clause advice for large tables, and a nudge toward trino_explain for expensive queries
  • trino_explain — Now provides concrete triggers: large tables (millions of rows), filter verification, slow query debugging, and join strategy analysis
  • trino_describe_table — Highlights include_sample=true for 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 descriptions option 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.19.0

Verification

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

mcp-data-platform-v0.18.4

15 Feb 02:45
d167596

Choose a tag to compare

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 RecentErrorsList into 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/connections endpoint
  • 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.md feature grid with material-monitor-dashboard icon
  • MCP Apps icon changed from monitor-dashboard to palette-swatch to avoid duplicate icons
  • mkdocs.yml nav 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 docsdocs/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

14 Feb 23:57
4521d97

Choose a tag to compare

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.deny visibility config — hidden tools are dimmed with an EyeOff indicator so operators can immediately see what LLM clients will and won't see
  • New hidden_tools field in the GET /api/v1/admin/connections response powers this, reusing the existing IsToolVisible glob-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/branding returns name and portal_title from 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_table and datahub_get_entity render 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_id query now returns COALESCE(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_lineage to the adapter's Tools() return list — it was registered on the MCP server by upstream RegisterAll() 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 calls Register(s, ReadTools()...) instead of RegisterAll(), 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 from Tools(), causing the same misclassification

Exported IsToolVisible

  • Renamed isToolVisibleIsToolVisible in pkg/middleware/mcp_visibility.go so 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.18.3

Verification

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

mcp-data-platform-v0.18.2

14 Feb 20:00
fa45137

Choose a tag to compare

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_email alongside user_id so operators can identify users at a glance instead of reading raw UUIDs
  • Extracted shared formatDuration and formatUser helpers 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 EmbeddedResource text content, not just TextContent blocks
  • 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/info with 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 with autoComplete="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/filters now returns user_labels — a user_iduser_email mapping built from audit log data via the new DistinctPairs(col1, col2) store method
  • Column allowlist (user_id, user_email only) prevents SQL injection

platform.ToolInfo and PlatformTools()

  • New platform.ToolInfo type and PlatformTools() method expose tools registered directly on the platform (outside of any toolkit) so the admin API can include them in GET /api/v1/admin/tools
  • Renamed from PlatformToolInfo to ToolInfo to satisfy revive stuttering 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.18.2

Verification

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

mcp-data-platform-v0.18.1

14 Feb 03:47
5cb64cc

Choose a tag to compare

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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.18.1

Verification

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

mcp-data-platform-v0.18.0

14 Feb 02:41
3f895ad

Choose a tag to compare

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/call independently
  • Uses filepath.Match glob 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 via GetError()
  • 405 Allow header — SSE and Streamable HTTP handlers now return RFC 9110-compliant Allow headers, 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: true in config; previously could render without explicit opt-in
  • Production build cleanupmockServiceWorker.js stripped from production admin portal builds

Changelog

Features

  • config-driven tool visibility filtering for tools/list token 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-platform

Claude Code CLI

claude mcp add mcp-data-platform -- mcp-data-platform

Docker

docker pull ghcr.io/txn2/mcp-data-platform:v0.18.0

Verification

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

mcp-data-platform-v0.17.2

13 Feb 19:54
2667559

Choose a tag to compare

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 table

Changes

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

  • fix: disable COUNT(*) row estimation in query enrichment by default (#92) (@cjimti)

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:v0.17.2

Verification

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