Mirobody

ai.thetahealth由 thetahealth.ai 发布v1.6.0更新于 Nov 7, 2026

Lab results to LOINC codes and UCUM units, symptoms and diagnoses to ICPC-3. Offline, no API key.

概览

AI 生成的概览

Mirobody 用于健康数据标准化:离线把化验项目名称、数值和单位映射到 LOINC 与 UCUM 编码,并把症状和诊断映射到 ICPC-3。

可以做什么
  • 把多种语言的检验项目名称、数值和单位解析为 LOINC 与 UCUM 编码
  • 把症状和诊断解析为 ICPC-3 编码
  • 读取个人健康记录:检验读数、用药、基因型与药物基因组学
  • 在部署配有知识源时检索医学参考资料
  • 基于已存记录回答趋势与对比问题,每个数字都可追溯到来源文件
适用场景
适合需要把杂乱的化验报告名称和单位规范化,或就个人健康记录提问(例如胆固醇随时间如何变化)的场景。仅使用离线解析器时不需要模型或 API 密钥。
运行要求
以 stdio 方式在本机运行,通常通过 uvx 和 Python 3.12 启动;首次运行需要联网下载软件包,之后解析器可离线工作。读取整份报告或查询记录需要完整应用部署(Docker Compose,或 PostgreSQL 16 与 Python 3.12),并且除非使用本地模型,否则需要模型 API 密钥。
安装前请注意
该服务器处理敏感的健康和基因数据;请确认记录与文档在何处处理,使用云端模型的路径会把文档和问题发送给模型服务商。完整应用可写入、导入和共享记录,家庭照护圈共享会让其他成员看到记录。它不做诊断或开药,其回答不构成医疗建议。

安装

在 SourceWeft 中

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

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

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[Mirobody]

Mirobody

Mirror your body in data.

One standard, every source, one complete picture of you — building a lasting record to understand where your health is going.
This open-source edition keeps that record on your own machine: lab reports, wearables and genetic files flow into it, and your AI agent can query it over MCP.

English · 中文 · 日本語

[PyPI] [License: Apache-2.0] [GitHub stars]

▶ Live demo · Try one command · Open in Codespaces · 100% local

[Asking how cholesterol has changed: the agent shows each step as it works, charts three reports that name the test differently as one trend, and clicking an underlined number opens the reading and the file it came from]

Three reports, three names for the same test. One trend, with the file behind every number.

Choose where to start

You want toStart hereWhat you need
Standardize names and units, in a terminal or inside your AI agentOne commanduv; no model or API key
Try the full app in your browserGitHub CodespacesA GitHub account and your own model API key
Keep the app, models and records on your machine100% local with DockerDocker with Compose; 16 GB memory; no API key
Keep the app and records on your machine, without DockerNo DockerDebian or Ubuntu; PostgreSQL 16; Python 3.12; your own model API key
Use it on your own records with nothing to runTry Mirobody in Theta Web, or in the Theta mobile appAn account

Try the engine with one command

With uv installed, paste this into your terminal:

bash
uvx --python 3.12 mirobody resolve "LDL cholesterol" 血红蛋白 ヘモグロビン "Total Kolesterol" 血脂

No repository clone, Docker, model or API key. uv prepares Python and the package for you; the first run needs a network connection to download them. The resolver then works offline from the bundled vocabulary.

血红蛋白 and ヘモグロビン both resolve to 718-7. 血脂 stays unresolved: it names a category, not one test. The same engine standardizes names and units across the full app.

[mirobody resolve: Chinese and Japanese names for haemoglobin resolve to the same LOINC code, while a broad category stays unresolved]

Give the same engine to your AI agent. In Claude Code:

bash
claude mcp add mirobody -- uvx --python 3.12 mirobody mcp

Your agent can then standardize any name, reading, unit or complaint you paste, on your machine and without a key. Reading a whole report also needs mirobody[parse] and a model key. Other MCP clients take the same command.

→ Use the engine from Python or MCP

Try the full app in Codespaces

Run the web app in your browser with your own model API key. GitHub prepares the environment; you do not need to install Docker or Python on your computer.

[Open in GitHub Codespaces]

  1. Create the codespace and wait for the automatic setup to finish in its terminal. It starts the app, Postgres, the worker and the synthetic demo data.
  2. Open the setup link printed in the terminal and enter your own model API key: OpenRouter, OpenAI, Gemini, Anthropic, DeepSeek, DashScope, or any OpenAI-compatible gateway. The key is saved only after a real request succeeds. The forwarded app port is private by default.
  3. Sign in as [email protected], code 111111, on the Email code tab. Ask "How has my cholesterol changed?" The demo holds 2,019 readings across your record and [email protected]'s, shared with you view-only.
  4. Upload a synthetic sample from demo/upload/ on the Data page to see a new report join the record, or switch to mom's record and ask again.

The app and its records run in GitHub's cloud; the model service receives the documents and questions it processes. Use the included synthetic data to explore. Codespaces has usage limits and billing; model usage is billed by your model provider. Stop the codespace when you finish. For complete control on your own machine, use the local route below.

Run everything 100% locally

The app, records and models all run on your own machine. No model API key needed. Docker with Compose starts the stack and llama.cpp, with a small answering model and a document reader:

bash
git clone --depth 1 https://github.com/thetahealth/mirobody.git && cd mirobodyCOMPOSE_PROFILES=local-cpu ./deploy.sh

Allow 16 GB of memory, at least 8 GB of it for Docker. No GPU is required; on Windows, run the commands in a WSL 2 terminal. The first start needs a network connection to download container images and model weights. If the registry is not reachable from your network, deploy.sh says so and retries through a mirror; DOCKER_MIRROR in .env names your own. After those downloads, document reading, standardization and answers run locally. CPU answers can take minutes; Mac, NVIDIA and Windows options explain how to use your GPU.

Open the app link the script prints. The local models are already selected; sign in with the same demo account above, ask a question or upload a sample. Which model to choose compares the local options.

[The first-run page: a model name edited beside an OpenRouter key, then 100% on this machine: the page finds the llama.cpp server, lists the models it serves, and both models are ready]

Prefer Docker with a cloud model? Run ./deploy.sh without a local model profile, then paste your own model key into the printed setup link. The app and records stay on your host; the model service processes your documents and questions.

Chat calculations take the original queried data directly. A cloud model's code runs as JavaScript inside the app, with nothing to set up; a model on your own hardware computes in Python in a local Docker container when the app can reach a Docker daemon. Setup and data flow cover both. Query views provide their built-in statistics without either.

→ Self-host guide · Walkthrough · Deploy on a server

Run without Docker

No container, and nothing pulled from a registry. On Debian or Ubuntu, PostgreSQL 16 with pgvector comes from the distribution's own packages and the app runs straight from the checkout. It is the same install the Codespaces path performs:

bash
git clone --depth 1 https://github.com/thetahealth/mirobody.git && cd mirobodyscripts/install_native.sh   # PostgreSQL, pgvector, the Python package, a .envscripts/start_native.sh     # the worker and the app on port 18060

Open the link it prints and sign in as [email protected], code 111111: the demo record is seeded already. A model key from the printed setup link adds document extraction and answers. install_native.sh installs system packages with sudo and writes one sudoers rule for the postgres account, and says so as it runs.

The local models belong to the Docker path, so this one answers through a model service. Everything else matches the row above it in what stays on your machine: the records live in the PostgreSQL you just installed, and a name to a code never leaves the machine.

What you can do

  • Compare reports across labs. PDFs, phone photos and spreadsheets, 23 file types in all, land in one history. Every reading links to the page it was read from.
  • Bring in everyday data. Import an Apple Health export, or connect Garmin, Oura and Whoop.
  • Look after your family. Invite someone who shares their own record, or keep one for a parent who never signs in.
  • Write a health journal. headache since last night, BP 150/95, no fever becomes a coded complaint and two coded readings; "no fever" is not logged as a fever.
  • Explore genetic data. Upload a 23andMe, AncestryDNA or WeGene export, or a VCF, and ask by rsID, gene or region. Drug questions get the matching CPIC guideline coverage, never a change of medication.
  • Use your own agent. Connect Claude Code, Codex or Cursor over MCP, or embed the offline engine in Python.

Mirobody does not diagnose or prescribe, and its answers are not medical advice.

Collect · Standardize · Agent

[Collect reports, device data and genetics; standardize names and units so sources compare; ask across your history and trace each answer to its source]

StageWhat it doesWhere
① CollectLab reports, devices, photos, genetic files and journal entries come in from every source; each reading keeps the file it came from.collect/
② StandardizeA1c, HbA1c and Glycated Hemoglobin resolve to one code, units to one standard, offline: readings from scattered sources land as clean rows in one table. A name it cannot place stays unresolved.engine/ · standardize/
③ AgentAnswers come from tools that query that table, not from the model's memory: trends, comparisons across labs and devices, a chart. Every number traces to its file, so you can check it instead of taking it on trust.agent/

The model reads documents and reasons; the codes and units come from vocabularies bundled with the package, never from the model. How a reading is standardized, step by step · How a reading moves through the pipeline.

Care for your family

[Invite a family member; they choose whether you may view or edit their own record; ask about the record they share. A family member who does not sign in can be managed by you until they take over and choose your access]

Joining a care circle shares nothing by itself. Each member decides whether others may view or edit their own record. A parent who never signs in can be managed by you until they claim the record and choose what you keep. See it in the walkthrough.

What stays on your machine

Where the app runs and where the model runs are separate choices. Mirobody does not report usage anywhere.

Codespaces + a model keyLocal Docker + a model key100% on this machine
App and stored recordsin your codespace on GitHub's cloudon your machineon your machine
Documents and questions sent for model processingsent to your model vendor, under its termssent to your model vendor, under its termsstay on your machine
A name to a code, a unit to UCUM (② Standardize)in the codespace, from the bundled vocabularyon your machine, with no networkon your machine, with no network
Model weightsmanaged by the model vendormanaged by the model vendordownloaded once from Hugging Face

The command-line resolver also runs on your machine without a model or network access after its initial download.

Device vendors see data only after you link one. Before this reaches a network you do not control, read SECURITY.md: it lists every address the server can call.

Build on Mirobody

You wantStart here
Your record in Claude Code, Codex, Cursor or Gemini CLIIn the running app, Settings → MCP link (valid for 10 days by default), then one line per client
The offline engine as tools in any MCP client, with no appuvx --python 3.12 mirobody mcp over stdio (client setup)
Mirobody inside DeepSeek Harnessdsh-plugin-mirobody, a community plugin by zwbao: the offline engine and your record's read-only tools, with a Mirobody tab
Names and units resolved in your own codepip install mirobody: offline, no key, numpy the only dependency (library guide)
Your coding agent taught the workflownpx skills add thetahealth/mirobody --skill standardize-health-data (skills)
A new device provider or toolDrop a file into mirobody/collect/providers/ or mirobody/agent/tools/ (CONTRIBUTING)
Try the app without deployingMirobody Web demo, using the same synthetic demo files

Over MCP the stack serves tools scoped to the signed-in person: four read your record (readings, medications, genotypes, pharmacogenomics), three resolve names and units, and two search medical reference material when the deployment has a knowledge source.

The stdio server is published to the official MCP Registry as ai.thetahealth/mirobody with every release. Directories that read the registry list it too, such as mcprush and AddonAudit, which runs it in a sandbox. Each picks up a new version on its own schedule, so take the install line from this README.

After pip install mirobody, use the same engine from Python:

python
from mirobody.engine import resolve, resolve_reading
resolve("血红蛋白").loinc                                     # '718-7'   any language, one coderesolve_reading("total cholesterol", "5.0", "mmol/L").loinc  # '14647-2' the unit picks the code...resolve_reading("total cholesterol", "193", "mg/dL").loinc   # '2093-3'  ...mass, not molesresolve("中性粒细胞百分比").loinc                               # '26511-6' Neutrophils/Leukocytesresolve("血脂").resolved                                     # False    a category, not one test

Numbers you can check

ClaimCheck it
347/347 on the tests an ordinary checkup prints, in English, Chinese, Japanese, Russian, Estonian and Turkishtest_engine_coverage.py prints the score
63,416 LOINC 2.83 codes cut by rule and 1,023,273 names pointing at them, including LOINC's own 21 languages; report spellings the index misses are added one reviewed row at a timefhir_loinc_bundle.NOTICE · resolver_overrides.tsv · How a reading is standardized
331 UCUM units with dimensional analysis, and 902 catalogue members for device and laboratory indicatorsStandardization · Device crosswalk
23andMe, AncestryDNA, WeGene, MyHeritage and FamilyTreeDNA exports and VCF on GRCh37 and GRCh38 decode to the same 13 calls across 12 genes, tested on public 1000 Genomes samples shipped in the packagetest_packaged_examples.py · Public genotype examples
The package names its vocabulary: mirobody.BUNDLE_VERSION is loinc-2.83+2026.10.27-126ecba69782python -c "import mirobody; print(mirobody.BUNDLE_VERSION)"
Public health-agent benchmarks: ESL-Bench, MedHall-Bench, MedHarm-Benchmirobody-eval · benchmarks/

Mirobody is the health data engine behind Theta, a live consumer health app on the web and mobile, with these users today:
[Theta registered users, live] [Theta daily active users, live]

Contributing

The most useful contribution is a term the resolver gets wrong. Run mirobody resolve "<term>"; if the answer is wrong or empty, report it or send a fix with a test case. That is how the vocabulary grows into new languages: Russian panel and Estonian vitamin terms arrived in #88 and Turkish lab-report spellings in #140, each one row of resolver_overrides.tsv and one test case per term. CONTRIBUTING.md has the setup and the checks.

Built on HL7 FHIR, LOINC from the Regenstrief Institute, UCUM, ICPC-3 (WONCA), CPIC, llama.cpp and deepagents, with thanks. Terminology licences: LICENSE-3RD-PARTY.

If Mirobody helped you make sense of a report, a star helps the next person find it.

[Star History Chart]

Documentation · Discussions · Roadmap · Changelog · Security · AGENTS.md

Apache 2.0 · © 2026 Theta Health

来源:README.md,提交 f551697

工具

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

版本历史

3
  1. v1.6.0最新Nov 7, 2026
  2. v1.5.10Nov 1, 2026
  3. v1.5.9Oct 29, 2026

评分

已满足适用检查项的 50%

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

  • 近 30 天内可连通25 分

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

  • 已声明认证方式10 分

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

  • 已列出工具15 分

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

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