# PyEuropePMC

Connects your coding agent to Europe PMC and related research repositories. Retrieves open publications, handles full text downloads, and parses JATS XML.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 8
- Author: JonasHeinickeBio
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/JonasHeinickeBio/pyEuropePMC
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/pyeuropepmc

## What it does

The server queries scientific repositories directly from your agent environment. It searches Europe PMC alongside ten external databases like PubMed and arXiv while removing duplicated entries. It fetches articles as PDF or raw XML files.

It transforms JATS XML content into plain text or structured sections. That makes it handy for RAG pipelines. It extracts author lists, figure data, and text-mining annotations for chemicals or diseases.

Standard searches and open text downloads work without registration. You will need separate API keys only when enabling Semantic Scholar queries or LLM analysis tools.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `PYEUROPEPMC_MCP_LOG_LEVEL`, `SEMANTIC_SCHOLAR_API_KEY`, `OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL`, `UNPAYWALL_EMAIL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env PYEUROPEPMC_MCP_LOG_LEVEL=<PYEUROPEPMC_MCP_LOG_LEVEL> --env SEMANTIC_SCHOLAR_API_KEY=<SEMANTIC_SCHOLAR_API_KEY> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENAI_BASE_URL=<OPENAI_BASE_URL> --env OPENAI_MODEL=<OPENAI_MODEL> --transport stdio pyeuropepmc -- uvx pyeuropepmc
```
Replace <…> with your own values. 1 more environment variable is in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from pyeuropepmc <command>

### Codex

**Platform CLI**
```bash
codex mcp add pyeuropepmc --env PYEUROPEPMC_MCP_LOG_LEVEL=<PYEUROPEPMC_MCP_LOG_LEVEL> --env SEMANTIC_SCHOLAR_API_KEY=<SEMANTIC_SCHOLAR_API_KEY> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENAI_BASE_URL=<OPENAI_BASE_URL> --env OPENAI_MODEL=<OPENAI_MODEL> -- uvx pyeuropepmc
```
Replace <…> with your own values. 1 more environment variable is in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from pyeuropepmc <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "pyeuropepmc": {
            "command": "uvx",
            "args": [
                "pyeuropepmc"
            ],
            "env": {
                "PYEUROPEPMC_MCP_LOG_LEVEL": "<PYEUROPEPMC_MCP_LOG_LEVEL>",
                "SEMANTIC_SCHOLAR_API_KEY": "<SEMANTIC_SCHOLAR_API_KEY>",
                "OPENAI_API_KEY": "<OPENAI_API_KEY>",
                "OPENAI_BASE_URL": "<OPENAI_BASE_URL>",
                "OPENAI_MODEL": "<OPENAI_MODEL>"
            }
        }
    }
}
```
Replace <…> with your own values. 1 more environment variable is in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from pyeuropepmc <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "pyeuropepmc": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "pyeuropepmc"
            ],
            "env": {
                "PYEUROPEPMC_MCP_LOG_LEVEL": "<PYEUROPEPMC_MCP_LOG_LEVEL>",
                "SEMANTIC_SCHOLAR_API_KEY": "<SEMANTIC_SCHOLAR_API_KEY>",
                "OPENAI_API_KEY": "<OPENAI_API_KEY>",
                "OPENAI_BASE_URL": "<OPENAI_BASE_URL>",
                "OPENAI_MODEL": "<OPENAI_MODEL>"
            }
        }
    }
}
```
Replace <…> with your own values. 1 more environment variable is in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from pyeuropepmc <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e PYEUROPEPMC_MCP_LOG_LEVEL=<PYEUROPEPMC_MCP_LOG_LEVEL> -e SEMANTIC_SCHOLAR_API_KEY=<SEMANTIC_SCHOLAR_API_KEY> -e OPENAI_API_KEY=<OPENAI_API_KEY> -e OPENAI_BASE_URL=<OPENAI_BASE_URL> -e OPENAI_MODEL=<OPENAI_MODEL> pyeuropepmc uvx pyeuropepmc
```
Replace <…> with your own values. 1 more environment variable is in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from pyeuropepmc <command>

## When to use it
- query biomedical research papers across Europe PMC and connected archives
- download open-access articles in JATS XML, PDF, or HTML format
- convert XML literature into structured sections for RAG workflows
- inspect citation networks and biomedical entity annotations

## Example prompts
- Find open-access Europe PMC papers mentioning CRISPR and display their PMCID identifiers.
- Fetch the JATS XML for PMCID PMC1234567 and convert the content into Markdown.
- Trace citations for this publication and identify duplicate references across archives.

## Similar
- [Zotero MCP](https://affpapa.org/en/nevibecode/mcp/zotero-mcp.md) — MCP server · ★ 5585
- [arxiv-mcp-server](https://affpapa.org/en/nevibecode/mcp/arxiv-mcp-server.md) — MCP server · ★ 3235
- [PaperBanana](https://affpapa.org/en/nevibecode/mcp/paperbanana.md) — MCP server · ★ 2418
- [MATLAB MCP Server](https://affpapa.org/en/nevibecode/mcp/matlab-mcp-server.md) — MCP server · ★ 1723
- [Hex Research](https://affpapa.org/en/nevibecode/mcp/hex-research.md) — MCP server · ★ 584
- [DocsAgent — Zotero, Obsidian & Apple Notes MCP Server](https://affpapa.org/en/nevibecode/mcp/docsagent-zotero-obsidian-apple-notes-mcp-server.md) — MCP server · ★ 578

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
