mcp-data-platform-v1.97.0
A configuration "default-on" sweep (PR #788, issue #787) in the same spirit as v1.96.0's elicitation change. Several switches move from opt-in to on-by-default, and discovery-before-query becomes a real gate rather than an after-the-fact warning. This release contains behavior changes that affect existing deployments; read the upgrade notes below before rolling out.
⚠️ Breaking and behavior changes
1. Search-first gate is now a hard block, on by default
Previously, calling a query tool without prior discovery only appended a warning to the result; the query still ran. It is now a real gate: trino_query and trino_execute are refused with a SEARCH_REQUIRED error until a discovery tool (search, or any datahub_* tool) has been called at least once in the session. The tool handler does not run for a blocked call. Once discovery has happened, the gate stays open for the rest of that session.
- Impact: any deployment that never configured workflow gating will start refusing
trino_query/trino_executeuntil the agent callssearch(or adatahub_*tool) once per session. Automations that query without discovering first will break. - Opt out: set
workflow.require_search: falseto disable gating entirely (no block, no hint).
2. Config key renamed: require_discovery_before_query becomes require_search
workflow.require_discovery_before_query is renamed to workflow.require_search (*bool, default enabled). This is a rename, not an alias: under non-strict parsing the old key is silently ignored, so update any config that set it.
3. Removed tuning rules
tuning.rules.require_datahub_check and tuning.rules.warn_on_deprecated are removed. The first is superseded by the real gate above; the second had no runtime effect (deprecation is already surfaced by the enrichment path). Remove these keys from your config.
4. Personas that run queries must grant search
A persona granted trino_* but neither search nor a datahub_* tool will now be gated out of queries, because it cannot reach any discovery tool. The shipped and documented example personas have been updated to grant search. Review your persona tool allow-lists: query-capable personas should include search.
5. Defaults now on where a database is available
Three switches flip from off-by-default to on-by-default (each is a tri-state *bool; set it to false to opt out):
| Setting | Old default | New default |
|---|---|---|
audit.log_tool_calls |
off | on (when audit is enabled) |
knowledge.apply.enabled |
off | on (when a database is available) |
admin.enabled |
off | on |
- With a DB and no
audit:block, tool calls are now logged (expectaudit_logsgrowth). Setaudit.log_tool_calls: falseto keep audit on but skip per-call rows. apply_knowledgeregisters by default when a database is present. On a database-but-no-DataHub deployment it registers with a no-op write path (logged), so tag/term writes are inert until a DataHub connection is configured.- The admin REST API route is mounted by default. It remains gated by admin-role auth; enabling mounts the route, it does not grant open access.
Under the hood
- New
MCPWorkflowGateMiddleware, modeled on the existing session gate: it short-circuits a blocked query with a self-describingSEARCH_REQUIREDerror and never invokes the underlying tool handler. It sits inner to auth (so identity and the recorded tool call are available) and outer to audit and enrichment (so a blocked call never reaches them). - The old warn-after-execution machinery is removed:
MCPRuleEnforcementMiddleware, its escalation and warning-count logic, and therequire_datahub_checkstatic hint. - Dead
warn_on_deprecatedrule machinery removed from the tuning package. mountAdminAPInow backfills the path prefix and admin persona for configs injected directly (bypassing default resolution), so admin-on-by-default cannot collide with the root handler or lock admins out.- The default discovery set stays broad (
searchplus thedatahub_*tools) so a hard gate cannot deadlock a persona granteddatahub_*but notsearch.
Upgrade checklist
- Rename
workflow.require_discovery_before_querytoworkflow.require_search, or remove it to accept the on-by-default gate. - Remove
tuning.rules.require_datahub_checkandtuning.rules.warn_on_deprecated. - Add
searchto the tool allow-list of any query-capable persona. - If you do not want the gate, set
workflow.require_search: false. - To keep prior audit/admin/apply behavior, explicitly set
audit.log_tool_calls: false,admin.enabled: false, and/orknowledge.apply.enabled: false.
Tests and docs
Integration tests over the real middleware chain prove a query is rejected before search, succeeds after search, and that a datahub_* tool opens the gate; tri-state tests cover each new default. CLAUDE.md, docs/server/configuration.md, docs/reference/middleware.md, docs/llms.txt, docs/llms-full.txt, and configs/platform.yaml are updated for the rename, the new defaults, and the hard-gate behavior.
Note
trino_export is intentionally not gated by default; add it to workflow.query_tools if you want export gated too.
Changelog
Features
- 98b588b: feat(config): default-on sweep — search-first hard gate + audit/knowledge/admin defaults (#787) (#788) (@cjimti)
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.97.0Verification
All release artifacts are signed with Cosign. Verify with:
cosign verify-blob --bundle mcp-data-platform_1.97.0_linux_amd64.tar.gz.sigstore.json \
mcp-data-platform_1.97.0_linux_amd64.tar.gz