mcpField
M
mediafleet

mediafleet

本地服务
github.com/CloudCorpRecords游戏娱乐01 周前更新

关于 mediafleet

mediafleet 是用于编排已配置自托管媒体服务的 MCP 服务和命令行工具。它通过单个 JavaScript 沙盒工具调用多个服务,并可在一次运行中合并结果。

主要功能

  1. 01单个 MCP 工具运行 JavaScript 沙盒
  2. 02跨已配置媒体服务发起调用
  3. 03支持 GET、POST、PUT 和 DELETE 请求
  4. 04保存进程内代码片段
  5. 05返回生成的文件与捕获的日志

适用场景

  1. 01合并查询 Sonarr 和 Plex
  2. 02检查已配置服务的状态
  3. 03保存并重跑媒体工作流

MCP 相关

提供 `yarr` 工具,在沙盒中运行异步 JavaScript 函数,并将已配置的媒体服务作为可调用对象提供。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-mediafleet": {
"command": "npx",
"args": [
"-y",
"@reneturcios/mediafleet"
]
}
}
}
启动命令npx -y @reneturcios/mediafleet

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/mediafleet0.1.0
ocighcr.io/cloudcorprecords/mediafleet:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
codestring是要在沙盒中执行的 JavaScript 异步箭头函数。

详细介绍

mediafleet

mediafleet 将整套可自托管媒体服务栈整合到一个 MCP 工具之后。无需为每项服务的每种操作分别提供一个工具,服务端只公开一个 Code Mode 工具 yarr:你向它传入一个 JavaScript 异步箭头 函数,它会在沙箱中运行,沙箱的全局变量是你配置的媒体服务对应的可调用对象——Sonarr、Radarr、Prowlarr、Tautulli、 Overseerr、Bazarr、SABnzbd、qBittorrent、Plex 和 Jellyfin。一次 调用即可查询三项服务、合并答案,并返回一个组合结果。

此软件包是对已记录功能界面进行的干净室重建。它实现了完整的已记录核心功能:下文所述的单个工具、沙箱全局变量、操作分发和代码片段存储。

配置

通过环境变量启用服务:

变量含义
YARR_SERVICES以逗号分隔的已配置服务列表。未设置时,任何设置了 URL 变量的服务都视为已配置。
YARR_<SERVICE>_URL基础 URL,例如 YARR_SONARR_URL=http://localhost:8989。
YARR_<SERVICE>_API_KEYAPI 密钥,通过 X-Api-Key 标头发送。
YARR_PLEX_TOKENPlex 的凭据,通过 X-Plex-Token 标头发送。

沙箱中只会出现已配置的服务。未配置的名称不会在其中定义,api.<service> 也不会为它们提供。

沙箱

code 参数是一个异步箭头函数。调用时不传入参数(运行代码片段时会传入输入;见下文),其返回值会被规范化为纯 JSON 形式的数据,并与写入的所有资源以及运行期间捕获的所有控制台输出一起,成为工具结果。

代码可用的全局变量:

  • 每个服务对应的可调用对象——sonarr、radarr 等。调用其中一个会执行 GET 请求(await sonarr("/api/v3/series"));此外还附带 .get、.post、.put 和 .delete(path, body),以及 .status(),后者会探测服务的常规状态端点,并返回 {service, ok, status} 或 {service, ok: false, error}。
  • api.<service>.get/post/put/delete(path, body)——每个已配置服务对应的显式 HTTP 接口。
  • callTool(action, params)——用于分发已记录的操作。通用操作:service_status({service?})、api_get、api_post、api_put、api_delete(各自接受 {service, path, body?})和 help。Codemode 操作:codemode({code, input?} 会运行嵌套代码,否则返回摘要)、op(传入 {path} 描述操作,传入 {name, input?} 运行代码片段,传入 {code, input?} 运行代码)、snippet_list、snippet_save({name, code})、snippet_run({name, input?})和 snippet_delete({name})。
  • codemode.search(query)——在服务、API 路径、操作和辅助函数目录中进行子字符串搜索。
  • codemode.describe(path)——返回某个路径对应的目录条目,例如 codemode.describe("api.sonarr.get")。
  • codemode.snippets()——列出存储中的代码片段。
  • codemode.run(name, input)——运行已保存的代码片段;其函数会接收 input 作为参数。
  • writeArtifact(name, content)——存储命名的文本资源;运行期间写入的所有内容都会随该次运行的结果一并返回。
  • console.log/info/warn/error——输出会被捕获并作为运行结果的 logs 返回,绝不会写入服务端的标准输出。

代码片段存储在每个进程独有的内存存储中:在服务端进程的生命周期内会跨调用保留,进程退出后即会消失。

有两点需要如实说明:沙箱使用 node:vm,它能隔离全局变量(其中没有 process 或 require),但并非经过加固的安全边界;破坏性动词也不会受到特别限制——如果代码发出 DELETE 请求,mediafleet 就会按原样执行。

安装

npx @reneturcios/mediafleet yarr '{"code":"async () => { return await callTool(\"help\"); }"}'

或者运行容器镜像:

docker run -i ghcr.io/cloudcorprecords/mediafleet

容器默认启动 MCP 服务。传入 CLI 参数即可将其用作 CLI。请记得将 YARR_* 环境变量传递给运行服务端的进程。

命令行

mediafleet yarr '{"code":"async () => { return await api.sonarr.get(\"/api/v3/system/status\"); }"}'
mediafleet yarr '{"code":"async () => { const s = await callTool(\"service_status\"); return s; }"}'
mediafleet --version
mediafleet mcp

退出代码:成功时为 0,执行或验证错误时为 1, 用法错误时为 2。

MCP 客户端配置

{
  "mcpServers": {
    "mediafleet": {
      "command": "npx",
      "args": ["-y", "@reneturcios/mediafleet", "mcp"],
      "env": {
        "YARR_SERVICES": "sonarr,radarr,plex",
        "YARR_SONARR_URL": "http://localhost:8989",
        "YARR_SONARR_API_KEY": "…",
        "YARR_RADARR_URL": "http://localhost:7878",
        "YARR_RADARR_API_KEY": "…",
        "YARR_PLEX_URL": "http://localhost:32400",
        "YARR_PLEX_TOKEN": "…"
      }
    }
  }
}

MCP 工具

工具参数功能
yarrcode: string(必填)在 Code Mode 沙箱中执行异步箭头函数,并返回 {result, artifacts, logs}。

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts — fake executor and fake fetch only, no network
npm run dev     # tsx src/cli.ts

所有服务流量都通过单个可注入的执行器函数处理,默认执行器的 HTTP 请求则通过可注入的 fetch 处理,因此测试套件能够在无需连接实时服务的情况下测试整个功能面,包括 URL 和标头的构建。

许可证

MIT — 详见 LICENSE。版权所有 (c) 2026 Rene Turcios。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。