libs/skills/catalog/frontmcp-channels/SKILL.md
Use when you want to push real-time notifications into Claude Code sessions. Build webhook channels, chat bridges (WhatsApp, Telegram, Slack), agent completion alerts, job status notifications, or error forwarding. The skill for CHANNELS and NOTIFICATIONS.
npx skillsauth add agentfront/frontmcp frontmcp-channelsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 | Use scope.channelNotifications.send() | Call pushNotification on instance directly | Service handles capability filtering |
@FrontMcp({ channels: { enabled: true } }) is setChannelContext with @Channel() decorator@App({ channels: [...] })onEvent() returns { content: string, meta?: Record<string, string> }experimental: { 'claude/channel': {} } in capabilitiesinstructions 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| 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 |
| 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-deploymenttools
ALWAYS use this skill when the user asks to build, modify, or audit a FrontMCP tool. Covers everything inside `@Tool({...})`: class and function-style tools, Zod input/output schemas with derived `execute()` types, dependency injection (`this.get` / `this.tryGet`), error handling (`this.fail`, MCP error classes), throttling (rate-limit / concurrency / timeout), auth providers (single / multi / vault), availability constraints (`availableWhen`), elicitation (`this.elicit`), interactive UI widgets via `@Tool({ ui })` (MCP Apps / SEP-1865 — including `.tsx` FileSource, CSP, `window.FrontMcpBridge`, host-detect `resourceMode`), annotations (`readOnlyHint` / `destructiveHint` / …), `examples` metadata, registration in `@App({ tools })`, and per-tool unit testing. Does NOT cover: - Read-only data exposed via a URI — use `create-resource` - Conversation templates / system prompts — use `create-prompt` - Multi-tool orchestration loops — use `create-agent` - Background work / pipelines — use `create-job` / `create-workflow` - Server-level config (transport, sessions, auth modes) — use `config` / `auth` Triggers: `@Tool`, ToolContext, tool decorator, MCP tool, snake_case tool name, inputSchema, outputSchema, ToolInputOf, ToolOutputOf, `@Tool({ ui })`, tool UI widget, MCP Apps widget, FileSource widget, `.tsx` widget, ui.csp, ui.resourceMode, window.FrontMcpBridge, tool annotations, readOnlyHint, destructiveHint, rate-limit tool, throttle tool, concurrency tool, tool timeout, this.fail, this.respond, this.fetch, this.notify, this.progress, this.elicit, ElicitationDisabledError, ToolContext.execute, this.get(TOKEN), this.tryGet, register tool in @App, tool examples metadata, availableWhen, missingAxes, `tool()` function builder, Tool.esm, Tool.remote, PublicMcpError, ResourceNotFoundError, MCP_ERROR_CODES, ui://widget.
tools
Use when you want to add tracing, structured logging, or monitoring to your FrontMCP server. Covers OpenTelemetry instrumentation, vendor integrations (Coralogix, Datadog, Logz.io, Grafana), this.telemetry API for custom spans, structured JSON logging with sinks, and testing observability. Triggers: observability, telemetry, tracing, logging, monitoring, opentelemetry, otel, spans, datadog, coralogix, logz, grafana, winston, pino.
development
Use when implementing authorization, access control, RBAC, ABAC, or ReBAC for tools, resources, prompts, or skills. Covers JWT claims mapping, authority profiles, and policy enforcement.
testing
Use when you want to write tests, run tests, add e2e tests, improve test coverage, test a tool, test a resource, or learn how to test any FrontMCP component. The skill for ALL testing needs.