UniProt MCP

io.github.smaniches由 GitHub 帳號 smaniches 發布v1.3.17更新於 Nov 4, 2026

Verifiable, release-aware protein evidence workflows over UniProt and linked scientific sources.

概覽

AI 產生的概覽

唯讀的 UniProt 伺服器,讓助理查詢蛋白質、變異、結構與來源憑證,並保留可核查的出處紀錄。

可以做什麼
  • 檢索並取得 UniProtKB 條目、FASTA 序列、特徵、變異、GO 註解、交叉參照、分類學資訊與批次查詢
  • 瀏覽受控詞彙、UniRef 叢集、UniParc 序列檔案、蛋白質體與文獻引用
  • 解析 PDB、AlphaFold、InterPro、ChEMBL 的結構化交叉紀錄,並依來源資料庫歸組同源關係
  • 回答殘基與臨床問題:序列理化性質、某位置的特性、HGVS 變異查詢、疾病關聯、活性位點、加工特徵、轉譯後修飾與證據分級
  • 補充 AlphaFold 信心度與 ClinVar 紀錄,或一次呼叫產生九段式標的檔案
  • 校驗已記錄的 UniProt 回應與目前資料是否一致,並離線重播快取回應
適用情境
適合生物醫學或生物資訊研究,讓助理從 UniProt 取得蛋白質、變異與結構證據,並保留可核查的來源紀錄。也適用於藥物標的刻畫與可重現、鎖定版本的查詢。
執行需求
以本機 Python 套件執行(uvx 或 pip install uniprot-mcp-server);PyPI 上同名的 uniprot-mcp 是另一個專案。不需要 API 金鑰。需要連線至 UniProt,另有兩個工具需連線至 AlphaFold DB 與 NCBI ClinVar。選用環境變數 UNIPROT_PIN_RELEASE 與 UNIPROT_MCP_CACHE_DIR 可鎖定版本與離線讀取快取。
安裝前請注意
所有工具皆為唯讀,但結果會傳送給第三方服務:UniProt,以及兩個補充工具所用的 AlphaFold DB 與 NCBI ClinVar。來源校驗只涵蓋 UniProt REST 紀錄,不涵蓋 ClinVar 或 AlphaFold 結果,且校驗通過不等於臨床驗證。快取為唯讀,需由外部流程填入。請安裝正確的套件名稱,以免誤裝其他專案。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 UniProt MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

UniProt MCP Server

[CI] [OpenSSF Scorecard] [GitHub Release] [PyPI version] [PyPI downloads/30d] [License: Apache 2.0] [Python 3.11+] [MCP compatible] [Coverage] [Provenance: SHA-256 + verify] [ORCID] [DOI] [Glama score] [Awesome MCP Servers]

Produce verifiable, release-aware protein evidence packages from UniProt and linked scientific sources.

Use this MCP server to find proteins, assemble protein, target, and variant evidence, and keep a checkable record of where each result came from. Responses preserve source-specific provenance, including the provider, retrieval time, source URL, and a SHA-256 digest. A release identifier is present when the provider supplies one. uniprot_provenance_verify can compare recorded UniProt REST records with current UniProt data; it does not independently verify ClinVar or AlphaFold DB results.

The complete tool catalog remains available for specialized research workflows.

Author: Santiago Maniches · ORCID 0009-0005-6480-1987 · TOPOLOGICA LLC

Research authorship: Santiago Maniches independently maintains this server and is the sole scientific author of its project-specific research contributions. AI-assisted tools have supported development, testing, and internal review under his direction. UniProt records, linked source data, and underlying third-party methods retain their original authorship; internal tool-assisted review is not external scientific validation.

Run it in one line:

bash
uvx uniprot-mcp-server

Provenance: a source-backed TP53 capture

The TP53 R175H example is a real capture from October 15, 2026, not a hypothetical model transcript. Its UniProt, ClinVar and AlphaFold DB responses are saved with their original response bytes in the capture directory. The contract test recomputes raw and canonical SHA-256 values from the saved upstream bytes and checks their captured footer URLs and hashes. It separately compares the transcript text with a saved tool-output record; it does not independently re-derive every parsed statement from those bytes.

For example, the captured UniProt P04637 response has:

text
Source: UniProt release 2026_03 (02-September-2026)Retrieved: 2026-10-15T10:32:43ZURL: https://rest.uniprot.org/uniprotkb/P04637Canonical SHA-256: 112540dcb662c3ce2feba05272ce0e946ce76089a5bcf8346eb55141892f7fcf

To validate this historical capture from a repository checkout:

bash
pytest -q tests/contract/test_tp53_capture_binding.py

To compare the current upstream record with the captured one, invoke uniprot_provenance_verify with the URL, release and digest above. A live response can legitimately differ from the October 2026 capture; do not assume that its verification verdict will be verified.

This verifies source digest binding and that two recorded text copies agree, not the scientific correctness of every parsed claim. ClinVar's germline classification does not establish somatic actionability, and a model-wide AlphaFold confidence summary does not establish confidence at a specific residue.

Installation

Run without installing (recommended):

bash
uvx uniprot-mcp-server

Or install into an environment:

bash
pip install uniprot-mcp-server

Note: There is an unrelated package named uniprot-mcp on PyPI (different author, 5 tools, MIT). This package is uniprot-mcp-server. Running pip install uniprot-mcp will install the wrong package silently.

For researchers — where to start

If you are a biomedical researcher visiting this repo, the highest-signal places to look are:

ResourceWhat it gives you
MCP tool documentationLive UniProt source access, accession-level lookups, provenance, and optional AlphaFold structure-confidence retrieval. No separate hand-maintained clinical collection is distributed.
TP53 R175H captureDated live transcript, preserved upstream response bytes, digest/footer checks, and recorded text comparison. Not independently validated biomedical interpretation. The illustrative transcripts were withdrawn.
tests/benchmark/Pre-registered 30-prompt benchmark with SHA-256 commitments on main. The 2026-04-26 v1.1.0 run verified 30/30 against live UniProt — transcript at tests/benchmark/run-2026-04-26-v1.1.0/.
scripts/replicate.shOne-command verification that the published PyPI wheel was built from this exact repo (cross-checks SHA-256 across PyPI / GitHub Release / SLSA attestation; runs --self-test; re-runs the benchmark live). POSIX + scripts/replicate.ps1 for Windows.
docs/COMPETITIVE_LANDSCAPE.mdHonest 14-server survey of the bio-MCP space (April 2026) and the specific differentiation this server claims.

Issues / corrections welcome at https://github.com/smaniches/uniprot-mcp/issues. Tool results are source-attributed; UniProt annotations and predicted structural confidence retain their upstream evidence type. No separate clinical disease index is maintained.


What makes this different

uniprot-mcpVanilla LLM + WebFetchA typical bio-MCP
Tool surface41 tools, 8 familiesnone — caller writes URLsusually 5–10
Source provenanceprovider • date • URL • SHA-256 (release where available)nonesometimes URL only
UniProt REST verificationuniprot_provenance_verify compares recorded UniProt REST responses; external ClinVar/AlphaFold origins are outside its scopevariesvaries
Release pinning--pin-release=YYYY_MM raises on driftn/an/a
Pre-registered benchmark30 prompts, SHA-256 committed on main + reproducible verifiern/an/a
Local provenance cacheuniprot_replay_from_cache read primitive (automatic cache write-through is not wired into the request path — see §Provenance & verification)n/an/a
Clinical primitivessequence chemistry / position-aware features / HGVS variant lookup / disease associations / AlphaFold pLDDT / ClinVarnonenone
Composition tooluniprot_target_dossier — one call, nine sectionsn/an/a
Input validationregex + length cap before any HTTP callnonepartial
Error-channel safetyupstream exception text never echoed to LLMn/apartial
Cross-origin allowlistenumerated, threat-modelled, privacy-listedn/ausually unaudited
Supply chainSLSA build provenance + Sigstore + CycloneDX SBOM (post-flip)n/arare
Test layersunit + property + contract + client + integration + benchmarkn/ausually unit only
Mutation testingweekly + on-demand workflow; per-module measurement complete for cache 82 %, proteinchem 92 %, client 70 %; gate currently 0 % (measurement-first), ≥ 95 % is the v1.2.0 target — see docs/MUTATION_SCORES.mdn/arare

The provenance + verify chain is, in my 2026-04-26 survey, absent from every other bio-MCP I could find. A regulated user can take any prior uniprot-mcp answer and prove — without contacting the author — that UniProt still returns the same bytes, or detect exactly how the upstream has drifted. If you find a counter-example I missed, please file an issue and I will update the comparison.


Tools (41)

Eight endpoint families. All read-only (readOnlyHint: true). All but uniprot_replay_from_cache interact with at least one upstream service (openWorldHint: true). No UniProt API key required.

Core UniProtKB (10)

ToolPurpose
uniprot_get_entryFull UniProt entry (e.g. P04637 for p53). Function, gene, organism, disease, cross-refs.
uniprot_searchUniProt query language — gene, organism, taxon ID, reviewed flag, free text.
uniprot_get_sequenceFASTA. PIR-style provenance comment block above the first record (BLAST+ / biopython compatible).
uniprot_get_featuresDomains, binding sites, PTMs, signal peptides — optional type filter.
uniprot_get_variantsNatural variants and disease mutations.
uniprot_get_go_termsGO annotations grouped by aspect (F / P / C).
uniprot_get_cross_refsRaw cross-references to PDB, Pfam, Ensembl, Reactome, KEGG, STRING …
uniprot_id_mappingMap IDs between databases (Gene_Name → UniProtKB, PDB → UniProtKB, …).
uniprot_batch_entriesUp to 100 entries in one call; invalid accessions filtered client-side.
uniprot_taxonomy_searchSearch UniProt taxonomy by organism name.

Controlled vocabularies (4)

ToolPurpose
uniprot_get_keywordKeyword by ID (e.g. KW-0007 = Acetylation). Definition, synonyms, GO refs, hierarchy.
uniprot_search_keywordsFree-text keyword search.
uniprot_get_subcellular_locationSubcellular-location term by ID (e.g. SL-0039 = Cell membrane).
uniprot_search_subcellular_locationsFree-text location search.

Sequence archives & clusters (4)

ToolPurpose
uniprot_get_unirefUniRef cluster by ID (UniRef50_P04637, UniRef90_P04637, UniRef100_P04637).
uniprot_search_unirefCluster search with identity_tier filter (50 / 90 / 100).
uniprot_get_uniparcSequence-archive record by UPI (UPI000002ED67).
uniprot_search_uniparcUniParc full-text search.

Proteomes & literature (4)

ToolPurpose
uniprot_get_proteomeProteome by UP ID (UP000005640 = human). Counts, BUSCO score, components.
uniprot_search_proteomesFilter by organism / type / completeness.
uniprot_get_citationCitation record by ID (typically a PubMed numeric ID).
uniprot_search_citationsIndex search across UniProt citations.

Structured cross-DB resolvers (4)

Gateway-only — no calls leave the UniProt origin. These extract the relevant cross-references from a UniProt entry and return structured records (typed lists / objects, not passthrough strings).

ToolPurpose
uniprot_resolve_pdbPDB structures: id + method + resolution + chain coverage.
uniprot_resolve_alphafoldAlphaFold model id + EBI viewer URL (model id only — for pLDDT call the dedicated tool below).
uniprot_resolve_interproInterPro signatures: id + entry name.
uniprot_resolve_chemblChEMBL drug-target id + EBI target-card URL.

Biomedical features (7)

Pure-Python compositions over the entry — no extra origin. The first four answer per-residue and per-variant questions; the last three are the v1.1.0 expansion targeting drug discovery, therapeutic-protein engineering, and pathogen-secretion analysis: each is a filter over the entry's features array, with a structured grouping by feature type and an honest empty-set advisory.

ToolPurpose
uniprot_compute_propertiesDerived sequence chemistry from the FASTA: MW / pI / GRAVY / aromaticity / charge / ε₂₈₀.
uniprot_features_at_positionEvery feature overlapping a residue position. Critical for variant-effect interpretation.
uniprot_lookup_variantHGVS-shorthand match (R175H, V600E, R248*) against UniProt's natural-variant features.
uniprot_get_disease_associationsStructured disease records from DISEASE-type comments: name + acronym + UniProt disease ID + OMIM cross-ref + description.
uniprot_get_active_sitesCatalytic and ligand-binding residues: active sites, binding sites, sites, metal binding, DNA binding. The residue-level chemistry of the protein.
uniprot_get_processing_featuresMaturation features: signal peptide, propeptide, transit peptide, initiator methionine, chain, peptide. Essential for therapeutic-protein engineering and pathogen-secretion analysis.
uniprot_get_ptmsPost-translational modifications: modified residues (phospho/acetyl/methyl), glycosylation, lipidation (GPI/prenyl/palmitoyl), disulfide bonds, cross-links.

Cross-origin enrichment (3)

The only tools that consult origins outside rest.uniprot.org. Each is documented in PRIVACY.md and in the threat model.

ToolOriginPurpose
uniprot_get_alphafold_confidencealphafold.ebi.ac.ukpLDDT mean + four-band distribution; lets the agent decide whether to trust the model.
uniprot_resolve_clinvareutils.ncbi.nlm.nih.govHuman UniProt entries only (NCBI taxon 9606); ClinVar classifications by gene + optional protein change, not transferable to nonhuman orthologs.
uniprot_get_publicationsrest.uniprot.orgPure-Python over the entry's references — listed here because it complements the cross-origin enrichment.

Composition + provenance (5)

ToolPurpose
uniprot_resolve_orthologyGroup orthology cross-references by source DB (KEGG / OMA / OrthoDB / eggNOG / 8 more).
uniprot_get_evidence_summarySummarize UniProt ECO annotation evidence and assertion methods, with a weighted 0-100 descriptive mix index. The index is uncalibrated, not a probability of annotation correctness and not comparable to AlphaFold pLDDT.
uniprot_target_dossierOne-call comprehensive characterisation: nine sections — identity / function / chemistry / structure / drug-target / disease / variants / functional annotations / cross-refs.
uniprot_provenance_verifyRe-fetch a previously recorded URL and compare release tag + canonical response SHA-256. Six verdicts (verified, incomplete_evidence, release_drift, hash_drift, release_and_hash_drift, url_unreachable) each with an advice string.
uniprot_replay_from_cacheRead a cached UniProt response without hitting the upstream. Opt-in via UNIPROT_MCP_CACHE_DIR.

Provenance & verification

The verifiable source receipt above comes from the stored October 2026 TP53 capture, not from an illustrative or reconstructed transcript. The uniprot_provenance_verify tool compares a recorded UniProt release and canonical SHA-256 with a newly retrieved response. It can report a match or a drift state, depending on current upstream bytes. A successful comparison is not independent clinical validation.

Do not claim a future verification result in advance. For exact historical replay, retain the original response bytes or retrieve the appropriate UniProt source snapshot.

If UniProt has moved on, the tool tells you exactly how:

VerdictMeaningAdvice
verifiedBoth release and hash matchThe provenance is reproducible
incomplete_evidenceURL reachable, but reference checks missingSupply recorded release and SHA-256
release_driftUniProt released a new versionPin via the FTP snapshot if you need the historical answer
hash_driftSame release, body changedAn in-release edit; investigate or re-fetch
release_and_hash_driftBoth moved onUse a release-specific FTP snapshot
url_unreachableEndpoint dropped or rate-limitedRetry or report to UniProt

For strict reproducibility, opt into release pinning:

bash
export UNIPROT_PIN_RELEASE=2026_01uniprot-mcp# every response is checked against the pinned release;# any drift raises `ReleaseMismatchError`, which the server surfaces# as an agent-actionable error envelope.

For offline replay, uniprot_replay_from_cache(url) reads a previously-recorded response from a directory pointed at by UNIPROT_MCP_CACHE_DIR:

bash
export UNIPROT_MCP_CACHE_DIR=~/.uniprot-mcp-cacheuniprot-mcp# uniprot_replay_from_cache(url) returns the entry at# $UNIPROT_MCP_CACHE_DIR/<sha256(url)>.json if present.

Status note (v1.1.3). uniprot_replay_from_cache is a read primitive. The cache must currently be populated by an external process — for example, by the maintainer-provided benchmark capture script, or by you wrapping httpx calls and writing to the directory yourself in the documented JSON shape (see src/uniprot_mcp/cache.py). Automatic cache write-through is not currently wired into the request path; cache entries must be populated explicitly or by an external capture workflow.

The October 2026 TP53 example preserves actual upstream response bytes and verifies them offline. The older April 2026 benchmark transcript was withdrawn as provenance evidence because its source bytes were not preserved; do not use its former verdicts as scientific or cryptographic proof.


Pre-registered benchmark

tests/benchmark/ ships a 30-prompt evaluation (Tier A / B / C × 10) with SHA-256-committed expected answers on main. The plaintext expected.jsonl is held local-only until a benchmark run is published; the cryptographic commitments mean the author cannot rewrite "correct" answers post-hoc.

Third-party reproducibility path (no seal file required). Re-derive every Tier A / B answer live from UniProt and print it — no expected.jsonl required. This confirms the answers are independently reproducible from the primary source today; it does not recompute the seal (the committed SHA-256 binds a withheld rationale — see below):

bash
python tests/benchmark/verify_against_hashes.py tests/benchmark/expected.hashes.jsonl# Re-derives all 30 answers live and prints them (informational; exit 0).

Maintainer cryptographic verification path (with the local plaintext seal). The committed digests in expected.hashes.jsonl are sealed over {prompt_id, answer, rationale}; the rationale is deliberately withheld as part of the sealed pre-registration, so the full cryptographic check requires the local expected.jsonl:

bash
python tests/benchmark/verify_answers.py tests/benchmark/expected.jsonl# OK: all 30 prompts verified against https://rest.uniprot.org
python tests/benchmark/verify.py tests/benchmark/expected.jsonl tests/benchmark/expected.hashes.jsonl# OK: 30 commitments verified

See tests/benchmark/AUDIT.md for the per-prompt source attribution and the formal independence statement (uniprot-mcp was not used during answer authoring).


Install

bash
pip install uniprot-mcp-server   # PyPI distribution# or, for a pinned, isolated install:uvx --from uniprot-mcp-server uniprot-mcp

Why three different names? This is the standard Python packaging pattern, exactly because PyPI's namespace is global and collisions force disambiguation:

ConceptValueWhat it is
GitHub repositorysmaniches/uniprot-mcpsource code + issue tracker
PyPI distributionuniprot-mcp-serverwhat you pip install (the bare uniprot-mcp name was already claimed on PyPI when this project published)
Python moduleuniprot_mcpwhat you import (PEP-8 underscore form)
Console script + MCP server identityuniprot-mcpwhat you run from the shell and what Claude Desktop sees

Cross-checks that prove the wheel you installed was built from this repo: each release ships a Sigstore signature, SLSA build provenance, and a CycloneDX SBOM, all attached to the v1.1.0 GitHub Release. Run bash scripts/replicate.sh (POSIX) or pwsh scripts/replicate.ps1 (Windows) to verify the full chain end-to-end. Common precedents for the same one-thing-three-names pattern: pillow/PIL, python-dateutil/dateutil, beautifulsoup4/bs4, python-Levenshtein/Levenshtein.

From source:

bash
git clone https://github.com/smaniches/uniprot-mcp.gitcd uniprot-mcppip install -e .

Claude Desktop

claude_desktop_config.json:

json
{  "mcpServers": {    "uniprot": {      "command": "uvx",      "args": ["uniprot-mcp-server"]    }  }}

For pinned, reproducibility-grade access:

json
{  "mcpServers": {    "uniprot": {      "command": "uniprot-mcp",      "args": ["--pin-release=2026_01"]    }  }}

To enable uniprot_replay_from_cache reads against a cache directory you have populated yourself (automatic write-through is not wired into the request path — see §Provenance & verification):

json
{  "mcpServers": {    "uniprot": {      "command": "uniprot-mcp",      "env": {        "UNIPROT_MCP_CACHE_DIR": "/absolute/path/to/cache"      }    }  }}

Claude Code (CLI)

bash
claude mcp add uniprot -- uniprot-mcp

Self-test (live UniProt smoke check)

bash
uniprot-mcp --self-test# [tools] registered: 41/41# [live] P04637 -> TP53 OK# [PASS]

Example workflows

1. Clinical-variant interpretation packet for TP53 R175H.

> What's at residue 175 of P04637? Is R175H a known variant? Pull> the UniProt and ClinVar evidence and tell me how confident the> AlphaFold model is at that residue.→ uniprot_features_at_position("P04637", 175)→ uniprot_lookup_variant("P04637", "R175H")→ uniprot_resolve_clinvar("P04637", change="R175H")→ uniprot_get_alphafold_confidence("P04637")

2. Drug-target dossier in one call.

> Give me a complete drug-target characterisation of human BRCA1.→ uniprot_target_dossier("P38398")   # nine sections, two upstream calls (entry + FASTA), one tool call.

3. Sequence chemistry for buffer choice / expression-system selection.

> What's the molecular weight, pI, and hydrophobicity of human insulin?→ uniprot_compute_properties("P01308")   # MW 11,981 Da, pI 4.93, ε₂₈₀ 24,980 M⁻¹·cm⁻¹ — pure Python on the FASTA.

4. Provenance drift check using the recorded TP53 capture.

text
> Check the 2026-10-15 UniProt P04637 response for drift.> Supply the captured release, URL, and canonical SHA-256:uniprot_provenance_verify(    url="https://rest.uniprot.org/uniprotkb/P04637",    release="2026_03",    response_sha256="112540dcb662c3ce2feba05272ce0e946ce76089a5bcf8346eb55141892f7fcf")

The verdict is determined by the live upstream response; no match is pre-asserted.

5. Replay a previously-cached answer offline (read primitive — see status note below).

bash
# Pre-condition: $UNIPROT_MCP_CACHE_DIR/<sha256(url)>.json already exists,# populated by the maintainer benchmark capture script or an external# wrapper. Automatic cache write-through is not currently wired into the# request path; cache entries must be populated explicitly or by an# external capture workflow.export UNIPROT_MCP_CACHE_DIR=~/sealed-cache> uniprot_replay_from_cache("https://rest.uniprot.org/uniprotkb/P04637")

Testing

LayerPathWhat
Unittests/unit/Behaviour of every public function.
Propertytests/property/Hypothesis-driven invariants on regexes + query construction.
Contracttests/contract/Manifest / pyproject / docs / incident-policy / benchmark drift prevention.
Clienttests/client/Retry / back-off / id-mapping polling against respx-mocked HTTP.
Integrationtests/integration/Live UniProt + AlphaFold; opt-in via --integration.
Benchmarktests/benchmark/30 SHA-256-committed prompts + reproducible verifier.

Offline and optional live integration suites are enforced in CI on main (real counts via pytest --collect-only --ignore=tests/integration and pytest --collect-only tests/integration; the offline count includes the v1.1.x mutation-killer files for cache, proteinchem, client, the contract tests for version-consistency / changelog-presence, and the coverage-gap test files that restored full coverage). Line + branch coverage is 100.00 % across all seven source files, with the [tool.coverage.report] gate set to fail_under = 100 so CI enforces it. Two branches carry a justified # pragma: no cover for genuinely-unreachable import-time fallbacks (documented inline and in pyproject.toml). Reproduce locally with pytest tests/unit tests/property tests/client tests/contract --cov=uniprot_mcp --cov-branch --cov-report=term-missing. Mypy (strict), ruff (check + format), bandit (0 issues at any severity), pip-audit (--strict, no known vulnerabilities) all clean. Mutation testing infrastructure ships and is measurement-first: see the per-module table at docs/MUTATION_SCORES.md for the latest matrix-workflow results; the ≥ 95 % gate is the v1.2.0 target, not the current state.

bash
# Fast, offline (CI on every push):pytest tests/unit tests/property tests/client tests/contract -v
# Live UniProt (opt-in, nightly in CI):pytest --integration tests/integration -v
# Lint / type-check / security / SCA:ruff check . && ruff format --check . && mypy src/uniprot_mcpbandit -r src/uniprot_mcp && pip-audit --strict

Architecture & threat model

  • docs/THREAT_MODEL.md — twelve STRIDE-shaped threats, each receipt-anchored to a code path or commit SHA, plus the cross-origin allowlist policy (§T3b).
  • docs/INCIDENT_POLICY.md + docs/POSTMORTEM_TEMPLATE.md + docs/INCIDENT_LOG.md — every nightly integration breakage triggers a postmortem entry.
  • AUDIT.md — pre-1.0.1 professional audit, P0/P1 remediations recorded.
  • docs/RELEASE.md — release runbook covering the tag → PyPI → MCP Registry → Sigstore → GitHub Release → Zenodo chain, including the release-verify.yml post-tag verification job and the one-time setup for the Zenodo + PyPI webhooks.
  • docs/archive/ — pre-flip planning docs retained for audit trail (PENDING_V1.md, MERGE_PLAN.md, RELEASE_AUDIT_v1.1.3.md). Not part of the published docs site; current operational status lives in README.md, CHANGELOG.md, and docs/MUTATION_SCORES.md.
  • mkdocs.yml — Material-themed docs site, deployable to gh-pages via .github/workflows/docs.yml. Build locally with pip install -e ".[docs]" && mkdocs serve.

Related MCP servers by the same author

  • alphafold-sovereign-mcp — Model Context Protocol server that integrates AlphaFold DB with eight additional public biomedical data sources, with a local SQLite knowledge graph (pip install alphafold-sovereign-mcp).
  • semantic-scholar-mcp — Model Context Protocol server for Semantic Scholar (200M+ academic papers), providing 14 tools for paper search, citation graph traversal, author profiles, and recommendations (pip install s2-mcp-server).

Citation

Cite via CITATION.cff (GitHub renders a "Cite this repository" button). Always also cite the UniProt Consortium:

The UniProt Consortium. UniProt: the Universal Protein Knowledgebase in 2025. Nucleic Acids Research (2025). doi:10.1093/nar/gkae1010


License

Apache-2.0 — see LICENSE and NOTICE.

This is a standalone, Apache-2.0-licensed UniProt MCP maintained by TOPOLOGICA LLC. It does not require a companion product. Its source provenance and replay features should not be mistaken for a tamper-evident audit ledger or independent scientific validation. Integrations that require persistent, trusted audit records must implement and assess that functionality separately.

Copyright © 2026 Santiago Maniches. TOPOLOGICA LLC.

來源:README.md,提交 c4ce8e9

工具

41

uniprot_get_entry

Fetch a UniProt protein entry by accession (e.g. P04637 for p53, P38398 for BRCA1). Returns function, gene, organism, disease associations, cross-references.

輸入參數accession必填response_format

uniprot_get_sequence

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.

輸入參數accession必填

uniprot_get_features

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.

輸入參數accession必填feature_typesresponse_format

uniprot_get_go_terms

Get GO annotations grouped by aspect.

輸入參數aspectaccession必填response_format

uniprot_get_cross_refs

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.

輸入參數databaseaccession必填response_format

uniprot_get_variants

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``.

輸入參數accession必填response_format

uniprot_id_mapping

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.

輸入參數ids必填to_db必填from_db必填response_format

uniprot_batch_entries

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.

輸入參數accessions必填response_format

uniprot_get_keyword

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.

輸入參數keyword_id必填response_format

uniprot_search_keywords

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'.

輸入參數sizequery必填response_format

uniprot_get_subcellular_location

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.

輸入參數location_id必填response_format

uniprot_search_subcellular_locations

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'.

輸入參數sizequery必填response_format

uniprot_get_uniref

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.

輸入參數uniref_id必填response_format

uniprot_search_uniref

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.

輸入參數sizequery必填identity_tierresponse_format

uniprot_resolve_orthology

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.

輸入參數accession必填response_format

uniprot_target_dossier

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.

輸入參數accession必填response_format

uniprot_replay_from_cache

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.

輸入參數url必填response_format

uniprot_resolve_clinvar

Look up ClinVar records for the gene encoded by a UniProt entry. First fetches the human UniProt entry to extract its gene symbol, then queries NCBI eutils ClinVar by gene (and optional protein-change filter, e.g. ``R175H``). Returns submitted human variant records with their classifications, review status, conditions, molecular consequences, and protein changes where present. ClinVar is a human variation archive. Gene symbols are not species- specific identifiers, so nonhuman or taxonomically unverified entries must not inherit human ClinVar classifications. ClinVar coverage is submission-dependent; a missing record does not establish benignity. Calls https://eutils.ncbi.nlm.nih.gov — declared in PRIVACY.md.

輸入參數sizechangeaccession必填response_format

uniprot_get_alphafold_confidence

Fetch model-level AlphaFold DB confidence metadata for an accession. Returns mean pLDDT and the four-band distribution of local model confidence, not individual residue scores. Checks the exact UniProt accession so an isoform's prediction cannot be substituted for the canonical protein. For multiple same-accession models or fragments, JSON output includes additionalModelSummaries with separate ranges. Global pLDDT does not prove experimental accuracy or validate confidence at a particular residue or between domains. Call ``uniprot_resolve_alphafold`` for the UniProt cross-reference. This tool calls https://alphafold.ebi.ac.uk — declared in PRIVACY.md as a third party. Provenance carries source = AlphaFoldDB.

輸入參數accession必填response_format

uniprot_get_publications

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.

輸入參數accession必填response_format

uniprot_compute_properties

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.

輸入參數accession必填response_format

uniprot_features_at_position

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.

輸入參數position必填accession必填response_format

uniprot_get_active_sites

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.

輸入參數accession必填response_format

uniprot_get_processing_features

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``.

輸入參數accession必填response_format

uniprot_get_ptms

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.

輸入參數accession必填response_format

uniprot_lookup_variant

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.

輸入參數change必填accession必填response_format

uniprot_get_disease_associations

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.

輸入參數accession必填response_format

uniprot_get_uniparc

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.

輸入參數upi必填response_format

uniprot_search_uniparc

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.

輸入參數sizequery必填response_format

uniprot_get_proteome

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).

輸入參數proteome_id必填response_format

uniprot_search_proteomes

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.

輸入參數sizequery必填response_format

uniprot_get_citation

Fetch a UniProt citation record by ID (typically a PubMed ID, e.g. 9840937). Returns title, authors, journal, year, volume, pages, and cross-references.

輸入參數citation_id必填response_format

uniprot_search_citations

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]'.

輸入參數sizequery必填response_format

uniprot_resolve_pdb

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.

輸入參數accession必填response_format

uniprot_resolve_alphafold

Resolve the AlphaFoldDB cross-reference for a UniProt entry — typically one canonical model per accession. Includes a direct EBI viewer link.

輸入參數accession必填response_format

uniprot_resolve_interpro

List InterPro signatures (domain / family classifications) for a UniProt entry, with names extracted from the entry's cross-reference properties.

輸入參數accession必填response_format

uniprot_resolve_chembl

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.

輸入參數accession必填response_format

uniprot_get_evidence_summary

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). A project-defined 0-100 index describes the annotation evidence mix, NOT annotation correctness, biological certainty, or a calibrated probability (unlike AlphaFold pLDDT). The legacy JSON key ``evidence_confidence`` includes ``calibrated=False`` and the raw ``evidence_counts`` remain available.

輸入參數accession必填response_format

uniprot_provenance_verify

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. Only both matches earn `verified`; absent checks return `incomplete_evidence` if nothing drifted. Reachability, mismatch and per-check fields remain available. ``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. Verification applies to individual UniProt REST responses only. It does not independently validate derived biological conclusions, composite dossiers, or cross-origin ClinVar and AlphaFold DB responses. Check the recorded source and digest for each upstream input separately.

輸入參數url必填releaseaccept_headerresponse_formatresponse_sha256

版本歷史

11
  1. v1.3.17最新Nov 4, 2026
  2. v1.3.16Oct 29, 2026
  3. v1.3.15Oct 26, 2026
  4. v1.3.14Oct 26, 2026
  5. v1.3.13Oct 24, 2026
  6. v1.3.11Oct 23, 2026
  7. v1.3.10Oct 15, 2026
  8. v1.3.9Oct 13, 2026
  9. v1.3.8Oct 9, 2026
  10. v1.3.7Oct 1, 2026
  11. v1.3.6Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分