@@ -11,7 +11,7 @@ descriptions, input/output schemas, annotations, and `_meta` — as a versioned
1111contract at submission time. Removing or renaming a tool is a breaking change for
1212all installed clients that depend on that tool string.
1313
14- A deploying the server immediately removes a tool from the live server, but the
14+ Deploying the server immediately removes a tool from the live server, but the
1515published contract (the snapshot submitted to the app store) still lists it. Clients
1616using the published version see a mismatch; the tool disappears without warning.
1717See ` CONTRIBUTING.md ` (§ Published-app contract) and
@@ -85,7 +85,26 @@ callable. Keep all of the following intact:
8585- [ ] ` task docs:generate `
8686- [ ] ` task contract:generate ` — regenerates ` tests/unit/contract/contract_snapshot.json ` ; commit the result
8787- [ ] ` task check ` + ` task test:unit `
88- - [ ] Submit a new app version after merge (the snapshot changed)
88+ - [ ] Release and roll out — merging this PR doesn't update the published apps
89+ on its own (see [ Release & rollout] ( #release--rollout ) )
90+
91+ ## Release & rollout
92+
93+ A merged dbt-mcp PR does ** not** reach the published apps on its own — merging
94+ is not releasing, and releasing is not deploying. The same rollout applies to
95+ both the deprecate and the remove phases:
96+
97+ 1 . ** Merge the dbt-mcp PR** (code + contract snapshot + changelog entry).
98+ 2 . ** Cut a dbt-mcp release.** See ` CONTRIBUTING.md ` (§ Release). A deprecation
99+ is typically a minor bump; a removal is a major bump.
100+ 3 . ** Roll the new release into the hosted MCP service and deploy it.** This is
101+ the step that actually changes the tool surface the published apps talk to.
102+ A major bump (a removal) requires updating the pinned dbt-mcp version in the
103+ hosted service, not just a routine dependency refresh.
104+ 4 . ** Resubmit the app version in each store (OpenAI and Claude), after step 3.**
105+ Each store is a separate submission, and each captures the live server's
106+ tool list at submission time — submitting before the hosted service runs
107+ the new release captures the old surface.
89108
90109## Monitoring usage before removal
91110
@@ -97,7 +116,9 @@ Proxied tools are filtered out before emission — only tools directly served by
97116repo are tracked.
98117
99118Query ` ToolCalled ` events filtered to the deprecated ` tool_name ` over a trailing
100- 30-day window. The bar for proceeding to removal is approximately zero calls.
119+ 30-day window. The bar for proceeding to removal is approximately zero calls —
120+ measured against the * deployed* hosted service, not just the merged PR (see
121+ [ Release & rollout] ( #release--rollout ) ).
101122
102123## Removing a tool (Phase B)
103124
@@ -117,4 +138,9 @@ Once usage is ~0, remove the tool in a dedicated PR:
1171388 . ` task docs:generate `
1181399 . ` task contract:generate ` — commit the updated snapshot
11914010 . ` task check ` + ` task test:unit `
120- 11 . Submit a new app version after merge.
141+ 11 . Release and roll out (see [ Release & rollout] ( #release--rollout ) ).
142+
143+ The tool leaves the live server only once the hosted service deploys this
144+ removal, and the published contract still lists it until each store approves
145+ the new app version — so confirm usage is ~ 0 against the deployed service
146+ before that deploy, not merely before this PR merges.
0 commit comments