Channels MCP

Channels MCP

Enables agents to send structured notifications to recipients via configurable channels (initial SMTP provider) without exposing delivery addresses or credentials, with tools for listing recipients, listing channels, and sending notifications.

Category
访问服务器

README

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_recipients returns public recipient IDs, names, and available channel IDs.
  • list_channels returns configured channel instances and can filter them by recipient.
  • send_notification accepts a recipient, concrete channel, and structured message.

The server never returns delivery addresses, SMTP settings, credential names, or credentials through MCP.

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"
      }
    ]
  }
}

The server escapes all content and renders both HTML and plain text. Action URLs are restricted to HTTP and HTTPS.

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

The filename without its extension is the concrete channel ID. Provider type and channel ID are deliberately different concepts: any number of channel files can use type: smtp.

config/work-email.yaml:

kind: channel
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_PASS

Credentials 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.org

Restart the container after changing configuration. Hot reload is not implemented.

Docker Deployment

  1. Copy the environment template and replace every placeholder:

    cp .env.example .env
    
  2. Replace the example YAML files in config/ with your channel and recipient definitions.

  3. Start the long-running service:

    docker compose up -d --build
    
  4. Check 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 verify

Tests use injected transports and never contact a real SMTP server.

Endpoints

  • POST /mcp serves MCP Streamable HTTP. Legacy stateless requests used by current OpenCode releases are supported by the SDK.
  • GET /mcp and DELETE /mcp are handled according to the negotiated MCP protocol and require authentication.
  • GET /health returns public process health for Docker and operators.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选