Skip to content

v0.2.0

Choose a tag to compare

@leggetter leggetter released this 08 Oct 12:28
fb922cb

Summary

0.2.0 brings the bridge to agents on your own machine and to webhooks from any sender, and adds an Agent Skill so a coding agent can set it up. It breaks compatibility with 0.1.0 on purpose: event names change, and agents subscribe again.

Upgrading from 0.1.0

  1. npm install @hookdeck/mcp-events-bridge@0.2.0
  2. In bridge.config.ts, list GitHub events by GitHub's own names: events: ['issues'], not ['github.issues'].
  3. Run npx mcp-events-bridge setup, then restart serve (or redeploy).
  4. Agents subscribe again, with a name from events/list: email.received is now resend.email.received. Ask ChatGPT to subscribe again. serve logs each old subscription it no longer serves.
  5. Agents calling the tools: get_event needs the event's name as well as its id, and list_recent_events is now list_events.

Breaking

0.2.0 breaks compatibility with 0.1.0 deliberately, with no migration paths: 0.1.0 was an early demo release, as far as we know used only by this project.

  • Event names are {instance id}.{event} (#15): the provider instance's id, then the provider's own name for the event. email.received is now resend.email.received; GitHub's names are unchanged with the default id (github.issues), and an instance with another id offers <id>.issues. Two instances can now offer the same event.
  • No migration from 0.1.0. Subscriptions to renamed events get nothing (serve logs each subscription to an event it doesn't offer): agents, ChatGPT included, subscribe again with a name from events/list. Configs take the provider's own event names: events: ['issues'], not ['github.issues'].
  • get_event(name, eventId): name is required. An event id is the provider's own, so two instances can share one; both are in every delivery and in list_events.
  • list_recent_events is list_events. With a name, it searches only that instance.
  • list_providers returns each provider's events as MCP names (resend.email.received, not email.received).

Added

  • Local agents (#12): a local bridge gives agents on the same machine public tunnel URLs (create_tunnel_url, list_tunnel_urls), runs and supervises hookdeck listen for them, and re-sends deliveries they missed while listen was down. A tunnel URL covers the paths under it, for agents that build callback URLs from one base URL.
  • Inbound recovery: a local bridge retries provider events that reached Event Gateway while it was stopped, and restarts its own hookdeck listen if it stops.
  • Generic webhooks (#14): webhook({ id, verification, events, ... }) relays webhooks from any HTTP sender, verified by Event Gateway with HMAC, Standard Webhooks, Basic auth or an API key. mcp-events-bridge providers add webhook <id> creates the source, prints its URL and the config entry, and adds the secret's variable to .env (--write-config edits bridge.config.ts).
  • Agent Skill: skills/mcp-events-bridge (npx skills add hookdeck/mcp-events-bridge), also in the npm package.
  • Hermes Agent guide (experimental): references/hermes-agent.md runs Hermes's MCP Events pull request against a local bridge.

Changed

  • deployment is optional. It defaults to BRIDGE_DEPLOYMENT, then local with CLI inbound or public with HTTP inbound. A config that sets it, as 0.1.0's examples did, keeps its resource names.
  • setup exits 1 when a webhook secret isn't set yet, after setting up everything else, and labels the MCP endpoint "MCP URL".
  • Inbound bodies that aren't JSON are answered 200 and ignored, so Event Gateway doesn't retry them.
  • A local setup logs the Hookdeck CLI in to the bridge's project in .hookdeck/config.toml, as serve already did, so hookdeck commands run in the bridge's directory use that project from the start. Without the CLI, it says so and carries on (serve still needs it).
  • BRIDGE_MCP_SECRET must be URL-safe (letters, digits, -, _, ., ~): it's part of the MCP URL, so setup and serve refuse anything else. Secrets setup generates, in 0.1.0 too, always are.
  • setup prints a generated BRIDGE_MCP_SECRET= line on its own, ready to paste into .env; the Fly.io hint is only shown for HTTP inbound.

Fixed

  • The MCP server's version (serverInfo.version) is the package version, not 0.0.0.

Full changelog: CHANGELOG.md