Phil Leggetter Phil Leggetter

Hookdeck CLI v3: write mode for the Event Gateway MCP, and Outpost in the CLI

Published


When we shipped Hookdeck CLI v2, the Event Gateway MCP server could investigate but not fix. An agent could find the failing connection and work out why, then hand you a CLI command to run. We said we'd add write operations where they made sense.

Hookdeck CLI v3 is out with two highlights:

  • Write mode for the Event Gateway MCP server. Pass --allow-write and the agent can create and update resources, retry events, and dismiss issues.
  • hookdeck outpost. Commands and an MCP server for Outpost.

There's one breaking change for existing MCP users: the tools are renamed. More on why below.

Event Gateway MCP: write mode

Read-only is still the default in the Event Gateway MCP server. Start the server as you did in v2 and the agent can list failed events, read delivery attempts, and pull metrics.

To let it make changes, add --allow-write:

{
  "mcpServers": {
    "hookdeck-gateway": {
      "command": "hookdeck",
      "args": ["gateway", "mcp", "--allow-write"]
    }
  }
}

With the flag, the agent can create, update, and delete connections, sources, and destinations, retry or cancel events, and dismiss issues. Without it, those tools aren't registered at all. A client that only approved reads never sees a delete in its tool list.

From diagnosis to fix

The v2 post walked through a Shopify example. Order webhooks were failing because a connection forwarded every order topic, and the fulfillment service only handled orders/paid. The agent found the root cause, could pause the connection, but couldn't go any further. The fix was a filter rule, and adding one meant switching to the CLI.

In v3, with write mode on, the agent can add that filter to the connection itself, in the same session.

Write mode also includes bulk retry. A bulk retry can redeliver thousands of events in one call, so bulk operations have a plan action. It reports how many events a retry would touch without running it. plan works without --allow-write, so a read-only agent can tell you the size of the job before you decide to grant more.

Pause stays available in read-only mode

Pause and unpause are available in read-only mode, because stopping a connection that's flooding a struggling endpoint is often the last step of an investigation. Otherwise, you would have to restart the server with --allow-write before you could pause the delivery attempts.

The inbound webhook is still accepted. The event is held and delivered once the connection is unpaused.

Breaking change: tool names

In v2, each resource was one tool with an action argument. hookdeck_connections handled list and get. The simplest way to add write mode would have been more actions on the same tools, and we decided against it.

MCP clients grant permission per tool name, not per action. If delete had joined list on hookdeck_connections, anyone who had already allowed that tool for reads would have silently allowed deletes too. And you'd have no way to say "read connections freely, but ask me before changing one."

So v3 splits each resource by what it can do, and moves the prefix from hookdeck_* to gateway_*:

v2v3
hookdeck_connectionsgateway_connections_read, gateway_connections_write, gateway_connections_pause
hookdeck_eventsgateway_events_read (search), gateway_event_read (get by ID), gateway_event_write (retry, cancel, mute)
hookdeck_issuesgateway_issues_read, gateway_issues_write

Now "allow all reads, prompt on anything that changes data" is a single rule. In Claude Code, that's mcp__hookdeck-gateway__*_read. Pause gets its own tool, so you can allow it without allowing edits.

If you already approved the v2 names, you'll need to approve the new ones. The v3.0.0 release notes list every rename.

New: hookdeck outpost

Outpost sends webhooks and events to your users' destinations. On Hookdeck, each Outpost project is a managed Outpost deployment with its own tenants, destinations, and topics. hookdeck outpost works against that managed project. It doesn't manage a self-hosted Outpost.

hookdeck outpost tenant upsert acme
hookdeck outpost destination create --tenant-id acme --type webhook \
  --config url=https://acme.example.com/hooks --topics orders.created

The same surface is available as an MCP server, read-only by default:

{
  "mcpServers": {
    "hookdeck-outpost": {
      "command": "hookdeck",
      "args": ["outpost", "mcp"]
    }
  }
}

In read-only mode, an agent can list a tenant's destinations and the delivery attempts made to them. Add "--allow-write" to args and it can create tenants, add destinations, and retry failed deliveries.

The two MCP servers use different prefixes (gateway_* and outpost_*), so you can run both in one client.

Upgrading

npm install -g hookdeck-cli@latest

# or

brew upgrade hookdeck

Or download a binary from the GitHub releases page. Then check the version:

hookdeck version

You should see a 3.0 release.

If you already run the v2 MCP server:

  1. Update the args in your client config.
  2. Approve the renamed tools.

Everything else in the release is in the v3.0.0 notes.

Feedback

Write mode changes what an agent can do in your project, so we want to hear how you're scoping it: which tools you allow, and which you keep behind a prompt. Open an issue on GitHub or find us in the Hookdeck community Slack.