API VEGA

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, идентификатор болезни UniProt DI-01904, OMIM 151623) — "аутосомно-доминантный семейный синдром рака... Четыре типа рака составляют 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-mcpVanilla LLM + WebFetchТипичный bio-MCP
Поверхность инструментов41 инструмента, 8 семействнет — вызывающий пишет URL-адресаобычно 5–10
Происхождение на каждый ответвыпуск • дата • URL • SHA-256нетиногда только URL
Аудит по каждому запросуuniprot_provenance_verify повторно проверяет любой предыдущий ответневозможноневозможно
Задержка выпуска (pinning)--pin-release=YYYY_MM вызывает дрейфn/an/a
Предрегистрация бенчмарка30 запросов, SHA-256 закреплён на main + воспроизводимый верификаторn/an/a
Локальный кэш происхожденияread-primitive от uniprot_replay_from_cache (автоматическая запись через кэш не встроена в путь запроса — см. §Provenance & verification)n/an/a
Клинические примитивыпоследовательностная химия / позиционно-зависимые признаки / HGVS поиск вариантов / ассоциации с болезнями / AlphaFold pLDDT / ClinVarnonenone
Инструмент составленияuniprot_target_dossier — одна команда, девять разделовn/an/a
Валидация входных данныхregex + ограничение длины до любого HTTP-вызоваnonepartial
Безопасность канала ошибоктекст исключения верхнего уровня не выводится в LLMn/apartial
Разрешение по источникамперечисленный, моделей угроз учтёнn/aобычно не проверяется
Цепочка поставокSLSA-provenance + Sigstore + CycloneDX SBOM (после флип)n/aредкая
Уровни тестированияunit + property + contract + client + integration + benchmarkn/aобычно только unit
Мутационное тестированиеweekly + on-demand workflow; полная измеряемость по модулям: кэш 82 %, proteinchem 92 %, client 70 %; цель ≥ 95 % для v1.2.0 — см. docs/MUTATION_SCORES.mdn/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_sequenceFASTA. Проторированная provenance-подпись выше первой записи (BLAST+-/biopython совместимо).
uniprot_get_featuresДомены, сайты связывания, PTMs, сигнальные пептиды — фильтр по типу опциональный.
uniprot_get_variantsНатуральные варианты и мутации, связанные с болезнями.
uniprot_get_go_termsGO-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_unirefUniRef-кластер по 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_chemblChEMBL 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_confidencealphafold.ebi.ac.ukСреднее pLDDT + распределение по 4 диапазонам; даёт агенту решение, доверять ли модели.
uniprot_resolve_clinvareutils.ncbi.nlm.nih.govЗначимость ClinVar + состояние болезни + обзор по гену + опционально HGVS.
uniprot_get_publicationsrest.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_unreachableEndpoint недоступен или ограниченповторите попытку или сообщите в 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 глобальное и коллизии требуют различения:

КонцептЗначениеЧто это такое
Репозиторий GitHubsmaniches/uniprot-mcpисходный код + трекер проблем
Распределение PyPIuniprot-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")

Тестирование

УровеньПутьЧто проверяется
Unittests/unit/Поведение каждого открытого API.
Propertytests/property/Инварианты, основанные на Hypothesis, для regex и конструирования запросов.
Contracttests/contract/Манифест / pyproject / docs / incident-policy / drift-prevention в benchmark.
Clienttests/client/Повторные попытки / экспондирование / опрос через respx-мок HTTP.
Integrationtests/integration/Живой UniProt + AlphaFold; опционально via --integration.
Benchmarktests/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).

doi:10.1093/nar/gkae1010


Лицензия

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.