/install weiyun
\r \r
微云网盘 MCP 技能\r
\r
首次安装使用时,需要先完成本地安装和注册,详见 references/auth.md。\r
\r
Windows 用户:所有
bash ./setup.sh命令请替换为powershell -ExecutionPolicy Bypass -File setup.ps1,详见references/auth.md。\r \r
版本更新检查(每天首次使用前必须执行)\r
\r 每天使用本 SKILL 前进行一次更新检查,按照如下步骤执行:\r \r
1. 查看当前版本 version\r
\r
读取本文件顶部 frontmatter 中的 version 字段;格式为 MAJOR.MINOR.PATCH。\r
\r
2. 查看最新版本 latest\r
\r
通过命令获取最新版本信息 latest,输入参数 version 为上一步获取的当前版本:\r
\r
mcporter call "https://www.weiyun.com/api/v3/mcpserver" "check_skill_update" --args '{"version": "当前版本"}'\r
```\r
\r
> **Windows (PowerShell)** 用户注意:需先切换 UTF-8 编码,单引号内的 JSON 需改为转义双引号:\r
> ```powershell\r
> chcp 65001 >nul && mcporter call "https://www.weiyun.com/api/v3/mcpserver" "check_skill_update" --args "{`"version`": `"当前版本`"}"\r
> ```\r
\r
JSON 格式数据返回,返回参数示例:\r
\r
| 字段 | 类型 | 说明 |\r
|------|------|------|\r
| `latest` | string | 最新版本号,格式为 MAJOR.MINOR.PATCH |\r
| `release_note` | string | 最新版本发布说明 |\r
| `instruction` | string | 更新指令 |\r
\r
### 3. 更新版本\r
\r
如果当前版本 `version` 低于最新版本 `latest`,则遵循 `instruction` 指令进行更新,或提示用户更新。\r
\r
---\r
\r
## 功能概述\r
\r
提供微云(Weiyun)网盘通过 MCP 协议进行文件管理的完整能力,包含 **12 个 MCP Tool**:\r
\r
| Tool 名称 | 功能 | 说明 |\r
|-----------|------|------|\r
| `weiyun.list` | 目录列表查询 | 按目录查看文件和子目录,支持分页和排序 |\r
| `weiyun.list_by_category` | 按分类拉取文件列表 | 按文档、图片、视频等分类分页拉取文件,支持续拉 |\r
| `weiyun.download` | 批量下载 | 批量获取文件的 HTTPS 下载链接 |\r
| `weiyun.delete` | 批量删除 | 批量删除文件或目录,支持回收站或彻底删除 |\r
| `weiyun.upload` | 文件上传 | 两阶段协议:预上传 + 分片上传,支持秒传 |\r
| `weiyun.gen_share_link` | 生成分享外链 | 为文件或目录生成分享短链接,支持设置分享密码 |\r
| `weiyun.rename_file` | 重命名文件 | 重命名微云网盘中的文件 |\r
| `weiyun.rename_dir` | 重命名目录 | 重命名微云网盘中的目录 |\r
| `weiyun.create_dir` | 创建文件夹 | 在微云网盘中创建文件夹 |\r
| `weiyun.move_dir` | 移动文件夹 | 移动微云网盘中的文件夹到目标目录 |\r
| `weiyun.move_file` | 移动文件 | 移动微云网盘中的文件到目标目录 |\r
| `check_skill_update` | 技能版本检查更新 | 检查当前 Skill 版本是否为最新,获取更新指令 |\r
\r
**核心架构原则**:文件哈希计算和 `block_sha_list` 生成**必须在客户端/本地完成**。服务端只接收预计算好的哈希值,不会接收原始文件数据来计算哈希。这种设计是为了防止海量请求打爆服务器的存储和 CPU。\r
\r
## 触发场景\r
\r
- 使用微云 MCP 工具进行文件管理(查询、下载、删除、上传、分享、重命名、创建文件夹、移动文件/目录)\r
- **上传文件到微云**:优先使用 `scripts/upload_to_weiyun.py` 一键完成,无需手动计算参数或调用 MCP\r
- 按分类(文档、图片、视频等)查找微云文件(`weiyun.list_by_category` Tool)\r
- 重命名微云文件或目录(`weiyun.rename_file`、`weiyun.rename_dir` Tool)\r
- 在微云中创建文件夹(`weiyun.create_dir` Tool)\r
- 移动微云文件或目录到其他位置(`weiyun.move_file`、`weiyun.move_dir` Tool)\r
- 实现或调试微云 MCP 文件上传(`weiyun.upload` Tool)\r
- 计算 `block_sha_list`、`check_sha`、`check_data` 等上传参数\r
- 理解微云两阶段上传协议(预上传 → 分片上传)\r
- 检查技能版本更新(`check_skill_update`)\r
- 调试 FTN 上传错误或 SHA1 校验不匹配问题\r
\r
## 接口一览\r
\r
**注意** : 所有接口请求时都**务必**要在 `req_header` 字段中携带上报数据,详见下方「数据上报」章节\r
\r
### 1. weiyun.list — 目录列表查询\r
\r
查询微云网盘的目录内容,返回子目录和文件列表。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| get_type | uint32 | 否 | 获取类型:0-所有,1-仅目录,2-仅文件 |\r
| offset | uint32 | 否 | 分页起始偏移量,从 0 开始 |\r
| limit | uint32 | **是** | 每页返回数量,最大 50 |\r
| order_by | uint32 | 否 | 排序字段:0-不排序,1-按名字,2-按修改时间 |\r
| asc | bool | 否 | true-升序,false-降序(默认) |\r
| dir_key | string | 否 | 要查询的目录 key(hex 编码),为空则使用 token 绑定的 dirkey |\r
| pdir_key | string | 否 | 要查询的父目录 key(hex 编码),为空则使用 token 绑定的 pdirkey |\r
| req_header | ReqHeader | 推荐 | 请求信息头,用于数据上报(含 `qua` 和 `version`) |\r
\r
**响应**:返回 `pdir_key`(父目录 key)、`dir_list`(目录列表)、`file_list`(文件列表)、`finish_flag`(是否拉取完毕)。\r
\r
**注意**:腾讯文档文件会被自动过滤,不出现在返回结果中。\r
\r
### 2. weiyun.list_by_category — 按分类拉取文件列表\r
\r
按文件分类(文档、图片、视频等)分页拉取文件列表,支持通过 `server_version` 续拉。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| category_id | uint64 | 否 | 分类 ID(位运算值),有值时优先于 lib_id 和 suffix_list。例如:1-doc、2-excel、4-ppt、8-pdf、64-image、512-腾讯文档、4095-全部 |\r
| lib_id | int32 | 否 | 库 ID:1-文档,2-图片,3-音乐,4-视频,5-其他。`category_id` 有值时会忽略此字段 |\r
| local_version | string | 否 | 上次返回的 `server_version`,用于增量续拉;首次请求传空字符串 |\r
| group_id | int32 | 否 | 分组 ID。文档库:0-全部,1-doc,2-xls,3-ppt,4-pdf,50-腾讯文档 Doc,51-腾讯文档 Sheet,52-腾讯文档表单;图片/视频库可传相册分组 ID |\r
| suffix_list | string[] | 否 | 指定后缀列表,仅文档库和其他库有效,例如 `["docx", "xlsx"]` |\r
| count | int32 | **是** | 本次拉取数量,最大 100 |\r
| sort_type | int32 | 否 | 排序类型:0-创建时间,1-修改时间,2-名称,3-拍摄时间,4-大小 |\r
| is_desc_order | bool | 否 | 是否降序排列:true-降序(默认),false-升序 |\r
\r
**响应**:返回 `server_version`(服务端游标,续拉时回填到 `local_version`)、`file_list`(文件列表)、`finish_flag`(是否拉取完成)。\r
\r
**注意**:该接口要求同时携带真实微云 cookie(如 `uid`、`uid_key`)和 `mcp_token`。\r
\r
### 3. weiyun.download — 批量下载\r
\r
批量获取微云文件的 HTTPS 下载链接。\r
\r
**注意事项**:\r
\r
本功能无法下载微云分享的链接里面的文件,只能下载用户微云网盘中的文件。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| items | McpDownloadFileItem[] | **是** | 需要下载的文件列表 |\r
\r
每个 `McpDownloadFileItem` 包含 `file_id`(文件 ID)和 `pdir_key`(所在目录 key),均为必填。\r
\r
**响应**:每个文件返回 `file_id`、`https_download_url`(下载链接)、`file_size`(文件大小)、`cookie`(下载时需携带的 cookie)。\r
\r
**权限校验**:只能下载当前用户拥有的文件(通过 `pdir_key` 判断目录所有权)。\r
\r
### 4. weiyun.delete — 批量删除\r
\r
批量删除微云网盘中的文件或目录。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| file_list | McpDeleteFileItem[] | 否 | 待删除的文件列表(`file_id` + `pdir_key`) |\r
| dir_list | McpDeleteDirItem[] | 否 | 待删除的目录列表(`dir_key` + `pdir_key`) |\r
| delete_completely | bool | 否 | false-移到回收站(默认),true-彻底删除 |\r
\r
**注意**:`file_list` 和 `dir_list` 至少要填一个。\r
\r
**响应**:返回 `freed_space`(释放的空间字节数)和 `freed_index_cnt`(删除的文件/目录总数)。\r
\r
### 5. weiyun.gen_share_link — 生成分享外链\r
\r
为微云文件或目录生成分享短链接。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|----------------------------------------------|\r
| file_list | McpShareFileItem[] | 否 | 待分享的文件列表(`file_id` + `pdir_key`) |\r
| dir_list | McpShareDirItem[] | 否 | 待分享的目录列表(`dir_key` + `pdir_key`) |\r
| share_name | string | 否 | 分享名称,不填则使用第一个文件或目录名 |\r
| passwd | string | 否 | 分享密码,不填则创建无密码分享,长度一定是 6 个字符。支持随机密码,也支持用户指定密码 |\r
\r
**注意**:\r
\r
`file_list` 和 `dir_list` 至少要填一个。\r
\r
随机分享密码生成规则:长度6,全小写字母+数字混合,不包含特殊字符\r
\r
分享外链无法使用本 skill 进行下载,需要提示用户打开网页进行下载\r
\r
**⚠️ 关键:pdir_key 不能为空!**\r
- `pdir_key` 必须使用 `weiyun.list` 响应中**顶层的 `pdir_key`**,而不是文件自身的 `pdir_key` 字段(该字段可能为空字符串)\r
- 如果传空的 `pdir_key`,可能导致分享链接异常,**强烈建议**调用方显式传入正确的 `pdir_key`\r
- 错误示例:直接用 `file_list[i].pdir_key`(可能为空)\r
- 正确示例:使用 `weiyun.list` 响应顶层的 `pdir_key` 字段值\r
\r
**响应**:返回 `short_url`(分享短链接)和 `share_name`(分享名称)。\r
\r
### 6. weiyun.upload — 文件上传\r
\r
微云文件上传采用**两阶段协议**:\r
\r
#### 阶段一:预上传\r
\r
发送文件元数据和分块 SHA1 列表,检查是否可以秒传,或获取上传通道。\r
\r
**必填字段**:`filename`、`file_size`、`file_sha`、`block_sha_list`、`check_sha`\r
**可选字段**:`file_md5`、`check_data`、`pdir_key`\r
\r
**关键行为**:`file_sha` **必须等于** `block_sha_list` 的最后一个值,否则校验会失败。\r
\r
**响应判断**:\r
- `file_exist=true` → 秒传成功,上传完毕\r
- `file_exist=false` → 使用返回的 `upload_key`、`channel_list`、`ex` 进行分片上传\r
\r
#### 阶段二:分片上传\r
\r
根据预上传返回的通道列表,逐片上传文件数据。\r
\r
**必填字段**:`upload_key`、`channel_list`、`channel_id`、`ex`、`file_data`、`filename`\r
\r
**上传状态**:\r
- `1` = 继续上传下一分片\r
- `2` = 上传完成\r
- `3` = 等待其他通道完成\r
\r
### 7. weiyun.rename_file — 重命名文件\r
\r
重命名微云网盘中的文件,需要提供文件所在目录 key 和文件 ID。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| file_id | string | **是** | 文件唯一标识符 |\r
| pdir_key | string | **是** | 文件所在目录 key(hex 编码) |\r
| new_filename | string | **是** | 修改后的文件名 |\r
\r
**响应**:返回 `error`(错误信息,成功时为空)。\r
\r
### 8. weiyun.rename_dir — 重命名目录\r
\r
重命名微云网盘中的目录,需要提供目录 key、父目录 key 和修改前的目录名。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| dir_key | string | **是** | 目录 key(hex 编码) |\r
| pdir_key | string | **是** | 父目录 key(hex 编码) |\r
| new_dir_name | string | **是** | 修改后的目录名 |\r
| src_dir_name | string | **是** | 修改前的目录名 |\r
\r
**响应**:返回 `error`(错误信息,成功时为空)。\r
\r
### 9. weiyun.create_dir — 创建文件夹\r
\r
在微云网盘中创建文件夹,需要提供父目录 key 和文件夹名称。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| pdir_key | string | 否 | 父目录 key(hex 编码),在此目录下创建新文件夹。为空则使用 token 绑定的目录 |\r
| dir_name | string | **是** | 新文件夹名称 |\r
\r
**响应**:\r
\r
| 字段 | 类型 | 说明 |\r
|------|------|------|\r
| dir_key | string | 新创建的目录 key(hex 编码) |\r
| dir_name | string | 创建后的目录名(可能被自动改名,如存在同名目录) |\r
| error | string | 错误信息,成功时为空 |\r
\r
### 10. weiyun.move_dir — 移动文件夹\r
\r
移动微云网盘中的文件夹到目标目录,需要提供源目录 key 和目标目录 key。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| dir_key | string | **是** | 待移动的目录 key(hex 编码) |\r
| src_pdir_key | string | **是** | 源父目录 key(hex 编码),即当前所在的目录 |\r
| dst_pdir_key | string | **是** | 目标父目录 key(hex 编码),即要移动到的目录 |\r
| dir_name | string | 否 | 目录名称,移动时可选填用于冲突处理 |\r
\r
**响应**:返回 `error`(错误信息,成功时为空)。\r
\r
**⚠️ 关键**:`src_pdir_key` 和 `dst_pdir_key` 都需要使用 `weiyun.list` 响应中**顶层的 `pdir_key`** 或对应目录的 `dir_key`,不能传空字符串。\r
\r
### 11. weiyun.move_file — 移动文件\r
\r
移动微云网盘中的文件到目标目录,需要提供文件 ID、源目录 key 和目标目录 key。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| file_id | string | **是** | 待移动的文件唯一标识符 |\r
| src_pdir_key | string | **是** | 源父目录 key(hex 编码),即文件当前所在的目录 |\r
| dst_pdir_key | string | **是** | 目标父目录 key(hex 编码),即要移动到的目录 |\r
| filename | string | 否 | 文件名称,移动时可选填用于冲突处理 |\r
\r
**响应**:返回 `error`(错误信息,成功时为空)。\r
\r
**⚠️ 关键**:`src_pdir_key` 和 `dst_pdir_key` 都需要使用 `weiyun.list` 响应中**顶层的 `pdir_key`** 或对应目录的 `dir_key`,不能传空字符串。\r
\r
### 12. check_skill_update — 技能版本检查更新\r
\r
检查当前 Skill 版本是否为最新,如有新版本则返回更新指令。\r
\r
**请求参数**:\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| version | string | **是** | 当前 Skill 版本号,格式 MAJOR.MINOR.PATCH |\r
\r
**响应**:\r
\r
| 字段 | 类型 | 说明 |\r
|------|------|------|\r
| latest | string | 最新版本号,格式 MAJOR.MINOR.PATCH |\r
| release_note | string | 最新版本发布说明 |\r
| instruction | string | 更新指令(需要更新时遵循此指令执行) |\r
\r
**注意**:每天首次使用本 Skill 前必须执行一次版本检查(详见文档顶部「版本更新检查」章节)。\r
\r
## 分块 SHA1 计算算法\r
\r
这是上传功能最核心的部分。微云**不使用**标准的独立分块 SHA1,而是使用**流式 SHA1 内部状态**。\r
\r
### 算法步骤(分块大小 = 512KB = 524288 字节)\r
\r
1. 创建**一个**共享的 SHA1 哈希对象\r
2. 对于除最后一块之外的每个块:\r
- 读取 524288 字节并 `update()` 到 SHA1 对象\r
- 提取 SHA1 内部寄存器(h0, h1, h2, h3, h4)以**小端序**输出\r
- 输出为 40 字符 hex 字符串 → 该块的 `sha` 值\r
3. 对于最后一块(可能不足 524288 字节):\r
- 继续用相同 SHA1 对象 update 剩余数据\r
- `sha` 值为**整个文件的标准 SHA1 hexdigest**(大端序,含 finalization)\r
\r
### check_sha 和 check_data 计算\r
\r
用于服务端防篡改验证:\r
\r
```\r
lastBlockSize = file_size % 524288(若为 0 则取 524288)\r
checkBlockSize = lastBlockSize % 128(若为 0 则取 128)\r
\r
check_sha:处理完所有非最后块后,继续 update 最后块中前 (lastBlockSize - checkBlockSize) 字节,\r
然后取 SHA1 内部寄存器 h0-h4 小端序输出为 hex\r
check_data:文件末尾 checkBlockSize 字节的 Base64 编码\r
```\r
\r
### 使用脚本\r
\r
#### 一键上传脚本(推荐)\r
\r
直接上传本地文件到微云,整合了参数计算 + 预上传 + 分片上传的完整流程:\r
\r
```bash\r
# 基本用法\r
python3 scripts/upload_to_weiyun.py /path/to/file --token \x3Cmcp_token> --env_id \x3Cenv_id>\r
\r
# 指定上传目录\r
python3 scripts/upload_to_weiyun.py /path/to/file --token \x3Cmcp_token> --pdir_key \x3Cdir_key>\r
\r
# 使用环境变量\r
export WEIYUN_MCP_TOKEN=\x3Cmcp_token>\r
export WEIYUN_ENV_ID=\x3Cenv_id>\r
python3 scripts/upload_to_weiyun.py /path/to/file\r
```\r
\r
> **Windows (PowerShell)** 用户:需先切换 UTF-8 编码,将 `python3` 替换为 `python`,`export` 替换为 `$env:VAR = "value"`:\r
> ```powershell\r
> # 基本用法\r
> chcp 65001 >nul && python scripts\upload_to_weiyun.py C:\path o\file --token \x3Cmcp_token> --env_id \x3Cenv_id>\r
>\r
> # 使用环境变量\r
> $env:WEIYUN_MCP_TOKEN = "\x3Cmcp_token>"\r
> $env:WEIYUN_ENV_ID = "\x3Cenv_id>"\r
> chcp 65001 >nul && python scripts\upload_to_weiyun.py C:\path o\file\r
> ```\r
\r
\r
脚本参数:\r
\r
| 参数 | 必填 | 说明 |\r
|------|------|------|\r
| `file_path` | **是** | 本地文件路径(位置参数) |\r
| `--token` | **是** | MCP token(或设 `WEIYUN_MCP_TOKEN` 环境变量) |\r
| `--env_id` | 否 | 环境标识(如 `sit-0cd15bb3`,或设 `WEIYUN_ENV_ID`) |\r
| `--pdir_key` | 否 | 上传目标目录 key(不填使用 token 绑定目录) |\r
| `--mcp_url` | 否 | MCP 服务地址(默认 `https://www.weiyun.com/api/v3/mcpserver`) |\r
| `--max_rounds` | 否 | 最大上传轮数(默认 50) |\r
\r
上传策略:循环「预上传获取通道 → 上传一片 → 重新预上传」直到完成。每次预上传会自动跳过已成功的分片(offset 随进度递增),支持秒传。\r
\r
**AI Agent 使用时**:只需要 `execute_command` 运行此脚本即可,无需手动计算 block_sha_list 或调用 MCP。\r
\r
#### 参数计算脚本\r
\r
仅计算上传参数(不执行上传),用于调试或手动调用 MCP:\r
\r
```bash\r
python3 scripts/gen_block_info_list.py /path/to/file\r
```\r
\r
> **Windows (PowerShell)**:`chcp 65001 >nul && python scripts\gen_block_info_list.py C:\path o\file`\r
\r
输出包括:`block_sha_list`、`file_sha`、`file_md5`、`check_sha`、`check_data`、`block_size`、`block_count`。\r
\r
两个脚本均包含纯 Python 的 SHA1 实现,支持提取未经 finalization 的内部状态 — 这是 Python 标准库 `hashlib.sha1` 无法做到的。\r
\r
\r
## 错误码说明\r
\r
MCP 接口在出现异常时会返回以下错误码,调用方可根据错误码进行相应处理:\r
\r
| 错误码 | 名称 | 说明 |\r
|--------|------|------|\r
| 117401 | ERR_RATE_LIMIT | 每日调用配额已耗尽,请明天再试 |\r
| 117402 | ERR_MCP_TOKEN_INVALID | MCP token 无效或已过期,请重新生成 token |\r
| 117403 | ERR_MCP_PARAM_EMPTY | 请求必填参数为空(如删除接口 file_list 和 dir_list 都为空) |\r
| 117404 | ERR_MCP_PARAM_INVALID | 请求参数不合法(如 file_id 或 pdir_key 格式错误) |\r
| 117405 | ERR_MCP_PERMISSION_DENIED | 无权操作非本人目录的文件 |\r
| 117406 | ERR_MCP_BACKEND_FAIL | 后端服务调用失败,请稍后重试 |\r
| 117407 | ERR_MCP_TOKEN_DISABLED | MCP token 已被禁用(取消授权/手动拉黑/安全打击) |\r
\r
**处理建议**:\r
- **117401**:等待次日零点配额自动重置,或开通微云会员提升配额\r
- **117402**:重新生成 token\r
- **117403/117404**:检查请求参数是否完整且格式正确\r
- **117405**:确认操作的文件/目录属于当前用户\r
- **117406**:属于服务端临时异常,可重试\r
- **117407**:错误是取消授权则需要重新授权,被安全误打击则需要联系微云客服人员做解封处理\r
\r
## 常见操作工作流\r
\r
### 工作流 1:查找并下载文件\r
\r
当需要在微云中找到某个文件并下载到本地时,按以下步骤操作:\r
\r
**第一步:查询根目录**\r
\r
```\r
调用 weiyun.list,参数:limit=50, get_type=0\r
```\r
\r
- 响应中的 `file_list` 包含文件,`dir_list` 包含子目录\r
- **记住响应顶层的 `pdir_key`**(后续下载需要用到)\r
- 如果文件在根目录 → 进入第三步\r
- 如果文件不在根目录 → 需要遍历子目录(第二步)\r
\r
**第二步:遍历子目录查找文件**\r
\r
```\r
调用 weiyun.list,参数:\r
dir_key = \x3C子目录的 dir_key>(从 dir_list 中获取)\r
pdir_key = \x3C子目录所在父目录的 pdir_key>(即上一次 list 响应顶层的 pdir_key,或子目录所在目录的 dir_key)\r
limit = 50\r
```\r
\r
**⚠️ 关键**:查询子目录时 `dir_key` 和 `pdir_key` 的含义:\r
- `dir_key`:要查询的目标子目录的 key(从 `dir_list` 中的 `dir_key` 字段获取)\r
- `pdir_key`:该子目录所在的父目录 key(从上一级 `weiyun.list` 响应顶层的 `pdir_key` 获取)\r
\r
如果还有嵌套子目录,递归重复此步骤。\r
\r
**第三步:获取下载链接**\r
\r
```\r
调用 weiyun.download,参数:\r
items = [{"file_id": "\x3C文件的 file_id>", "pdir_key": "\x3C文件所在目录的 pdir_key>"}]\r
```\r
\r
- `file_id`:从 `file_list` 中获取\r
- `pdir_key`:使用 `weiyun.list` 响应中**顶层的 `pdir_key`**(不是文件自身的 `pdir_key` 字段)\r
\r
**第四步:下载文件到本地**\r
\r
```bash\r
curl -s -L -o \x3C本地文件名> -b "\x3Ccookie>" "\x3Chttps_download_url>"\r
```\r
\r
> **Windows (PowerShell)**:\r
> ```powershell\r
> $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession\r
> $session.Cookies.Add((New-Object System.Net.Cookie("FTN5K", "\x3Ccookie值>", "/", ".weiyun.com")))\r
> Invoke-WebRequest -Uri "\x3Chttps_download_url>" -OutFile "\x3C本地文件名>" -WebSession $session\r
> ```\r
\r
- `-L`:跟随重定向(必须)\r
- `-b`:携带 cookie(从 download 响应中获取,格式如 `FTN5K=08bfd4be`)\r
- 下载完成后验证文件大小与 `file_size` 一致\r
\r
### 工作流 2:上传文件到微云\r
\r
**推荐方式**(一键脚本):\r
\r
```bash\r
# 1. 先查根目录获取 pdir_key\r
# 调用 weiyun.list limit=50 → 记住响应中的 pdir_key\r
\r
# 2. 上传\r
python3 scripts/upload_to_weiyun.py /path/to/file --pdir_key \x3Cpdir_key>\r
```\r
\r
> **Windows (PowerShell)**:`chcp 65001 >nul && python scripts\upload_to_weiyun.py C:\path o\file --pdir_key \x3Cpdir_key>`\r
\r
**手动方式**:参见上方「5. weiyun.upload — 文件上传」章节。\r
\r
### 工作流 3:生成分享链接\r
\r
```\r
# 1. 先查目录获取文件信息和 pdir_key\r
调用 weiyun.list → 找到目标文件的 file_id,记住响应**顶层** pdir_key\r
\r
# 2. 生成分享链接(pdir_key 必须非空!)\r
调用 weiyun.gen_share_link,参数:\r
file_list = [{"file_id": "\x3Cfile_id>", "pdir_key": "\x3C响应顶层的 pdir_key>"}]\r
share_name = "\x3C文件名>"\r
```\r
\r
**⚠️ 关键**:`pdir_key` 必须使用 `weiyun.list` 响应中**顶层的 `pdir_key`**,绝对不能传空字符串!文件项中的 `pdir_key` 字段可能为空,不可使用。\r
\r
### 工作流 4:删除文件\r
\r
```\r
# 1. 先查目录获取文件信息\r
调用 weiyun.list → 找到目标文件的 file_id,记住响应顶层 pdir_key\r
\r
# 2. 删除\r
调用 weiyun.delete,参数:\r
file_list = [{"file_id": "\x3Cfile_id>", "pdir_key": "\x3Cpdir_key>"}]\r
delete_completely = false (移到回收站,更安全)\r
```\r
\r
### 工作流 5:重命名文件或目录\r
\r
```\r
# 1. 先查目录获取文件/目录信息\r
调用 weiyun.list → 找到目标文件的 file_id 或目录的 dir_key,记住响应顶层 pdir_key\r
\r
# 2a. 重命名文件\r
调用 weiyun.rename_file,参数:\r
file_id = "\x3Cfile_id>"\r
pdir_key = "\x3C响应顶层的 pdir_key>"\r
new_filename = "\x3C新文件名>"\r
\r
# 2b. 重命名目录\r
调用 weiyun.rename_dir,参数:\r
dir_key = "\x3Cdir_key>"\r
pdir_key = "\x3C响应顶层的 pdir_key>"\r
new_dir_name = "\x3C新目录名>"\r
src_dir_name = "\x3C原目录名>"\r
```\r
\r
### 工作流 6:按分类查找文件\r
\r
```\r
# 查找所有 PDF 文件\r
调用 weiyun.list_by_category,参数:\r
category_id = 8 (8 = PDF)\r
count = 50\r
\r
# 续拉更多结果\r
调用 weiyun.list_by_category,参数:\r
category_id = 8\r
count = 50\r
local_version = "\x3C上次响应的 server_version>"\r
\r
# 按后缀查找\r
调用 weiyun.list_by_category,参数:\r
lib_id = 1 (1 = 文档库)\r
suffix_list = ["docx", "xlsx"]\r
count = 50\r
```\r
\r
### 工作流 7:创建文件夹\r
\r
```\r
# 1. 先查目录获取 pdir_key(如果要在子目录下创建)\r
调用 weiyun.list → 记住响应顶层 pdir_key 或目标子目录的 dir_key\r
\r
# 2. 创建文件夹\r
调用 weiyun.create_dir,参数:\r
pdir_key = "\x3C目标父目录的 pdir_key>"(为空则在 token 绑定的根目录下创建)\r
dir_name = "\x3C新文件夹名称>"\r
```\r
\r
**响应**:返回新创建目录的 `dir_key` 和 `dir_name`(可能因同名被自动改名)。\r
\r
### 工作流 8:移动文件或目录\r
\r
```\r
# 1. 先查源目录获取文件/目录信息\r
调用 weiyun.list,查询源目录 → 找到目标文件的 file_id 或目录的 dir_key,记住响应顶层 pdir_key 作为 src_pdir_key\r
\r
# 2. 查目标目录获取 dst_pdir_key\r
调用 weiyun.list,查询目标目录 → 记住响应顶层的 pdir_key 作为 dst_pdir_key\r
\r
# 3a. 移动文件\r
调用 weiyun.move_file,参数:\r
file_id = "\x3Cfile_id>"\r
src_pdir_key = "\x3C源目录的 pdir_key>"\r
dst_pdir_key = "\x3C目标目录的 pdir_key>"\r
\r
# 3b. 移动目录\r
调用 weiyun.move_dir,参数:\r
dir_key = "\x3C要移动的目录 dir_key>"\r
src_pdir_key = "\x3C源父目录的 pdir_key>"\r
dst_pdir_key = "\x3C目标父目录的 pdir_key>"\r
```\r
\r
**⚠️ 关键**:`src_pdir_key` 和 `dst_pdir_key` 不能为空,必须通过 `weiyun.list` 获取正确的目录 key。\r
\r
## 认证机制\r
\r
所有 MCP 工具需要通过 `WyHeader` HTTP 头传递 `mcp_token`:\r
\r
```\r
WyHeader: mcp_token=\x3Ctoken>\r
```\r
\r
\r
\r
## 数据上报\r
\r
为了方便微云官方进行问题故障定位,MCP 客户端在调用每个接口时,**应在请求体的 `req_header` 字段中携带上报数据**。\r
\r
### ReqHeader 字段说明\r
\r
| 字段 | 类型 | 必填 | 说明 |\r
|------|------|------|------|\r
| `qua` | string | 推荐 | 用户设备信息,格式:`{平台}_{平台版本}_{渠道}_{渠道方版本}`,如 `MAC_15.4.1_CODEBUDDY_4.8.1` |\r
| `version` | string | 推荐 | skill 的版本号,如 `1.0.3`,取自本文件顶部 frontmatter 的 `version` 字段 |\r
\r
### qua 规则(客户端实时采集)\r
\r
QUA 是一个字符串,由设备信息拼接而成:\r
\r
```\r
{平台}_{平台版本}_{渠道}_{渠道方版本}\r
```\r
\r
- **平台**:检测当前操作系统类型(`MAC` / `WINDOWS` / `LINUX`)\r
- **平台版本**:获取操作系统版本号(如 macOS `15.4.1`,Windows `10.0.19045`)\r
- **渠道**:MCP 客户端的产品名称(如 `CODEBUDDY`、`WORKBUDDY`)\r
- **渠道方版本**:MCP 客户端(IDE 插件)的版本号\r
\r
| 平台 | QUA 示例 |\r
|------|---------|\r
| macOS | `MAC_15.4.1_CODEBUDDY_4.8.1` |\r
| Windows | `WINDOWS_10.0.19045_WORKBUDDY_4.8.1` |\r
| Linux | `LINUX_6.1.0_CODEBUDDY_4.8.1` |\r
\r
### 请求示例\r
\r
```json\r
{\r
"limit": 50,\r
"req_header": {\r
"qua": "MAC_15.4.1_CODEBUDDY_4.8.1",\r
"version": "1.0.3"\r
}\r
}\r
```\r
\r
## 常见问题\r
\r
1. **上传文件应该怎么做**:直接用 `python3 scripts/upload_to_weiyun.py \x3C文件路径> --pdir_key \x3C目录key>`,无需手动计算参数或调用 MCP\r
2. **下载时 pdir_key 应该填什么**:使用 `weiyun.list` 响应中**顶层的 `pdir_key`**,而不是文件自身的 `pdir_key` 字段(该字段可能为空字符串)\r
3. **生成分享链接时 pdir_key 不能为空**:必须先调用 `weiyun.list`,使用响应**顶层的 `pdir_key`**(不是 `file_list[i].pdir_key`,该字段通常为空)。`pdir_key` 为空会导致分享链接打开异常\r
4. **查询子目录时 pdir_key 怎么填**:填入子目录所在父目录的 key。对于根目录下的子目录,就是根目录 `weiyun.list` 响应顶层的 `pdir_key`\r
5. **下载时需要携带 cookie**:`weiyun.download` 返回的下载链接需要用 `curl -b "\x3Ccookie>"` 携带 cookie 值,同时 `-L` 跟随重定向\r
6. **上传报 "Cannot upload to a directory that you do not own"**:必须指定 `--pdir_key` 参数。先调用 `weiyun.list` 获取响应中顶层的 `pdir_key`\r
7. **分片上传通道 len=0**:每轮上传完一片后,返回的通道列表可能全部 len=0,需要重新预上传获取下一批通道。`upload_to_weiyun.py` 已自动处理此问题\r
8. **SHA1 不匹配**:确保分块 SHA 值使用流式 SHA1 内部状态(小端序),而非独立分块 SHA1\r
9. **file_sha 被覆盖**:服务端用最后一个 block 的 SHA 覆盖 file_sha — 两者必须相等\r
10. **Base64 双重编码**:MCP 框架自动将 base64 字符串转为 bytes 传给 `file_data` 字段,服务端会再次进行 Base64 解码\r
11. **通道 ID 不匹配**:上传分片时 `channel_id` 必须与 `channel_list` 中某个条目匹配\r
12. **环境标识**:SIT 环境需在 Cookie 中携带 `env_id=sit-xxxxx`\r
13. **权限校验**:下载、删除、分享操作会校验目录所有权,非本人目录的文件会被跳过\r
14. **腾讯文档过滤**:列表查询会自动过滤腾讯文档类型的文件\r
15. **pip install requests**:上传脚本依赖 `requests` 库,如提示缺少请先安装:`pip install requests`\r
16. **所有需要 pdir_key 的操作**(下载、删除、分享、上传、重命名),都应使用 `weiyun.list` 响应**顶层**的 `pdir_key`,而不是文件/目录条目自身的 `pdir_key` 字段\r
17. **Windows 编码要求(防止中文乱码)**:Windows 下执行 Python 脚本或 mcporter 命令前**必须**先切换控制台代码页为 UTF-8,格式为 `chcp 65001 >nul && python ...`。Python 脚本已内置 `_encoding_fix.py` 模块自动修复 stdout/stderr 编码,但 `chcp 65001` 仍然是必要的(确保 cmd/PowerShell 控制台本身使用 UTF-8 解码输出)\r
18. **Windows 下使用 `python` 而非 `python3`**:Windows 系统通常使用 `python` 命令,macOS/Linux 使用 `python3`。请根据用户操作系统自动选择正确的命令\r
19. **重命名文件/目录**:先调用 `weiyun.list` 获取 `file_id`/`dir_key`、`dir_name` 和顶层 `pdir_key`,再调用 `weiyun.rename_file` 或 `weiyun.rename_dir`(重命名目录时需额外传 `src_dir_name` 即原目录名)\r
20. **按分类查找文件**:使用 `weiyun.list_by_category`,通过 `category_id` 或 `lib_id` 指定分类,支持 `server_version` 续拉。该接口需要同时携带真实微云 cookie 和 `mcp_token`\r
21. **生成带密码的分享链接**:在调用 `weiyun.gen_share_link` 时设置 `passwd` 参数即可创建加密分享\r
22. **创建文件夹**:调用 `weiyun.create_dir`,传入 `pdir_key`(父目录 key)和 `dir_name`(文件夹名称)。`pdir_key` 为空时在 token 绑定的根目录下创建。返回的 `dir_name` 可能因同名冲突被自动改名\r
23. **移动文件/目录**:使用 `weiyun.move_file` 或 `weiyun.move_dir`。需要先通过 `weiyun.list` 分别获取源目录和目标目录的 `pdir_key`,填入 `src_pdir_key` 和 `dst_pdir_key`。两个 key 都不能为空\r
24. **移动操作的目录 key 获取**:`src_pdir_key` 来自文件/目录当前所在位置的 `weiyun.list` 响应顶层 `pdir_key`;`dst_pdir_key` 来自目标位置的 `weiyun.list` 响应顶层 `pdir_key` 或目标目录的 `dir_key`\r
\r
\r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install weiyun - After installation, invoke the skill by name or use
/weiyun - Provide required inputs per the skill's parameter spec and get structured output
What is Weiyun?
微云网盘 MCP 接口完整技能。包含目录列表查询(weiyun.list)、按分类拉取文件列表(weiyun.list_by_category)、批量下载(weiyun.download)、批量删除(weiyun.delete)、文件上传(weiyun.upload)、生成分享外链(weiyun.gen_shar... It is an AI Agent Skill for Claude Code / OpenClaw, with 36 downloads so far.
How do I install Weiyun?
Run "/install weiyun" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Weiyun free?
Yes, Weiyun is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Weiyun support?
Weiyun is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Weiyun?
It is built and maintained by SKY-lv (@sky-lv); the current version is v1.0.0.