# stagenth · file-relay (remote · stagenth.com)

Cloud file relay: chunked uploads, folders, share links, inline text reads, ZIP packing.

- Trust score: 67/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- remote · `stagenth.com`: 67/100 (this document), [markdown](https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay.md), [page](https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay)

## Channel facts

- Endpoint: `https://stagenth.com/mcp/file-relay/`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 25 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3594 tokens (~143/item across 25 items; 25 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 94/100
  - 96% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 89% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-stagenth-file-relay https://stagenth.com/mcp/file-relay/
```

### Codex

```toml
[mcp_servers.com-stagenth-file-relay]
url = "https://stagenth.com/mcp/file-relay/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-stagenth-file-relay": {
      "type": "remote",
      "url": "https://stagenth.com/mcp/file-relay/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-stagenth-file-relay --url https://stagenth.com/mcp/file-relay/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-stagenth-file-relay:
    url: "https://stagenth.com/mcp/file-relay/"
```

### Other

```json
{
  "mcpServers": {
    "com-stagenth-file-relay": {
      "type": "http",
      "url": "https://stagenth.com/mcp/file-relay/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 65, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 63, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 61, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 61)

First indexed and scored.

## MCP tools (25)

### `get_user_quota` (~21 tokens)

查看当前用户的存储配额使用情况。

### `list_files` (~278 tokens)

列出当前用户的文件 (默认递归遍历整个文件夹层级).

        返回值同时附带 ``subfolders``(直接子文件夹列表) 与 ``has_subfolders``
        提示, 帮助 AI 感知层级结构。若用户问“目录结构 / 树”, 直接调
        ``get_folder_tree`` 拿到 ASCII 树状图更直观。

        每个 item 都有 ``folder_path`` 字段标注它的实际归属, 同名文件不会
        因递归而混淆。

Input parameters:

- `category`: 按分类过滤：audio/video/image/text/code/document/archive/other
- `folder_path` (string): 目标文件夹路径, 形如 '/' 或 '/工作/项目A'。默认 '/' 列根目录。用 list_folders 探查可用路径。
- `page` (integer)
- `recursive` (boolean): True (默认) = 深度遍历, 返回该路径及所有后代文件夹下的全部文件; False = 仅列直接子文件 (类似 'ls'). 用户问“都有什么文件”时一律保持 True.
- `search`: 按文件名或描述搜索
- `size` (integer)

### `search_files` (~39 tokens)

在当前用户的所有文件中搜索。

Input parameters:

- `limit` (integer)
- `query` (string, required): 搜索关键词（文件名或描述）

### `get_file_info` (~45 tokens)

查询单个文件详情。file_id 与 file_uuid 提供其一即可。

Input parameters:

- `file_id`: 文件 ID
- `file_uuid`: 文件 UUID（二选一）

### `delete_file` (~22 tokens)

删除一个文件。

Input parameters:

- `file_id` (integer, required): 文件 ID

### `delete_files` (~79 tokens)

批量删除文件（移入回收站，30 天内可在网页端恢复）。

        逐个删除，单个失败不影响其余；返回每个 ID 的结果。

Input parameters:

- `file_ids` (array, required): 要删除的文件 ID 列表（list_files 可查），单次最多 100 个

### `upload_file` (~301 tokens)

上传一个文件（base64 形式）到用户的文件中转站。

        仅在用户明确要求把某个文件存入中转站 / 传输到其他设备 / 分享给他人时调用。
        上传会占用用户的付费存储配额并按传输量扣 credit —— 不要主动上传
        中间结果、日志、临时文件或用户没有要求保存的命令输出。

        用 init + 单次分片 + complete 的方式复用现有服务。
        适合中小文件（< 20MB）。超大文件请使用 Web 端分片上传。

        新增 folder_path: 上传到指定文件夹, 默认根目录 "/"。

Input parameters:

- `auto_create_folders` (boolean): 路径不存在时是否自动 mkdir -p, 默认 True (类似 Linux mkdir -p)
- `content_base64` (string, required): 文件内容的 base64 编码。较大文件建议分多次调用前先咨询管理员。
- `filename` (string, required): 文件名（含扩展名）
- `folder_path` (string): 目标文件夹路径。'/' = 根目录 (默认); '/工作/2026' = 嵌套路径。auto_create_folders=True 时路径不存在会 mkdir -p; auto_create_folders=False 时不存在抛错。
- `mime_type` (string)

### `upload_init` (~218 tokens)

发起分片上传会话 (第 1 步 / 共 3 步)。

        返回:
          - instant=true 时, file 字段是已秒传的文件元数据, 直接用即可
          - instant=false 时, 用 session_uuid + 服务端给的 chunk_size/total_chunks
            逐片调 upload_chunk, 最后调 upload_complete。

Input parameters:

- `auto_create_folders` (boolean): 路径不存在时是否自动 mkdir -p
- `filename` (string, required): 文件名（含扩展名）
- `folder_path` (string): 目标文件夹路径, 默认 '/' 即根目录。auto_create_folders=True 时会按 mkdir -p 语义自动建。
- `mime_type` (string)
- `sha256` (string, required): 整个文件的 sha256 (64 位小写十六进制); 服务端用这个做秒传命中
- `total_size_bytes` (integer, required): 整个文件的字节数

### `upload_chunk` (~168 tokens)

上传单个分片 (第 2 步 / 共 3 步)。

        可并发调用, 后端内部会记录已上传索引。网络抖动重试同一 chunk_index
        安全 (服务端幂等写临时块)。

Input parameters:

- `chunk_index` (integer, required): 分片索引 (0-based), 最后一片索引 = total_chunks-1
- `data_base64` (string, required): 本片字节的 base64 编码。每片大小应等于 upload_init 返回的 chunk_size, 最后一片可能短。单次调用建议 <12MB base64 (约 8-9MB 原字节)。
- `session_uuid` (string, required): upload_init 返回的会话 UUID

### `upload_complete` (~246 tokens)

合并所有分片 (第 3 步 / 共 3 步)。

        两种路径:
          - 直传 (推荐, shim 走这条): parts 带齐所有 (part_number, etag),
            后端调 OSS CompleteMultipartUpload 服务端合并, 不耗 ECS 内存/带宽。
          - 中转 (兼容老 shim / 网页端): 不传 parts, 从临时分片合并。

        返回最终 file 元数据 (id, uuid, filename, size_bytes, sha256, ...).

Input parameters:

- `parts`: 【OSS 直传模式】每片对应的 (part_number, etag)。如: [{"part_number": 1, "etag": "abc..."}, ...]。shim 在 PUT 每片到 OSS 后从响应头拿到 ETag, 传回来。传了 parts 走 OSS CompleteMultipartUpload 合并 (字节不经 ECS)。不传则走老路: 从 upload_chunk 落地的…
- `session_uuid` (string, required): upload_init 返回的会话 UUID

### `download_file` (~454 tokens)

下载一个文件, 按 MCP spec 2025-06-18 的原生 content 类型返回。

        根据文件 category 自动选择最合适的 MCP content block 类型:
        - image (jpg/png/webp/...)  → content[0].type = "image"
          (base64 + mimeType; AI 客户端原生显示图片, 多模态 LLM 可直接看图)
        - audio (mp3/wav/...)       → content[0].type = "audio"
          (base64 + mimeType; AI 客户端原生播放, 多模态模型可直接听)
        - text/code + as_text=true  → content[0].type = "text"
          (UTF-8 字符串; 适合代码/文档阅读分析)
        - 其他所有 (video / document / archive / 大文本 / ...)
                                    → content[0].type = "resource_link"
          (15 分钟有效的 URL + mimeType + size; 签名自带, 无需 Authorization;
           AI 用 bash curl 拉字节, 或提示用户点链接在浏览器下载)

        【限速】所有分支都遵守会员档位的 download_speed_bytes_per_sec 设定:
          - image / audio / text 分支走 astream_file(throttle=...) 读字节再 base64
          - resource_link 分支: 链接指向 /api/v1/mcp-download/{token}, 目标路由
            也用同一套 astream_file + throttle 算法 (详见 api/v1/mcp_download.py)

        【零副作用】不再使用 share_service.create_share —— MCP 下载不会在你的
        账号里留下任何公开分享记录, 不进分享面板, 不计分享审计。

Input parameters:

- `as_text` (boolean): 【仅文本/代码文件】直接返 UTF-8 字符串文本内容。图片/音频等非文本文件不受此参数影响(它们按 MCP 原生 content type 返回)。
- `file_id`
- `file_uuid`

### `create_share_link` (~66 tokens)

为文件生成一个分享链接。

Input parameters:

- `expires_in_seconds`: 多少秒后过期；不传=永久
- `file_id` (integer, required): 要分享的文件 ID
- `max_downloads`: 最多下载次数
- `password`: 可选密码

### `download_shared_file` (~128 tokens)

通过分享链接下载文件（无需是文件拥有者）。

        适合别人发给你一个 /s/<uuid> 链接,你想让 AI 直接读取其内容的场景。
        不会占用你的存储配额。下载计入分享者的月流量。

Input parameters:

- `as_text` (boolean): 对文本/代码文件直接返回字符串，不做 base64
- `password`: 分享密码，如有
- `share_uuid` (string, required): 分享链接的 UUID（分享 URL 最后一段，如 /s/<uuid>）

### `import_shared_file` (~127 tokens)

把别人分享的文件导入到当前登录用户的文件列表。

        等价于「下载后再上传」,但服务端直接从源文件拷贝字节流、仍走配额/白名单/秒传检查,
        所以比本地往返更快、也不消耗带宽。
        下载量计入分享者的月流量;存储占用计入当前用户的配额。

Input parameters:

- `password`: 分享密码,如有
- `share_uuid` (string, required): 分享链接的 UUID

### `list_folders` (~107 tokens)

列出文件夹 (类似 ``ls -d`` 只看目录)。

        路径不存在抛 folder_not_found。要列文件用 list_files。

Input parameters:

- `folder_path` (string): 父文件夹路径, 默认 '/' 即根目录。返回直接子文件夹列表 (不含其文件).
- `recursive` (boolean): True 时返回整棵子树 (深度遍历)。默认 False — 只列直接子文件夹.

### `create_folder` (~102 tokens)

创建文件夹 (类似 ``mkdir -p``)。

        幂等: 如果路径已经存在, 直接返回该文件夹元数据, 不抛错。

Input parameters:

- `folder_path` (string, required): 要创建的完整路径, 形如 '/工作/项目A/2026'。中间路径不存在时按 mkdir -p 语义递归创建; 末端已存在时直接返回原文件夹 (幂等).

### `move_file` (~116 tokens)

把文件挪到指定文件夹 (类似 ``mv file /target/dir/``)。

        OSS 字节不动, 只改逻辑路径, 操作几毫秒完成。

Input parameters:

- `auto_create_folders` (boolean): 目标路径不存在时是否 mkdir -p
- `file_id` (integer, required): 要移动的文件 ID
- `target_folder_path` (string, required): 目标文件夹路径, 形如 '/归档/2026'。'/' 即移到根目录.

### `move_folder` (~133 tokens)

移动整个文件夹 (类似 ``mv /工作/项目A /归档/``)。

        会递归更新所有后代的逻辑路径。OSS 字节不动。

Input parameters:

- `auto_create_folders` (boolean): 目标父路径不存在时是否 mkdir -p
- `folder_path` (string, required): 要移动的文件夹完整路径, 如 '/工作/项目A'
- `target_parent_path` (string, required): 新父文件夹路径。'/' 即移到根目录。若也想改名, 用 rename_folder 工具 (不在此工具中合并).

### `rename_folder` (~55 tokens)

改名 (不动 parent)。

Input parameters:

- `folder_path` (string, required): 要改名的文件夹完整路径
- `new_name` (string, required): 新名字 (不含 / )。同 parent 下不能重名.

### `delete_folder` (~142 tokens)

删除文件夹 (类似 ``rmdir`` 或 ``rm -r``)。

        内部 ready/locked 文件按"软删进回收站"处理, 30 天后才物删 OSS 字节;
        用户可在该窗口期内通过回收站恢复。

Input parameters:

- `folder_path` (string, required): 要删除的文件夹完整路径
- `recursive` (boolean): False (默认): 文件夹必须为空 (无子文件夹 + 无文件), 否则报 folder_not_empty。True: 递归删除整棵子树, 内部所有文件软删进回收站 (类似 rm -rf).

### `delete_folders` (~141 tokens)

批量删除文件夹 (delete_folder 的批量版)。

        逐个删除, 单个失败不影响其余; 返回每个路径的结果。
        文件按软删进回收站处理, 30 天内可在网页端恢复。

Input parameters:

- `folder_paths` (array, required): 要删除的文件夹完整路径列表, 单次最多 50 个
- `recursive` (boolean): True (默认): 递归删除每棵子树, 内部文件软删进回收站 (类似 rm -rf)。False: 仅删除空文件夹, 非空的报 folder_not_empty.

### `get_folder_tree` (~186 tokens)

以 ASCII 树状图返回用户的文件夹/文件层级 (推荐: 用户问“目录结构”时用这个).

        返回:
          {
            "root_path": "/",
            "tree": "ASCII 字符串",
            "stats": {"folders": N, "files": M, "truncated": bool}
          }

Input parameters:

- `folder_path` (string): 起始路径, 默认 '/' 即整个用户文件树。
- `include_files` (boolean): True 时把文件也画进树, False 只画目录。
- `max_depth` (integer): 最大渲染深度, 默认 10. 超出深度的节点显示为 '...'.
- `max_nodes` (integer): 最大渲染节点数 (文件+文件夹合计). 超出后用 'N more...' 截断.

### `scrape_url` (~121 tokens)

抓取一个公开网页，返回干净的 Markdown（供 AI 阅读/总结/提取）。

        只抓公开网页，禁止内网/保留地址；不生成任何内容，只做抓取与格式转换。

Input parameters:

- `formats`: 输出格式子集：markdown / html / text，默认 markdown
- `only_main_content` (boolean): 只提取正文主体，去掉导航/广告/页脚
- `url` (string, required): 要抓取的网页 URL（http/https，仅限公开网页）

### `file_read` (~108 tokens)

直接返回文本类文件的内容（txt/md/csv/json/日志/代码等），AI 免下载即读。

        二进制文件（图片/压缩包/Office 等）请用 download_file；超长文本按 max_bytes 截断并标记。

Input parameters:

- `file_id` (integer, required): 要读取的文本类文件 ID
- `max_bytes` (integer): 最多返回字节数（默认 200KB，上限 500KB）

### `zip_files` (~104 tokens)

把多个文件打包成一个 ZIP，存入文件中转站并返 15 分钟下载 URL。

        单包上限 50 个文件 / 200MB 原始体积；同名文件自动加序号。

Input parameters:

- `file_ids` (array, required): 要打包的文件 ID 列表（1-50 个）
- `zip_name` (string): 压缩包文件名（可选，自动补 .zip）

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay#diagnostics

## Score history

- 2026-08-04: 67
- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 65
- 2026-07-31: 65
- 2026-07-30: 63
- 2026-07-29: 63
- 2026-07-28: 62
- 2026-07-27: 61
- 2026-07-26: 61

## Links

- Remote endpoint: https://stagenth.com/mcp/file-relay/
- Authorisation metadata: https://stagenth.com/.well-known/oauth-protected-resource/mcp/file-relay
- Changelog RSS feed: https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-stagenth-file-relay/mcp-file-relay
