Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
MCP server for Veeam Backup for Microsoft 365: read-only review + gated, audited restore tier.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
VB365_HOST, VB365_USERNAME, VB365_PASSWORD标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"tractorbeeam": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VB365_HOST",
"-e",
"VB365_USERNAME",
"-e",
"VB365_PASSWORD",
"ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0"
],
"env": {
"VB365_HOST": "your-value",
"VB365_USERNAME": "your-value",
"VB365_PASSWORD": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add tractorbeeam --env VB365_HOST=your-value --env VB365_USERNAME=your-value --env VB365_PASSWORD=your-value -- docker run -i --rm -e VB365_HOST -e VB365_USERNAME -e VB365_PASSWORD ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"tractorbeeam": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VB365_HOST",
"-e",
"VB365_USERNAME",
"-e",
"VB365_PASSWORD",
"ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0"
],
"env": {
"VB365_HOST": "your-value",
"VB365_USERNAME": "your-value",
"VB365_PASSWORD": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"tractorbeeam": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VB365_HOST",
"-e",
"VB365_USERNAME",
"-e",
"VB365_PASSWORD",
"ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0"
],
"env": {
"VB365_HOST": "your-value",
"VB365_USERNAME": "your-value",
"VB365_PASSWORD": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 Ringosystems 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:VB365_HOST, VB365_USERNAME, VB365_PASSWORD
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(2.2.0)于4个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Docker。
同一分类中有:Spec Driven Development, Remote Desktop Commander, SwarmMemo
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Talk with agent swarms: rooms, private messages and paid tasks for AI agents
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
A Model Context Protocol server for Veeam Backup for Microsoft 365 (VB365). It talks directly to the VB365 REST API so an MCP client (Claude Code / Claude Desktop) can review your backup configuration, find protection gaps, spot trends, verify cloud immutability — and, when you explicitly opt in, run jobs and orchestrate restores.
**Independent project — not affiliated with, endorsed by, or supported by Veeam
Software.** "Veeam" is a registered trademark of Veeam Software; the "Beeam"
spelling is a deliberate, distinct play on words. Use at your own risk.
🔱 The name: a *tractor beam* pulls your data back in — and *Beeam* winks at the
backup product underneath. Read-only review is the safe default; the "pull"
(restore/actions) is opt-in.
| Tier | Default | What it can do |
|---|---|---|
| Read-only review | ✅ always on | GET-only. Cannot change anything. Config/health, gap-analysis, trends, cloud-lock cross-check. |
| Action / Restore | ⛔ off | Opt-in via TB_* env flags. Run/stop jobs, generate reports, sync orgs, define + execute restores. Every write is confirm-token gated and audited. |
If you never set the TB_* flags, this is a pure read-only reviewer that *physically cannot* modify your environment — the action/restore tools aren't even registered.
No clone or build required. From v2.2.0 the image is published multi-arch (amd64 + arm64) to GitHub Container Registry and Docker Hub, so it runs natively on x86 servers, Apple Silicon, and ARM boxes (Raspberry Pi, ARM cloud). On an ARM host, pin the :2.2.0 (or later) tag until a multi-arch :latest has been published.
Grab two files and start it:
curl -fsSLO https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/docker-compose.deploy.yml
curl -fsSL https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/.env.example -o .env
docker compose -f docker-compose.deploy.yml up -d
MCP is then live at http:// :8766/mcp. Attach a client with the bearer token you set:
claude mcp add --transport http tractorbeeam365 http://<host>:8766/mcp \
--header "Authorization: Bearer "
Update later:
docker compose -f docker-compose.deploy.yml pull && docker compose -f docker-compose.deploy.yml up -d
In Unraid open Docker → Add Container, and paste this template URL into the Template field:
https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/deploy/unraid/tractorbeeam365.xml
Fill in VB365_HOST, VB365_USERNAME, VB365_PASSWORD, and a long MCP_AUTH_TOKEN, then Apply. The audit and downloads folders map under /mnt/user/appdata/tractorbeeam365/.
For a client that launches the server itself, run the image on demand over stdio:
docker run -i --rm \
-e VB365_HOST=... -e VB365_USERNAME=... -e VB365_PASSWORD=... \ ghcr.io/ringosystems/tractorbeeam-mcp:latest
| Tool | What it returns |
|---|---|
vb365_health_summary | One-shot review: orgs, jobs + last status, repos, cloud storage (B2/S3/Azure), proxies, license, trend anomalies, and a flags list. Start here. |
vb365_trends | Per-job success/failure drift, repo capacity-full projection, restore-test cadence per org, RPO compliance. |
gap_coverage_summary / gap_unprotected_objects | Backup coverage % and unprotected live M365 objects, by comparing Microsoft Graph against what jobs protect *(needs GRAPH_*)*. |
cloud_lock_audit | Cross-checks Object Lock mode/retention/versioning at the bucket vs what VB365 reports *(needs B2_*/S3_*)*. |
vb365_api_root | Resource list + version (confirms connectivity). |
vb365_list_organizations / vb365_org_inventory | Protected orgs; an org's users/groups/sites/teams. |
vb365_list_jobs / vb365_get_job / vb365_job_scope | Jobs, one job's config, and exactly what a job protects (selected/excluded). |
vb365_list_job_sessions | Recent run results (optionally per job). |
vb365_list_repositories / vb365_list_restore_points | Repos (capacity/retention/immutability); restore points. |
vb365_list_object_storage / vb365_get_object_storage | Cloud/object storage (B2/S3/Azure/Wasabi/IBM/Glacier). |
vb365_list_proxies / vb365_license | Proxies + status; license/edition/expiry. |
vb365_get | Read-only GET to any other / /... resource. |
Registered only when the matching flag is set. Two-call confirm pattern: call once to get a preview + a one-time confirm_token; call again with confirm= to execute. Every execution is appended to TB_AUDIT_LOG.
| Tool (flag) | What it does |
|---|---|
action_job (TB_ALLOW_JOB_CONTROL) | start / stop / enable / disable a backup job |
action_generate_report (TB_ALLOW_REPORTS) | mailbox/onedrive/sharepoint/teams/user protection, license, storage reports → file |
action_org_sync (TB_ALLOW_ORG_SYNC) | trigger a directory resync for an org |
action_proxy (TB_ALLOW_PROXY) | rescan / maintenance-mode a proxy |
restore_session_start → restore_browse / restore_search → restore_define → restore_execute → restore_status → restore_session_stop (TB_ALLOW_RESTORE) | Full restore orchestration across Exchange / OneDrive / SharePoint / Teams: open a point-in-time session, browse/search restorable items, then define (pick items + target + options) and execute a restore. |
restore_session_start(scope="job", scope_id="<jobId>", workload="exchange")
→ { session_id } # opens a point-in-time explore session restore_browse(session_id) # list mailboxes restore_browse(session_id, parent_id= ) # list items in a mailbox restore_define(session_id, parent_id= , item_ids=[...], target="export") → { confirm_token, preview } # DRY RUN — nothing changed restore_execute(session_id, confirm= ) # executes + audits restore_session_stop(session_id)
export (safest — reads backup to a local file; no M365 creds), alternate (writes to a *different* M365 location), or original (writes back to the original location — destructive; also pass confirm_overwrite_original=True).mailbox/folder and the M365 target credentials VB365 uses to write back (userName/userPassword/applicationId), or set VB365_RESTORE_* in .env.exportToPst returns a server-side error. python -m venv .venv
.\.venv\Scripts\Activate.ps1 pip install -r requirements.txt
3. Copy `.env.example` to `.env` and fill in `VB365_HOST`, `VB365_USERNAME`,
VB365_PASSWORD (keep VB365_PORT=4443, VB365_API_VERSION=v8 unless yours differ). Optionally add GRAPH_*, B2_*/S3_*, and the TB_* flags.
The REST API account needs to be a VB365 administrator (or restore
operator) — VB365 has no read-only API role. The read-only review tools
are GET-only regardless.
New-VB365ReviewAccount.ps1creates a dedicated
service account on the VB365 server. Keep
.envout of source control.
# Replace <repo> with the absolute path to your clone.
claude mcp add tractorbeeam365 --scope user -- " \.venv\Scripts\python.exe" " \server.py"
On Linux/macOS use forward slashes and
/.venv/bin/python.
It is also published to the MCP Registry as io.github.Ringosystems/tractorbeeam-mcp (an OCI image on GHCR), so MCP clients that support the registry can install it directly. To run the published image as a stdio server:
docker run -i --rm \
-e VB365_HOST=... -e VB365_USERNAME=... -e VB365_PASSWORD=... \ ghcr.io/ringosystems/tractorbeeam-mcp:latest
Then ask: "Run a VB365 health summary and tell me if anything is misconfigured."
The action/restore tools stay hidden until you opt in. In .env:
TB_ENABLE_ACTIONS=true # master switch
TB_ALLOW_JOB_CONTROL=true # + any of the per-category flags you want TB_ALLOW_RESTORE=true TB_AUDIT_LOG=audit/actions.jsonl
The action/restore tools are not registered over an HTTP transport unless
you also set
TB_ALLOW_WRITE_OVER_HTTP=true, because that transport has no
per-caller identity. Run the operator tier over stdio, or only behind your own
authenticating reverse proxy.
Safety model: tools are only registered when enabled, every mutation needs a second call with a one-time confirm token, restores default to a safe target (original-location overwrite needs an explicit acknowledgement), and every action is written to an append-only audit log. Recommended: run a separate "operator" instance with the flags on, and the default instance read-only.
The image itself defaults to the stdio transport (so MCP clients can docker run -i it). Via docker compose it runs streamable-http on 0.0.0.0:8000 inside the container, read-only (no TB_* flags). No credentials are baked in. The HTTP transport fails closed: it refuses to start unless you set MCP_AUTH_TOKEN (clients then send Authorization: Bearer ), or you explicitly accept the risk with MCP_ALLOW_UNAUTHENTICATED_HTTP=true.
# Put MCP_AUTH_TOKEN=<a long random secret> in .env first.
docker compose up -d --build # builds locally and runs read-only
claude mcp add --transport http tractorbeeam365 http:// :8766/mcp \ --header "Authorization: Bearer "
Each GitHub Release publishes a multi-arch, multi-tag image via CI (.github/workflows/publish.yml) to GHCR, Docker Hub, and the MCP Registry. The full release runbook is in PUBLISHING.md.
# GitHub Container Registry (published automatically on every release):
docker pull ghcr.io/ringosystems/tractorbeeam-mcp:latest
docker pull ringosystems/tractorbeeam365-mcp:latest
To publish manually instead:
docker build -t <dockerhubuser>/tractorbeeam365-mcp:latest .
docker push /tractorbeeam365-mcp:latest
Security: the MCP HTTP transport has no per-caller identity. This build
binds loopback by default, requires
MCP_AUTH_TOKENbefore it will serve HTTP,
and hides the write/restore tools over HTTP unless
TB_ALLOW_WRITE_OVER_HTTP=true.
Still keep the port on a trusted network and front it with TLS + auth. The audit
log and any generated PST/report files live in the mounted
audit/and
downloads/volumes. See SECURITY.md.
.\.venv\Scripts\Activate.ps1
python -c "import server; print(server.vb365_api_root())"
.gitignore excludes .env, the venv, and the operator-tier audit/, downloads/, *.pst artifacts. Never commit credentials or restored data.VB365_VERIFY_SSL defaults to `fa只显示了开头部分;其余内容请在仓库中阅读