← Back to Skills Marketplace
sky-lv

Weiyun

by SKY-lv · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
36
Downloads
0
Stars
1
Active Installs
1
Versions
Install in OpenClaw
/install weiyun
Description
微云网盘 MCP 接口完整技能。包含目录列表查询(weiyun.list)、按分类拉取文件列表(weiyun.list_by_category)、批量下载(weiyun.download)、批量删除(weiyun.delete)、文件上传(weiyun.upload)、生成分享外链(weiyun.gen_shar...
README (SKILL.md)

\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
Usage Guidance
Install only if you intend to let the agent manage your Weiyun cloud-drive files. Review setup.sh before running it, avoid passing tokens on the command line, confirm every delete/share/move/upload action, and do not follow remote update instructions unless you have verified and approved them.
Capability Analysis
Type: OpenClaw Skill Name: weiyun Version: 1.0.0 The 'weiyun' skill bundle is a comprehensive MCP (Model Context Protocol) integration for Tencent Weiyun cloud storage. It provides tools for file management, including a specialized upload protocol requiring a custom SHA1 implementation (found in `scripts/upload_to_weiyun.py` and `scripts/gen_block_info_list.py`) to handle Weiyun's FTN streaming states. The authentication flow in `setup.sh` and `references/auth.md` is transparent, utilizing legitimate `weiyun.com` endpoints and requiring explicit user confirmation. While it includes a version-check mechanism that can receive update instructions from the server, this is a standard feature for skill maintenance rather than a malicious backdoor. No evidence of data exfiltration, unauthorized access, or malicious prompt injection was found.
Capability Tags
requires-oauth-tokenrequires-sensitive-credentials
Capability Assessment
Purpose & Capability
The stated purpose is coherent for a Weiyun cloud-drive integration, but the capability set is broad and high-impact: upload, download, batch delete, share-link generation, rename, move, and folder creation.
Instruction Scope
The skill tells the agent to run a remote update check before daily use and to follow returned update instructions, which gives remote content influence over agent behavior.
Install Mechanism
The registry says there is no install spec and no required binaries, but setup.sh can install mcporter globally with npm and install Python requests with pip.
Credentials
The skill requires sensitive Weiyun account access through MCP tokens and sometimes real cookies, and it uploads local file contents to Weiyun; this is purpose-aligned but sensitive and under-declared by the registry requirements.
Persistence & Privilege
The auth flow stores tokens in the user's mcporter home-scope configuration and stores OAuth codes in predictable /tmp files, creating ongoing account-access and local-exposure considerations.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install weiyun
  3. After installation, invoke the skill by name or use /weiyun
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Weiyun skill 1.0.0 initial release: - Provides comprehensive Weiyun (微云) cloud drive file management via MCP protocol. - Supports directory/file listing, categorization, batch download/upload/delete, sharing, renaming, moving, and folder creation. - File upload includes FTN protocol with Python SHA1 split hashing implementation. - Includes version update check mechanism and detailed usage instructions for Windows and Linux. - All main features documented in SKILL.md; local client-side hashing required for uploads.
Metadata
Slug weiyun
Version 1.0.0
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 1
Frequently Asked Questions

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.

💬 Comments