TrinoHub 0.4.0

Released 2 September 2026 · GitHub release

Added#

  • Data products. A curated, documented bundle of tables and views with an owner, tags, and per-asset descriptions, managed from a new Data products nav view. AI clients find them by keyword through the search_data_products and get_data_product MCP tools, which is how an agent locates the right data instead of guessing from raw catalog metadata. Publishing a product describes data — it never widens who can read it, and products the caller has no cluster or catalog grant for are not listed.
  • Parameterized query templates. An operator publishes named SQL with typed {{placeholders}}; MCP clients call it through list_query_templates / run_query_template supplying values only, never SQL. Values are validated by declared type (string, number, boolean, date, identifier) and rendered as escaped literals, and the finished statement still passes the read-only check. A template whose SQL isn't read-only once filled in is rejected when it is saved, not when an agent calls it.
  • get_query_result MCP tool. run_query stops polling after ~12s and returns status: "running" with a query_id; that id can now be redeemed to keep waiting, instead of stranding the caller.
  • OAuth discovery for MCP. The server publishes RFC 9728 metadata at /.well-known/oauth-protected-resource (and the /mcp-suffixed form), and an unauthenticated /mcp call now answers with a WWW-Authenticate challenge pointing at it. Clients that discover authentication rather than accept a pasted token can connect; the configured SSO issuer is advertised as the authorization server.
  • MANAGE_DATA_PRODUCTS privilege, gating both curation surfaces above. The seeded admin role is now kept in sync with the full privilege list, so a database created before a privilege existed picks it up on startup.
  • MCP has its own documentation topic. The MCP screen is visible to every user, but its documentation lived inside the admin-only Automation & API topic, so an analyst could open the screen and read nothing about it. MCP is now a top-level, non-admin docs group, rewritten against the server: all eight tools, what each one may run, and how /mcp is authenticated and firewalled. Data products is documented alongside it.
  • Installing on a host you manage yourself is documented. The README now compares the three install paths — CloudFormation stack, your own host, local development — and walks through the apt/venv/systemd route, the instance profile the control plane needs, and how running off EC2 degrades.
  • This changelog, backfilled to the first tagged release. Its section for a tag is published as that GitHub Release's body, so release notes are written once rather than auto-generated from PR titles.
  • The running version is shown in the sidebar, linked to its release.
  • A test asserts the CloudFormation GitRef default matches the package version, so the two cannot drift apart unnoticed.

Changed#

  • MCP clients can run SHOW, DESCRIBE, and EXPLAIN, not only SELECT, which is what makes schema discovery and query-plan inspection possible. EXPLAIN ANALYZE stays refused because it executes the statement it explains, and EXPLAIN re-validates whatever follows it so a write cannot ride in behind the keyword. Ask Trino is unchanged and remains SELECT-only.
  • MCP query results are capped at 100 KB, separately from the browser's 1,000-row / 10 MB display cap. A tool result is read into a model's context rather than rendered in a table, so the old cap could swamp a client long before the data became useful. Trimmed results still report truncated: true.

Fixed#

  • The unattended maintenance agent in automation/ never ran: its systemd units were never installed, its service unit pointed at the wrong checkout path, it had no git identity on the build box, and a half-built virtualenv was never rebuilt. All four are fixed, and a release-preparation job runs alongside it.

Upgrading#

No migration or configuration change is required. The three new tables (query_templates, data_products, data_product_assets) are created on startup, and the seeded admin role picks up MANAGE_DATA_PRODUCTS automatically. Back up .trinohub/ before upgrading, and upgrade an existing instance through SSM — see the AWS upgrade guide. New CloudFormation installations pin to the immutable v0.4.0 release.

Four things to check afterwards:

  • Custom roles do not get the new privilege. Only the system admin role is synced. Grant MANAGE_DATA_PRODUCTS under Users → Roles to any custom role whose members should publish data products or query templates. Reading a product needs no new privilege — the existing cluster and catalog grants still decide what a caller sees.
  • MCP tool results are now capped at 100 KB. A client that relied on the old 1,000-row / 10 MB limit will see truncated: true sooner. Narrow the query, or page through it with run_query and get_query_result.
  • The MCP tool surface is wider than SELECT. If your review of MCP access assumed SELECT-only, note that SHOW, DESCRIBE, and EXPLAIN now reach metadata for any catalog the caller is already granted. Writes and EXPLAIN ANALYZE are still refused, and Ask Trino stays SELECT-only.
  • Behind a reverse proxy, set the SSO redirect base if you want OAuth discovery to work. The new discovery documents and the WWW-Authenticate challenge take their URLs from that setting when it is configured (PUT /api/sso/oidc, redirect_base) and from the incoming request otherwise, which behind a proxy is the internal address a client cannot reach.