Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MedSearch

A desktop app for searching the medical and scientific literature — many databases at once, with AI summaries, an in-app PDF reader, and a research assistant.

Built by Riccardo Nevoso for clinicians and researchers who want one fast, friendly place to search the literature without juggling a dozen browser tabs.

MedSearch runs as a native desktop window (macOS, Windows, Linux). It searches PubMed, Cochrane, ClinicalTrials.gov, arXiv, Scopus, Web of Science, and clinical guidelines simultaneously, removes duplicates, finds free full-text where it exists, and — if you add a Claude API key — summarizes and helps you reason about the results.


What it does

  • Searches seven sources at once — PubMed/MEDLINE, Cochrane Reviews, ClinicalTrials.gov, arXiv, Scopus, Web of Science, and a clinical-Guidelines source — and merges the results into one deduplicated list.
  • Clinical practice guidelines — a "Guidelines" source surfaces national and society guidelines indexed in PubMed (works for many countries). Plus a National guidelines button that opens your country's official body directly — SNLG (Italy), NICE (UK), ECRI (US), AWMF (Germany), HAS (France) — with your search term pre-filled where the site allows.
  • Sort by relevance or recency — a toggle beside the search bar reorders results by best match or newest-first, applied per database.
  • Load more results — a "Find X more per source" button fetches the next batch from every active source and appends it (deduplicated), so you can dig deeper without re-running the search. X matches the per-source count you set beside the search bar.
  • Finds free full-text via Unpaywall and OpenAlex, with a Sci-Hub fallback when no open-access copy exists.
  • Reads PDFs in-app — a built-in viewer with fit-to-width, zoom, and save-to-disk. Open-access and Sci-Hub PDFs open right inside the window.
  • Institutional library access — point MedSearch at your university's EZProxy/OpenAthens and paywalled papers your institution subscribes to open through your library login, in a built-in browser window. Save several institutions and switch between them from the search bar.
  • AI summaries (optional, needs a Claude API key) — a one-line takeaway per article, a streamed multi-paragraph synthesis across all results, and a per-paper "Explain" breakdown.
  • AI research assistant — a chat panel grounded in your current search results. Ask things like "which of these support X?" and it answers citing the papers on your screen, or answers general clinical questions.
  • Citation graphs — see what a paper cites and what cites it.
  • Export to Markdown, BibTeX, or RIS, or send straight to Zotero (if the desktop app is running).
  • Quality-of-life: journal quartile badges, MeSH term hints, year filters, saved searches, recent-search history, and a built-in settings panel for API keys (no config files to edit).
  • Friendly onboarding — a first-launch guide (English / Italiano) and one-click auto-update.
  • macOS menu-bar quick search (optional companion app) — a small books-and-network icon in your status bar. Click it, type a query, and the search runs inside the main MedSearch window (it opens the app first if it isn't already running). Recent searches and the default-source picker live right in the dropdown. The menu uses native macOS styling (Liquid Glass on Tahoe), so it blends in with the system.

Install

You need Python 3.8+ and Git. (Both are pre-installed on most Macs; Windows users install Python from python.org and tick "Add Python to PATH".)

git clone https://github.com/H4lBarAd11/MedSearch-by-RN.git
cd MedSearch-by-RN
pip install -r requirements.txt
python app.py        # use python3 on macOS/Linux

MedSearch opens in its own desktop window. (If the native-window library isn't available, it falls back to opening in your browser automatically.)

Installing from a git clone is the recommended way, because the in-app Update button works only for clones — it runs git pull to fetch the latest version. A packaged .app can't update itself (see note below).

macOS — double-clickable launcher (recommended)

After cloning, you don't need the Terminal to start MedSearch day-to-day. Just double-click MedSearch.command in the project folder. On first run it sets up a local environment and installs dependencies (one time); after that it launches the app directly. The in-app Update button keeps it current.

If macOS blocks it the first time ("unidentified developer"), right-click MedSearch.commandOpenOpen. You only do this once.

macOS — self-contained app bundle (no auto-update)

If you'd rather have a fully packaged .app (Python embedded, nothing to install), build one with py2app:

pip install py2app
python3 setup_main.py py2app

This builds MedSearch.app in dist/. Drag it to /Applications. Caveat: a packaged bundle cannot use the in-app Update button (it has no git repo to pull into) — you'd rebuild or re-download to update. If you want automatic updates, use the git-clone + MedSearch.command method above instead.

macOS — menu-bar quick search (optional)

A lightweight status-bar companion that lets you start a search from anywhere without first opening the main window.

pip3 install rumps py2app      # one-time; macOS only
python3 menubar.py             # run it directly to try it…
# …or build a proper background app you can add to Login Items:
python3 setup.py py2app

python3 setup.py py2app builds "MedSearch Menu Bar.app" in dist/ — a background app with no Dock icon (just the menu-bar glyph). Move it to /Applications and add it to System Settings ▸ General ▸ Login Items to have it start automatically. The menu bar and its dropdown use native macOS components, so they automatically adopt the system look (Liquid Glass on macOS Tahoe 26+), while the app's own colours stay in the main window.

When you run a quick search, the menu-bar app opens (or reuses) the main MedSearch window and runs the search inside it — if MedSearch isn't already running, it launches automatically first. Clicking the menu-bar icon opens a fresh search prompt; the default database for quick searches is set from the icon's "Default source" submenu.

Note: the menu-bar app is a separate macOS-only bundle. Like the main bundle, editing the code means rebuilding it (python3 setup.py py2app) and re-copying to /Applications.

macOS — one-line terminal shortcut

To launch from any terminal with a single command:

echo 'alias medsearchgui="cd /path/to/MedSearch-by-RN && python3 app.py"' >> ~/.zshrc
source ~/.zshrc
medsearchgui

Windows

git clone https://github.com/H4lBarAd11/MedSearch-by-RN.git
cd MedSearch-by-RN
pip install -r requirements.txt
python app.py

MedSearch opens in its own window. The in-app Update button works here too (it runs git pull), so running from the clone keeps it current. The double-clickable launcher and the menu-bar companion are macOS-only; on Windows, launch with python app.py (or create a shortcut to it).


API keys

MedSearch works out of the box with the free databases — no keys required for PubMed, Cochrane, ClinicalTrials.gov, or arXiv. Keys unlock optional features:

Key Where to get it Unlocks
Anthropic (Claude) console.anthropic.com All AI features: summaries, synthesis, Explain, and the research assistant
NCBI / PubMed ncbi.nlm.nih.gov/account Higher PubMed rate limits (10 vs 3 req/sec)
Scopus dev.elsevier.com Scopus as a search source
Web of Science developer.clarivate.com Web of Science as a search source
Unpaywall any valid email Open-access PDF detection

Add keys from inside the app: ⚙ Settings & API keys. They're saved locally to ~/.medsearch/config.json and never leave your machine.

⚠️ Scopus & Web of Science need your institution's network. These APIs authenticate by IP address, not just the key. From home you'll get a 401 error — connect to your university VPN, or ask your library for an Elsevier institutional token (there's a field for it in Settings). On campus, the key alone works.


Reading paywalled papers (institutional access)

Many papers aren't open-access but are available through a university subscription. MedSearch can route those through your library so they open with your institutional access.

In ⚙ Settings → Institutional libraries, add your university's proxy address (EZProxy or OpenAthens). To find it: open any journal article through your library's website while off-campus, and copy the part of the address that appears in front of the publisher's name (e.g. ezp.biblio.unitn.it). Both the hostname-rewriting style and a …?url= login prefix are supported.

Once set, paywalled papers show a "DOI (via library)" button that opens them in a built-in browser window carrying your login — so subscribed papers load directly. You can save several institutions and switch the active one from the picker beside the search bar. Anything your library doesn't cover still falls back to a DOI link and a Sci-Hub option.


How AI cost is kept low

If you use the AI features, MedSearch is careful with tokens: one-line summaries use the cheap Haiku model, the assistant reuses a cached, trimmed context across turns, and outputs are capped. A typical multi-turn assistant conversation costs roughly a few cents. You can turn AI off entirely with the AI on/off toggle in the top bar if you'd rather just search.


Project structure

MedSearch-by-RN/
├── app.py                ← Flask backend + native-window launcher
├── templates/
│   └── index.html        ← The entire UI (HTML/CSS/JS)
├── menubar.py            ← macOS menu-bar quick-search companion (optional)
├── MedSearch.command     ← Double-click launcher (sets up + runs the app)
├── setup_main.py         ← py2app build for the main app  (→ MedSearch.app)
├── setup.py              ← py2app build for the menu-bar app
├── requirements.txt      ← Python dependencies (rumps is optional, macOS only)
├── icon.icns / icon.svg  ← App icons
├── menubar_icon.png      ← Menu-bar glyph (books + network)
├── menubar_app_icon.icns ← Menu-bar app bundle icon
├── render_*.py           ← Scripts that generate the icons (reproducible)
├── LICENSE               ← Apache License 2.0 (full text)
├── NOTICE                ← Attribution notice (per Apache 2.0)
└── VERSION               ← Current version

Troubleshooting

Scopus / Web of Science return nothing (401). You're off your institution's network. Use your university VPN, or add an Elsevier institutional token in Settings. See the note above.

A PDF won't open in the viewer. Some publisher links are landing pages rather than direct PDFs, and Sci-Hub occasionally lacks a paper. In those cases MedSearch opens the article in the built-in browser automatically (and closes the empty PDF window), so you can read it through your institutional login if you have one set up.

The menu-bar app icon doesn't appear. Make sure rumps is installed (pip3 install rumps) and that the app was launched (python3 menubar.py, or "MedSearch Menu Bar.app" if built with py2app). It's a background app — there's no Dock icon by design; look for the small books-and-network icon in the menu bar at the top of the screen. The icon needs a framework build of Python (the system/Homebrew python3), not a virtual environment — if it never shows, run it with /opt/homebrew/bin/python3 menubar.py or build the bundle with py2app.

PubMed rate-limiting (HTTP 429). Add a free NCBI API key in Settings — it raises the limit from 3 to 10 requests/sec.

An API key isn't being picked up. Re-enter it in ⚙ Settings and Save. Most keys take effect immediately; restart the app if one still isn't working.

"externally managed environment" error from pip (macOS/Linux). Use a virtual environment:

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

Privacy

Everything runs locally on your machine. Your searches, API keys, and saved data stay on your computer. The only outbound traffic is to the literature databases you search and — if you enable AI — the Anthropic API.


Open access & open science

MedSearch is built in the spirit of open science. The goal is to widen access to the medical and scientific literature, not gate it: the app is free, the full source is openly available, and it's designed to help anyone — clinicians, researchers, students — search more thoroughly without paywalls standing between them and the evidence. It surfaces open-access full-text wherever it exists, works with institutional subscriptions so people can use the access they already have, and adds nothing of its own to lock down.

Contributions in the same spirit are welcome. Anyone is free to use, study, adapt, and build on this project — and to share their improvements back, so the tool keeps getting better for everyone.

License

Licensed under the Apache License 2.0 — a permissive open-source license. You are free to use, modify, distribute, and build upon this software, including for commercial purposes, provided you retain the copyright and license notices and state any significant changes you make. The license also includes an explicit patent grant, protecting users and contributors. See the LICENSE file for the full text, and NOTICE for attribution details.

A note on data: MedSearch queries literature services (PubMed, Cochrane, ClinicalTrials.gov, arXiv, Scopus, Web of Science, Unpaywall, OpenAlex, and others) on your behalf and does not redistribute their content — all article data belongs to its respective publishers and providers, and your use of those services is subject to their own terms.

Copyright © 2026 Riccardo Nevoso.

About

Desktop app to search PubMed, Scopus, Web of Science, Cochrane, ClinicalTrials.gov, arXiv & clinical guidelines at once — with AI summaries, an in-app PDF reader, and a research assistant.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages