Skip to content

mcp-data-platform-v0.26.0

Choose a tag to compare

@github-actions github-actions released this 22 Feb 03:10
· 331 commits to main since this release
4dded54

Highlights

This release fixes a critical bug where multiple Trino connections were non-deterministically routed, causing queries to hit the wrong catalog. It also adds connection descriptions, mandatory connection selection for multi-instance deployments, and correct list_connections expansion.

Bug Fixes

Deterministic Trino multi-connection routing (#146)

When multiple Trino instances were configured (e.g., warehouse, elasticsearch, cassandra), the platform created N separate toolkit objects that each registered the same 7 tool names. Due to Go map iteration order, one random toolkit "owned" all tools per process start — silently misrouting queries to the wrong catalog.

Root cause: RegisterTools calls AddTool with the same names from each toolkit. Last writer wins, and the winner is non-deterministic.

Fix: Replaced N separate toolkits with a single toolkit backed by multiserver.Manager from mcp-trino. The manager routes each tool call to the correct backend based on the connection parameter.

New Features

Connection descriptions

Trino instances now support a description field in the platform YAML config. Descriptions are surfaced in list_connections output and in error messages, helping LLMs understand what each connection is for.

toolkits:
  trino:
    instances:
      warehouse:
        host: trino.example.com
        catalog: hive
        description: "Production data warehouse for batch analytics and reporting"
      elasticsearch:
        host: trino.example.com
        catalog: elasticsearch
        description: "Elasticsearch for transactional sales data"

Mandatory connection selection

When multiple Trino connections are configured and a tool call omits the connection parameter, the request is now rejected with a descriptive error listing all available connections and their descriptions. Previously, the query silently routed to the default — which was wrong because the LLM had no way to know it needed to choose.

Error: multiple Trino connections are configured — you must specify the 'connection' parameter.

Available connections:
  - cassandra: Real-time event store
  - elasticsearch: Transactional sales data
  - warehouse (default): Production data warehouse for batch analytics

Single-instance deployments are unaffected — the connection parameter remains optional.

Expanded list_connections output

The list_connections tool now correctly lists all Trino connections with their descriptions and default status. Previously it showed only 1 entry for the single Trino toolkit.

{
  "connections": [
    {"kind": "trino", "name": "warehouse", "connection": "warehouse", "description": "Production data warehouse", "is_default": true},
    {"kind": "trino", "name": "elasticsearch", "connection": "elasticsearch", "description": "Sales data"},
    {"kind": "datahub", "name": "primary", "connection": "primary-datahub"}
  ],
  "count": 3
}

Toolkits implementing the new ConnectionLister interface are expanded into individual entries. Non-lister toolkits (DataHub, S3) fall through to the existing single-entry behavior.

Accurate audit connection logging

Audit logs now record the actual target connection from the tool call's connection argument, not the toolkit's default connection name.

Breaking Changes

None. All changes are backward compatible. The connection parameter is only required when >1 Trino instance is configured.

Technical Details

  • New AggregateToolkitFactory pattern in the registry for toolkits that manage multiple connections internally
  • New pkg/toolkit shared types package (ConnectionDetail, ConnectionLister) to avoid import cycles
  • ConnectionRequiredMiddleware uses reflection (FieldByName("Connection")) to extract the connection from any Trino tool input type without coupling to all 7 input structs
  • Connection list in error messages is sorted alphabetically for determinism
  • 19 files changed, +1,819 / -102 lines

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

Verification

All release artifacts are signed with Cosign. Verify with:

cosign verify-blob --bundle mcp-data-platform_0.26.0_linux_amd64.tar.gz.sigstore.json \
  mcp-data-platform_0.26.0_linux_amd64.tar.gz