UniProt MCP Server
Генерируйте проверяемые наборы доказательств белков, основанные на UniProt и связанных научных источниках, с учётом выпуска.
Используйте этот MCP-сервер для поиска белков, сбора доказательств по белкам, целям и вариантам, а также для ведения проверяемой записи о том, откуда взялись конкретные данные. Каждый успешный ответ фиксирует выпуск UniProt, время получения, разрешённый источник URL и SHA-256 дайджест. uniprot_provenance_verify позднее может определить, изменился ли исходный источник или остался неизменным.
Полный каталог инструментов доступен для специализированных исследовательских рабочих процессов.
Автор: Santiago Maniches · ORCID 0009-0005-6480-1987 · TOPOLOGICA LLC
Запустите в одну строку:
uvx uniprot-mcp-server
Проверяемое происхождение (квитанции)
Каждый ответ, возвращаемый этим сервером, привязан к URL-источнику первоисточника и к собственному контрольному хэшу содержимого, который можно пересчитать. Приведённое ниже руководство — это реальный запуск против живого сервера (выпуск UniProt 2026_01), независимо подтверждённый через REST API UniProt.
Вопрос. Какова функция человеческого p53 (UniProt P04637), к каким наследуемым раковым синдромам он относится, и является ли мутация R175H задокументированным вариантом болезни?
Ответ, с provenance-футером (в точности как на сервере):
- Функция. Cellular tumor antigen p53 (ген
TP53, Homo sapiens, 393 aa). "Многофункциональный транскрипционный фактор, который индуцирует остановку клеточного цикла, репарацию ДНК или апоптоз... Является опухоль-подавляющим фактором во многих типах опухолей." - Болезнь. Li-Fraumeni syndrome (акроним
LFS, идентификатор болезни UniProtDI-01904, OMIM151623) — "аутосомно-доминантный семейный синдром рака... Четыре типа рака составляют 80% опухолей у носителей germline TP53-мутций." - Вариант.
R175H— "в LFS; наследственная мутация и у sporadic cancers; соматическая мутация; не вызывает деградацию SNAI1; снижает взаимодействие с ZNF385A; dbSNP:rs28934578."
Source: UniProt release 2026_01 (28-January-2026) • Retrieved 2026-06-09T11:47:51Z
Query: https://rest.uniprot.org/uniprotkb/P04637
SHA-256: 0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e
Accept: application/json
Повторить
1. Запустите сервер и задайте тот же вопрос (любой MCP-клиент; показаны вызовы инструментов):
function + gene + diseases
# uniprot_get_disease_associations(accession="P04637") -> LFS, OMIM 151623
# uniprot_lookup_variant(accession="P04637", change="R175H") -> the LFS variant record">
uvx uniprot-mcp-server
# uniprot_get_entry(accession="P04637") -> function + gene + diseases
# uniprot_get_disease_associations(accession="P04637") -> LFS, OMIM 151623
# uniprot_lookup_variant(accession="P04637", change="R175H") -> the LFS variant record
2. Подтвердите повторную проверку хэша (повторно получить URL и заново проверить
выпуск + канонический хэш с кодом сервера):
Status: verified (release match + SHA-256 match)
# uniprot_provenance_verify(
# url="https://rest.uniprot.org/uniprotkb/P04637",
# release="2026_01",
# response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e")
# -> Status: verified (release match + SHA-256 match)
3. Подтвердите значения по первоисточнику — без участия сервера:
X-UniProt-Release: 2026_01
python - 0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e PY
curl -s -H "Accept: application/json" https://rest.uniprot.org/uniprotkb/P04637 -o p53.json
# UniProt release served (matches the footer):
curl -sI -H "Accept: application/json" https://rest.uniprot.org/uniprotkb/P04637 | grep -i x-uniprot-release
# -> X-UniProt-Release: 2026_01
python - <<'PY'
import json, hashlib
d = json.load(open("p53.json", encoding="utf-8"))
print("gene :", d["genes"][0]["geneName"]["value"]) # TP53
print("protein :", d["proteinDescription"]["recommendedName"]["fullName"]["value"]) # Cellular tumor antigen p53
print("organism :", d["organism"]["scientificName"], "| length", d["sequence"]["length"]) # Homo sapiens | 393
for c in d["comments"]:
if c.get("commentType") == "DISEASE" and c["disease"].get("acronym") == "LFS":
x = c["disease"]
print("disease :", x["diseaseId"], "| OMIM", x["diseaseCrossReference"]["id"]) # Li-Fraumeni syndrome | 151623
for f in d["features"]:
if f.get("type") == "Natural variant" and f["location"]["start"]["value"] == 175:
a = f.get("alternativeSequence", {})
if a.get("originalSequence") == "R" and a.get("alternativeSequences") == ["H"]:
print("variant : R175H |", f["description"]) # in LFS; germline mutation ...
# The footer SHA-256 is reproducible from these exact bytes (no server):
# the server hashes the JSON re-serialized with sorted keys + compact separators.
canonical = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
print("sha-256 :", hashlib.sha256(canonical).hexdigest())
# -> 0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e
PY
Что это доказывает: каждый возвращённый пункт утверждения можно отнести к первоисточнику URL и к содержимому-хэшу. Гены, название белка, болезнь (с OMIM-id) и варинат, сообщаемый сервером, совпадают с живым входом UniProt; завершающий SHA-256 воспроизводим побайтово из первичного источника с использованием документированной, независимой от сервера рецептуры. Третья сторона может повторно выполнить все три проверки сегодня или через год, не полагаясь на этот сервер.
Примечание к хэшу: завершающий SHA-256 — это хэш канонического ответа UniProt — JSON-представление с отсортированными ключами и компактными разделителями (json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False)), поэтому безвредные изменения порядка ключей внутри выпуска не ломают проверку. "curl | sha256sum" по этим байтам будет отличаться; применяйте ту же канонизацию (шаг 3 выше) или используйте
uniprot_provenance_verify.
Установка
Без установки (рекомендуется):
uvx uniprot-mcp-server
Или установите в окружение:
pip install uniprot-mcp-server
Примечание: в PyPI существует несвязанный пакет с именем
uniprot-mcp(другой автор, 5 инструментов, MIT). Этот пакет —uniprot-mcp-server. Запускpip install uniprot-mcpустановит неверный пакет молча.
Для исследователей — с чего начать
Если вы биомедицинский исследователь, заходящий в этот репозиторий, наиболее информативные места для старта:
| Ресурс | Что он даёт вам |
|---|---|
| examples/atlas/ | Два артефакта с сознательно различной областью охвата: • Курируемый атлас (25 записей). TP53, BRCA1, CFTR, HTT, EGFR, BRAF, KRAS, TEM-1 β-лактамаза и прочие — каждый элемент связывает инцидент UniProt к MONDO / OMIM / PharmGKB / ARO ID и соответствующему набору инструментов. JSON-LD манифест в examples/atlas/atlas.json. • Комплексный индекс (11 590 строк). Курируемые UniProt болезни + поверхности патогенов как два TSV-файла (comprehensive_index.tsv 7 250 строк болезней у человека, comprehensive_index_pathogens.tsv 4 340 строк патогенов). Каждая строка содержит UniProt disease ID и сопоставление OMIM, где доступно. MONDO / PharmGKB / ARO сопоставления существуют только в 25-элементном курированном атласе, а не в индексе на 11 590 строк. Маніфест воспроизводимости SHA-256 в examples/atlas/manifest.json. Методика (как собиралось, что проверяется, что можно обсудить в сообществе) в examples/atlas/METHODOLOGY.md. |
| examples/01..04.jsonl | Полные транскрипты Claude-Desktop по клинической интерпретации вариантов (TP53 R175H), досье по мишени лекарства (BRCA1), проверка provenance через год, лекарственно-генетическое открытие/pathogen через TEM-1. |
| tests/benchmark/ | Предрегистрация 30-подходный бенчмарк с SHA-256-обязательствами на main. Запуск v1.1.0 от 2026-04-26 прошёл проверку 30/30 против live UniProt — текст бенчмарка в tests/benchmark/run-2026-04-26-v1.1.0/. |
| scripts/replicate.sh | Одноступенчатая верификация того, что опубликованный wheel PyPI был собран из этого репо (перекрёстные проверки SHA-256 между PyPI / GitHub Release / SLSA attestation; выполняет --self-test; повторно запускает бенчмарк в живой среде). POSIX + scripts/replicate.ps1 для Windows. |
| docs/COMPETITIVE_LANDSCAPE.md | Честный обзор пространства bio-MCP из 14 серверов (апрель 2026) и конкретное различие, которое заявляет этот сервер. |
Проблемы/исправления приветствуются на https://github.com/smaniches/uniprot-mcp/issues. Атлас, в частности, можно рассмотреть в рамках общественного рецензирования — см. METHODOLOGY.md для того, что машинно-проверяемо, а что требует человеческого обзора.
Чем это отличается
| uniprot-mcp | Vanilla LLM + WebFetch | Типичный bio-MCP | |
|---|---|---|---|
| Поверхность инструментов | 41 инструмента, 8 семейств | нет — вызывающий пишет URL-адреса | обычно 5–10 |
| Происхождение на каждый ответ | выпуск • дата • URL • SHA-256 | нет | иногда только URL |
| Аудит по каждому запросу | uniprot_provenance_verify повторно проверяет любой предыдущий ответ | невозможно | невозможно |
| Задержка выпуска (pinning) | --pin-release=YYYY_MM вызывает дрейф | n/a | n/a |
| Предрегистрация бенчмарка | 30 запросов, SHA-256 закреплён на main + воспроизводимый верификатор | n/a | n/a |
| Локальный кэш происхождения | read-primitive от uniprot_replay_from_cache (автоматическая запись через кэш не встроена в путь запроса — см. §Provenance & verification) | n/a | n/a |
| Клинические примитивы | последовательностная химия / позиционно-зависимые признаки / HGVS поиск вариантов / ассоциации с болезнями / AlphaFold pLDDT / ClinVar | none | none |
| Инструмент составления | uniprot_target_dossier — одна команда, девять разделов | n/a | n/a |
| Валидация входных данных | regex + ограничение длины до любого HTTP-вызова | none | partial |
| Безопасность канала ошибок | текст исключения верхнего уровня не выводится в LLM | n/a | partial |
| Разрешение по источникам | перечисленный, моделей угроз учтён | n/a | обычно не проверяется |
| Цепочка поставок | SLSA-provenance + Sigstore + CycloneDX SBOM (после флип) | n/a | редкая |
| Уровни тестирования | unit + property + contract + client + integration + benchmark | n/a | обычно только unit |
| Мутационное тестирование | weekly + on-demand workflow; полная измеряемость по модулям: кэш 82 %, proteinchem 92 %, client 70 %; цель ≥ 95 % для v1.2.0 — см. docs/MUTATION_SCORES.md | n/a | редко |
Цепочка provenance + verify отсутствовала в моём обзоре на 2026-04-26 в других bio-MCP и т. п. Контролируемый пользователь может взять любой ответ из uniprot-mcp и доказать — без обращения к автору — что UniProt всё ещё возвращает те же байты или точно определить, как upstream дрейфовал. Если найдёте counter-example — откройте issue и я обновлю сравнение.
Инструменты (41)
Восемь семейств API. Все читаемые (readOnlyHint: true). Все, кроме uniprot_replay_from_cache, обращаются к как минимум одному upstream-сервису (openWorldHint: true). Требуется ключ API UniProt.
Ядро UniProtKB (10)
| Инструмент | Назначение |
|---|---|
| uniprot_get_entry | Полная запись UniProt (например, P04637 для p53). Функции, ген, организм, болезни, перекрёстные ссылки. |
| uniprot_search | Язык запросов UniProt — ген, организм, taxon ID, флаг проверено, свободный текст. |
| uniprot_get_sequence | FASTA. Проторированная provenance-подпись выше первой записи (BLAST+-/biopython совместимо). |
| uniprot_get_features | Домены, сайты связывания, PTMs, сигнальные пептиды — фильтр по типу опциональный. |
| uniprot_get_variants | Натуральные варианты и мутации, связанные с болезнями. |
| uniprot_get_go_terms | GO-annotации, сгруппированные по аспекту (F / P / C). |
| uniprot_get_cross_refs | Сырой перекрёстный ссылки на PDB, Pfam, Ensembl, Reactome, KEGG, STRING и др. |
| uniprot_id_mapping | Карта идентификаторов между базами данных (Gene_Name → UniProtKB, PDB → UniProtKB и т. д.). |
| uniprot_batch_entries | До 100 записей за один вызов; недопустимые номера доступов отфильтровываются клиентской стороной. |
| uniprot_taxonomy_search | Поиск таксономии UniProt по названию организма. |
Контролируемые словари (4)
| Инструмент | Назначение |
|---|---|
| uniprot_get_keyword | Ключевое слово по ID (например KW-0007 = Acetylation). Определение, синонимы, GO-ссылки, иерархия. |
| uniprot_search_keywords | Поиск по ключевым словам в свободной форме. |
| uniprot_get_subcellular_location | Термин локализации в субклетке по ID (например SL-0039 = Cell membrane). |
| uniprot_search_subcellular_locations | Поиск по свободному тексту локации. |
Архивы последовательностей & кластеры (4)
| Инструмент | Назначение |
|---|---|
| uniprot_get_uniref | UniRef-кластер по ID (UniRef50_P04637, UniRef90_P04637, UniRef100_P04637). |
| uniprot_search_uniref | Поиск кластера с фильтром identity_tier (50 / 90 / 100). |
| uniprot_get_uniparc | Запись архива последовательностей по UPI (UPI000002ED67). |
| uniprot_search_uniparc | Полнотекстовый поиск UniParc. |
Протеомы & литература (4)
| Инструмент | Назначение |
|---|---|
| uniprot_get_proteome | Протеом по UP ID (UP000005640 = человек). Подсчёты, BUSCO-оценка, компоненты. |
| uniprot_search_proteomes | Фильтр по организму / типу / полноте. |
| uniprot_get_citation | Запись цитирования по ID (обычно PubMed numeric ID). |
| uniprot_search_citations | Индексный поиск по цитированиям UniProt. |
Структурированные резолверы между БД (4)
Gateway-only — выходы за пределы UniProt-origin не происходят. Эти инструменты извлекают соответствующие перекрёстные ссылки из записи UniProt и возвращают структурированные записи (typed lists / objects, а не сырые строки).
| Инструмент | Назначение |
|---|---|
| uniprot_resolve_pdb | Структуры PDB: id + метод + разрешение + охват цепи. |
| uniprot_resolve_alphafold | Модель AlphaFold: id модели + URL-обозреватель EBI (id модели — для pLDDT используйте ниже отдельный инструмент). |
| uniprot_resolve_interpro | Подписи InterPro: id + имя записи. |
| uniprot_resolve_chembl | ChEMBL drug-target id + URL карточки цели в EBI. |
Биомедицинские признаки (7)
Чисто на Python композиции по записи — без внешнего источника. Первые четыре ответа — по каждому остатку и варианту; оставшиеся три — расширение v1.1.0 дляDrug discovery, инженерии терапевтических белков и анализа секрекции патогенов: каждый — как фильтр по массиву features записи, с группировкой по типу признака и честным предупреждением об отсутствии данных.
| Инструмент | Назначение |
|---|---|
| uniprot_compute_properties | Производные свойства последовательности из FASTA: MW / pI / GRAVY / ароматичность / заряд / ε₂₈₀. |
| uniprot_features_at_position | Каждый признак, перекрывающий конкретную позицию остатка. Критично для интерпретации влияния варианта. |
| uniprot_lookup_variant | Совпадение HGVS -R175H, V600E, R248* с естественными вариантами в UniProt. |
| uniprot_get_disease_associations | Структурированные записи заболеваний из DISEASE-type комментариев: название + acrónimo + UniProt disease ID + OMIM cross-ref + описание. |
| uniprot_get_active_sites | Каталитические и связывающие сайты: активные сайты, сайты связывания, металло--sites, связывание с ДНК и пр. Характеристики на уровне аминокислоты. |
| uniprot_get_processing_features | Особенности созревания: сигнальный пептид, прокептид, транзитный пептид, инициаторная метионин, цепь, пептид. Важны для инженерии терапевтических белков и анализа секреции патогенов. |
| uniprot_get_ptms | Послетрансляционные модификации: модифицированные остатки (фосфорилирование/ацетилирование/метилирование), гликозилирование, липидирование (GPI/прениль/палмитоил), дисульфиновые связи, переразрывы. |
Внешнее обогащение (3)
Единственные инструменты, которые обращаются к источникам вне rest.uniprot.org. Каждый документирован в PRIVACY.md и в threat model.
| Инструмент | Источник | Назначение |
|---|---|---|
| uniprot_get_alphafold_confidence | alphafold.ebi.ac.uk | Среднее pLDDT + распределение по 4 диапазонам; даёт агенту решение, доверять ли модели. |
| uniprot_resolve_clinvar | eutils.ncbi.nlm.nih.gov | Значимость ClinVar + состояние болезни + обзор по гену + опционально HGVS. |
| uniprot_get_publications | rest.uniprot.org | Чистый Python по ссылкам в записи — добавлен для дополнения cross-origin enrichment. |
Композиция + происхождение (5)
| Инструмент | Назначение |
|---|---|
| uniprot_resolve_orthology | Групповая ортологическая перекрёстная ссылка по исходной DB (KEGG / OMA / OrthoDB / eggNOG / ещё 8). |
| uniprot_get_evidence_summary | Свод ECO-кодов (Evidence and Conclusion Ontology) по всей записи и оценка доверия доказательств (0–100): высокий / умеренный / низкий / очень низкий. Отличает экспериментальные данные от выводов по аналогии и автоматические выводы. |
| uniprot_target_dossier | Комплексная характеристика в одном вызове: девять разделов — идентичность / функция / химия / структура / мишень-лекарство / болезни / варианты / функциональные аннотации / перекрёстные ссылки. |
| uniprot_provenance_verify | Повторно загрузить ранее зарегистрированный URL и сравнить тег выпуска + канонический ответ SHA-256. Пять вердиктов (verified, release_drift, hash_drift, release_and_hash_drift, url_unreachable) с текстом совета. |
| uniprot_replay_from_cache | Чтение кэшированного ответа UniProt без обращения к upstream. Включается через UNIPROT_MCP_CACHE_DIR. |
Происхождение и проверка
Каждый успешный ответ инструмента включает футер наподобие:
---
_Source: UniProt release 2026_01 (28-January-2026) • Retrieved 2026-04-25T17:09:00Z_
_Query: https://rest.uniprot.org/uniprotkb/P04637_
_SHA-256: 0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e_
Через год аудитор может вызвать
uniprot_provenance_verify(
url="https://rest.uniprot.org/uniprotkb/P04637",
release="2026_01",
response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e"
)
Проверка происхождения
Статус: verified
URL: https://rest.uniprot.org/uniprotkb/P04637
- ✓ URL разрешается (HTTP 200)
- ✓ Выпуск: зафиксировано '2026_01', текущий '2026_01'
- ✓ Подпись SHA-256: зафиксировано 0040d79bb39e2f73…, текущая 0040d79bb39e2f73…
Совет: Обе проверки прошли. Зафиксированное provenance воспроизводимо в живом API UniProt.
Если UniProt обновился, инструмент скажет точно, как именно:
| Вердикт | Значение | Совет |
|---|---|---|
| verified | и выпуск, и хэш совпали | provenance воспроизводимо |
| release_drift | выпущена новая версия UniProt | зафиксируйте снимок FTP на историческую запись |
| hash_drift | тот же выпуск, тело изменилось | внутри-выпускное изменение; изучите или повторно загрузите |
| release_and_hash_drift | оба изменились | используйте снимок FTP, привязанный к релизу |
| url_unreachable | Endpoint недоступен или ограничен | повторите попытку или сообщите в UniProt |
Для строгой воспроизводимости можно включить pin-release:
export UNIPROT_PIN_RELEASE=2026_01
uniprot-mcp
# каждый ответ привязан к закреплённому выпуску;
# любой дрейф вызывает `ReleaseMismatchError`, который сервер возвращает в виде envelope-ошибки
Для автономного повторного воспроизведения offline используйте uniprot_replay_from_cache(url) — чтение ранее зарегистрированного ответа из каталога, указанного через
UNIPROT_MCP_CACHE_DIR:
.json при наличии.
export UNIPROT_MCP_CACHE_DIR=~/.uniprot-mcp-cache
uniprot-mcp
# uniprot_replay_from_cache(url) возвращает запись из
# $UNIPROT_MCP_CACHE_DIR/<sha256(url)>.json если она присутствует.
Статус заметки (v1.1.3).
uniprot_replay_from_cache— это операция чтения. Кэш должен заполняться внешним процессом — например, журналистом-брейкбенча или вами оборачивающим вызовыhttpxи записывающим в каталог в документируемой форме JSON (смотритеsrc/uniprot_mcp/cache.py). Автоматическая запись в кэш не привязана к запросу; элементы кэша должны заполняться явно или внешним процессом захвата.
Живое полное демонстрационное выполнение зафиксировано в
tests/benchmark/run-2026-04-25-roundtrip/transcript.md
— реальные значения, реальные решения, без моков.
Предрегистрация бенчмарка
tests/benchmark/ поставляет 30-подходный набор заданий (Tier A / B / C × 10) с закреплёнными SHA-256 ответами на главной ветке. Прямой текст expected.jsonl локален и не публикуется до выпуска бенчмарка; криптографические обязательства означают, что автор не может после фактов переписывать «правильные» ответы.
Путь воспроизводимости третьей стороны (без файла seal). Выведите все Tier A / B ответы в реальном времени из UniProt и распечатайте их — файл expected.jsonl не требуется. Это подтверждает независимое воспроизведение ответов от первичного источника сегодня; оно не пересчитывает seal (зафиксированные SHA-256 привязывает обоснование, скрытое в предрегистрации — см. ниже):
python tests/benchmark/verify_against_hashes.py tests/benchmark/expected.hashes.jsonl
# Повторно извлекает все 30 ответов «живьём» и печатает их (информационно; выход 0).
Путь криптографической проверки мейнтейнера (с локальным plaintext seal). Зафиксированные дайджесты в expected.hashes.jsonl зашиты под {prompt_id, answer, rationale}; разум rationale скрыт как часть зашейвания в предрегистрации, поэтому полная криптографическая проверка требует локального expected.jsonl:
python tests/benchmark/verify_answers.py tests/benchmark/expected.jsonl
# OK: все 30 подсказок подтверждены по https://rest.uniprot.org
python tests/benchmark/verify.py tests/benchmark/expected.jsonl tests/benchmark/expected.hashes.jsonl
# OK: 30 обязательств подтверждены
См. tests/benchmark/AUDIT.md для
перепросмотр источников по каждой подсказке и формального утверждения независимости
(uniprot-mcp не использовался при создании ответов).
Установка
pip install uniprot-mcp-server # Распределение PyPI
# или, для фиксированной изоляированной установки:
uvx --from uniprot-mcp-server uniprot-mcp
Почему три разных имени? Это стандартный паттерн упаковки Python, потому что пространство имён PyPI глобальное и коллизии требуют различения:
Концепт Значение Что это такое Репозиторий GitHub smaniches/uniprot-mcp исходный код + трекер проблем Распределение PyPI uniprot-mcp-server то, что вы устанавливаете через pip (самое имя uniprot-mcp занято в PyPI) Python-модуль uniprot_mcp как импортировать (слово через подчеркивание по PEP-8) Командная строка + идентичность MCP-сервера uniprot-mcp что вы запускаете из оболочки и что видит Claude Desktop Крещеные проверки, доказывающие, что установленный wheel построен именно из этого репозитория: каждый выпуск сопровождается Sigstore signature, SLSA build provenance, и CycloneDX SBOM, всё это прикреплено к выпуску v1.1.0 GitHub Release. Запустите
bash scripts/replicate.sh(POSIX) илиpwsh scripts/replicate.ps1(Windows), чтобы проверить всю цепочку от начала до конца. Распространённые примеры паттерна «один и тот же предмет — три имени»:pillow/PIL,python-dateutil/dateutil,beautifulsoup4/bs4,python-Levenshtein/Levenshtein.
Из исходников:
git clone https://github.com/smaniches/uniprot-mcp.git
cd uniprot-mcp
pip install -e .
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"uniprot": {
"command": "uvx",
"args": ["uniprot-mcp-server"]
}
}
}
Для закреплённого, воспроизводимого доступа:
{
"mcpServers": {
"uniprot": {
"command": "uniprot-mcp",
"args": ["--pin-release=2026_01"]
}
}
}
Чтобы включить чтение uniprot_replay_from_cache из каталога кэша, который вы сами заполнили (автоматическая запись не встроена в путь запроса — см. §Provenance & verification):
{
"mcpServers": {
"uniprot": {
"command": "uniprot-mcp",
"env": {
"UNIPROT_MCP_CACHE_DIR": "/absolute/path/to/cache"
}
}
}
}
Claude Code (CLI)
claude mcp add uniprot -- uniprot-mcp
Самопроверка (живой UniProt smoke check)
TP53 OK
[PASS]```
uniprot-mcp --self-test
[tools] registered: 41/41
[live] P04637 -> TP53 OK
[PASS]
---
## Примеры рабочих процессов
**1) Пакет клинической вариантации для `TP53 R175H`.**
Какова функция остатка 175 в P04637? Является ли R175H известным вариантом? Соберите
> доказательства UniProt и ClinVar и скажите, насколько надёчен соответствующий участок AlphaFold.
→ uniprot_features_at_position("P04637", 175)
→ uniprot_lookup_variant("P04637", "R175H")
→ uniprot_resolve_clinvar("P04637", change="R175H")
→ uniprot_get_alphafold_confidence("P04637")```
> Какова функция остатка 175 в P04637? Является ли R175H известным вариантом? Соберите
> доказательства UniProt и ClinVar и скажите, насколько надёжен соответствующий участок AlphaFold.
→ uniprot_features_at_position("P04637", 175)
→ uniprot_lookup_variant("P04637", "R175H")
→ uniprot_resolve_clinvar("P04637", change="R175H")
→ uniprot_get_alphafold_confidence("P04637")
**2) Досье по цели лекарства в одном вызове.**
Дайте полное досье по BRCA1 как мишени лекарства.
→ uniprot_target_dossier("P38398")
# девять разделов, два верхних вызова (entry + FASTA), один вызов инструмента.
**3) Химия последовательности для выбора буфера / системы экспрессии.**
Какова молекулярная масса, pI и гидрофобность человеческого инсулина?
→ uniprot_compute_properties("P01308")
# MW 11 981 Da, pI 4.93, ε₂₈₀ 24 980 M⁻¹·cm⁻¹ — чистый Python на FASTA.
**4) Обратный рейплей provenance — доказать воспроизводимость ответа.**
[позже, с provenance-футером из предыдущей сессии]
> Verify the recorded provenance for P04637.
→ uniprot_provenance_verify(
url="https://rest.uniprot.org/uniprotkb/P04637",
release="2026_01",
response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e"
)
**5) Повторная загрузка ранее кэшированного ответа оффлайн (read primitive — см. статус ниже).**
.json уже существует,
# заполнено скриптом захвата maintainer benchmark или внешним обёртчиком.
export UNIPROT_MCP_CACHE_DIR=~/sealed-cache
> uniprot_replay_from_cache("https://rest.uniprot.org/uniprotkb/P04637")
Тестирование
| Уровень | Путь | Что проверяется |
|---|---|---|
| Unit | tests/unit/ | Поведение каждого открытого API. |
| Property | tests/property/ | Инварианты, основанные на Hypothesis, для regex и конструирования запросов. |
| Contract | tests/contract/ | Манифест / pyproject / docs / incident-policy / drift-prevention в benchmark. |
| Client | tests/client/ | Повторные попытки / экспондирование / опрос через respx-мок HTTP. |
| Integration | tests/integration/ | Живой UniProt + AlphaFold; опционально via --integration. |
| Benchmark | tests/benchmark/ | 30 SHA-256-обязанных подсказок + воспроизводимый верификатор. |
956 офлайн + 44 живых интеграционных тестов, всё зелено на main (реальные счётчики через pytest --collect-only --ignore=tests/integration и pytest --collect-only tests/integration; офлайн счёт включает mutation-killer файлы v1.1.x для cache, proteinchem, client, контрактные тесты для atlas-manifest / version-consistency / changelog-presence, и тестовые файлы покрытия, которые восстановили полный охват). Покрытие по строкам и веткам — 100.00 % по всем семи исходным файлам, с ограничителем [tool.coverage.report] в fail_under = 100 для CI. Три ветви помечены как противоречиво охваченные # pragma: no cover за действительно недоступные в момент импорта обходные ветви (документировано в коде и в pyproject.toml). Локально воспроизводимо с помощью 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 ошибок любой степени), pip-audit (--strict, без известных уязвимостей) — чисты. Инфраструктура Mutation тестирования поставляется и ориентирована на измерения: см. таблицу по модулям в docs/MUTATION_SCORES.md для последней матричной информации; цель v1.2.0 — ≥ 95 %.
# Быстро, оффлайн (CI при каждом пуше):
pytest tests/unit tests/property tests/client tests/contract -v
# Живой UniProt (opt-in, ночной прогон в CI):
pytest --integration tests/integration -v
# Линтинг / типизация / безопасность / SCA:
ruff check . && ruff format --check . && mypy src/uniprot_mcp
bandit -r src/uniprot_mcp && pip-audit --strict
Архитектура и модель угроз
-
docs/THREAT_MODEL.md — двенадцать угроз в форме STRIDE, каждая закреплена по пути коду или SHA коммита, плюс политика cross-origin allowlist (§T3b).
-
docs/INCIDENT_POLICY.md + docs/POSTMORTEM_TEMPLATE.md + docs/INCIDENT_LOG.md — каждая ночная интеграция вызывает запись постмортема.
-
AUDIT.md — профессиональный аудит до версии 1.0.1, переработки P0/P1 зафиксированы.
-
docs/RELEASE.md — руководство по релизу, охватывающее цепочку tag → PyPI → MCP Registry → Sigstore → GitHub Release → Zenodo, включая пост-таг проверку
release-verify.ymlи однократно настройку Zenodo + PyPI вебхуков. -
docs/archive/ — архивные документы до флипа сохранены для аудита (
PENDING_V1.md,MERGE_PLAN.md,RELEASE_AUDIT_v1.1.3.md). Не часть опубликованного сайта документации; текущий статус оперативной работы — вREADME.md,CHANGELOG.md, иdocs/MUTATION_SCORES.md. -
mkdocs.yml — сайт материалов в тематике Material, развёртывается на
gh-pagesчерез .github/workflows/docs.yml. Локально собрать можно командой:pip install -e ".[docs]" && mkdocs serve.
От организаций:
Связанные MCP-серверы того же автора
-
alphafold-sovereign-mcp — Сервер Model Context Protocol, интегрирующий AlphaFold DB с восемью дополнительными общедоступными биомедицинскими источниками данных, локальный граф знаний (SQLite) (
pip install alphafold-sovereign-mcp). -
semantic-scholar-mcp — Model Context Protocol сервер для Semantic Scholar (200M+ научных работ), предоставляет 14 инструментов для поиска по статьям, обходу графа цитирования, профилей авторов и рекомендаций (
pip install s2-mcp-server).
Цитирование
Цитируйте через CITATION.cff (GitHub делает кнопку "Cite this repository"). Всегда также упоминайте UniProt Consortium:
The UniProt Consortium. UniProt: the Universal Protein Knowledgebase in 2025. Nucleic Acids Research (2025).
Лицензия
Apache-2.0 — смотрите LICENSE и NOTICE.
Этот проект — «воротной» слой планируемого набора MCP-систем Topologica Bio. Многоисточниковая оркестрация и журналы происхождения, неподдельные от манипуляций, будут жить в сопутствующем репозитории topologica-bio в рамках BUSL-1.1 (Change Date 2030-04-19, авто-возврат к Apache-2.0). Этот сопутствующий репозиторий сейчас приватный; README будет обновлён общественным доступом по мере выкатывания.
Сам MCP-project остаётся permissively Apache-2.0 независимо от стороны Topologica Bio.
Copyright © 2026 Santiago Maniches. TOPOLOGICA LLC.