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