You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Everything below is on feat/outpost-api-client in #348, with CI green across all four acceptance slices.
This epic was originally scoped as three parked breaking changes (#340, #347, #352). That is no longer what 3.0.0 is. It grew to carry Outpost support and Gateway MCP write mode, and two of the original three did not make it. Scope as it actually stands is below; the deferred items are at the end.
What is in 3.0.0
Breaking
Rename Gateway MCP product tools to a gateway_ prefix (major) #352 — Gateway MCP product tools renamed hookdeck_ → gateway_.hookdeck_login and hookdeck_projects keep their prefix; they are platform tools shared with Outpost. Per-tool permission grants and allowedTools config do not survive a rename — every MCP user must re-grant.
Seven documented API filters added to events and requests on both the MCP tools and the CLI: search_term, next_attempt_at, delivery_group, events_count, ignored_count, cli_events_count.
Path traversal in resource IDs — an id like src_1/../../destinations/des_2 retargeted the request, so "delete this source" deleted an unrelated destination while reporting the id it was given. Fixed at two layers with a 57-method table test.
HOOKDECK_API_KEY printed by --help and, via the reference generator, committable to this public repo.
Quoted booleans and numbers silently dropped filters — {"verified": "false"} returned every request and reported them as unverified.
Tool and env-var names that do not exist in user-facing text, including a README instruction to use HOOKDECK_API_KEY for MCP publishing, which the code deliberately refuses.
outpost destination update rejected every partial update, making credential rotation impossible.
outpost_destinations create omitted required topics, producing a 422 the CLI never hits.
ReadOnlyHint: true on a tool offering pause — a client auto-approving read-only tools would have halted production delivery without asking.
Plus, from review of the PR itself:
reauth no longer clears stored credentials before the sign-in completes — an abandoned browser flow used to sign the user out everywhere for nothing.
ToolSpec.DefaultAction removed as dead API.
go vet ./... clean repo-wide (unbuffered signal channel in pkg/login).
Testing
Coverage gates in both MCP packages that fail when an action ships without a successful-call test. Gateway went from 7 of 55 actions covered to 55 of 55.
Tests assert the wire request (method, path, query, body), not "did not error".
The outpostlive suite runs nightly instead of never.
HOOKDECK_CLI_TESTING_CLI_KEY wired into the acceptance job — project list/use had been skipping in CI since March.
Path to GA
Manual review of pkg/mcpcore/toolspec.go and pkg/gateway/mcp/tools.go. ~500 lines that construct every tool in both servers. Copilot declined the PR for exceeding its 20,000-line limit, so no automated reviewer has seen it either.
Cut v3.0.0-beta.1 from feat/outpost-api-client. Not from main — betas ship from the branch.
Beta validation. Point a real MCP client at both servers, read-only then --allow-write. Note that the beta channel is 1–9 organisations, so do not wait on external beta feedback — it does not arrive. This is dogfooding and rename-derisking.
Release notes leading with the rename, including the before/after mapping and an explicit "you must re-grant tool permissions".
Tag v3.0.0.
Post-release watch, two weeks, named owner. Error rate per command against the Gateway baseline (10.36% CLI / 3.36% MCP non-2xx over 30 days), drop-off after project use, first external Outpost MCP tool call, --allow-write uptake, first non-webhook destination created. GA-then-fix is only honest if the fix half is real.
Known gaps at GA
Accepted, not blocking:
Non-webhook destination types (AWS, GCP, Azure, RabbitMQ, Kafka) are validated against the live schema but have never been created against real infrastructure. Only a real user closes this — worth recruiting a design partner already running one.
Outpost MCP write mode has never been exercised end-to-end against a real project. The actions call the same client methods the CLI commands do, and those are covered; the MCP-specific argument-to-request layer is covered by wire-shape unit tests.
outpost config set does not validate values.MAX_RETRY_LIMIT=notanumber is accepted with a success message. Per AGENTS.md we do not duplicate API validation client-side, but this is a footgun worth raising server-side.
Both are genuinely breaking, so parking them again has a real cost: the next major is now the third time they have been deferred. Worth deciding whether the additive half of #347 (accept both formats) ships as a minor soon, rather than waiting.
Status: implementation complete, awaiting beta
Everything below is on
feat/outpost-api-clientin #348, with CI green across all four acceptance slices.This epic was originally scoped as three parked breaking changes (#340, #347, #352). That is no longer what 3.0.0 is. It grew to carry Outpost support and Gateway MCP write mode, and two of the original three did not make it. Scope as it actually stands is below; the deferred items are at the end.
What is in 3.0.0
Breaking
hookdeck_→gateway_.hookdeck_loginandhookdeck_projectskeep their prefix; they are platform tools shared with Outpost. Per-tool permission grants andallowedToolsconfig do not survive a rename — every MCP user must re-grant.gateway_eventsandgateway_requestssplit into plural (list) and singular (by-id) tools.gateway_eventandgateway_requestare new; the by-id actions moved off the wide-schema tools.Features
hookdeck outpost …command tree andhookdeck outpost mcp.--allow-write(default off,HOOKDECK_MCP_ALLOW_WRITE). 28 write actions.pause/unpausedeliberately stay available in read-only mode.search_term,next_attempt_at,delivery_group,events_count,ignored_count,cli_events_count.Fixes found by review
Seven release blockers, all fixed in #348:
src_1/../../destinations/des_2retargeted the request, so "delete this source" deleted an unrelated destination while reporting the id it was given. Fixed at two layers with a 57-method table test.HOOKDECK_API_KEYprinted by--helpand, via the reference generator, committable to this public repo.{"verified": "false"}returned every request and reported them as unverified.HOOKDECK_API_KEYfor MCP publishing, which the code deliberately refuses.outpost destination updaterejected every partial update, making credential rotation impossible.outpost_destinations createomitted requiredtopics, producing a 422 the CLI never hits.ReadOnlyHint: trueon a tool offeringpause— a client auto-approving read-only tools would have halted production delivery without asking.Plus, from review of the PR itself:
reauthno longer clears stored credentials before the sign-in completes — an abandoned browser flow used to sign the user out everywhere for nothing.ToolSpec.DefaultActionremoved as dead API.go vet ./...clean repo-wide (unbuffered signal channel inpkg/login).Testing
outpostlivesuite runs nightly instead of never.HOOKDECK_CLI_TESTING_CLI_KEYwired into the acceptance job — project list/use had been skipping in CI since March.Path to GA
pkg/mcpcore/toolspec.goandpkg/gateway/mcp/tools.go. ~500 lines that construct every tool in both servers. Copilot declined the PR for exceeding its 20,000-line limit, so no automated reviewer has seen it either.v3.0.0-beta.1fromfeat/outpost-api-client. Not frommain— betas ship from the branch.--allow-write. Note that the beta channel is 1–9 organisations, so do not wait on external beta feedback — it does not arrive. This is dogfooding and rename-derisking.main.v3.0.0.project use, first external Outpost MCP tool call,--allow-writeuptake, first non-webhook destination created. GA-then-fix is only honest if the fix half is real.Known gaps at GA
Accepted, not blocking:
outpost config setdoes not validate values.MAX_RETRY_LIMIT=notanumberis accepted with a success message. Per AGENTS.md we do not duplicate API validation client-side, but this is a footgun worth raising server-side.Follow-ups (explicitly not blocking)
--configacross gateway and outpostprojects usehas no project-type guardhookdeck mcpDeferred out of 3.0.0
These were in the original scope of this epic and are not in the release:
--config. Same.Both are genuinely breaking, so parking them again has a real cost: the next major is now the third time they have been deferred. Worth deciding whether the additive half of #347 (accept both formats) ships as a minor soon, rather than waiting.