Repository navigation
v0.2.0
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
npm install @hookdeck/mcp-events-bridge@0.2.0- In
bridge.config.ts, list GitHub events by GitHub's own names:events: ['issues'], not['github.issues']. - Run
npx mcp-events-bridge setup, then restartserve(or redeploy). - Agents subscribe again, with a name from
events/list:email.receivedis nowresend.email.received. Ask ChatGPT to subscribe again.servelogs each old subscription it no longer serves. - Agents calling the tools:
get_eventneeds the event'snameas well as its id, andlist_recent_eventsis nowlist_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'sid, then the provider's own name for the event.email.receivedis nowresend.email.received; GitHub's names are unchanged with the defaultid(github.issues), and an instance with anotheridoffers<id>.issues. Two instances can now offer the same event. - No migration from 0.1.0. Subscriptions to renamed events get nothing (
servelogs each subscription to an event it doesn't offer): agents, ChatGPT included, subscribe again with a name fromevents/list. Configs take the provider's own event names:events: ['issues'], not['github.issues']. get_event(name, eventId):nameis required. An event id is the provider's own, so two instances can share one; both are in every delivery and inlist_events.list_recent_eventsislist_events. With a name, it searches only that instance.list_providersreturns each provider's events as MCP names (resend.email.received, notemail.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 superviseshookdeck listenfor them, and re-sends deliveries they missed whilelistenwas 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 listenif 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-configeditsbridge.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.mdruns Hermes's MCP Events pull request against a local bridge.
Changed
deploymentis optional. It defaults toBRIDGE_DEPLOYMENT, thenlocalwith CLI inbound orpublicwith HTTP inbound. A config that sets it, as 0.1.0's examples did, keeps its resource names.setupexits 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
200and ignored, so Event Gateway doesn't retry them. - A local
setuplogs the Hookdeck CLI in to the bridge's project in.hookdeck/config.toml, asservealready did, sohookdeckcommands run in the bridge's directory use that project from the start. Without the CLI, it says so and carries on (servestill needs it). BRIDGE_MCP_SECRETmust be URL-safe (letters, digits,-,_,.,~): it's part of the MCP URL, sosetupandserverefuse anything else. Secretssetupgenerates, in 0.1.0 too, always are.setupprints a generatedBRIDGE_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, not0.0.0.
Full changelog: CHANGELOG.md