Metadata-Version: 2.5
Name: amr-mcp
Version: 0.1.3
Summary: MCP server for antimicrobial resistance (AMR) data: NCBI Reference Gene Catalog, NCBI E-utilities and UniProt
Project-URL: Homepage, https://github.com/pabloestepaa/amr-mcp
Project-URL: Issues, https://github.com/pabloestepaa/amr-mcp/issues
License-Expression: MIT
License-File: LICENSE
Keywords: amr,antimicrobial-resistance,bioinformatics,mcp,ncbi,uniprot
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27
Requires-Dist: mcp<3,>=2.0
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Description-Content-Type: text/markdown

# amr-mcp

<!-- mcp-name: io.github.pabloestepaa/amr-mcp -->

[![CI](https://github.com/pabloestepaa/amr-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/pabloestepaa/amr-mcp/actions/workflows/ci.yml)
[![PyPI](https://img.shields.io/pypi/v/amr-mcp)](https://pypi.org/project/amr-mcp/)

An [MCP](https://modelcontextprotocol.io) server that lets AI assistants (Claude, Codex, Cursor…) query
**antimicrobial resistance (AMR)** data from public, free sources:

- **NCBI Reference Gene Catalog**, the curated database behind
  [AMRFinderPlus](https://github.com/ncbi/amr): ~11,500 AMR genes, point mutations, stress and virulence genes
- **NCBI E-utilities**: protein and nucleotide sequences, PubMed references
- **UniProtKB**: protein function, keywords and cross-references
- **AMRFinderPlus** (optional, if installed locally): screen your own genomes

All data sources are public domain or freely accessible; no API keys are required.

## Demo

Claude Code answering the first example question below: the server looks up blaKPC-2 in the catalog,
counts the species NCBI has found it in, pulls the protein sequence and resolves the original paper.

![amr-mcp answering a question about the KPC-2 carbapenemase](https://raw.githubusercontent.com/pabloestepaa/amr-mcp/main/docs/demo.gif)

## Example questions

> Which species carry the KPC-2 carbapenemase, what is the original paper describing it, and what does its protein sequence look like?

> Summarise the carbapenemase gene families in the catalog and how many variants each has.

> Give me the protein sequence of mcr-1.1 and its UniProt function annotation.

> Run AMRFinderPlus on `~/data/isolate_17.fasta` as *Escherichia* and explain the hits by drug class.

## Tools

| Tool | What it does |
|---|---|
| `search_amr_genes` | Search by text, drug class, subclass, organism or element type; `group_by_family` for broad searches |
| `get_amr_gene` | Exact record for an allele (`blaKPC-2`) or summary of a family (`blaKPC`) |
| `list_drug_classes` | Drug classes and how many catalog entries each has |
| `catalog_info` | Catalog version and size |
| `fetch_sequence` | Protein or nucleotide FASTA from NCBI by accession |
| `get_protein_hosts` | Species in which NCBI has sequenced an exact protein (Identical Protein Groups) |
| `get_pubmed_references` | Title, journal, authors and DOI for PubMed IDs |
| `search_uniprot` / `get_uniprot_entry` | UniProtKB search and entry details |
| `run_amrfinder` | Run a local AMRFinderPlus install on a FASTA file |

## Installation

Run it with [uv](https://docs.astral.sh/uv/) (no install step needed), or `pip install amr-mcp`.

### Claude Code

```bash
claude mcp add amr -- uvx amr-mcp
```

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "amr": { "command": "uvx", "args": ["amr-mcp"] }
  }
}
```

### Without uv: pipx

```bash
pipx install amr-mcp
which amr-mcp   # e.g. /Users/you/.local/bin/amr-mcp
```

Then use that absolute path as the command, for example in `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "amr": { "command": "/Users/you/.local/bin/amr-mcp" }
  }
}
```

Desktop apps don't inherit your shell's `PATH`, so if Claude Desktop can't start the server,
use the absolute path for the command (this applies to `uvx` too: run `which uvx` to get it).

### Agent skill (optional)

[`skills/amr-research/SKILL.md`](https://github.com/pabloestepaa/amr-mcp/blob/main/skills/amr-research/SKILL.md) tells the agent when to reach for these
tools and how to chain them (gene → hosts → sequence → paper, family overviews, genome screening),
plus the pitfalls to avoid. It works with any agent that reads `SKILL.md` files (Claude Code, Cursor,
Codex, Copilot…):

```bash
npx skills add pabloestepaa/amr-mcp
```

Or copy the folder by hand, e.g. to `~/.claude/skills/amr-research/` for Claude Code.
The skill uses the MCP server above, so install that too.

## Configuration

| Variable | Purpose |
|---|---|
| `NCBI_API_KEY` | Optional, free. Raises the NCBI rate limit from 3 to 10 requests/s |
| `NCBI_EMAIL` | Optional. Contact e-mail NCBI asks tools to send |
| `AMR_MCP_CACHE_DIR` | Where the catalog is cached (default `~/.cache/amr-mcp`, refreshed every 30 days) |

To enable `run_amrfinder`: `conda install -c bioconda ncbi-amrfinderplus && amrfinder -u`.

## Development

```bash
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest -m "not network"   # offline tests
.venv/bin/pytest                    # also hits the live NCBI/UniProt APIs
```

## Data licensing

The NCBI Reference Gene Catalog and NCBI sequence data are US government works in the public domain.
UniProt data is available under CC BY 4.0. Please cite the original sources when you publish results:

- Feldgarden M, et al. *AMRFinderPlus and the Reference Gene Catalog facilitate examination of the
  genomic links among antimicrobial resistance, stress response, and virulence.* Sci Rep. 2021.
- The UniProt Consortium. *UniProt: the Universal Protein Knowledgebase.* Nucleic Acids Res.

## License

MIT

---

Developed with AI assistance (Claude Code); all code reviewed and tested by the author.
