Mediafleet

io.github.CloudCorpRecords由 GitHub 账号 CloudCorpRecords 发布v0.1.0更新于 Nov 3, 2026

在沙箱中运行 JavaScript,以编排 Sonarr、Radarr、Plex 及其他媒体服务。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Run JavaScript in a sandbox to orchestrate Sonarr, Radarr, Plex and other media services.

已验证STDIO仅桌面

概览

Mediafleet 的本地 MCP 服务;无需登录;STDIO。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mediafleet,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

mediafleet

mediafleet puts a whole self-hosted media stack behind a single MCP tool. Instead of one tool per operation per service, the server exposes one Code Mode tool, yarr: you hand it a JavaScript async arrow function, and it runs in a sandbox whose globals are callables for the media services you configured — Sonarr, Radarr, Prowlarr, Tautulli, Overseerr, Bazarr, SABnzbd, qBittorrent, Plex and Jellyfin. A single call can query three services, combine the answers, and return one composed result.

This package is a clean-room rebuild of that documented surface. It implements the full documented core: the one tool, the sandbox globals, the action dispatch, and the snippet store described below.

Configuration

Services are opted in through the environment:

VariableMeaning
YARR_SERVICESComma-separated list of configured services. When unset, any service with a URL variable set counts as configured.
YARR_<SERVICE>_URLBase URL, e.g. YARR_SONARR_URL=http://localhost:8989.
YARR_<SERVICE>_API_KEYAPI key, sent as the X-Api-Key header.
YARR_PLEX_TOKENPlex's credential, sent as the X-Plex-Token header.

Only configured services appear in the sandbox. Unconfigured names are simply not defined there, and api.<service> is absent for them too.

The sandbox

The code argument is an async arrow function. It is invoked with no argument (snippet runs pass their input instead; see below) and its return value — normalised to plain JSON-shaped data — becomes the tool result, alongside any artifacts written and any console lines captured during the run.

Globals available to the code:

  • Per-service callables — sonarr, radarr, … Calling one performs a GET (await sonarr("/api/v3/series")); .get, .post, .put and .delete(path, body) are attached, plus .status(), which probes the service's conventional status endpoint and reports {service, ok, status} or {service, ok: false, error}.
  • api.<service>.get/post/put/delete(path, body) — the explicit HTTP surface for each configured service.
  • callTool(action, params) — dispatch for the documented actions. Generic: service_status ({service?}), api_get, api_post, api_put, api_delete (each {service, path, body?}) and help. Codemode: codemode ({code, input?} runs nested code, otherwise returns a summary), op (one of {path} to describe, {name, input?} to run a snippet, {code, input?} to run code), snippet_list, snippet_save ({name, code}), snippet_run ({name, input?}) and snippet_delete ({name}).
  • codemode.search(query) — substring-search the catalogue of services, api paths, actions and helpers.
  • codemode.describe(path) — return the catalogue entry for one path, e.g. codemode.describe("api.sonarr.get").
  • codemode.snippets() — list the snippets in the store.
  • codemode.run(name, input) — run a saved snippet; its function receives input as its argument.
  • writeArtifact(name, content) — store a named text artifact; everything written during a run is returned with that run's result.
  • console.log/info/warn/error — captured and returned as the run's logs, never written to the server's stdout.

Snippets live in a per-process in-memory store: they persist across calls for the life of the server process and are gone when it exits.

Two honest limits: the sandbox is node:vm, which isolates globals (there is no process or require inside) but is not a hardened security boundary; and destructive verbs are not specially gated — if the code issues a DELETE, mediafleet executes it, exactly as written.

Install

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

Or run the container image:

bash
docker run -i ghcr.io/cloudcorprecords/mediafleet

The container defaults to the MCP server. Pass CLI arguments to use it as a CLI instead. Remember to pass the YARR_* environment variables to whichever process runs the server.

CLI

bash
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 --versionmediafleet mcp

Exit codes: 0 on success, 1 on an execution or validation error, 2 on a usage error.

MCP client config

json
{  "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 tools

ToolArgumentsWhat it does
yarrcode: string (required)Execute the async arrow function in the Code Mode sandbox and return {result, artifacts, logs}.

Development

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

All service traffic goes through a single injectable executor function, and the default executor's HTTP goes through an injectable fetch, which is what lets the test suite exercise the whole surface — URL and header construction included — without a live service.

License

MIT — see LICENSE. Copyright (c) 2026 Rene Turcios.

来源:README.md,提交 8155277

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0最新Nov 3, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分