Skip to main content
Glama
chrisvo

medlineplus-mcp

by chrisvo
README.md
# MedlinePlus MCP

Open-source Model Context Protocol server for [MedlinePlus Connect](https://medlineplus.gov/medlineplus-connect/), the U.S. National Library of Medicine service for linking clinical codes and medication names to patient-friendly health information.

This server gives an AI agent narrow tools for looking up public MedlinePlus education links. It is intentionally not a medical-record server and does not store patient data.

## Why

Agents working near health records need trustworthy reference material, but they should not invent medication side effects, lab explanations, or condition summaries from memory.

`medlineplus-mcp` keeps the privacy boundary simple:

- Send generic lookup terms or codes to MedlinePlus, such as `metformin`, an RXCUI, an NDC, a LOINC code, an ICD-10-CM code, a CPT code, or a SNOMED CT code.
- Keep private chart context local in your own agent or application.
- Merge public education links with private patient context only after the lookup result comes back.

## Tools

### `lookup_medication`

Look up medication education links using:

- `name`: English medication name fallback, such as `metformin`
- `rxcui`: RxNorm Concept Unique Identifier
- `ndc`: National Drug Code
- `language`: `en` or `es`

Spanish medication responses generally require RXCUI or NDC.

### `lookup_diagnosis`

Look up diagnosis/problem education links using:

- `code`: ICD-10-CM, ICD-9-CM, or SNOMED CT code
- `codeSystem`: `icd10cm`, `icd9cm`, or `snomedct`
- `name`: optional display name
- `language`: `en` or `es`

### `lookup_lab_test`

Look up lab-test education links using:

- `loinc`: LOINC code
- `name`: optional display name
- `language`: `en` or `es`

### `lookup_procedure`

Look up procedure education links using:

- `code`: CPT or SNOMED CT code
- `codeSystem`: `cpt` or `snomedct`
- `name`: optional display name
- `language`: `en` or `es`

### `medlineplus_connect`

Low-level escape hatch for supported MedlinePlus Connect request types.

## Install

```sh
git clone https://github.com/chrisvo/medlineplus-mcp.git
cd medlineplus-mcp
npm install
npm test
```

## Run

```sh
npm start
```

Example MCP config:

```json
{
  "mcpServers": {
    "medlineplus": {
      "command": "node",
      "args": ["/absolute/path/to/medlineplus-mcp/src/server.mjs"],
      "cwd": "/absolute/path/to/medlineplus-mcp",
      "env": {
        "MEDLINEPLUS_CACHE_TTL_MS": "43200000"
      }
    }
  }
}
```

`MEDLINEPLUS_CACHE_TTL_MS` defaults to 12 hours.
`MEDLINEPLUS_CACHE_DIR` defaults to `.cache/medlineplus-mcp`; set it to `off` to disable persistent disk caching.

## Caching

The server uses two cache layers:

- in-memory cache for repeated lookups during the current process,
- filesystem cache so repeated lookups survive process restarts.

By default cache files are written under `.cache/medlineplus-mcp/` in the server working directory. Cache keys are SHA-256 hashes of the MedlinePlus Connect request URL, and cached payloads contain only the public response from MedlinePlus plus the generic lookup request.

For a different cache folder:

```sh
MEDLINEPLUS_CACHE_DIR=/var/cache/medlineplus-mcp npm start
```

To disable disk caching:

```sh
MEDLINEPLUS_CACHE_DIR=off npm start
```

## Output

Tool responses are JSON text payloads:

```json
{
  "request": {
    "type": "drug",
    "codeSystem": "ndc",
    "code": "",
    "name": "metformin",
    "language": "en"
  },
  "query_url": "https://connect.medlineplus.gov/service?...",
  "attribution": "U.S. National Library of Medicine",
  "updated": "2026-07-18T03:05:36Z",
  "total_results": 1,
  "entries": [
    {
      "title": "Metformin",
      "url": "https://medlineplus.gov/druginfo/meds/a696005.html",
      "summary": "",
      "source": "American Society of Health-System Pharmacists, Inc."
    }
  ]
}
```

## Privacy

Do not send private chart notes, diagnoses, full medication administration records, names, MRNs, dates of birth, or free-form patient narratives to this server unless you are intentionally sending them to MedlinePlus Connect.

Prefer generic lookups:

- Good: `metformin`
- Good: `rivaroxaban`
- Good: `4548-4` for a LOINC lookup
- Bad: an entire hospital progress note

## Acceptable Use

MedlinePlus says Connect requests should stay under 100 requests per minute per IP address and recommends caching results for 12-24 hours. This server includes in-memory and disk caching by request URL.

See the official docs:

- [MedlinePlus Connect](https://medlineplus.gov/medlineplus-connect/)
- [MedlinePlus Connect Web Service](https://medlineplus.gov/medlineplus-connect/web-service/)
- [Technical Information](https://medlineplus.gov/medlineplus-connect/technical-information/)
- [MedlinePlus for Developers](https://medlineplus.gov/about/developers/)

## Medical Safety

MedlinePlus content is patient education, not a clinical decision engine. Agents using this MCP should:

- cite returned MedlinePlus links,
- separate public general education from patient-specific interpretation,
- avoid telling users to stop, start, or change medications,
- suggest questions for the care team when private clinical context matters.

## License

MIT

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation4/5

The four specific lookup tools (medication, diagnosis, lab test, procedure) have clearly distinct purposes. However, medlineplus_connect is a low-level utility that overlaps with all of them, potentially causing confusion if an agent chooses it over the more specific tool.

Naming Consistency3/5

Four tools use a consistent 'lookup_' prefix, but medlineplus_connect breaks this pattern with a different naming style. The inconsistency is noticeable but not chaotic.

Tool Count4/5

Five tools is a reasonable number for the domain, covering the main clinical code systems (RXCUI, ICD, LOINC, CPT, SNOMED). The count is not excessive and fits the scope well.

Completeness4/5

The tools cover the major MedlinePlus lookup categories (medication, diagnosis, lab, procedure). The general medlineplus_connect tool fills potential gaps, though a dedicated health-topic search tool might be missing.

Maintenance

ActivityStale
ResponsivenessNo issues