Skip to content

mcp-data-platform-v1.62.4

Choose a tag to compare

@github-actions github-actions released this 18 May 03:32
· 104 commits to main since this release
3c3f8c4

Try It tab can now invoke platform-level tools

The portal Tools "Try It" tab's connection field rendered as a disabled, empty dropdown for any tool that takes connection as a parameter rather than being toolkit-bound. Affected tools: api_list_endpoints, api_get_endpoint_schema, api_invoke_endpoint, api_export, and similar platform-level meta-tools. Operators had no way to invoke these from the portal.

This release fixes the picker and adds an empty-state helper for the no-matching-connections-registered case.

PR #425.

Root cause

ToolForm.tsx rendered the connection field with a single branch that assumed every tool was bound to a connection at toolkit-registration time:

// pre-fix
<select disabled value={selectedConnection}>
  <option value={selectedConnection}>{selectedConnection}</option>
</select>

That works for tools the toolkit registered under a specific connection. It fails for platform-level meta-tools whose schema has connection: "" and needs the operator to pick a target at call time. The select rendered empty with no options.

Fix

ToolForm branches on the binding state

State Render
selectedConnection non-empty (bound) Locked select showing the bound name. Unchanged behavior.
selectedConnection empty + connections of the tool's kind exist Enabled <select name="connection" required> populated from a new availableConnections prop. Operator picks at call time.
selectedConnection empty + no matching connections Disabled select plus an amber helper message: "No {kind} connections registered. Add one in Settings to invoke this tool."

A new prop availableConnections?: EffectiveConnection[] is filtered by the caller to the tool's kind so the dropdown lists only valid targets.

TryItTab wires the picker

  • Fetches connections via useEffectiveConnections().
  • Filters by schema.kind (an api tool sees api-kind connections only; an mcp tool sees mcp-kind only).
  • Passes the result through as availableConnections.

Replay/History invariant preserved

The handler destructures connection off form params into a fresh outParams object rather than mutating in place:

const { connection: _routing, ...rest } = params;
outParams = rest;

This is load-bearing for the History panel and the Replay action. The params reference passed in is the same object stored in the history entry one line earlier (addHistoryEntry({ ..., parameters: params })). A naive delete params.connection would strip it from the already-stored entry, breaking Replay (which re-applies entry.parameters to the form). Destructuring keeps the history reference intact and removes connection only from the wire payload.

The bound case continues to take precedence so connection-grouped tools still route to their toolkit.

Tests

ui/src/pages/tools/ToolForm.test.tsx (new), 5 tests pinning every branch:

  • Locked select renders when selectedConnection is bound.
  • Enabled picker with name="connection" and the supplied options renders when unbound.
  • Empty-list edge case renders the amber helper plus a disabled select.
  • The operator's pick propagates into params.connection on submit.
  • Required-empty guard blocks the no-pick submit case.

Connection names in the tests use salesforce and github (generic vendor names per the standing rule).

Adversarial pre-commit review

Round 1 surfaced 2 substantive findings, both fixed:

  1. The original draft used delete params.connection, which mutated the history entry's stored reference and broke Replay for unbound tools. Switched to destructuring into a new outParams object.
  2. The new test file used vendor-specific connection names. Scrubbed to generic ones.

Round 2: CLEAN.

make verify green (full suite: Go test/race, coverage, patch coverage, golangci-lint, gosec, govulncheck, semgrep, codeql, dead-code, mutation testing, GoReleaser dry-run, UI typecheck and vitest).

Upgrade notes

  • No schema change, no config change, no breaking API change. Drop-in upgrade from v1.62.3.
  • Platform-level tools that were previously uninvokable from the portal are now usable: api_list_endpoints, api_get_endpoint_schema, api_invoke_endpoint, api_export, and any future tool of the same shape (registered without a bound connection, takes connection as a parameter).
  • Connection-bound tools render unchanged.
  • When no connections of the matching kind exist, the field surfaces an amber helper line instead of a silently empty dropdown.

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

Verification

All release artifacts are signed with Cosign. Verify with:

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