UniProt MCP
PYPI · UNIPROT-MCP-SERVER · SCANNED SEP 21
Verifiable, release-aware protein evidence workflows over UniProt and linked scientific sources.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 0 of 29 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (Apache Software License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 17 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability70
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 8907 tokens (~217/item across 41 items; 41 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 93% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 41 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the UniProt MCP server?
UniProt MCP runs locally as a PyPI package, launched with uvx uniprot-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · uniprot-mcp-server
claude mcp add smaniches-uniprot-mcp -- uvx uniprot-mcp-server
{
"mcpServers": {
"smaniches-uniprot-mcp": {
"command": "uvx",
"args": [
"uniprot-mcp-server"
]
}
}
} {
"servers": {
"smaniches-uniprot-mcp": {
"command": "uvx",
"args": [
"uniprot-mcp-server"
]
}
}
} codex mcp add smaniches-uniprot-mcp -- uvx uniprot-mcp-server
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"smaniches-uniprot-mcp": {
"type": "local",
"command": [
"uvx",
"uniprot-mcp-server"
],
"enabled": true
}
}
} openclaw mcp add smaniches-uniprot-mcp --command uvx --arg uniprot-mcp-server
mcp_servers:
smaniches-uniprot-mcp:
command: "uvx"
args: ["uniprot-mcp-server"] {
"McpServers": {
"smaniches-uniprot-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"uniprot-mcp-server"
]
}
}
} assistant mcp add smaniches-uniprot-mcp -t stdio -c uvx -a uniprot-mcp-server
{
"mcpServers": {
"smaniches-uniprot-mcp": {
"command": "uvx",
"args": [
"uniprot-mcp-server"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Sept 26 −2
- Stability: pass → 0.80 functional
- 20 Sept 26 0
- Stability: 0.97 → pass security
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −1
- Stability: pass → 0.93 functional
- 17 Sept 26 0
- Stability: 0.97 → pass security
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed pypi/uniprot-mcp-server@1.3.6
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 29 packages
| Packages resolved | 29 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
uniprot_batch_entries ~159
Fetch multiple entries in a single call. Use this instead of repeated ``uniprot_get_entry`` calls when you already have a list of accessions — one network round-trip instead of N, with invalid accessions reported rather than aborting the batch.
| Name | Type | Req | Description |
|---|---|---|---|
| accessions | string | yes | Comma-separated UniProt accessions, e.g. 'P04637,P38398'. Invalid accessions are skipped rather than failing the whole call; only the first 100 valid accessions are fetched. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_compute_properties ~220
Derived sequence chemistry for a UniProt entry: molecular weight, theoretical pI, GRAVY hydrophobicity, aromaticity, net charge at pH 7, extinction coefficient at 280 nm, amino-acid composition. Computed from the canonical FASTA via standard methods (Lehninger pK values, Kyte-Doolittle hydropathy, Pace 1995 ε₂₈₀ formula). Pure-Python — no additional external API call beyond the FASTA fetch.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_features_at_position ~211
List every UniProt feature that overlaps a residue position (1-indexed). Answers the question 'what's at residue 175 of TP53?' by intersecting the entry's features with the given position. Useful for variant-effect interpretation — surfaces every domain, binding site, modification, mutagenesis annotation, and natural variant at a single residue in one call.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| position | integer | yes | 1-indexed residue position within the protein sequence. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_active_sites ~175
Return the active sites, binding sites, metal-binding residues, and DNA-binding regions annotated on a UniProt entry. Filtered view over the entry's feature array — this is the residue-level chemistry of the protein, the input to enzyme drug-design and antibiotic target-validation workflows.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_alphafold_confidence ~291
Fetch the per-residue confidence (pLDDT) summary for an entry's AlphaFold model, not just its existence. Returns the global mean pLDDT score plus the four-band distribution (very high ≥ 90 / confident 70-90 / low 50-70 / very low < 50) so the agent can decide whether to trust the model: 95% 'very high' is publication-grade, 40% 'very low' is largely disordered and structural inference is unsafe. Call ``uniprot_resolve_alphafold`` first if you only need the model ID and viewer link, not its confidence. This tool calls https://alphafold.ebi.ac.uk — declared in PRIVACY.md as a third party. Provenance carries source = AlphaFoldDB.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_citation ~124
Fetch a UniProt citation record by ID (typically a PubMed ID, e.g. 9840937). Returns title, authors, journal, year, volume, pages, and cross-references.
| Name | Type | Req | Description |
|---|---|---|---|
| citation_id | string | yes | Citation ID, typically a numeric PubMed ID, e.g. '9840937'. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_cross_refs ~310
List every external-database cross-reference UniProt has curated for an entry (PDB, Pfam, Ensembl, Reactome, KEGG, STRING, and dozens more), optionally narrowed to one ``database``. For the common single-database cases there are dedicated, richer tools that resolve structured details beyond a bare ID: ``uniprot_resolve_pdb`` (structures with method/resolution), ``uniprot_resolve_alphafold``, ``uniprot_resolve_interpro``, and ``uniprot_resolve_chembl``. Use this tool for any other database or to see the full cross-reference set at once.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| database | string | – | Optional exact database name to filter to, e.g. 'PDB', 'Pfam', 'Ensembl', 'Reactome', 'KEGG', 'STRING'. Leave empty to return cross-references to every linked database. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_disease_associations ~217
Structured disease associations for a UniProt entry. Returns the diseases recorded in DISEASE-type comments with name, acronym, UniProt disease ID, OMIM cross-reference, description, and the annotation note. Critical for clinical interpretation — distinguishes a UniProt-curated disease association (literature-anchored) from a raw cross-reference. Empty result does not imply disease-irrelevant; see Open Targets / OMIM / DisGeNET for population-level evidence.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_entry ~157
Fetch a UniProt protein entry by accession (e.g. P04637 for p53, P38398 for BRCA1). Returns function, gene, organism, disease associations, cross-references.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_evidence_summary ~304
Summarise and grade the ECO (Evidence and Conclusion Ontology) codes attached to a UniProt entry's annotations. Counts how many features and comments cite each evidence code, then classifies every occurrence as experimental (wet-lab, ECO:0000269), manual (curator-reviewed inference), or automatic (un-reviewed pipeline call) and collapses that into a single 0-100 evidence-confidence score with a high / moderate / low / very-low band. A score near 100 means the entry is dominated by direct experimental evidence; a score near 10 means it is almost entirely computationally inferred. Critical for any downstream agent that must distinguish 'wet-lab confirmed' annotations from 'inferred by similarity'. JSON output adds an ``evidence_confidence`` block (score, band, per-class breakdown, weights) alongside the raw ``evidence_counts``.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_features ~278
Return the full, unfiltered feature array for an entry: domains, binding sites, PTMs, signal peptides, and every other annotated region, optionally narrowed by ``feature_types``. For a residue-specific view ('what's at position 175?') use ``uniprot_features_at_position`` instead; for the curated subsets (active/binding sites, processing, PTMs alone) the dedicated ``uniprot_get_active_sites`` / ``uniprot_get_processing_features`` / ``uniprot_get_ptms`` tools apply the same filter server-side.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| feature_types | string | – | Optional comma-separated allow-list of UniProt feature type names, e.g. 'Domain,Active site,Binding site,Modified residue'. Leave empty to return every feature on the entry. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_go_terms ~167
Get GO annotations grouped by aspect.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| aspect | string | – | Optional Gene Ontology aspect filter: 'F' (molecular function), 'P' (biological process), 'C' (cellular component), or empty for all three. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_keyword ~140
Fetch a UniProt keyword by ID (e.g. KW-0007 for Acetylation, KW-0539 for Nucleus). Returns name, definition, category, synonyms, GO cross-refs, and parent/child hierarchy.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword_id | string | yes | UniProt keyword ID, e.g. 'KW-0007' (Acetylation). Always starts with 'KW-'. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_processing_features ~219
Return the maturation and processing features (signal peptide, propeptide, transit peptide, initiator methionine, chain, peptide). These describe how the translated polypeptide is cleaved and targeted into its mature form — essential for therapeutic-protein engineering and pathogen-secretion-system analysis. A pre-filtered view over ``uniprot_get_features``; for post-translational chemical modifications instead of cleavage/targeting, use ``uniprot_get_ptms``.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_proteome ~147
Fetch a UniProt proteome by UP ID (e.g. UP000005640 = human reference). Returns organism, taxonomy lineage, protein count, gene count, BUSCO completeness score, annotation score, and component breakdown (chromosomes / contigs).
| Name | Type | Req | Description |
|---|---|---|---|
| proteome_id | string | yes | UniProt proteome ID, e.g. 'UP000005640' (human reference). Always starts with 'UP'. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_ptms ~246
Return the post-translational modification features (modified residues, glycosylation sites, lipidation sites, disulfide bonds, cross-links). PTMs are functionally critical: they switch enzymes on, target proteins for degradation, anchor them to membranes, and fold them via disulfides. A pre-filtered view over ``uniprot_get_features``; for cleavage/targeting features instead of chemical modifications, use ``uniprot_get_processing_features``. The empty case carries an honest pointer to mass-spec databases (PhosphoSitePlus, GlyConnect) for additional evidence.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_publications ~217
List the publications UniProt cites on an entry, with PubMed IDs, DOIs, titles, authors, journal, year, and the 'reference position' annotation (the experimental work each citation supports — e.g. 'CRYSTALLIZATION', 'PHOSPHORYLATION AT SER-15', 'INVOLVEMENT IN LI-FRAUMENI SYNDROME'). Pure composition over the entry's ``references`` block — no extra HTTP call beyond the entry fetch.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_sequence ~178
Fetch the canonical protein sequence in FASTA format. Use this when you need the raw residue string itself (e.g. for local sequence analysis); for pre-computed chemistry derived from this same sequence (molecular weight, pI, hydrophobicity) call ``uniprot_compute_properties`` instead, which fetches the FASTA internally so you don't have to parse it yourself. Always returns markdown/plain-text FASTA — there is no ``response_format`` parameter because FASTA is already the interchange format.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_subcellular_location ~152
Fetch a UniProt subcellular-location term by ID (e.g. SL-0039 Cell membrane, SL-0086 Cytoplasm, SL-0191 Nucleus). Returns name, definition, category, GO cross-refs, and the is-a / part-of hierarchy.
| Name | Type | Req | Description |
|---|---|---|---|
| location_id | string | yes | UniProt subcellular-location ID, e.g. 'SL-0039' (Cell membrane). Always starts with 'SL-'. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_uniparc ~213
Fetch a UniParc sequence-archive record by its known UPI. Returns sequence, MD5/CRC64 checksums, cross-reference counts, linked UniProtKB accessions, and the common-taxa list. UniParc is the non-redundant sequence archive — every protein sequence ever submitted to a major public database has exactly one UniParc record, making this the tool to use when a UniProtKB accession doesn't exist for a sequence you have. Don't have a UPI yet? Use ``uniprot_search_uniparc`` to find one first.
| Name | Type | Req | Description |
|---|---|---|---|
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| upi | string | yes | UniParc identifier, e.g. 'UPI000002ED67'. Always starts with 'UPI'. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_uniref ~175
Fetch a UniRef cluster by ID. Examples: UniRef100_P04637 (100 % identity, only exact-match members), UniRef90_P04637 (90 % identity), UniRef50_P04637 (50 %, broadest grouping). Returns representative member, member list, common taxon, last-updated date.
| Name | Type | Req | Description |
|---|---|---|---|
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| uniref_id | string | yes | UniRef cluster ID, e.g. 'UniRef90_P04637'. Prefix is 'UniRef50_'/'UniRef90_'/'UniRef100_' followed by the representative member's accession. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_get_variants ~223
List every literature-described natural variant UniProt has curated for an entry, including disease-associated mutations. Use this to see the full variant catalogue for a protein; to check one specific HGVS-shorthand change (e.g. 'R175H') use ``uniprot_lookup_variant`` instead, which does the position/residue matching for you. UniProt's natural-variant annotations only cover literature-described variants — for population-scale clinical significance data use ``uniprot_resolve_clinvar``.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_id_mapping ~190
Map identifiers between UniProt and external databases (or between two external databases) via UniProt's ID mapping service. Submits an async job and polls it to completion server-side, so the call may take a few seconds for large batches.
| Name | Type | Req | Description |
|---|---|---|---|
| from_db | string | yes | Source database code, e.g. 'UniProtKB_AC-ID', 'PDB', 'Ensembl', 'GeneID' (Entrez), or 'Gene_Name'. |
| ids | string | yes | Comma-separated identifiers to map, up to 100 per call. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| to_db | string | yes | Target database code, same code set as ``from_db``. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_lookup_variant ~270
Look up an HGVS-shorthand amino-acid change (e.g. ``R175H``, ``V600E``, ``R248*``) in the UniProt entry's natural-variant annotations. Returns the matching variant feature(s) including the UniProt-curated description (often a disease association). A null result here does NOT mean a variant is benign — UniProt only annotates literature-described variants; ClinVar / dbSNP carry population-level data.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| change | string | yes | HGVS-shorthand amino-acid change, e.g. 'R175H', 'V600E', 'R248*' (stop). Format: <original residue><1-indexed position><alt residue or '*'>. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_provenance_verify ~250
Re-fetch a previously recorded UniProt URL and verify it still returns the same release identifier and the same canonical response body (SHA-256). Pass the values from a prior response's provenance footer (`url`, `release`, `response_sha256`, `accept_header`); empty optional fields skip the corresponding check. Returns a verification report with explicit pass / drift / unreachable verdicts per check. ``accept_header`` must match the Accept header used for the original request (default ``application/json``; use ``text/plain;format=fasta`` for FASTA-originated provenance). Replaying the wrong header causes a guaranteed hash mismatch because the upstream serves different content depending on content negotiation. This is the single tool that converts every prior uniprot-mcp response into an independently auditable artefact — a year from now, a third party can take the recorded provenance footer and confirm the upstream still serves the exact same bytes.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_header | string | – | – |
| release | string | – | – |
| response_format | string | – | – |
| response_sha256 | string | – | – |
| url | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_replay_from_cache ~148
Read a previously-cached UniProt response without hitting the upstream. The local provenance cache is opt-in via the ``UNIPROT_MCP_CACHE_DIR`` environment variable; when unset, this tool always reports cache-disabled. Useful for: reproducing a year-old answer from a sealed cache snapshot; working offline / behind air-gaps; reducing UniProt's load when running benchmarks twice. Returns the cached body text wrapped in the recorded Provenance. The annotation ``openWorldHint=False`` reflects that this tool consults the local file system only — no upstream call.
| Name | Type | Req | Description |
|---|---|---|---|
| response_format | string | – | – |
| url | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_alphafold ~149
Resolve the AlphaFoldDB cross-reference for a UniProt entry — typically one canonical model per accession. Includes a direct EBI viewer link.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_chembl ~163
Resolve ChEMBL drug-target cross-references for a UniProt entry. Returns the ChEMBL target IDs with EBI viewer links — empty if the protein has no documented bioactivity data in ChEMBL.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_clinvar ~349
Look up ClinVar records for the gene encoded by a UniProt entry. First fetches the entry to extract the canonical gene symbol, then queries NCBI eutils ClinVar by gene (and optional protein-change filter, e.g. ``R175H``). Returns clinical-significance classification, review status, condition list (trait_set), molecular consequence, and the protein-change list per record. Critical for clinical workflows — UniProt's natural-variant annotations stop at literature-described variants. ClinVar carries every variant submitted by clinical labs, with curated significance classifications. Combine ``uniprot_lookup_variant`` (UniProt side) with ``uniprot_resolve_clinvar`` (population side) for a full variant-effect picture. Calls https://eutils.ncbi.nlm.nih.gov — declared in PRIVACY.md.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| change | string | – | Optional HGVS-shorthand protein change to filter to, e.g. 'R175H'. Leave empty to return all ClinVar records for the gene. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of ClinVar records to return; capped at 50. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_interpro ~147
List InterPro signatures (domain / family classifications) for a UniProt entry, with names extracted from the entry's cross-reference properties.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_orthology ~224
Group every orthology cross-reference in a UniProt entry by source database (KEGG / OMA / OrthoDB / eggNOG / HOGENOM / PhylomeDB / InParanoid / TreeFam / GeneTree / PAN-GO / PANTHER / OrthoInspector). Different databases use different inference methods; surfacing them side-by-side lets the agent reason about consensus when comparing orthologs across species. Pure-Python — no extra HTTP call beyond the entry fetch.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_resolve_pdb ~163
List every PDB structure cross-referenced from a UniProt entry, with method, resolution, and chain coverage. Faster than parsing the raw cross-references blob — returns a structured list typed for downstream analysis.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search ~290
The general-purpose entry point for finding UniProtKB proteins by any combination of gene, organism, keyword, or free text. Use this first when you don't already have an accession; use ``uniprot_get_entry`` once you do. Examples: '(gene:TP53) AND (organism_id:9606)', 'kinase AND reviewed:true'. ``reviewed_only`` and ``organism`` are convenience shortcuts equivalent to adding the corresponding clause to ``query`` yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| organism | string | – | Optional organism filter: a taxonomy ID ('9606') or a scientific name ('Homo sapiens'). Applied as an additional AND clause on top of ``query``; leave empty to search all organisms. |
| query | string | yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| reviewed_only | boolean | – | If true, restrict results to reviewed Swiss-Prot entries only. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_citations ~260
Search the UniProt citations index (the literature UniProt references) by title, author, or year. Use this to find a citation's ID (typically a PubMed ID); once you have it, call ``uniprot_get_citation`` for the full record. For the publications attached to one specific protein entry, use ``uniprot_get_publications`` instead. Returns up to ``size`` matches, or an empty list if nothing matches. Examples: 'p53 AND author:Vogelstein', 'BRCA1 AND year:[2020 TO 2024]'.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Citation query using UniProt citation fields, e.g. 'p53 AND author:Vogelstein' or 'BRCA1 AND year:[2020 TO 2024]'. Supports free text plus 'author:', 'title:', and 'year:' ranges. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_keywords ~227
Search UniProt's controlled keyword vocabulary (the ``KW-####`` terms) by name or definition. Use this to discover a keyword ID from a concept; once you have the ``KW-####`` ID, call ``uniprot_get_keyword`` for its full record (definition, category, hierarchy, GO cross-references). Returns up to ``size`` matches, or an empty list if nothing matches. Examples: 'acetylation', 'nucleus', 'kinase activity'.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Free-text to match against UniProt keyword names, synonyms, and definitions, e.g. 'acetylation', 'nucleus', 'kinase activity'. Plain words, not a UniProtKB field query. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_proteomes ~261
Search UniProt proteomes (whole-organism protein sets) by organism or proteome field. Use this to find a proteome's ``UP#########`` ID; once you have it, call ``uniprot_get_proteome`` for the full record (protein / gene counts, BUSCO completeness, component breakdown). Returns up to ``size`` matches, or an empty list if nothing matches. Examples: 'organism_id:9606' for human, 'proteome_type:1' for reference proteomes only, 'taxonomy_name:bacteria' for all bacterial proteomes.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Proteome query using UniProt proteome fields, e.g. 'organism_id:9606' (human), 'proteome_type:1' (reference proteomes only), or 'taxonomy_name:bacteria'. Plain text also matches organism names. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_subcellular_locations ~244
Search UniProt's controlled subcellular-location vocabulary (the ``SL-####`` terms) by name or definition. Use this to discover a location ID from a concept; once you have the ``SL-####`` ID, call ``uniprot_get_subcellular_location`` for its full record (definition, category, hierarchy, GO cross-references). Returns up to ``size`` matches, or an empty list if nothing matches. Examples: 'membrane', 'mitochondrion', 'cytoplasm'.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Free-text to match against UniProt subcellular-location names, synonyms, and definitions, e.g. 'membrane', 'mitochondrion', 'cytoplasm'. Plain words, not a UniProtKB field query. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_uniparc ~217
Search the UniParc non-redundant sequence archive by taxonomy, source database, or other UniParc query fields — the entry point when you don't already have a UPI. Examples: 'taxonomy_id:9606' for human sequences, 'database:Ensembl' for Ensembl-derived entries. Once you have a UPI from the results, use ``uniprot_get_uniparc`` for the full record.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_search_uniref ~259
Search for UniRef clusters by content (not by a known cluster ID — for that, use ``uniprot_get_uniref`` directly). Example: query='kinase' identity_tier='90' returns the 90% clusters matching 'kinase'. Use a looser tier (50) to find broad homology groups, a tighter tier (100) to find near-identical sequence sets.
| Name | Type | Req | Description |
|---|---|---|---|
| identity_tier | string | – | Cluster identity threshold: '50' (loosest grouping), '90', '100' (tightest, only exact-match members), or empty for all tiers. Higher values return more, smaller, tighter clusters. |
| query | string | yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_target_dossier ~323
One-call comprehensive characterisation of a UniProt entry, structured for drug-discovery / clinical workflows. Composes nine views over the same entry plus one FASTA fetch (so two upstream network calls, not nine): Identity · Function · Sequence chemistry · Structural evidence (PDB count + best-resolution + AlphaFold model id + InterPro count) · Drug-target context (ChEMBL ids, DrugBank count) · Disease associations (with MIM IDs) · Variants count · Functional annotations (top GO MF, subcellular, ECO diversity) · Cross-references summary For per-residue pLDDT confidence call ``uniprot_get_alphafold_confidence`` separately. For full disease detail call ``uniprot_get_disease_associations``. The dossier is the entry- level summary that decides which deeper tools are worth calling.
| Name | Type | Req | Description |
|---|---|---|---|
| accession | string | yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
uniprot_taxonomy_search ~250
Resolve an organism name to its NCBI taxonomy ID(s) — the numeric ID other UniProt tools expect (e.g. the ``organism`` parameter of ``uniprot_search``, or ``organism_id:`` in a query string). Returns each match's taxonomy ID, scientific name, common name, and rank (species / genus / etc.); a name can resolve to multiple IDs when it's ambiguous (e.g. a genus with several species), so inspect the rank and full scientific name before picking one. Use this before filtering any other search by organism if you only know the name, not the numeric ID.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Organism name or partial name to search for, e.g. 'Homo sapiens' or 'coli'. Matches against scientific and common names. |
| response_format | string | – | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. |
| size | integer | – | Maximum number of results to return; capped at 500 server-side. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
What is the UniProt MCP server?
UniProt MCP is listed in the public MCP registry as io.github.smaniches/uniprot-mcp. Verifiable, release-aware protein evidence workflows over UniProt and linked scientific sources. This page covers its PyPI package (uniprot-mcp-server).
Is the UniProt MCP server safe to use?
UniProt MCP scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the UniProt MCP server expose?
UniProt MCP exposes 41 tools: uniprot_get_entry, uniprot_search, uniprot_get_sequence, uniprot_get_features, uniprot_get_go_terms, and 36 more. Their descriptions and schemas cost roughly 8,907 tokens of context every time the server is loaded.
Is the UniProt MCP server still maintained?
UniProt MCP is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.