pemr
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pemringest the new lab results for Alice"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pemr
Personal EMR — a local-first, family-scale medical record framework. Source documents (scanned labs, visit notes, etc.) are retained as-is; a SQLite database is the source of truth for structured data. Deterministic work — ingest, deduplication, query, analysis, and brief-generation — lives in a Python CLI engine wrapped by a thin MCP server, so AI agents call typed tools instead of re-inventing the logic on every request.
⚠️ This repository is framework + documentation only. No personal or medical data lives here. The live database, source scans, generated exports, and backups all reside outside the repo in a local data directory.
.gitignorehard-blocks databases, documents, and thedata/ inbox/ sources/ exports/ backups/dirs as a backstop.
What it does
Ingest without duplication — content-hash on source files (catches re-scans) plus semantic dedup keys on extracted rows (same clinical fact from two documents → one row).
Query fast — canned + ad-hoc reads over a typed schema (labs, meds, procedures, appointments) with a generic
observationscatch-all for the long tail.Generate on demand — master health summary, per-appointment "walk-in readiness" briefs, and a chronological journal, all rendered from the DB so they never drift.
Extend to the whole family — one DB,
person_idon every row; adding a member is one command, not a fork of the tooling.
Full design — schema, dedup algorithm, ingest pipeline, tool surface, backup — in docs/Architecture.md.
Related MCP server: FilePilot AI
Design decisions
Area | Choice |
Structured store | SQLite (source of truth); source scans retained on disk |
Schema | Hybrid — typed tables + generic |
Multi-person | Single DB, |
Generated docs | Rendered views from the DB (disposable) |
Ingestion | Agent does vision→structure; tools validate + dedup + commit |
Interface | Python CLI engine + thin MCP wrapper |
Dedup | Content-hash (documents) + semantic keys (rows) |
Backup |
|
Status
Design is locked; build proceeds in phases (skeleton → ingest/dedup → query → render → MCP →
backup → care-gap rules) per the Architecture doc. Phase 1 (skeleton) is done: package
layout, migrations/001_init.sql, pemr migrate --create (bootstrap a new archive; plain
pemr migrate applies migrations to an existing one and will never create a database),
pemr person add|list|show, config, CI.
Phase 2 (ingest + two-layer dedup) is done: content-hash blob store + commit-extraction
(pemr ingest), semantic dedup keys with conflict staging (migrations/002_conflict.sql,
pemr review-conflicts), starter analyte/name dictionary. Phase 3 (query layer) is done:
structured reads (pemr query labs|meds|timeline), full-text search over OCR text + record
fields (migrations/003_fts.sql, pemr find), and lab pemr trends — all with --json.
Data / privacy posture
Local-first. The live pemr.db sits on a non-synced local path (WAL sidecars corrupt
under cloud sync); only clean VACUUM INTO snapshots sync to Drive/OneDrive. Going the
other way is pemr restore latest — it validates the snapshot, banks a rescue copy of
whatever it replaces, clears stale WAL sidecars, migrates forward, and reports row counts
plus source-blob resolution (pemr verify runs that report on its own). What backups do
not cover — same-day loss, and pinning a snapshot against rotation — is spelled out in
Architecture §8. Private-ish,
not encrypted-at-rest by default — an encrypted-snapshot upgrade is a drop-in later. No
HIPAA/PHI compliance layer and no provider interoperability; this is a personal archive, and
it assists appointment prep and research — it does not give clinical advice.
Framework scaffolding (from the template)
This repo was generated from
meridun/model-repo and carries its
documentation-tier system, token-optimizer hooks, role-based model routing, and the agentic
SDLC pipeline. See docs/Documentation.md and
docs/Development_AgenticSDLC.md. The skill/agent
prefix has been renamed from the template default to pemr-.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceSelf-hosted MCP server that aggregates personal health data from Google Health, Oura, and Withings into a single, provider-attributed interface with configurable source of truth preferences.MIT
- Alicense-qualityAmaintenanceLocal-first MCP server for safely searching, reading, summarizing, tagging, deduplicating, and organizing local files with scoped access, read-only defaults, and dry-run plans.14MIT
- Alicense-qualityBmaintenanceA local-first MCP server for querying multi-omic personal health data (genome, labs, wearables) with an honesty contract and progressive disclosure skills.1AGPL 3.0
- AlicenseBqualityBmaintenanceA local-first, model-agnostic MCP server that stores personal health data in a SQLite file and provides analysis-ready views for any AI client to log, retrieve, and reason over health records.79MIT
Related MCP Connectors
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/meridun/pemr'
If you have feedback or need assistance with the MCP directory API, please join our Discord server