| name | wjs-voicedrop |
| description | VoiceDrop 的入口。所有能力都在 MCP 里(voicedrop.cn/mcp,32 个工具:文章读写与版本、文风与蒸馏、挖矿与重写、社区与投币、算力、分享/公众号/小红书)。本 skill 只做一件事——把你接上那个 MCP:用它的 login 工具做 6+4 手机配对登录拿到令牌,然后接进客户端。触发词:"voicedrop"、"登录 voicedrop"、"voicedrop 登录"、"接 voicedrop mcp"、"voicedrop token"、"/wjs-voicedrop"。 |
VoiceDrop
VoiceDrop 的全部能力都在 MCP 里。这个 skill 唯一的作用,是把你接上去。
先看:接上了吗?
会话里已经有 list_articles、read_style、community_feed、credit_balance 这些工具?
接上了。停止阅读本文件,直接用工具。
工具自带完整说明(参数、语义、花不花算力都写在描述里)。本文件有意不重复它们——重复就会漂移:改了 MCP 忘了改这里,你就会照着过期的文档干活。单一真源是 MCP 自己。
没接上的话,往下走。全程两步:登录拿令牌 → 接进客户端。
第一步:登录(MCP 的 login 工具,6+4 手机配对)
一个工具,调两次。 靠码的形状分辨阶段(6 位十六进制 / 4 位数字):
login(code="a3f2b1") → 手机弹出 4 位码,返回 pairing 句柄
login(code="7391", pairing="…") → 返回 anon_ 令牌
为什么两次往返省不掉:4 位码是服务端在第一步才随机生成的——第一步之前它不存在。而且它是安全性的核心:6 位码可能同时匹配多个账号(最多 10 个),服务端给每个候选推不同的 4 位码。报对了,才同时证明「手机在你手上」和「你要的是哪个账号」。省掉它,猜个 6 位码 + 手机上误点一下就能被接管。
MCP 还没接上,怎么调它的工具?
login 是唯一免 token 的工具(要 token 才能登录、要登录才能拿 token,那是死锁)。所以不必先接 MCP,也不必装任何东西——curl 直接打端点:
VD=https://voicedrop.cn/mcp
call() {
curl -s -X POST "$VD" -H 'Content-Type: application/json' \
-d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"$1\",\"arguments\":$2}}" \
| python3 -c "import json,sys;r=json.load(sys.stdin)['result'];t=r['content'][0]['text'];print('ERR: '+t if r['isError'] else t)"
}
-
问用户要手机 设置 → 账户 里的 6 位十六进制码:
call login '{"code":"a3f2b1"}'
-
手机上会弹出 4 位数字码(也会收到一条推送「有新设备要登录」)。问用户要那个码:
call login '{"code":"7391","pairing":"<上一步返回的 pairing 原样粘回来>"}'
节奏很重要(这几条是真机上流血换来的)
- 配对只活 2 分钟。 拿到 6 位码立刻发起,拿到 4 位码立刻完成。中间不要聊天、不要解释、不要顺手干别的——超时就得整个重来。
- 用户报完 4 位码后,多半会切回电脑。 App 一进后台,服务端的「放行」消息就送不到手机。这时手机会收到第二条推送「确认登录」——提醒用户立刻点它;或者手动把 App 切回前台,登录会自动完成(服务端存着待办,回前台自动补送)。
- 手机没弹码? 让用户把 App 切到前台就行——码会自动补送出来,不必重新发起。
报错对照
| 报错 | 含义 / 怎么办 |
|---|
没找到这个账号 | 6 位码抄错,或手机离线/未登录该账号 |
验证码不对,还能再试 N 次 | 4 位码错了。配对还活着,报个对的重调一次 login 就行,别重来 |
验证码不对,还能再试 ? 次 | 注意那个 ? —— 它说明配对已经不存在了(多半超过 2 分钟过期),必须重新发起,不是码错 |
手机没有响应 | 手机没放行。让用户点「确认登录」推送,或把 App 切回前台 |
你在手机上点了「不是我」 | 用户拒绝了这次登录 |
安全须知(用户没听过就说一遍)
login 返回的是账号的完整密钥(anon_…)——不可吊销、不会过期,谁拿到它就拥有该账号的全部权限。而且它会进入模型上下文和会话记录。别贴到任何公开的地方。
不想走配对?App 里 设置 → 账户 → 访问令牌 可以直接复制,效果一样。
第二步:接进客户端
claude mcp add voicedrop --transport http https://voicedrop.cn/mcp \
--header "Authorization: Bearer <上一步拿到的 token>"
其它客户端(Claude 桌面版自定义连接器等):URL 填 https://voicedrop.cn/mcp,自定义头填 Authorization: Bearer <token>。
接上后用 /mcp 确认工具已加载,然后正常使唤即可,不用再回到本文件。
令牌的能力边界(决定了哪些工具会报错):
| 令牌 | 限制 |
|---|
| anon(6+4 配对 / App 复制的) | 不能发社区、不能投币——那需要 Apple 或微信登录后的身份 |
| Apple / 微信 session | 全功能 |
碰到 需要 Apple 登录 之类的报错,就是这个原因:让用户在 App 里用 Apple/微信登录,再重新复制令牌。
MCP 唯一做不到的事
上传录音/照片这类二进制文件。
这是物理限制,不是偷懒:MCP server 跑在远端,读不到你本地的文件;唯一的办法是把文件 base64 塞进模型上下文——几 MB 的二进制流进 LLM,是灾难。
正常路径是在 App 里录。真要从命令行传:
curl -s -X PUT -H "Authorization: Bearer <token>" -H "Content-Type: audio/mp4" \
--data-binary @rec.m4a \
"https://jianshuo.dev/files/api/upload/VoiceDrop-<ts>-<dur>-<weekday>-<period>.m4a"
传完用 MCP 的 trigger_mining 催一下,list_articles 看结果。
MCP 源码:~/code/jianshuo.dev/mcp/(README.md 讲了架构和几个不显然的约束)。