微信通知服务

一个基于MCP协议的服务器,通过Server酱向微信推送通知并支持远程双向问答,适用于支持MCP的编码CLI工具。

  • by Yuerchu
  • Kotlin
  • 本地部署
  • 更新于
在 GitHub 查看 Yuerchu/server-notify-mcp

使用说明

server-notify-mcp

一个 MCP (Model Context Protocol) 服务器,让 Code CLI 能通过 Server酱 向你的微信推送通知,并支持远程双向问答 —— 当 AI 需要你的输入时,把问题推送到手机,你直接在手机上回答。

适用于 Claude Code / Codex / OpenCode 等支持 MCP 的编码 CLI 工具。

功能

  • notify — 单向推送通知到微信(通过 Server酱)
  • ask_user_remote — 发送问题到手机,支持阻塞等待或异步轮询
  • check_remote_answer — 检查用户是否已回答远程问题

架构

Code CLI (MCP Server)
    ↓ POST /ask
Cloudflare Worker + KV
    ├─ Server酱 → 微信通知(附带 Web 答题链接)
    └─ FCM → Android App 推送
        ↓
用户在手机上回答(App 或 Web 页面)
    ↓ POST /answer/:id
Cloudflare Worker 存储答案
    ↑ MCP 轮询 GET /answer/:id
Code CLI 获得答案,继续工作

项目结构

server-notify-mcp/
├── src/index.ts          # MCP Server(notify + ask_user_remote + check_remote_answer)
├── worker/               # Cloudflare Worker(问答中转 + Web 答题页)
│   ├── src/
│   │   ├── index.ts      # 路由入口
│   │   ├── handlers/     # ask, answer, page, device
│   │   └── services/     # kv, serverchan, fcm
│   └── wrangler.toml
└── android/              # Android App(M3 Expressive 风格)
    └── app/src/main/java/com/yuerchu/remoteask/

快速开始

1. 安装 MCP Server

git clone https://github.com/Yuerchu/server-notify-mcp.git
cd server-notify-mcp
pnpm install
pnpm build

2. 部署 Cloudflare Worker

cd worker
pnpm install

创建 KV 命名空间并填入 wrangler.toml:

pnpm exec wrangler kv namespace create remote-ask-questions
# 将返回的 ID 填入 wrangler.toml 的 [[kv_namespaces]] id 字段

配置 Secrets:

# 生成一个随机 auth token
openssl rand -hex 32

pnpm exec wrangler secret put WORKER_AUTH_TOKEN
pnpm exec wrangler secret put SERVERCHAN_API_KEY
# FCM 推送(可选):
pnpm exec wrangler secret put FCM_SERVICE_ACCOUNT_JSON

部署:

pnpm exec wrangler deploy

3. 配置 Code CLI

claude mcp add-json server-notify '{
  "type": "stdio",
  "command": "node",
  "args": ["你的路径/server-notify-mcp/dist/index.js"],
  "env": {
    "SERVERCHAN_API_KEY": "你的SendKey",
    "WORKER_URL": "https://your-worker.workers.dev",
    "WORKER_AUTH_TOKEN": "你生成的token"
  }
}' -s user

运行 /mcp 确认 3 个工具已注册。

3.1 配置工具自动执行权限

默认情况下,Claude Code 每次调用 MCP 工具都会弹出确认提示,这会导致远程问答失去意义(人不在电脑前无法点确认)。需要将三个工具设为自动允许:

在 Claude Code 的设置文件(~/.claude.json 或项目 .claude/settings.json)中添加:

{
  "permissions": {
    "allow": [
      "mcp__server-notify__notify",
      "mcp__server-notify__ask_user_remote",
      "mcp__server-notify__check_remote_answer"
    ]
  }
}

或者在首次使用时,选择弹窗中的 "Yes, and don't ask again" 选项。

4. Android App(可选)

用 Android Studio 打开 android/ 目录,配置 Firebase 后构建安装。

需要在 android/app/ 下放置 google-services.json(从 Firebase Console 获取,包名 com.yuerchu.remoteask)。

App 功能:

  • 接收 FCM 推送 / 下拉刷新拉取问题
  • 选项按钮 + 自由文本回答
  • 问题历史列表
  • 离线缓存,提交失败自动重试

工具说明

notify

通过 Server酱 发送微信推送通知。

参数 类型 必填 说明
title string 是 通知标题,最多 32 字符
desp string 否 通知正文,支持 Markdown

ask_user_remote

发送问题到用户手机,可选阻塞等待回答。

参数 类型 必填 说明
question string 是 问题文本
options string[] 否 预设选项
wait boolean 否 是否阻塞等待(默认 false)
timeout number 否 等待超时秒数(默认 300,上限 600)

check_remote_answer

检查远程问题是否已被回答。

参数 类型 必填 说明
question_id string 是 ask_user_remote 返回的问题 ID

Worker API

方法 路径 认证 说明
POST /ask Bearer 提交问题
GET /questions Bearer 列出所有问题
GET /answer/:id Bearer 查询答案
POST /answer/:id Bearer / answer_token 提交答案
GET /page/:token URL token Web 答题页面
POST /register-device Bearer 注册 FCM 设备
GET /health 无 健康检查

环境变量

MCP Server

变量 必填 说明
SERVERCHAN_API_KEY 是 Server酱 SendKey
WORKER_URL 远程问答时需要 Worker 部署地址
WORKER_AUTH_TOKEN 远程问答时需要 预共享认证令牌

Cloudflare Worker Secrets

变量 必填 说明
WORKER_AUTH_TOKEN 是 预共享认证令牌
SERVERCHAN_API_KEY 是 Server酱 SendKey
FCM_SERVICE_ACCOUNT_JSON 否 Firebase 服务账号 JSON

技术栈

  • MCP Server: TypeScript + ESM + @modelcontextprotocol/sdk
  • Worker: Cloudflare Workers + KV
  • Android: Kotlin + Jetpack Compose + Material 3 Expressive + FCM

许可证

MIT