Skip to content

Releases: txn2/mcp-data-platform

mcp-data-platform-v1.56.1

19 Apr 07:01
7a4748c

Choose a tag to compare

Tool List Change Notifications

MCP clients now receive notifications/tools/list_changed when the server's tool list changes. Previously, clients that reconnected after a server upgrade kept their stale cached tool list and would not see newly registered tools until a manual disconnect/reconnect.

This enables seamless upgrades — deploying a new version with additional tools (e.g., trino_export from v1.56.0) is immediately visible to connected clients without requiring them to restart their session.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.56.0

19 Apr 03:50
a70a3f3

Choose a tag to compare

Highlights

New: trino_export — Query-to-Asset Export (#331)

A new MCP tool that executes a validated SQL query and writes the full result set directly to S3 as an immutable portal asset, bypassing the LLM token budget. The agent shapes queries interactively with trino_query, then hands off bulk execution to trino_export when the shape is finalized.

Parameters: sql, format (csv/json/markdown/text), name, plus optional connection, description, tags, limit, idempotency_key, timeout_seconds, create_public_link.

Returns: Asset metadata only (ID, portal URL, share URL, row count, size) — data goes to S3, not through the LLM.

Key capabilities:

  • Four output formats — CSV (with formula injection escaping), JSON, Markdown, plain text
  • Hard size caps — configurable max_rows (default 100K) and max_bytes (default 100 MB) per deployment
  • Query timeout — configurable default_timeout / max_timeout, separate from size caps
  • Idempotencyidempotency_key prevents duplicate assets on retry, backed by a partial unique index with race condition handling
  • Sensitivity inheritance — if a query touches a PII-classified table (via DataHub tags), the resulting asset automatically inherits _sys-classification:pii tags
  • Public share linkscreate_public_link: true generates a shareable URL for automation pipelines, with default notice text
  • Read-only enforcement — always enforced regardless of deployment read_only config (exports are SELECT-only by definition)
  • Provenance — captures session tool call history, source tables, query SQL, and format in the asset's provenance metadata
  • No partial state — no asset record is created unless the S3 write fully succeeds
  • Persona/RBAC gate — requires explicit authorization via tools allow/deny patterns

Configuration:

portal:
  export:
    enabled: true          # auto-enabled when portal + trino configured
    max_rows: 100000
    max_bytes: 104857600   # 100 MB
    default_timeout: "5m"
    max_timeout: "10m"

New migration: 000033_export_idempotency adds idempotency_key column with partial unique index to portal_assets.

Large Asset Preview Guard

Assets exceeding 2 MB are no longer loaded inline in the portal viewer. A "too large to preview" message with a download button is shown instead. This prevents the browser from choking on multi-megabyte CSV or JSON exports.

Affected surfaces:

  • Authenticated portal (asset viewer, preview modal, admin viewer)
  • Public viewer (backend skips S3 fetch, renders download prompt)
  • New download endpoint: GET /portal/view/{token}/content for public share content downloads

Provenance Middleware: Multiple Harvest Tools

MCPProvenanceMiddleware now accepts variadic tool names for provenance harvesting. Both save_artifact and trino_export trigger session tool call capture.

Other Changes

  • docs: comprehensive portal documentation with screenshots (#329)
  • docs: complete OpenAPI spec with examples for all endpoints (#330)
  • deps: bump go.opentelemetry.io/otel/sdk from 1.41.0 to 1.43.0 (#328)
  • deps: bump dompurify from 3.3.2 to 3.4.0 (#327)

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.11

15 Apr 22:49
33b6100

Choose a tag to compare

What's Changed

Markdown rendering for knowledge and memory content (#326)

Knowledge insights and memory records in the portal now render through the existing MarkdownRenderer component instead of displaying as plain text blocks. This enables formatted content — bullet lists, code blocks for SQL, backtick-wrapped column/table names — in both the user and admin knowledge pages.

Frontend:

  • Insight and memory detail panels (admin drawers, user cards) use MarkdownRenderer with bare mode
  • Table cell previews remain plain text (truncated content would break rendered markdown)
  • Sanitize mermaid SVG output with DOMPurify to prevent XSS
  • Strip first/last child prose margins to prevent spacing bleed in card layouts
  • Guard against null/undefined content

Backend:

  • capture_insight and memory_manage tool field descriptions now note markdown support
  • Knowledge capture prompt encourages markdown formatting when it aids clarity

Existing plain-text content renders identically — no migration or schema changes needed.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.10

14 Apr 07:23
b5d2a78

Choose a tag to compare

What's Changed

This release fixes 6 server bugs and 4 tool description gaps identified during deep testing of a production deployment (v1.55.9, admin persona, dual Trino connections).

Bug Fixes

B5: Artifact version numbering starts at 1 (was 2)

The first version created by save_artifact was incorrectly numbered 2 due to an off-by-one in the asset store. New assets now correctly start at version 1.

B1: manage_prompt create no longer leaks database errors

  • Omitting the personas field no longer triggers a raw PostgreSQL NOT NULL constraint error. The field now defaults to an empty list.
  • All manage_prompt error responses now return clean messages without driver-specific details (pq: prefix, SQLSTATE codes).

B2: query_context no longer resolves non-dataset URNs

Responses from datahub_search, datahub_get_lineage, and other DataHub tools no longer contain spurious "invalid dataset URN" errors for domain, tag, query, and owner URNs. Only dataset URNs are resolved for table availability.

B3: available_connections no longer returns duplicates

The query_context.available_connections array in enriched responses now correctly deduplicates connection names.

D1: Default Trino connection is used when connection param is omitted

When a default connection is configured, trino_query and other Trino tools no longer require the connection parameter. The default is used automatically. The error message with available connections still appears when no default is configured.

D2: Approved insights can now be rejected

The insight state machine now allows approved → rejected, providing a revoke path for erroneous approvals. Full lifecycle: pending → approved/rejected/superseded; approved → applied/rejected; applied → rolled_back.

Tool Description Improvements

  • manage_prompt: Now states it manages database-stored prompts only; static prompts from server configuration are not listed or editable.
  • manage_artifact: Notes that list returns full metadata including provenance per asset.
  • apply_knowledge: Documents the insight lifecycle state machine and valid transitions.
  • manage_prompt personas field: Clarifies the field defaults to an empty list if omitted.

Not Included (External Dependencies)

The following issues identified during testing are tracked separately as they reside in upstream libraries or require product decisions:

  • Opaque OpenSearch aggregation errors (mcp-trino)
  • Tag creation not idempotent on name (mcp-datahub)
  • Empty matched_fields.value for filter-based search hits (DataHub GraphQL)
  • S3 key layout migration across artifact versions (product decision)
  • Provenance included by default in artifact list (product decision)
  • Static + database prompt store unification (product decision)

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.9

13 Apr 20:20
a498244

Choose a tag to compare

Fix: resources/read URI extraction

extractResourceURI used json.Marshal on the MCP request to parse the URI, which failed because ServerRequest contains function fields that cannot be serialized. This caused every resources/read to fall through the middleware to the SDK's fallback handler. Replaced with a direct type assertion to *mcp.ReadResourceParams via GetParams().

Diagnosed via production logs added in v1.55.8.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.8

13 Apr 19:01
b43eaef

Choose a tag to compare

Diagnostic logging for managed resources pipeline

Adds DEBUG-level logging at every decision point in the managed resources middleware to diagnose why resources uploaded via the REST API are not visible through the MCP resources primitive in production.

Also fixes the SDK fallback resource handler to return valid content instead of nil Contents, which caused read handler returned nil information errors.

Upgrade notes

  • No config changes required. Logging is at DEBUG level and does not affect production behavior.
  • Set log level to DEBUG to see the diagnostic output.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.7

13 Apr 17:46
597192a

Choose a tag to compare

Managed resources visible to MCP clients

Managed resources are now registered with the MCP server's native resource map via AddResource(), making them discoverable by all MCP clients. The server declares listChanged: true in its resource capabilities and sends notifications/resources/list_changed when resources are created, updated, or deleted via the REST API.

Behavior

  • Startup: Existing global resources are loaded from the database and registered with the MCP server.
  • Create/Update: New or updated resources are registered, triggering a list change notification to connected clients.
  • Delete: Resources are removed from the server, triggering the notification.
  • Scope filtering: The middleware filters the resource list by the caller's visible scopes.

Other changes

  • Dependency updates: golang.org/x/crypto, testcontainers-go/modules/postgres
  • CI: bumped actions/setup-node, actions/upload-artifact, actions/upload-pages-artifact

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.6

12 Apr 22:03
db814cb

Choose a tag to compare

Fix: S3 instance name resolution for managed resources

The default S3 connection fallback in v1.55.5 resolved the correct instance config internally but returned an empty ConnectionName, causing the S3 client to never be created. The root cause was getS3Config("") — it found the default instance but its ConnectionName fallback used the empty string that was passed in.

What changed

Added resolveDefaultS3Instance() which resolves the instance name directly from the S3 toolkits config map, returning the actual key (e.g., "acme"). managedResourceS3Connection() now uses this resolved name, so getS3Config receives a non-empty instance name and sets ConnectionName correctly.

Upgrade notes

  • No config changes required. This fixes the default S3 connection fallback introduced in v1.55.5.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.5

12 Apr 21:13
4d48248

Choose a tag to compare

Managed resources automatically use the default S3 connection

When resources.managed.s3_connection was not explicitly configured, managed resources disabled blob storage entirely — resources/read could not serve file content even though an S3 toolkit was available for other features (portal, DataHub). Since managed resources are enabled by default when a database is available, they should also use an available S3 connection by default.

What changed

Added managedResourceS3Connection() which returns the explicit s3_connection if set, otherwise falls back to the default/first S3 toolkit instance. This follows the same convention-over-configuration pattern as managedResourceURIScheme() and the instance resolution used by semantic, query, and storage providers.

The info log now shows the resolved S3 connection name instead of the raw config value, so operators can see which S3 backend is actually in use.

Upgrade notes

  • No config changes required. Deployments with an S3 toolkit configured for any purpose (portal, DataHub, etc.) will now automatically use it for managed resources.
  • Deployments without any S3 toolkit continue to work — blob storage is disabled gracefully and resources store metadata only.
  • To use a specific S3 connection for managed resources (different from the default), set resources.managed.s3_connection explicitly.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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

mcp-data-platform-v1.55.4

12 Apr 19:37
acad439

Choose a tag to compare

MCP clients now see managed resources after REST API changes

Managed resources uploaded via the REST API (POST /api/v1/resources) were invisible to MCP clients because the MCP SDK client caches resources/list responses and only refreshes when the server sends a notifications/resources/list_changed notification. The REST API never triggered this notification, so clients showed a stale resource list for the entire session.

What changed

  • NotifyResourceListChanged added to Platform — triggers notifications/resources/list_changed so connected MCP clients refresh their cached resource list.
  • Resource handler now calls NotifyFn after successful create, update, and delete operations.
  • Managed resources middleware now authenticates users directly for resources/list and resources/read methods instead of depending on PlatformContext from the tools/call pipeline. This fixes the case where the middleware had the right data in the database but couldn't serve it because the auth context was missing.

Full managed resources round-trip now works

  1. Upload a resource via POST /api/v1/resources
  2. Connected MCP clients receive notifications/resources/list_changed
  3. resources/list returns the new resource (filtered by caller's visible scopes)
  4. resources/read returns the resource content via the mcp:// URI scheme

Upgrade notes

  • No config changes required.
  • Deployments without an S3 connection for managed resources will store metadata in the database but cannot serve blob content via resources/read. The resources/list will still show the resource metadata.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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