<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Priyanshu Goel</title>
    <description>The latest articles on DEV Community by Priyanshu Goel (@priyanshu_goel_a1bb476dad).</description>
    <link>https://dev.to/priyanshu_goel_a1bb476dad</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1704634%2F9db7297f-6e10-4012-a42c-80807c0a5977.jpg</url>
      <title>DEV Community: Priyanshu Goel</title>
      <link>https://dev.to/priyanshu_goel_a1bb476dad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/priyanshu_goel_a1bb476dad"/>
    <language>en</language>
    <item>
      <title>I Built a Privacy-First Health Record MCP Server That Runs Entirely on Your Machine</title>
      <dc:creator>Priyanshu Goel</dc:creator>
      <pubDate>Sat, 04 Jul 2026 07:16:08 +0000</pubDate>
      <link>https://dev.to/priyanshu_goel_a1bb476dad/i-built-a-privacy-first-health-record-mcp-server-that-runs-entirely-on-your-machine-18ki</link>
      <guid>https://dev.to/priyanshu_goel_a1bb476dad/i-built-a-privacy-first-health-record-mcp-server-that-runs-entirely-on-your-machine-18ki</guid>
      <description>&lt;p&gt;&lt;em&gt;How I used the Model Context Protocol, Gemini Vision, and AES-256 encryption to let Claude answer questions about your personal health data — without sending that data anywhere.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem With Health AI
&lt;/h2&gt;

&lt;p&gt;Every major health AI product has the same architecture: you upload your documents to their cloud, they process and store them, and you hope their privacy policy holds up. For general wellness tips, that's probably fine. For your actual medical records — prescriptions, lab results, discharge summaries — it's a meaningful trust ask.&lt;/p&gt;

&lt;p&gt;I wanted something different. I wanted Claude to be able to answer questions like &lt;em&gt;"what medications am I on?"&lt;/em&gt; or &lt;em&gt;"is it safe to add Ibuprofen to my current medications?"&lt;/em&gt; using my actual health records, without those records ever leaving my machine.&lt;/p&gt;

&lt;p&gt;The result is &lt;strong&gt;MedMemory&lt;/strong&gt; — an MCP server that stores your health data in an AES-256 encrypted SQLite database locally, extracts structured information from medical documents using Gemini Vision, and exposes 8 tools to Claude Desktop so you can query your health history in natural language.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol (MCP) is Anthropic's open standard for giving LLMs access to external tools and data sources. Instead of fine-tuning a model or building a RAG pipeline, you write a server that exposes typed tools — functions with names, descriptions, and input schemas — and the LLM decides when to call them based on the conversation.&lt;/p&gt;

&lt;p&gt;The key insight is that the &lt;strong&gt;tool docstrings are the intelligence layer&lt;/strong&gt;. When you ask Claude &lt;em&gt;"am I up to date on my vaccines?"&lt;/em&gt;, Claude doesn't know it has a vaccination tool until it reads the docstring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_vaccination_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Returns all recorded vaccinations and flags overdue or missing ones.

    Use this when the user asks about:
    - their vaccination history or immunisation records
    - whether they are up to date on vaccines
    - what vaccines they are missing or overdue for
    - travel vaccine recommendations
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That docstring is what makes Claude call the right tool at the right time. Writing good docstrings is the most important skill in MCP development.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;MedMemory has three layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Storage — SQLCipher encrypted SQLite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All health data lives in a local SQLite database encrypted with SQLCipher (AES-256). The encryption key is set by the user on first run and never leaves the machine. If you open the database file in any text editor, you see random bytes — not readable SQL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;xxd medmemory.db | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-3&lt;/span&gt;
00000000: e7ea 869f 47b1 bec2 8eb8 78f3 8fe9 57e7  ....G.....x...W.
00000010: 44c2 3e72 3056 bb14 ae19 1b53 5530 54e9  D.&amp;gt;r0V.....SU0T.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The migration from plain SQLite to SQLCipher was exactly 3 lines of code — &lt;code&gt;import sqlcipher3 as sqlite3&lt;/code&gt;, plus two PRAGMA lines in &lt;code&gt;get_connection()&lt;/code&gt;. Everything else stayed identical. SQLCipher is a true drop-in replacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ingestion — Gemini Vision for real-world documents&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Medical documents in the real world are messy — handwritten prescriptions, scanned PDFs, photos taken at angles. I started with Tesseract OCR but it failed completely on handwritten Indian prescriptions. The fix was bypassing OCR entirely for image-based documents and sending the image directly to Gemini Vision, which reads handwriting natively.&lt;/p&gt;

&lt;p&gt;The extraction pipeline now works like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native text PDF&lt;/strong&gt; (e.g. digital lab report): PyMuPDF extracts markdown → Gemini structures the entities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scanned/handwritten PDF or image&lt;/strong&gt;: render to PNG → send directly to Gemini Vision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The extraction prompt includes explicit brand-to-generic drug name mappings and lab marker normalisation rules, plus a few-shot example showing exactly what output format is expected. This dramatically improved accuracy on real documents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Glycomet" → "Metformin"
"Storvas" → "Atorvastatin"  
"Gabantin-GRS" → "Gabapentin"
"Zerodol-P" → split into "Aceclofenac" and "Paracetamol"
"LDL Cholesterol" → "LDL"
"S. Creatinine" → "creatinine"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. MCP Tools — 8 tools covering the full health record&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ingest_health_document&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parse any medical PDF or image into structured DB records&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_current_medications&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return active medication list with doses and frequencies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_lab_trend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show historical readings for any lab marker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_visit_history&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Doctor visits with optional specialty filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_vaccination_status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cross-reference DB against WHO adult schedule, flag gaps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;check_drug_interaction&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Query OpenFDA API against your current medication list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_allergies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return recorded allergies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generate_health_summary&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Synthesise all tables into a printable one-pager&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Drug Interaction Tool — The Most Clinically Important Feature
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;check_drug_interaction&lt;/code&gt; is the tool I'm most proud of. It takes a newly prescribed drug name, pulls your current medications from the encrypted DB, queries the OpenFDA drug label API for the new drug's interaction data, and returns a structured result combining both.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Claude Desktop conversation
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;My&lt;/span&gt; &lt;span class="n"&gt;doctor&lt;/span&gt; &lt;span class="n"&gt;just&lt;/span&gt; &lt;span class="n"&gt;prescribed&lt;/span&gt; &lt;span class="n"&gt;Ibuprofen&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;back&lt;/span&gt; &lt;span class="n"&gt;pain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
      &lt;span class="n"&gt;Is&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt; &lt;span class="n"&gt;safe&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;my&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="n"&gt;medications&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;

&lt;span class="n"&gt;Claude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calls&lt;/span&gt; &lt;span class="n"&gt;get_current_medications&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Metformin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Atorvastatin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Aspirin&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calls&lt;/span&gt; &lt;span class="nf"&gt;check_drug_interaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Ibuprofen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;FDA&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="err"&gt;⚠️&lt;/span&gt; &lt;span class="n"&gt;Important&lt;/span&gt; &lt;span class="n"&gt;concern&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="n"&gt;Ibuprofen&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Aspirin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;Both&lt;/span&gt; &lt;span class="n"&gt;are&lt;/span&gt; &lt;span class="n"&gt;NSAIDs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Taking&lt;/span&gt; &lt;span class="n"&gt;them&lt;/span&gt; &lt;span class="n"&gt;together&lt;/span&gt; &lt;span class="n"&gt;significantly&lt;/span&gt; &lt;span class="n"&gt;increases&lt;/span&gt; 
        &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;risk&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;stomach&lt;/span&gt; &lt;span class="n"&gt;bleeding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;FDA&lt;/span&gt; &lt;span class="n"&gt;specifically&lt;/span&gt; &lt;span class="n"&gt;warns&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; 
        &lt;span class="n"&gt;taking&lt;/span&gt; &lt;span class="n"&gt;multiple&lt;/span&gt; &lt;span class="n"&gt;NSAIDs&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;same&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;raises&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;risk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

        &lt;span class="n"&gt;Metformin&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Ibuprofen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Both&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;affect&lt;/span&gt; &lt;span class="n"&gt;kidney&lt;/span&gt; &lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
        &lt;span class="n"&gt;Monitor&lt;/span&gt; &lt;span class="n"&gt;kidney&lt;/span&gt; &lt;span class="n"&gt;health&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;proceed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

        &lt;span class="n"&gt;Consider&lt;/span&gt; &lt;span class="n"&gt;Acetaminophen&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;safer&lt;/span&gt; &lt;span class="n"&gt;alternative&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;back&lt;/span&gt; &lt;span class="n"&gt;pain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A generic AI without your records would give the same NSAID warning to everyone. This one knows you're already on Aspirin and gives you a personalised, clinically relevant answer. That's the difference between a generic chatbot and a tool that actually knows your situation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Privacy Architecture
&lt;/h2&gt;

&lt;p&gt;Here's exactly what goes where:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stays on your machine:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The SQLite database (encrypted with your passphrase)&lt;/li&gt;
&lt;li&gt;Your encryption key (stored in local &lt;code&gt;.env&lt;/code&gt;, never transmitted)&lt;/li&gt;
&lt;li&gt;All medications, lab results, visits, vaccinations, allergies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goes to Gemini API (during ingestion only):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The extracted text or image from the document you're ingesting&lt;/li&gt;
&lt;li&gt;This is a transient API call — Gemini doesn't store it in your health record&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goes to OpenFDA API:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only the drug name you're checking — no personal data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Goes to Anthropic (same as any Claude conversation):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The tool call results that Claude uses to answer your question&lt;/li&gt;
&lt;li&gt;This is the same data that flows in any Claude Desktop conversation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can verify the encryption yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;xxd ~/medmemory.db | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-3&lt;/span&gt;
&lt;span class="c"&gt;# Should show random bytes, not "SQLite format 3"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Docstrings are the product.&lt;/strong&gt; The quality of your tool docstrings determines whether Claude calls the right tool at the right time. I spent as much time on docstrings as on the actual tool logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Test on real documents early.&lt;/strong&gt; I built the ingestion pipeline on clean synthetic PDFs and it looked great. When I tested on a real handwritten prescription from a neurologist in Ghaziabad, it extracted nothing. Real-world documents are fundamentally different from test data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. SQLCipher is genuinely a 3-line migration.&lt;/strong&gt; I expected encrypting a SQLite database to be a multi-day project. It was &lt;code&gt;import sqlcipher3 as sqlite3&lt;/code&gt; plus two PRAGMA lines. The API is identical. The hardest part was getting the Python package to compile on Apple Silicon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. MCP is architecture, not a feature.&lt;/strong&gt; The same DB helpers that power the MCP tools also power a FastAPI bridge that serves a Next.js companion UI. The DB layer is the business logic. MCP and FastAPI are just two different ways to expose it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. OpenFDA is free and powerful.&lt;/strong&gt; The drug interaction data comes from the same FDA drug label database that pharmacists use. No API key required for low volume, and the data is authoritative.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;medmemory-mcp
medmemory-setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add to your Claude Desktop config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"medmemory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"medmemory-server"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or try the hosted demo (synthetic patient data, no real health records):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"medmemory-demo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp-remote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
               &lt;/span&gt;&lt;span class="s2"&gt;"https://web-production-ba446.up.railway.app/sse"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PyPI: &lt;a href="https://pypi.org/project/medmemory-mcp" rel="noopener noreferrer"&gt;pypi.org/project/medmemory-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/priyanshugoel24/medmemory-mcp" rel="noopener noreferrer"&gt;github.com/priyanshugoel24/medmemory-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Web UI: &lt;a href="https://medmemory-ui.vercel.app" rel="noopener noreferrer"&gt;medmemory-ui.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with Python, FastMCP, SQLCipher, Gemini Vision, OpenFDA, FastAPI, and Next.js. Questions or feedback welcome in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>python</category>
      <category>healthtech</category>
    </item>
  </channel>
</rss>
