微云网盘 MCP 技能
首次安装使用时,需要先完成本地安装和注册,详见references/auth.md。
Windows 用户:所有bash ./setup.sh命令请替换为powershell -ExecutionPolicy Bypass -File setup.ps1,详见references/auth.md。
版本更新检查(每天首次使用前必须执行)
每天使用本 SKILL 前进行一次更新检查,按照如下步骤执行:1. 查看当前版本 version
读取本文件顶部 frontmatter 中的version 字段;格式为 MAJOR.MINOR.PATCH。
2. 查看最新版本 latest
通过命令获取最新版本信息latest,输入参数 version 为上一步获取的当前版本:
Windows (PowerShell) 用户注意:需先切换 UTF-8 编码,单引号内的 JSON 需改为转义双引号:JSON 格式数据返回,返回参数示例:
3. 更新版本
如果当前版本version 低于最新版本 latest,则遵循 instruction 指令进行更新,或提示用户更新。
功能概述
提供微云(Weiyun)网盘通过 MCP 协议进行文件管理的完整能力,包含 12 个 MCP Tool:
核心架构原则:文件哈希计算和
block_sha_list 生成必须在客户端/本地完成。服务端只接收预计算好的哈希值,不会接收原始文件数据来计算哈希。这种设计是为了防止海量请求打爆服务器的存储和 CPU。
触发场景
- 使用微云 MCP 工具进行文件管理(查询、下载、删除、上传、分享、重命名、创建文件夹、移动文件/目录)
- 上传文件到微云:优先使用
scripts/upload_to_weiyun.py一键完成,无需手动计算参数或调用 MCP - 按分类(文档、图片、视频等)查找微云文件(
weiyun.list_by_categoryTool) - 重命名微云文件或目录(
weiyun.rename_file、weiyun.rename_dirTool) - 在微云中创建文件夹(
weiyun.create_dirTool) - 移动微云文件或目录到其他位置(
weiyun.move_file、weiyun.move_dirTool) - 实现或调试微云 MCP 文件上传(
weiyun.uploadTool) - 计算
block_sha_list、check_sha、check_data等上传参数 - 理解微云两阶段上传协议(预上传 → 分片上传)
- 检查技能版本更新(
check_skill_update) - 调试 FTN 上传错误或 SHA1 校验不匹配问题
接口一览
注意 : 所有接口请求时都务必要在req_header 字段中携带上报数据,详见下方「数据上报」章节
1. weiyun.list — 目录列表查询
查询微云网盘的目录内容,返回子目录和文件列表。 请求参数:
响应:返回
pdir_key(父目录 key)、dir_list(目录列表)、file_list(文件列表)、finish_flag(是否拉取完毕)。
注意:腾讯文档文件会被自动过滤,不出现在返回结果中。
2. weiyun.list_by_category — 按分类拉取文件列表
按文件分类(文档、图片、视频等)分页拉取文件列表,支持通过server_version 续拉。
请求参数:
响应:返回
server_version(服务端游标,续拉时回填到 local_version)、file_list(文件列表)、finish_flag(是否拉取完成)。
注意:该接口要求同时携带真实微云 cookie(如 uid、uid_key)和 mcp_token。
3. weiyun.download — 批量下载
批量获取微云文件的 HTTPS 下载链接。 注意事项: 本功能无法下载微云分享的链接里面的文件,只能下载用户微云网盘中的文件。 请求参数:
每个
McpDownloadFileItem 包含 file_id(文件 ID)和 pdir_key(所在目录 key),均为必填。
响应:每个文件返回 file_id、https_download_url(下载链接)、file_size(文件大小)、cookie(下载时需携带的 cookie)。
权限校验:只能下载当前用户拥有的文件(通过 pdir_key 判断目录所有权)。
4. weiyun.delete — 批量删除
批量删除微云网盘中的文件或目录。 请求参数:
注意:
file_list 和 dir_list 至少要填一个。
响应:返回 freed_space(释放的空间字节数)和 freed_index_cnt(删除的文件/目录总数)。
5. weiyun.gen_share_link — 生成分享外链
为微云文件或目录生成分享短链接。 请求参数:
注意:
file_list 和 dir_list 至少要填一个。
随机分享密码生成规则:长度6,全小写字母+数字混合,不包含特殊字符
分享外链无法使用本 skill 进行下载,需要提示用户打开网页进行下载
⚠️ 关键:pdir_key 不能为空!
pdir_key必须使用weiyun.list响应中顶层的pdir_key,而不是文件自身的pdir_key字段(该字段可能为空字符串)- 如果传空的
pdir_key,可能导致分享链接异常,强烈建议调用方显式传入正确的pdir_key - 错误示例:直接用
file_list[i].pdir_key(可能为空) - 正确示例:使用
weiyun.list响应顶层的pdir_key字段值
short_url(分享短链接)和 share_name(分享名称)。
6. weiyun.upload — 文件上传
微云文件上传采用两阶段协议:阶段一:预上传
发送文件元数据和分块 SHA1 列表,检查是否可以秒传,或获取上传通道。 必填字段:filename、file_size、file_sha、block_sha_list、check_sha
可选字段:file_md5、check_data、pdir_key
关键行为:file_sha 必须等于 block_sha_list 的最后一个值,否则校验会失败。
响应判断:
file_exist=true→ 秒传成功,上传完毕file_exist=false→ 使用返回的upload_key、channel_list、ex进行分片上传
阶段二:分片上传
根据预上传返回的通道列表,逐片上传文件数据。 必填字段:upload_key、channel_list、channel_id、ex、file_data、filename
上传状态:
1= 继续上传下一分片2= 上传完成3= 等待其他通道完成
7. weiyun.rename_file — 重命名文件
重命名微云网盘中的文件,需要提供文件所在目录 key 和文件 ID。 请求参数:
响应:返回
error(错误信息,成功时为空)。
8. weiyun.rename_dir — 重命名目录
重命名微云网盘中的目录,需要提供目录 key、父目录 key 和修改前的目录名。 请求参数:
响应:返回
error(错误信息,成功时为空)。
9. weiyun.create_dir — 创建文件夹
在微云网盘中创建文件夹,需要提供父目录 key 和文件夹名称。 请求参数:
响应:
10. weiyun.move_dir — 移动文件夹
移动微云网盘中的文件夹到目标目录,需要提供源目录 key 和目标目录 key。 请求参数:
响应:返回
error(错误信息,成功时为空)。
⚠️ 关键:src_pdir_key 和 dst_pdir_key 都需要使用 weiyun.list 响应中顶层的 pdir_key 或对应目录的 dir_key,不能传空字符串。
11. weiyun.move_file — 移动文件
移动微云网盘中的文件到目标目录,需要提供文件 ID、源目录 key 和目标目录 key。 请求参数:
响应:返回
error(错误信息,成功时为空)。
⚠️ 关键:src_pdir_key 和 dst_pdir_key 都需要使用 weiyun.list 响应中顶层的 pdir_key 或对应目录的 dir_key,不能传空字符串。
12. check_skill_update — 技能版本检查更新
检查当前 Skill 版本是否为最新,如有新版本则返回更新指令。 请求参数:
响应:
注意:每天首次使用本 Skill 前必须执行一次版本检查(详见文档顶部「版本更新检查」章节)。
分块 SHA1 计算算法
这是上传功能最核心的部分。微云不使用标准的独立分块 SHA1,而是使用流式 SHA1 内部状态。算法步骤(分块大小 = 512KB = 524288 字节)
- 创建一个共享的 SHA1 哈希对象
- 对于除最后一块之外的每个块:
- 读取 524288 字节并
update()到 SHA1 对象 - 提取 SHA1 内部寄存器(h0, h1, h2, h3, h4)以小端序输出
- 输出为 40 字符 hex 字符串 → 该块的
sha值
- 读取 524288 字节并
- 对于最后一块(可能不足 524288 字节):
- 继续用相同 SHA1 对象 update 剩余数据
sha值为整个文件的标准 SHA1 hexdigest(大端序,含 finalization)
check_sha 和 check_data 计算
用于服务端防篡改验证:使用脚本
一键上传脚本(推荐)
直接上传本地文件到微云,整合了参数计算 + 预上传 + 分片上传的完整流程:Windows (PowerShell) 用户:需先切换 UTF-8 编码,将脚本参数:python3替换为python,export替换为$env:VAR = "value":
上传策略:循环「预上传获取通道 → 上传一片 → 重新预上传」直到完成。每次预上传会自动跳过已成功的分片(offset 随进度递增),支持秒传。
AI Agent 使用时:只需要
execute_command 运行此脚本即可,无需手动计算 block_sha_list 或调用 MCP。
参数计算脚本
仅计算上传参数(不执行上传),用于调试或手动调用 MCP:
Windows (PowerShell):chcp 65001 >nul && python scripts\gen_block_info_list.py C:\path\to\file
输出包括:block_sha_list、file_sha、file_md5、check_sha、check_data、block_size、block_count。
两个脚本均包含纯 Python 的 SHA1 实现,支持提取未经 finalization 的内部状态 — 这是 Python 标准库 hashlib.sha1 无法做到的。
错误码说明
MCP 接口在出现异常时会返回以下错误码,调用方可根据错误码进行相应处理:
处理建议:
- 117401:等待次日零点配额自动重置,或开通微云会员提升配额
- 117402:重新生成 token
- 117403/117404:检查请求参数是否完整且格式正确
- 117405:确认操作的文件/目录属于当前用户
- 117406:属于服务端临时异常,可重试
- 117407:错误是取消授权则需要重新授权,被安全误打击则需要联系微云客服人员做解封处理
常见操作工作流
工作流 1:查找并下载文件
当需要在微云中找到某个文件并下载到本地时,按以下步骤操作: 第一步:查询根目录- 响应中的
file_list包含文件,dir_list包含子目录 - 记住响应顶层的
pdir_key(后续下载需要用到) - 如果文件在根目录 → 进入第三步
- 如果文件不在根目录 → 需要遍历子目录(第二步)
dir_key 和 pdir_key 的含义:
dir_key:要查询的目标子目录的 key(从dir_list中的dir_key字段获取)pdir_key:该子目录所在的父目录 key(从上一级weiyun.list响应顶层的pdir_key获取)
file_id:从file_list中获取pdir_key:使用weiyun.list响应中顶层的pdir_key(不是文件自身的pdir_key字段)
Windows (PowerShell):
-L:跟随重定向(必须)-b:携带 cookie(从 download 响应中获取,格式如FTN5K=08bfd4be)- 下载完成后验证文件大小与
file_size一致
工作流 2:上传文件到微云
推荐方式(一键脚本):
Windows (PowerShell):chcp 65001 >nul && python scripts\upload_to_weiyun.py C:\path\to\file --pdir_key <pdir_key>
手动方式:参见上方「5. weiyun.upload — 文件上传」章节。
工作流 3:生成分享链接
pdir_key 必须使用 weiyun.list 响应中顶层的 pdir_key,绝对不能传空字符串!文件项中的 pdir_key 字段可能为空,不可使用。
工作流 4:删除文件
工作流 5:重命名文件或目录
工作流 6:按分类查找文件
工作流 7:创建文件夹
dir_key 和 dir_name(可能因同名被自动改名)。
工作流 8:移动文件或目录
src_pdir_key 和 dst_pdir_key 不能为空,必须通过 weiyun.list 获取正确的目录 key。
认证机制
所有 MCP 工具需要通过WyHeader HTTP 头传递 mcp_token:
数据上报
为了方便微云官方进行问题故障定位,MCP 客户端在调用每个接口时,应在请求体的req_header 字段中携带上报数据。
ReqHeader 字段说明
qua 规则(客户端实时采集)
QUA 是一个字符串,由设备信息拼接而成:- 平台:检测当前操作系统类型(
MAC/WINDOWS/LINUX) - 平台版本:获取操作系统版本号(如 macOS
15.4.1,Windows10.0.19045) - 渠道:MCP 客户端的产品名称(如
CODEBUDDY、WORKBUDDY) - 渠道方版本:MCP 客户端(IDE 插件)的版本号
请求示例
常见问题
- 上传文件应该怎么做:直接用
python3 scripts/upload_to_weiyun.py <文件路径> --pdir_key <目录key>,无需手动计算参数或调用 MCP - 下载时 pdir_key 应该填什么:使用
weiyun.list响应中顶层的pdir_key,而不是文件自身的pdir_key字段(该字段可能为空字符串) - 生成分享链接时 pdir_key 不能为空:必须先调用
weiyun.list,使用响应顶层的pdir_key(不是file_list[i].pdir_key,该字段通常为空)。pdir_key为空会导致分享链接打开异常 - 查询子目录时 pdir_key 怎么填:填入子目录所在父目录的 key。对于根目录下的子目录,就是根目录
weiyun.list响应顶层的pdir_key - 下载时需要携带 cookie:
weiyun.download返回的下载链接需要用curl -b "<cookie>"携带 cookie 值,同时-L跟随重定向 - 上传报 “Cannot upload to a directory that you do not own”:必须指定
--pdir_key参数。先调用weiyun.list获取响应中顶层的pdir_key - 分片上传通道 len=0:每轮上传完一片后,返回的通道列表可能全部 len=0,需要重新预上传获取下一批通道。
upload_to_weiyun.py已自动处理此问题 - SHA1 不匹配:确保分块 SHA 值使用流式 SHA1 内部状态(小端序),而非独立分块 SHA1
- file_sha 被覆盖:服务端用最后一个 block 的 SHA 覆盖 file_sha — 两者必须相等
- Base64 双重编码:MCP 框架自动将 base64 字符串转为 bytes 传给
file_data字段,服务端会再次进行 Base64 解码 - 通道 ID 不匹配:上传分片时
channel_id必须与channel_list中某个条目匹配 - 环境标识:SIT 环境需在 Cookie 中携带
env_id=sit-xxxxx - 权限校验:下载、删除、分享操作会校验目录所有权,非本人目录的文件会被跳过
- 腾讯文档过滤:列表查询会自动过滤腾讯文档类型的文件
- pip install requests:上传脚本依赖
requests库,如提示缺少请先安装:pip install requests - 所有需要 pdir_key 的操作(下载、删除、分享、上传、重命名),都应使用
weiyun.list响应顶层的pdir_key,而不是文件/目录条目自身的pdir_key字段 - Windows 编码要求(防止中文乱码):Windows 下执行 Python 脚本或 mcporter 命令前必须先切换控制台代码页为 UTF-8,格式为
chcp 65001 >nul && python ...。Python 脚本已内置_encoding_fix.py模块自动修复 stdout/stderr 编码,但chcp 65001仍然是必要的(确保 cmd/PowerShell 控制台本身使用 UTF-8 解码输出) - Windows 下使用
python而非python3:Windows 系统通常使用python命令,macOS/Linux 使用python3。请根据用户操作系统自动选择正确的命令 - 重命名文件/目录:先调用
weiyun.list获取file_id/dir_key、dir_name和顶层pdir_key,再调用weiyun.rename_file或weiyun.rename_dir(重命名目录时需额外传src_dir_name即原目录名) - 按分类查找文件:使用
weiyun.list_by_category,通过category_id或lib_id指定分类,支持server_version续拉。该接口需要同时携带真实微云 cookie 和mcp_token - 生成带密码的分享链接:在调用
weiyun.gen_share_link时设置passwd参数即可创建加密分享 - 创建文件夹:调用
weiyun.create_dir,传入pdir_key(父目录 key)和dir_name(文件夹名称)。pdir_key为空时在 token 绑定的根目录下创建。返回的dir_name可能因同名冲突被自动改名 - 移动文件/目录:使用
weiyun.move_file或weiyun.move_dir。需要先通过weiyun.list分别获取源目录和目标目录的pdir_key,填入src_pdir_key和dst_pdir_key。两个 key 都不能为空 - 移动操作的目录 key 获取:
src_pdir_key来自文件/目录当前所在位置的weiyun.list响应顶层pdir_key;dst_pdir_key来自目标位置的weiyun.list响应顶层pdir_key或目标目录的dir_key