MedlinePlus Drug Info Skill
Search MedlinePlus drug / health-topic pages. Auto-detects input type:
| Input Pattern |
Detected As |
Example |
Endpoint Used |
0069-3060-30 |
NDC code |
NDC → drug page |
Connect (NDC) |
637188 (5-7 digits) |
RxCUI |
RxNorm concept |
Connect (RxCUI) |
E11.9, J45.20 |
ICD-10-CM |
Diagnosis code → topic |
Connect (ICD-10) |
| anything else |
free text |
metformin, aspirin |
Connect (name) + wsearch |
Both APIs are free, require no API key, and are rate-limited to 85 req/min.
API
| Function |
Input |
Returns |
search(query, max_results=10) |
single entity string |
dict with connect_results, wsearch_results |
search_batch(queries, max_results=10) |
list of entity strings |
dict[str, dict] |
summarize(result) |
one search() result dict |
compact text for LLM |
to_json(result) |
one search() result dict |
list[dict] flat records |
Result dict structure
{
"query": "metformin",
"input_type": "text", # ndc | rxcui | icd10 | text
"connect_results": [ # from MedlinePlus Connect
{"title": "...", "url": "...", "summary": "...", "source": "..."},
],
"wsearch_results": [ # from keyword web service
{"title": "...", "url": "...", "snippet": "...", "rank": "..."},
],
"errors": [],
}
Usage
See if __name__ == "__main__" block in 57_MEDLINEPLUS_DRUG_INFO.py for
runnable examples covering: drug name, RxCUI, NDC, ICD-10, batch search,
summarize, and JSON output.
Key Fields
| Field |
Source |
Description |
title |
Connect / wsearch |
MedlinePlus page title |
url |
Connect / wsearch |
Direct link to MedlinePlus page |
summary |
Connect |
HTML-stripped page summary (≤400 chars) |
snippet |
wsearch |
Keyword-in-context excerpt (≤300 chars) |
source |
Connect |
Content attribution (e.g., AHFS, ASHP) |
rank |
wsearch |
Relevance rank returned by NLM |
Data Source
- Provider: U.S. National Library of Medicine (NLM)
- Web Service:
https://wsearch.nlm.nih.gov/ws/query (XML, keyword search)
- Connect API:
https://connect.medlineplus.gov/service (JSON, code-based)
- Rate limit: 85 requests / minute / IP
- Update frequency: daily (Tue–Sat)
- License: Public domain (U.S. Government work); attribution to MedlinePlus.gov requested
1---2name: medlineplus-drug-info3description: Query MedlinePlus for consumer-oriented drug and health-topic information. Accepts drug names, RxCUI codes, NDC codes, or ICD-10-CM diagnosis codes. Uses two free, keyless NLM APIs: the Web Service (keyword search) and MedlinePlus Connect (code-based lookup).4---5
6# MedlinePlus Drug Info Skill
7
8Search MedlinePlus drug / health-topic pages. Auto-detects input type:
9
10| Input Pattern | Detected As | Example | Endpoint Used |
11|---|---|---|---|
12| `0069-3060-30` | NDC code | NDC → drug page | Connect (NDC) |
13| `637188` (5-7 digits) | RxCUI | RxNorm concept | Connect (RxCUI) |
14| `E11.9`, `J45.20` | ICD-10-CM | Diagnosis code → topic | Connect (ICD-10) |
15| anything else | free text | `metformin`, `aspirin` | Connect (name) + wsearch |
16
17Both APIs are free, require no API key, and are rate-limited to 85 req/min.
18
19## API
20
21| Function | Input | Returns |
22|---|---|---|
23| `search(query, max_results=10)` | single entity string | `dict` with `connect_results`, `wsearch_results` |
24| `search_batch(queries, max_results=10)` | list of entity strings | `dict[str, dict]` |
25| `summarize(result)` | one `search()` result dict | compact text for LLM |
26| `to_json(result)` | one `search()` result dict | `list[dict]` flat records |
27
28### Result dict structure
29
30```python
31{
32 "query": "metformin",
33 "input_type": "text", # ndc | rxcui | icd10 | text
34 "connect_results": [ # from MedlinePlus Connect
35 {"title": "...", "url": "...", "summary": "...", "source": "..."},
36 ],
37 "wsearch_results": [ # from keyword web service
38 {"title": "...", "url": "...", "snippet": "...", "rank": "..."},
39 ],
40 "errors": [],
41}
42```
43
44## Usage
45
46See `if __name__ == "__main__"` block in `57_MEDLINEPLUS_DRUG_INFO.py` for
47runnable examples covering: drug name, RxCUI, NDC, ICD-10, batch search,
48summarize, and JSON output.
49
50## Key Fields
51
52| Field | Source | Description |
53|---|---|---|
54| `title` | Connect / wsearch | MedlinePlus page title |
55| `url` | Connect / wsearch | Direct link to MedlinePlus page |
56| `summary` | Connect | HTML-stripped page summary (≤400 chars) |
57| `snippet` | wsearch | Keyword-in-context excerpt (≤300 chars) |
58| `source` | Connect | Content attribution (e.g., AHFS, ASHP) |
59| `rank` | wsearch | Relevance rank returned by NLM |
60
61## Data Source
62
63- **Provider**: U.S. National Library of Medicine (NLM)
64- **Web Service**: `https://wsearch.nlm.nih.gov/ws/query` (XML, keyword search)
65- **Connect API**: `https://connect.medlineplus.gov/service` (JSON, code-based)
66- **Rate limit**: 85 requests / minute / IP
67- **Update frequency**: daily (Tue–Sat)
68- **License**: Public domain (U.S. Government work); attribution to MedlinePlus.gov requested