Channels MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Channels MCPsend Max a work email that his task is taking longer"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Channels MCP
Channels MCP is a remote Model Context Protocol server that lets agents send structured notifications without learning delivery credentials or recipient addresses. It runs independently in Docker and is designed primarily for OpenCode.
The initial provider is SMTP. Multiple configured channels can use the same SMTP provider, allowing separate outgoing accounts such as work and private email.
MCP Tools
list_recipientsreturns public recipient IDs, names, and available channel IDs.list_channelsreturns configured channel instances and can filter them by recipient.send_notificationaccepts a recipient, concrete channel, and structured message.
The server never returns delivery addresses, SMTP settings, credential names, or credentials through MCP.
Related MCP server: agent-notify
Message Format
Agents send structured content rather than raw HTML:
{
"recipientId": "max",
"channelId": "work-email",
"message": {
"title": "Task is taking longer",
"summary": "The analysis is still running.",
"details": ["Current step: test execution", "No errors have occurred"],
"actions": [
{
"label": "Open logs",
"url": "https://example.org/logs/123"
}
],
"attachments": [
{
"filename": "report.txt",
"contentType": "text/plain",
"contentBase64": "cmVwb3J0IGNvbnRlbnRz"
}
]
}
}The server escapes all content and renders both HTML and plain text. Action URLs are restricted to
HTTP and HTTPS. Attachments contain raw file bytes encoded as Base64, without a data: URL prefix.
Filenames must not contain paths or control characters. A message may contain up to 5 attachments,
with a maximum decoded size of 5 MiB per file and 10 MiB in total.
Configuration
Every .yaml or .yml file directly inside config/ is loaded at startup. Files are classified by
kind. Missing or unknown kinds, invalid schemas, missing credentials, duplicate IDs, and invalid
channel references stop startup with an error.
Channels
Each channel declares its stable id in YAML. Filenames are used only for discovery and error
messages, so files may be renamed without changing recipient mappings. Provider type and channel ID
are deliberately different concepts: any number of channel files can use type: smtp.
config/work-email.yaml:
kind: channel
id: work-email
type: smtp
displayName: Work Email
from: "Agent Work <agent@company.example>"
host: smtp.company.example
port: 587
secure: false
auth:
userEnv: WORK_SMTP_USER
passEnv: WORK_SMTP_PASSCredentials stay in environment variables. userEnv and passEnv contain variable names, not
credential values.
Recipients
Recipient delivery details are keyed by concrete channel ID:
config/max.yaml:
kind: recipient
id: max
displayName: Max Mustermann
channels:
work-email:
email: max@company.example
private-email:
email: max@example.orgRestart the container after changing configuration. Hot reload is not implemented.
Docker Deployment
Copy the environment template and replace every placeholder:
cp .env.example .envReplace the example YAML files in
config/with your channel and recipient definitions.Start the long-running service:
docker compose up -d --buildCheck its health:
curl http://127.0.0.1:3000/health
The Compose service publishes port 3000 by default. Set CHANNELS_PORT to change the host-side
port. CHANNELS_ALLOWED_HOSTS should list every hostname or IP address clients use to reach the
server, plus localhost and 127.0.0.1 for local health checks.
OpenCode
Set CHANNELS_MCP_TOKEN in the environment that starts OpenCode. It must equal the server token.
Then add the remote server to the appropriate opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"channels": {
"type": "remote",
"url": "http://192.168.1.50:3000/mcp",
"enabled": true,
"oauth": false,
"headers": {
"Authorization": "Bearer {env:CHANNELS_MCP_TOKEN}"
}
}
}
}Use the actual hostname or LAN IP of the Docker host. Do not put the token directly in
opencode.json. Quit and restart OpenCode after changing its configuration because OpenCode does
not hot-reload MCP settings.
Bearer authentication does not encrypt traffic. Plain HTTP is appropriate only on a trusted network. Use HTTPS through a reverse proxy when traffic can cross an untrusted network.
Development
Requires Node.js 20 or newer.
npm ci
npm run verifyTests use injected transports and never contact a real SMTP server.
Endpoints
POST /mcpserves MCP Streamable HTTP. Legacy stateless requests used by current OpenCode releases are supported by the SDK.GET /mcpandDELETE /mcpare handled according to the negotiated MCP protocol and require authentication.GET /healthreturns public process health for Docker and operators.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build and send email, SMS, and push straight from your AI agent.
Send, search, and manage notifications, accounts, and push preferences
Let your AI agent notify you by email, Slack, Discord, or webhook. One tool: send_notification.
Send transactional emails for AI agents via SMTP. Templates included.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceUnified notification MCP server with 36 tools to send messages across 23 channels — Email, SMS, Slack, Telegram, Discord, Teams, WhatsApp, Firebase Push, and more.5MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and applications to send audio notifications with text-to-speech, message streaming, agent-to-agent conversations, and web push notifications through a persistent message store and MCP integration.197 npm1MIT

SendAPI MCP Serverofficial
AlicenseAqualityDmaintenanceEnables any MCP-compatible AI agent to send WhatsApp messages, SMS, OTP codes, and email through a single REST API.18MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to send notifications to a unified feed, report activity, request input from humans, and manage notification state through MCP tools.4MIT