brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
frontmcp-channelsUse when pushing real-time notifications or events into Claude Code (or another MCP client) sessions, or building two-way chat bridges. Covers channel source types: incoming webhooks (such as GitHub), app error events, agent-completion and job-completion alerts, service connectors, file watchers, and replay buffers; plus two-way conversational bridges conne…
Independent GitHub snapshot · Automated classification · Original documentation governs
Build push-based notification channels that stream real-time events into Claude Code. Channels let your MCP server forward webhooks, application errors, agent completions, job results, and chat messages directly into Claude's context, with optional two-way reply support.
@Resource with resources/subscribe)experimental['claude/channel']@Tool instead)Decision: Use channels when you need server-initiated push notifications into Claude Code. Use resources when the client pulls data on demand.
@frontmcp/sdk >= 1.0.0@FrontMcp, @App, and @Tool decorators@FrontMcp config--dangerously-load-development-channels| Scenario | Reference | Description |
|---|---|---|
| Webhook alerts (CI, monitoring) | references/channel-sources.md | Forward HTTP webhooks into Claude |
| Application error forwarding | references/channel-sources.md | Push app errors via event bus |
| Agent completion notifications | references/channel-sources.md | Notify when agents finish |
| Job/workflow completion | references/channel-sources.md | Notify when jobs complete |
| Service connector (WhatsApp, etc.) | references/channel-sources.md | Persistent connection with bidirectional tools |
| File/log watcher | references/channel-sources.md | File system change monitoring |
| Event replay for offline sessions | references/channel-sources.md | Buffer events for later delivery |
| WhatsApp/Telegram chat bridge | references/channel-two-way.md | Two-way messaging with Claude |
| Slack/Discord integration | references/channel-two-way.md | Chat platform bridges |
| Permission relay | references/channel-two-way.md | Remote tool approval via chat |
| Pattern | Correct | Incorrect | Why |
|---|---|---|---|
| Meta keys | meta: { env: 'prod' } | meta: { 'my-env': 'prod' } | Meta keys must be valid identifiers (letters, digits, underscores) |
| Source naming | name: 'deploy-alerts' | name: 'Deploy Alerts!' | Channel names should be kebab-case identifiers |
| Two-way gating | Check sender identity before emitting | Trust room/group membership | Prevent prompt injection from untrusted group members |
| Error channels | Use app-event source with event bus | Poll for errors in a loop | Event bus is push-based and efficient |
| Manual push | await scope.channelNotifications?.send() | sendToSubscribedSessions() for a regular push | send() runs the hookable channels:send-notification flow (defaultMeta, channel meta, hooks); the sendTo* methods deliver directly |
@FrontMcp({ channels: { enabled: true } }) is setChannelContext with @Channel() decorator@App({ channels: [...] }); a channel and the tools in its tools resolve its app's providers with this.get(), and one whose availableWhen the runtime doesn't meet is left out at startuponEvent() returns { content: string, meta?: Record<string, string> }experimental: { 'claude/channel': {} } in capabilitiessubscriptions/listen stream whose request's client capabilities include experimental['claude/channel']: the global notifications of the channels channels:list returns; its server/discover advertises experimental['claude/channel'] and the <channel> instructions, as initialize doesinstructions field mentions <channel> tags when channels are activetwoWay: true is set on channels that need replieschannel-reply tool appears in tool listonReply() is implemented and forwards to external system (if it throws, channel-reply answers an error result)onDisconnect() on shutdown and on dispose()| Problem | Cause | Solution |
|---|---|---|
| No notifications arrive | Client doesn't support channels | Check client capabilities include experimental['claude/channel'] |
channel-reply tool missing | No two-way channels registered | Set twoWay: true on at least one channel |
| Webhook returns 500 | onEvent() throws | Check channel handler error logs |
| A notification never arrives | A ChannelSendHook stopped it, or ChannelListHook left the channel out of the session's subscriptions | Check plugins hooking channels:send-notification / channels:list |
| Duplicate notifications | Multiple sessions subscribed | This is correct behavior -- each session gets its own copy |
| Events lost on reconnect | Channels are in-memory | Channel state resets on server restart; use persistent sources |
Each reference has matching examples under examples/<reference>/:
channel-sources| Example | Level | Description |
|---|---|---|
webhook-github | Basic | Forward GitHub webhook events (PRs, pushes, CI) into Claude Code |
app-errors | Basic | Forward application errors to Claude Code via the in-process event bus |
agent-notify | Intermediate | Notify Claude Code when AI agents complete their tasks |
job-completion | Intermediate | Notify Claude Code when background jobs and workflows complete |
service-connector | Advanced | Build a persistent service connector that lets Claude send and receive messages through WhatsApp, Telegram, or any messaging API |
file-watcher | Intermediate | Watch files for changes and notify Claude Code in real-time |
replay-buffer | Advanced | Buffer channel events so Claude Code receives them when it connects, even if events occurred while offline |
channel-two-way| Example | Level | Description |
|---|---|---|
whatsapp-bridge | Advanced | Full WhatsApp Business API bridge allowing users to chat with Claude Code via WhatsApp |
Skills are distributed as plain SKILL.md files plus a sibling references/
and examples/ tree, so consumers can pick whichever access mode fits:
| Mode | How it works |
|---|---|
| Filesystem | Read libs/skills/catalog/frontmcp-channels/ directly from a clone of the catalog repo, or from a published @frontmcp/skills install. SKILL.md is the entry point. |
frontmcp CLI | frontmcp skills list, frontmcp skills read frontmcp-channels, frontmcp skills read frontmcp-channels:references/<file>.md, frontmcp skills install frontmcp-channels — no server required. |
MCP skill:// | When a developer mounts this skill into their own FrontMCP server (@FrontMcp({ skills: [...] })), the SDK exposes it via SEP-2640 resources: skill://frontmcp-channels/SKILL.md, skill://frontmcp-channels/references/{file}.md, etc. The server’s skill://index.json returns the SEP-2640 discovery document for everything mounted on it. |
The catalog itself is not an MCP server. The skill:// URIs only resolve
when a server has been configured to host this skill.
frontmcp-development, frontmcp-testing, frontmcp-deployment