mcp-data-platform-v1.61.8
Highlights
This release fixes two operator-visible regressions in the api-gateway toolkit and reworks the static-headers editor in the admin UI.
apigateway: config UPDATEs now reach the live runtime (#412)
Attaching an OpenAPI catalog or setting static_headers on an existing api-kind connection via the admin UI persisted the value to the database, displayed it as attached on reload, but never reached the in-memory toolkit. api_list_endpoints reported "no catalog_id configured", api_invoke_endpoint made outbound calls without the configured headers, and the only fix was a process restart.
The admin hot-add path silently early-returned whenever the named connection already existed in the live toolkit, so every UPDATE to an existing connection was dropped at the runtime layer. This affected every config field, not just catalog_id and static_headers: auth_mode, base_url, timeouts, OAuth client config. All required a restart to take effect.
The hot-add path now performs remove-then-add when the connection already exists, so the runtime picks up every config field on save. To make a future drift between DB and runtime self-diagnose, list_connections now surfaces catalog_id and operation_count on api entries. An operator hitting this class of bug in the future will see the divergence from the MCP surface without having to read the toolkit's internal logs.
apigateway: static-headers editor rework (#412)
The editor's + button meant "commit the row I just typed", not "add another row" -- which matches no reasonable operator mental model. Users would type a header name and value, click Save, and lose the entry silently because they had not first clicked +.
The editor now commits on every keystroke. Each header is its own inline-editable row with [name] [value] [×]. + Add header appends a fresh empty row. Stable row IDs survive renames and out-of-order deletes. There is no "pending uncommitted" state anywhere; what is visible is what gets saved.
apigateway: OpenAPI spec parser tolerates PascalCase primitive types (#411)
.NET-based SDK generators emit PascalCase primitive type names (type: String, type: Integer, type: Object) in the OpenAPI schemas they ship. OpenAPI 3.x requires lowercase, and strict kin-openapi validation rejected on case. Swagger UI, Postman, and Insomnia silently accept the PascalCase variants.
ParseSpec now normalises the seven canonical primitive names (string, number, integer, boolean, array, object, null) to lowercase before validation, regardless of input case. Anything outside that fixed set is left alone so structural errors (type: Strung, language-specific aliases like Long/Map/List) still fail. This is the fourth real-world drift pattern accommodated by the leniency work.
Behaviour change worth noting
hotAddConnection is now non-atomic on UPDATE. A successful Remove followed by a failing Add leaves the live toolkit with no connection while the DB row still holds the new config. For the apigateway, trino, and s3 toolkits the Add is local and effectively never fails. For the gateway-kind (mcp) connection it performs network I/O (dial + ListTools), so a failing upstream during an UPDATE will briefly disable the connection until the next save or restart.
This is the right trade-off given that the alternative (the pre-fix silent-stale behaviour) was the bug being shipped. A future ReplaceConnection atomic operation on toolkit.ConnectionManager will close the gap cleanly.
Changelog
- 321cc56: fix(apigateway): propagate UPDATEs to live toolkit; rework static-headers editor (#412)
- ffe733d: fix(apigateway): tolerate PascalCase primitive type names in OpenAPI specs (#411)
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:v1.61.8Verification
All release artefacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_1.61.8_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_1.61.8_linux_amd64.tar.gz