Skip to main content
Glama
README.md
# pubmed-mcp

[Polski](README.pl.md)

MCP server exposing NCBI PubMed/PMC APIs: E-utilities (search, summaries, full records, links, database info, spelling, citation matching), BioC full text, the Literature Citation Exporter, and the PMC ID Converter.

## Table of contents

- [Tools](#tools)
- [Environment variables](#environment-variables)
- [Wiring it up](#wiring-it-up)
- [Local run](#local-run)

## Tools

| Tool | Parameters | Description |
|------|-----------|------|
| `search_pubmed` | `term: str, db: str = "pubmed", retmax: int = 20, retstart: int = 0, sort: Optional[str] = None, mindate: Optional[str] = None, maxdate: Optional[str] = None, datetype: Optional[str] = None` | ESearch — matching UIDs and total count |
| `get_summaries` | `db: str, ids: str, select: str = "*"` | ESummary — document metadata for a list of UIDs |
| `fetch_records` | `db: str, ids: str, rettype: str, retmode: "xml"\|"text" = "text", max_chars: int = 20000` | EFetch — full records (abstracts, FASTA, GenBank, etc.) |
| `find_related_links` | `ids: str, dbfrom: str = "pubmed", db: str = "pubmed", linkname: Optional[str] = None, cmd: str = "neighbor"` | ELink — related/cross-referenced records |
| `get_database_info` | `db: Optional[str] = None` | EInfo — list of Entrez databases, or fields/links for one database |
| `global_query_counts` | `term: str` | EGQuery — result counts across all Entrez databases |
| `spelling_suggestions` | `db: str, term: str` | ESpell — spelling-corrected search term |
| `match_citations` | `citations: str` | ECitMatch — batch citation-to-PMID matching |
| `get_full_text` | `id: str, id_type: "pmid"\|"pmcid" = "pmid", encoding: "unicode"\|"ascii" = "unicode", max_chars: int = 20000` | BioC — full text of a PMC Open Access article |
| `export_citation` | `ids: str, db: "pubmed"\|"pmc" = "pubmed", format: "citation"\|"csl"\|"ris"\|"nbib" = "citation"` | Literature Citation Exporter — formatted citation |
| `convert_ids` | `ids: str, idtype: Optional["pmcid"\|"pmid"\|"mid"\|"doi"] = None, versions: bool = False` | PMC ID Converter — convert between PMID/PMCID/MID/DOI |
| `raw_request` | `service: "eutils"\|"bioc"\|"citexport"\|"idconv", path: str, params: Dict[str, Any]` | Raw GET request to any of the four underlying APIs |

## Environment variables

| Variable | Required | Description |
|---------|----------|------|
| `PUBMED_MCP_EMAIL` | no | Email reported to NCBI (recommended by their usage policy) |
| `PUBMED_MCP_API_KEY` | no | NCBI E-utilities API key — raises the rate limit from 3 to 10 requests/second |

## Wiring it up

Only requirement: `uv` (https://docs.astral.sh/uv/). Nothing else to install.

### Claude Code

```
claude mcp add pubmed-mcp -- uvx --from git+https://github.com/dam2452/pubmed-mcp.git pubmed-mcp
```

With optional email/API key:

```
claude mcp add pubmed-mcp -e PUBMED_MCP_EMAIL=<value> -e PUBMED_MCP_API_KEY=<value> -- uvx --from git+https://github.com/dam2452/pubmed-mcp.git pubmed-mcp
```

### Claude Desktop / other MCP client

```json
{
  "mcpServers": {
    "pubmed-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/dam2452/pubmed-mcp.git", "pubmed-mcp"],
      "env": { "PUBMED_MCP_EMAIL": "<value>", "PUBMED_MCP_API_KEY": "<value>" }
    }
  }
}
```

After pushing a new version: `uv cache clean` and restart the client.

## Local run

```
uv run --directory . pubmed-mcp
```

Tests (manual):

```
uv run --directory . --with pytest pytest test/
```

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation5/5

Every tool has a clearly distinct purpose: searching, retrieving summaries/full records/full text, converting IDs, exporting citations, finding related links, spelling suggestions, global query counts, database info, and raw requests. No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., search_pubmed, get_summaries, convert_ids). The naming is predictable and clearly conveys the action and resource.

Tool Count5/5

12 tools is well-scoped for a PubMed/MEDLINE API wrapper. Each tool serves a specific need in the retrieval workflow, and the count is neither overly large nor too small for the domain.

Completeness5/5

The tool set covers the entire search and retrieval lifecycle: searching, spelling correction, global counts, database info, summaries, full records, full text, citation export, ID conversion, batch citation matching, and related links. A raw_request tool handles edge cases. No obvious gaps for a read-only PubMed client.

Maintenance

ActivityStale
ResponsivenessNo issues