mrkeyoor.com_
Sun 06 Sept 17:31 UTC
AI Toolsevaluationupdated 06 Sept 2026

openmed review

OpenMed is a local-first toolkit for finding medical entities and personal identifiers in clinical text, then masking or replacing sensitive details. It supplies Python, service, mobile, browser, MCP, and coding-agent paths, but deployment owners still have to validate the models and clinical output for their own data.

trackingstars / 7d
Verdict

Our OpenMed run installed 150 packages and 941 MB, then showed a failure marker before tests hit the 900-second cap, so production adoption needs more validation than the quick examples imply. The 16-second build and 0 known audited vulnerabilities make a controlled trial reasonable for teams that need local clinical text processing across several runtimes. Do not use it as proof of compliance, and do not let de-identified output trigger clinical or billing decisions without human review.

We ran it

Lab card: what happened when we ran openmedScreenshot of openmed (openmed.life)
Install✓ · 67s150 packages · 941 MB
Build✓ · 16s
Tests✗ timed out · 900sran, no count parsed
Known vulns0(pip-audit)
Repo3470 files~858,448 lines of source · 79.7 MB · 34 CI workflows · Dockerfile · tests dir

Answers from our run

Does openmed build from source?

Dependencies installed in 67 seconds (150 packages), and the build succeeded in 16 seconds. We cloned commit 6690c95 into a clean Debian container with 3 CPUs and no project-specific setup.

Do openmed's tests pass?

We could not finish them: the suite was still running after 15 minutes in our container.

Does openmed have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use openmed?

Organizations seeking a shortcut to HIPAA or GDPR compliance: OpenMed says it does not self-certify and that no de-identification tool guarantees zero residual risk.

What are the alternatives to openmed?

Presidio, medspaCy, Spark NLP. Our OpenMed run installed 150 packages and 941 MB, then showed a failure marker before tests hit the 900-second cap, so production adoption needs more validation than the quick examples imply.

Setup3/567-second install; broad extras and a 900-second test timeout
Docs5/5Runtime, privacy, compliance, MCP, and platform limits are explicit
Community4/55,241 stars with September 2026 pushes and issue activity
Maturity3/5v2.3.0 is broad, but the golden clinical pipeline test is open

Who it’s for

Healthcare engineering teams building local clinical extraction or de-identification pipelines.
Developers who need the same token-classification model on Python, Apple, Android, or a browser.
Agent builders who want clinical NLP and PII tools through MCP after de-identification.
Organizations prepared to test every model, language, identifier class, and deployment boundary on representative data.

Who it’s NOT for

Organizations seeking a shortcut to HIPAA or GDPR compliance: OpenMed says it does not self-certify and that no de-identification tool guarantees zero residual risk.
Clinical pipelines that require a completed golden end-to-end regression before adoption: issue 1950 says the full de-identification, NER, assertion, grounding, and FHIR path lacks that test.
Operators planning to expose the MCP HTTP server directly: its documentation says the built-in server does not validate API keys or bearer tokens and requires an authenticated TLS gateway.
Teams that need one license to cover code, models, and datasets: the SDK is Apache-2.0, while the README says model and dataset terms vary.
Maintainers looking for a small validation cycle: our 150-package environment reached 941 MB, and the tests exceeded 900 seconds after displaying a failure marker.

Setup reality

Our sandbox installed 150 Python packages in 67 seconds and used 941 MB. The build succeeded in 16 seconds. Tests timed out at 900 seconds; progress reached 75%, with one failure marker shown at 73%, but the supplied tail did not name that case. Pip-audit found 0 known vulnerabilities.

The local runtime needs no hosted credential after model artifacts are available. Initial model downloads can use Hugging Face, while remote providers, telemetry, and integrations create separate network paths. The REST and MCP services are optional, and any remotely exposed MCP endpoint needs authentication at a gateway.

Python 3.10 or newer is the base requirement. Extras select Hugging Face, MLX, service, MCP, OCR, data, and training dependencies; hardware support differs across CPU, CUDA, Apple MLX, ONNX, Swift, Android, and browser targets. Dockerfiles and Compose exist, but model caches and deployment policy still need deliberate configuration.

OpenMed v2.3.0 spans Python, Swift, Android, and browsers

OpenMed v2.3.0 extracts clinical entities and personal identifiers, then supports masking, replacement, hashing, or date shifting through its Python API. The same project contains a FastAPI service, Apple MLX and Swift paths, Android ONNX support, browser exports, an MCP server, and agent skills. That range is useful when a team wants one naming and policy layer across devices, though each runtime depends on compatible model artifacts and its own integration work.

The base package requires Python 3.10 or newer and keeps its direct dependency list small, while optional extras bring in Hugging Face, MLX, service, OCR, MCP, tabular, workflow, and training stacks. Our chosen development environment installed 150 packages and occupied 941 MB. A model download adds another resource cost that our lab figures do not include. Air-gapped use is possible when model_id points to a local directory containing the required files.

Thirty-six PII language routes still require local validation

OpenMed documents 36 PII language codes, of which 33 use model-backed routes. Russian currently uses a multilingual default-model placeholder, while an optional Indic family requires an operator-supplied model setting. The catalog also covers clinical disease, drug, anatomy, gene, and privacy tasks with models of different sizes. Coverage on a list is a starting point; healthcare teams need representative notes, identifier formats, abbreviations, and misspellings from every population they serve.

De-identification can target the 18 HIPAA Safe Harbor identifier classes, and the package emits leakage or residual-risk evidence for review. OpenMed's compliance guide says the user still owns the legal and scientific decision: all identifier classes must be confirmed for the actual data, qualified experts must handle expert determination, and reversible pseudonym mappings need controlled custody. A valid function result therefore cannot be treated as a compliance certificate or a guarantee that no identifier remains.

What happened when we ran it

Our sandbox installed OpenMed in 67 seconds, adding 150 packages and using 941 MB on disk. The build completed successfully in 16 seconds. commit 6690c95 was much larger than a typical Python library checkout: 3,470 files, about 858,448 source lines, and 79.7 MB. We also found 34 CI workflow files, a Dockerfile, a Compose file, and a tests directory.

The test command exceeded our 900-second limit. Pytest progress moved through 70%, displayed a single F among passing dots at 73%, and continued to 75% before the run ended. The supplied log tail did not include the failing test's name or traceback, so we cannot identify the cause or report a final pass total. Pip-audit found 0 known vulnerabilities in the installed environment, which is useful but separate from model safety or clinical accuracy.

One missing golden test crosses five clinical pipeline stages

Open issue 1950 says unit coverage exists for individual stages, while a golden test connecting de-identification, NER, assertion, grounding, and FHIR export is absent. The issue specifically warns that an offset shift between stages could corrupt later grounding or exported resources without a frozen end-to-end expectation. That gap matters more than a cosmetic failure because users may compose the five stages into a clinical data pipeline.

The 900-second timeout does not prove that issue caused our visible failure marker, and the log gives no basis for that inference. It does mean commit 6690c95 did not finish its full suite in our 3-CPU, 8 GB sandbox. Before adopting OpenMed, run the exact language, model, de-identification method, grounding route, and export format you need against synthetic golden records. Keep a human review step around clinical codes and downstream decisions.

Port 8081 is safe only behind the documented MCP boundary

The local MCP guide uses stdio when the client and OpenMed share a machine, avoiding a network listener. Its Streamable HTTP example publishes port 8081 only on loopback. The built-in server does not validate API keys or bearer tokens, so a remote deployment needs a TLS-terminating gateway that authenticates every request. Hosted assistant connectors also cannot reach workstation loopback, which forces a private network or guarded HTTPS route.

The documented MCP workflow de-identifies first, then passes text-free spans, hashes, codes, and aggregate risk data through later stages. External-language-model stages stay disabled until an operator opts in, and raw source text is not supposed to cross that boundary. OpenMed also ships skills for Claude Code, Codex, and compatible agents. Real patient data should stay out of a cloud agent prompt even when the resulting code eventually runs on-device.

September 2026 activity includes 543 issues and pull requests

GitHub recorded the latest push on September 5, 2026, one day after the v2.3.0 release, with 5,241 stars and 543 combined issues and pull requests. Recent activity included FHIR validation, privacy-safe federated metrics, artifact references, and dependency updates. The pace is high, and the combined count includes proposed work plus pull requests, so it should not be read as 543 confirmed bugs.

The large queue does show how quickly OpenMed's scope is expanding beyond clinical NER. Open issues cover multimodal preflight, federated training controls, agent artifacts, and an end-to-end clinical test. Teams needing only PII removal may prefer Presidio; teams already centered on spaCy or Spark have narrower options too. OpenMed earns a trial when cross-platform clinical processing is the requirement, provided the 150-package footprint and unfinished full-suite result become part of the adoption decision.

Alternatives

ProjectWhat it isPick it when
PresidioA PII detection and anonymization framework for text, images, and structured data.pick this instead when general-purpose privacy filtering matters more than OpenMed's clinical model catalog and mobile runtimes.
medspaCyA Python library for clinical NLP pipelines built around spaCy.pick this instead when rule-based context, section detection, and familiar spaCy components are the main need.
Spark NLPA distributed NLP library with Spark pipelines and a wider enterprise ecosystem.pick this instead when processing already lives on Apache Spark and distributed throughput matters more than on-device deployment.

What people are saying

  1. [github-trending] maziyarpanahi/openmed

Sources

  1. OpenMed repository and README
  2. OpenMed v2.3.0 release
  3. OpenMed compliance posture
  4. OpenMed MCP client and deployment guide
  5. Golden clinical pipeline test issue
  6. Private training artifact audit issue

More ai tools reviews

whisper · METATRON · open-science · VoxCPM · mlx · onnx · the whole board →