Mirobody
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
作者提供的说明(英文原文)
Health doctor for a home AI stack: Ollama nodes, GPUs and tailnet, with graded confidence.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
STACK_GUARDIAN_NODES你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"stack-guardian": {
"command": "uvx",
"args": [
"stack-guardian",
"mcp"
],
"env": {
"STACK_GUARDIAN_NODES": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add stack-guardian --env STACK_GUARDIAN_NODES=your-value -- uvx stack-guardian mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"stack-guardian": {
"command": "uvx",
"args": [
"stack-guardian",
"mcp"
],
"env": {
"STACK_GUARDIAN_NODES": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"stack-guardian": {
"type": "stdio",
"command": "uvx",
"args": [
"stack-guardian",
"mcp"
],
"env": {
"STACK_GUARDIAN_NODES": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 LuminariSoftwares 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:STACK_GUARDIAN_NODES
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.4.0)于13天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Mirobody, FHIR MCP Server, Google Health MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.
MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications
Privacy-first unofficial Google Health API v4 MCP server for health, sleep, activity, HR agents
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Status: active development -- changelog
mcp-name: io.github.LuminariSoftwares/stack-guardian
14 health checks, one command: the example stack exits 2 with 4 FAIL findings, on purpose.
A health doctor for a home AI stack -- Ollama or OpenAI-compatible nodes, NVIDIA GPUs, tailnet peers -- with graded, evidence-backed findings.
macOS / Linux (offline example run, Python 3.11+):
pip install stack-guardian
curl -LO https://raw.githubusercontent.com/LuminariSoftwares/stack-guardian/main/examples/snapshot.json curl -LO https://raw.githubusercontent.com/LuminariSoftwares/stack-guardian/main/examples/ctx.json stack-guardian doctor --snapshot snapshot.json --ctx ctx.json
Windows (PowerShell), or anywhere you would rather not touch the system Python
pipx install stack-guardian
curl.exe -LO https://raw.githubusercontent.com/LuminariSoftwares/stack-guardian/main/examples/snapshot.json curl.exe -LO https://raw.githubusercontent.com/LuminariSoftwares/stack-guardian/main/examples/ctx.json stack-guardian doctor --snapshot snapshot.json --ctx ctx.json
pipx puts it in its own virtualenv and on your PATH (pip install pipx if you do not have it). uvx stack-guardian doctor --snapshot snapshot.json runs it without installing anything at all.
The example snapshot makes every shipped rule fire once, so you see each finding type without touching a real stack. The command exits 2 because the example contains FAIL findings; that is the expected result. Each line ends with the confidence grade - one run is at most (LIKELY), the same finding on a second run is (VERIFIED).
Point it at your own machines next:
stack-guardian init # writes nodes.json for this machine; never overwrites one
stack-guardian doctor --nodes nodes.json
init probes http://127.0.0.1:11434 to see whether Ollama is answering, and lists your tailnet peers (if tailscale is on PATH) as commented-out candidates you can move up into the file. Edit it by hand from there; the shape is in examples/nodes.json and under What it does.
From a clone instead (for writing rules or running the tests):
git clone https://github.com/LuminariSoftwares/stack-guardian.git
cd stack-guardian python -m venv .venv .venv\Scripts\activate # Windows; macOS/Linux: source .venv/bin/activate pip install -e ".[test]" # drop [test] if you only want to run it, not test it stack-guardian doctor --snapshot examples/snapshot.json --ctx examples/ctx.json python -m pytest -q
stack-guardian doctor --snapshot snapshot.json --ctx ctx.json
Run 2026-11-05 on stack-guardian 0.4.0 ( ): the command exits 2, prints worst: FAIL, and ends with:
stack-guardian: 8 finding(s) are LIKELY on one run: run again to confirm them as VERIFIED
14 findings on the example snapshot: 4 FAIL, 4 WARN, 6 INFO. The 14 checks that ship are counted from the installed package: stack-guardian 0.4.0 checks loaded from installed package: 14
Tests, 2026-11-05 ( ): 171 passed in 61.00s (0:01:00)
Standard library only, Python 3.11+, no runtime dependencies. GPUs: NVIDIA only, and only on the machine running stack-guardian.
A health doctor for a home AI stack. It collects a snapshot of your nodes (Ollama or OpenAI-compatible endpoints, loaded models, NVIDIA GPUs, tailnet peers), runs small Python rules against it, remembers the last runs, and reports findings with a confidence grade: one sample is at most LIKELY, the same finding twice in a row is VERIFIED. It exists because "the model is slow" on a multi-machine local stack has a dozen possible causes, and an agent or a person should get a graded, evidence-backed answer instead of a guess. A finding can carry a typed fix that you run on purpose, never automatically. It ships as a CLI, an MCP server for coding agents, a tiny HTTP endpoint with Prometheus metrics, and a DeepSeek Harness (DSH) plugin.
Two runs against examples/nodes.json with one state file:
# run 1
FAIL ollama.unreachable [gpu-box-2]: 1 Ollama endpoint(s) do not answer: http://100.64.0.2:11434 (LIKELY) FAIL ollama.unreachable [home-server]: 1 Ollama endpoint(s) do not answer: http://100.64.0.3:11434 (LIKELY) FAIL tailnet.peer_offline [home-server]: tailnet peer offline: home-server (LIKELY) WARN model.expiring [gpu-box]: 1 loaded model(s) unload within 60s: qwen3:8b (LIKELY) OK ollama.answering [gpu-box]: 1 endpoint(s) answer: http://127.0.0.1:11434 worst: FAIL
FAIL ollama.unreachable [gpu-box-2]: 1 Ollama endpoint(s) do not answer: http://100.64.0.2:11434 (VERIFIED) FAIL ollama.unreachable [home-server]: 1 Ollama endpoint(s) do not answer: http://100.64.0.3:11434 (VERIFIED) FAIL tailnet.peer_offline [home-server]: tailnet peer offline: home-server (VERIFIED) WARN model.expiring [gpu-box]: 1 loaded model(s) unload within 60s: qwen3:8b (VERIFIED) OK ollama.answering [gpu-box]: 1 endpoint(s) answer: http://127.0.0.1:11434 worst: FAIL
<!-- demo-report:end -->
That is the real output of python examples/demo_report.py: the shipped collector and rules, with a stub Ollama on 127.0.0.1 answering for gpu-box, the two placeholder tailnet addresses never contacted, and sample nvidia-smi and tailscale output so it prints the same on any machine. The shipped rules only report problems; the OK line comes from a small rule inside the script. A test fails if this block and the script disagree.
Why the grade. One run can make a finding at most LIKELY; the same finding on two runs in a row makes it VERIFIED; passing checks are not graded. On a home network a sleeping laptop, a Wi-Fi drop or a model being reloaded looks broken for a few seconds, so one bad sample is reported as a likely problem and only what persists is reported as fact.
Standard library only, Python 3.11+, no runtime dependencies.
One of four small, independent tools for people running local models: see The guardian family.
*Not affiliated with StackGuardian, the infrastructure-automation company. Same word, unrelated projects.*
flowchart LR
nodes["nodes.json"] --> collect subgraph collect["collect: one snapshot, all nodes in parallel"] direction TB ol["Ollama /api/tags, /api/ps OpenAI-compatible /v1/models"] gpu["nvidia-smi (local node only)"] ts["tailscale status --json"] end collect --> snap[("snapshot dict")] snap --> rules["checks.d/*.py rules run concurrently; a crash becomes check.crashed"] rules --> grade["state.grade LIKELY until seen twice, then VERIFIED"] hist[("state.json last 5 runs per node")] <--> grade grade --> cli["CLI: doctor exit 0 / 1 / 2"] grade --> mcp["MCP stdio server read-only, never records"] grade --> http["serve: /snapshot, /metrics"] grade -.->|"finding.fix"| fix["doctor --fix ID dry run unless --apply; snapshot + audit line"]
| module | job |
|---|---|
collect.py, multinode.py, parsers.py | probe every node in parallel under one deadline; parse Ollama, OpenAI-compatible, nvidia-smi and tailscale output into one snapshot dict. A dead endpoint is data, never an exception. |
core.py, finding.py, checks.d/ | load rule files, run them concurrently, and build findings with a fixed shape (code, severity, level, node, summary, evidence, try, confidence, fix). |
state.py | keep the last runs per node and grade confidence from streaks. |
fixes.py | the three typed fix actions, their dry-run plan, snapshot and audit line. |
cli.py, mcp_server.py, serve.py | the three front ends over the same doctor. |
Each is written up with its alternatives in docs/adr/.
pip install pulls nothing else, so it installs on any machine with Python 3.11. Trade-off: the HTTP client, JSON-RPC loop and Prometheus renderer are hand-written and have to be tested here.(snapshot, ctx) -> finding | list | None; a rule that raises becomes a check.crashed WARN, so a buggy rule never reports a broken stack. Trade-off: rules run in-process with your privileges; only load rule folders you trust.LIKELY; two bad runs in a row are VERIFIED. Trade-off: a real outage needs a second run before it is VERIFIED, and the history is a local file.--apply, and every applied fix leaves a snapshot and an audit line. Trade-off: anything outside the three actions has to be done by hand.serve binds to loopback unless told otherwise. Trade-off: an agent can diagnose but must hand the fix back to a person.stack-guardian-mcp speaks MCP over stdio with three read-only tools, stack_health, stack_snapshot and stack_explain. See MCP server for client configs and the tool reference.npm install dsh-stack-guardian, source in dsh/, Node 20+): adds one line at the start of a DeepSeek Harness session when the doctor reports WARN or FAIL, and nothing otherwise. It runs stack-guardian doctor --json --quiet, so set STACK_GUARDIAN_NODES to your nodes file in the harness environment.stack-guardian doctor --watch 30 --json prints one JSON object per finding that changes state (new, resolved, severity change), so an agent can tail it; stack-guardian-serve --nodes FILE also answers GET /metrics in Prometheus text format.stack-guardian-mcp (also stack-guardian mcp) speaks MCP over stdio (JSON-RPC 2.0, protocol 2024-11-05). It needs a nodes file (examples/nodes.json); give its path with --nodes FILE or the STACK_GUARDIAN_NODES environment variable. Optional: --ctx FILE (rule settings), --state FILE (run history to grade against), --ttl SECONDS (how long one snapshot is reused, default 10).
Run it without installing anything:
uvx stack-guardian mcp --nodes /path/to/nodes.json
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": { "stack-guardian": { "command": "uvx", "args": ["stack-guardian", "mcp"], "env": {"STACK_GUARDIAN_NODE
只显示了开头部分;其余内容请在仓库中阅读