uniprot-mcp
The uniprot-mcp server is a Model Context Protocol server for UniProt, offering 41 tools across 8 families with per-query provenance verification via SHA-256 hashing, release pinning, and offline replay capabilities.
Core UniProtKB Access
Fetch full protein entries by accession (e.g., P04637 for p53) including function, gene, organism, disease associations, and cross-references
Search UniProtKB using query language (gene, organism, taxon ID, reviewed flag, free text)
Retrieve protein sequences in FASTA format
Get protein features (domains, binding sites, PTMs, signal peptides) with optional type filtering
Fetch known natural variants, GO annotations, and cross-references to PDB, Pfam, Ensembl, Reactome, KEGG, STRING, and more
Map IDs between databases and fetch up to 100 entries in a single batch call
Search UniProt taxonomy by organism name
Controlled Vocabularies
Look up and search UniProt keywords by ID (e.g., KW-0007 for Acetylation) with definitions, synonyms, GO refs, and hierarchy
Fetch and search subcellular-location terms by ID (e.g., SL-0039 for Cell membrane)
Sequence Archives & Clusters
Fetch and search UniRef clusters at 50%, 90%, or 100% identity levels
Retrieve and search UniParc non-redundant sequence-archive records
Proteomes & Literature
Fetch proteomes by UP ID (e.g., UP000005640 for human) with BUSCO scores and component breakdowns
Search proteomes by organism, type, or completeness
Retrieve and search citation records by PubMed ID
Structured Cross-DB Resolvers
Resolve PDB structures with method, resolution, and chain coverage
Resolve AlphaFold model IDs with EBI viewer URLs
List InterPro domain/family signatures
Resolve ChEMBL drug-target IDs with EBI target-card URLs
Biomedical & Clinical Features
Compute sequence chemistry (molecular weight, pI, GRAVY hydrophobicity, aromaticity, charge, extinction coefficient)
List every UniProt feature overlapping a specific residue position
Look up HGVS-shorthand amino acid changes (e.g., R175H, V600E) against natural-variant annotations
Get structured disease associations with OMIM cross-references
Retrieve active sites, binding sites, metal-binding, and DNA-binding residues
Get protein processing/maturation features (signal peptides, propeptides, chain cleavage)
Get post-translational modifications (phosphorylation, glycosylation, lipidation, disulfide bonds)
Cross-Origin Enrichment
Fetch AlphaFold pLDDT confidence scores with four-band distribution from alphafold.ebi.ac.uk
Look up ClinVar clinical significance, review status, and conditions from NCBI eutils
Retrieve publications with PubMed IDs, DOIs, titles, and reference position annotations
Composition & Provenance Tools
Group orthology cross-references by source database (KEGG, OMA, OrthoDB, eggNOG, and more)
Summarize ECO evidence codes to distinguish experimental vs. inferred annotations
Generate a one-call comprehensive drug-target dossier with nine sections (identity, function, chemistry, structure, drug-target context, disease, variants, functional annotations, cross-references)
Verify provenance: re-fetch any previously recorded URL and confirm the release tag and SHA-256 hash still match, with five possible verdicts (verified, release_drift, hash_drift, release_and_hash_drift, url_unreachable)
Replay from cache: read previously cached UniProt responses offline without hitting upstream
Provides tools for fetching and searching PubMed citations through UniProt's citation index, allowing retrieval of citation details by PubMed ID and searching by title, author, or year.
UniProt MCP Server
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. Each successful response records the UniProt release, retrieval time, resolved source URL, and a SHA-256 digest. uniprot_provenance_verify can later determine whether the upstream record is unchanged or has drifted.
The complete tool catalog remains available for specialized research workflows.
Author: Santiago Maniches · ORCID 0009-0005-6480-1987 · TOPOLOGICA LLC
Run it in one line:
uvx uniprot-mcp-serverVerifiable provenance (the receipts)
Every answer this server returns is traceable to a primary-source URL and
a content hash you can re-compute yourself. The walkthrough below is a real
run against the live server (UniProt release 2026_01), independently
confirmed against the UniProt REST API.
Question. What is the function of human p53 (UniProt P04637), what
heritable cancer syndrome is it associated with, and is the R175H mutation
a documented disease variant?
Answer, with its provenance footer (verbatim from the server):
Function. Cellular tumor antigen p53 (gene
TP53, Homo sapiens, 393 aa). "Multifunctional transcription factor that induces cell cycle arrest, DNA repair or apoptosis... Acts as a tumor suppressor in many tumor types."Disease. Li-Fraumeni syndrome (acronym
LFS, UniProt disease idDI-01904, OMIM151623) — "an autosomal dominant familial cancer syndrome... Four types of cancers account for 80% of tumors occurring in TP53 germline mutation carriers."Variant.
R175H— "in LFS; germline mutation and in sporadic cancers; somatic mutation; does not induce SNAI1 degradation; reduces interaction with 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/jsonReproduce it
1. Run the server and ask the same question (any MCP client; tool calls shown):
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 record2. Confirm the hash re-verifies (re-fetches the URL and re-checks the release + canonical hash with the server's own code):
# uniprot_provenance_verify(
# url="https://rest.uniprot.org/uniprotkb/P04637",
# release="2026_01",
# response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e")
# -> Status: verified (release match + SHA-256 match)3. Confirm the values against the primary source — no server in the loop:
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
PYWhat this proves: every returned claim is traceable to a primary-source URL and a content hash. The gene, protein name, disease (with OMIM id), and variant the server reports all match the live UniProt entry; the footer SHA-256 is reproducible byte-for-byte from the primary source using a documented, server-independent recipe. A third party can re-run all three checks today, or a year from now, without trusting this server.
Note on the hash: the footer SHA-256 is of the canonical UniProt response body — the JSON re-serialized with sorted keys and compact separators (
json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False)), so harmless key-order changes within a release do not break verification. A rawcurl | sha256sumof the bytes will therefore differ; apply the same canonicalization (step 3 above) or useuniprot_provenance_verify.
Related MCP server: ChEMBL MCP Server
Installation
Run without installing (recommended):
uvx uniprot-mcp-serverOr install into an environment:
pip install uniprot-mcp-serverNote: There is an unrelated package named
uniprot-mcpon PyPI (different author, 5 tools, MIT). This package isuniprot-mcp-server. Runningpip install uniprot-mcpwill 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:
Resource | What it gives you |
Two artifacts with deliberately different scopes: • Curated atlas (25 entries). TP53, BRCA1, CFTR, HTT, EGFR, BRAF, KRAS, TEM-1 β-lactamase, more — each linking the canonical UniProt accession to MONDO / OMIM / PharmGKB / ARO IDs and the relevant tool sequence. JSON-LD manifest at | |
Full Claude-Desktop transcripts of clinical-variant interpretation (TP53 R175H), drug-target dossier (BRCA1), provenance verification a year later, pathogen drug-discovery (TEM-1). | |
Pre-registered 30-prompt benchmark with SHA-256 commitments on | |
One-command verification that the published PyPI wheel was built from this exact repo (cross-checks SHA-256 across PyPI / GitHub Release / SLSA attestation; runs | |
Honest 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. The atlas in particular is community-reviewable — see METHODOLOGY.md for what is machine-verified vs what needs human review.
What makes this different
uniprot-mcp | Vanilla LLM + WebFetch | A typical bio-MCP | |
Tool surface | 41 tools, 8 families | none — caller writes URLs | usually 5–10 |
Provenance on every response | release • date • URL • SHA-256 | none | sometimes URL only |
Per-query auditability |
| not possible | not possible |
Release pinning |
| n/a | n/a |
Pre-registered benchmark | 30 prompts, SHA-256 committed on | n/a | n/a |
Local provenance cache |
| n/a | n/a |
Clinical primitives | sequence chemistry / position-aware features / HGVS variant lookup / disease associations / AlphaFold pLDDT / ClinVar | none | none |
Composition tool |
| n/a | n/a |
Input validation | regex + length cap before any HTTP call | none | partial |
Error-channel safety | upstream exception text never echoed to LLM | n/a | partial |
Cross-origin allowlist | enumerated, threat-modelled, privacy-listed | n/a | usually unaudited |
Supply chain | SLSA build provenance + Sigstore + CycloneDX SBOM (post-flip) | n/a | rare |
Test layers | unit + property + contract + client + integration + benchmark | n/a | usually unit only |
Mutation testing | weekly + on-demand workflow; per-module measurement complete for | n/a | rare |
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)
Tool | Purpose |
| Full UniProt entry (e.g. |
| UniProt query language — gene, organism, taxon ID, reviewed flag, free text. |
| FASTA. PIR-style provenance comment block above the first record (BLAST+ / biopython compatible). |
| Domains, binding sites, PTMs, signal peptides — optional type filter. |
| Natural variants and disease mutations. |
| GO annotations grouped by aspect (F / P / C). |
| Raw cross-references to PDB, Pfam, Ensembl, Reactome, KEGG, STRING … |
| Map IDs between databases (Gene_Name → UniProtKB, PDB → UniProtKB, …). |
| Up to 100 entries in one call; invalid accessions filtered client-side. |
| Search UniProt taxonomy by organism name. |
Controlled vocabularies (4)
Tool | Purpose |
| Keyword by ID (e.g. |
| Free-text keyword search. |
| Subcellular-location term by ID (e.g. |
| Free-text location search. |
Sequence archives & clusters (4)
Tool | Purpose |
| UniRef cluster by ID ( |
| Cluster search with |
| Sequence-archive record by UPI ( |
| UniParc full-text search. |
Proteomes & literature (4)
Tool | Purpose |
| Proteome by UP ID ( |
| Filter by organism / type / completeness. |
| Citation record by ID (typically a PubMed numeric ID). |
| Index 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).
Tool | Purpose |
| PDB structures: id + method + resolution + chain coverage. |
| AlphaFold model id + EBI viewer URL (model id only — for pLDDT call the dedicated tool below). |
| InterPro signatures: id + entry name. |
| ChEMBL 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.
Tool | Purpose |
| Derived sequence chemistry from the FASTA: MW / pI / GRAVY / aromaticity / charge / ε₂₈₀. |
| Every feature overlapping a residue position. Critical for variant-effect interpretation. |
| HGVS-shorthand match ( |
| Structured disease records from DISEASE-type comments: name + acronym + UniProt disease ID + OMIM cross-ref + description. |
| Catalytic and ligand-binding residues: active sites, binding sites, sites, metal binding, DNA binding. The residue-level chemistry of the protein. |
| Maturation features: signal peptide, propeptide, transit peptide, initiator methionine, chain, peptide. Essential for therapeutic-protein engineering and pathogen-secretion analysis. |
| Post-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.
Tool | Origin | Purpose |
|
| pLDDT mean + four-band distribution; lets the agent decide whether to trust the model. |
|
| ClinVar significance + condition + review status by gene + optional HGVS shorthand. |
|
| Pure-Python over the entry's references — listed here because it complements the cross-origin enrichment. |
Composition + provenance (5)
Tool | Purpose |
| Group orthology cross-references by source DB (KEGG / OMA / OrthoDB / eggNOG / 8 more). |
| Aggregate ECO codes (Evidence and Conclusion Ontology) across an entry and grade them into a 0-100 evidence-confidence score (high / moderate / low / very-low). Distinguishes wet-lab confirmed from inferred-by-similarity from automatic. |
| One-call comprehensive characterisation: nine sections — identity / function / chemistry / structure / drug-target / disease / variants / functional annotations / cross-refs. |
| Re-fetch a previously recorded URL and compare release tag + canonical response SHA-256. Five verdicts ( |
| Read a cached UniProt response without hitting the upstream. Opt-in via |
Provenance & verification
Every successful tool response includes a footer like:
---
_Source: UniProt release 2026_01 (28-January-2026) • Retrieved 2026-04-25T17:09:00Z_
_Query: https://rest.uniprot.org/uniprotkb/P04637_
_SHA-256: 0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e_A year later, an auditor can call uniprot_provenance_verify with
those exact fields:
> uniprot_provenance_verify(
url="https://rest.uniprot.org/uniprotkb/P04637",
release="2026_01",
response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e"
)
## Provenance Verification
**Status:** verified
**URL:** https://rest.uniprot.org/uniprotkb/P04637
- ✓ URL resolves (HTTP 200)
- ✓ Release: recorded '2026_01', current '2026_01'
- ✓ Response SHA-256: recorded 0040d79bb39e2f73…, current 0040d79bb39e2f73…
**Advice:** Both checks passed. The recorded provenance is reproducible against the live UniProt API.If UniProt has moved on, the tool tells you exactly how:
Verdict | Meaning | Advice |
| Both release and hash match | The provenance is reproducible |
| UniProt released a new version | Pin via the FTP snapshot if you need the historical answer |
| Same release, body changed | An in-release edit; investigate or re-fetch |
| Both moved on | Use a release-specific FTP snapshot |
| Endpoint dropped or rate-limited | Retry or report to UniProt |
For strict reproducibility, opt into release pinning:
export UNIPROT_PIN_RELEASE=2026_01
uniprot-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:
export UNIPROT_MCP_CACHE_DIR=~/.uniprot-mcp-cache
uniprot-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_cacheis 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 wrappinghttpxcalls and writing to the directory yourself in the documented JSON shape (seesrc/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.
A live end-to-end demonstration is committed at
tests/benchmark/run-2026-04-25-roundtrip/transcript.md
— real values, real verdicts, no mocks.
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):
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:
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 verifiedSee tests/benchmark/AUDIT.md for the
per-prompt source attribution and the formal independence statement
(uniprot-mcp was not used during answer authoring).
Install
pip install uniprot-mcp-server # PyPI distribution
# or, for a pinned, isolated install:
uvx --from uniprot-mcp-server uniprot-mcpWhy three different names? This is the standard Python packaging pattern, exactly because PyPI's namespace is global and collisions force disambiguation:
Concept
Value
What it is
GitHub repository
smaniches/uniprot-mcpsource code + issue tracker
PyPI distribution
uniprot-mcp-serverwhat you
pip install(the bareuniprot-mcpname was already claimed on PyPI when this project published)Python module
uniprot_mcpwhat you
import(PEP-8 underscore form)Console script + MCP server identity
uniprot-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) orpwsh 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:
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"]
}
}
}For pinned, reproducibility-grade access:
{
"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):
{
"mcpServers": {
"uniprot": {
"command": "uniprot-mcp",
"env": {
"UNIPROT_MCP_CACHE_DIR": "/absolute/path/to/cache"
}
}
}
}Claude Code (CLI)
claude mcp add uniprot -- uniprot-mcpSelf-test (live UniProt smoke check)
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 round-trip — proving an answer is reproducible.
> [later, with the provenance footer from a prior session in hand]
> Verify the recorded provenance for P04637.
→ uniprot_provenance_verify(
url="https://rest.uniprot.org/uniprotkb/P04637",
release="2026_01",
response_sha256="0040d79bb39e2f7386d55f81071e87858ec2e5c2cd9552e93c3633897f78345e"
)5. Replay a previously-cached answer offline (read primitive — see status note below).
# 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
Layer | Path | What |
Unit |
| Behaviour of every public function. |
Property |
| Hypothesis-driven invariants on regexes + query construction. |
Contract |
| Manifest / pyproject / docs / incident-policy / benchmark drift prevention. |
Client |
| Retry / back-off / id-mapping polling against |
Integration |
| Live UniProt + AlphaFold; opt-in via |
Benchmark |
| 30 SHA-256-committed prompts + reproducible verifier. |
956 offline + 44 live integration tests, all green 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 atlas-manifest / 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. Three branches carry a justified # pragma: no cover for genuinely-unreachable import-time / defensive 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.
# 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_mcp
bandit -r src/uniprot_mcp && pip-audit --strictArchitecture & 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 therelease-verify.ymlpost-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 inREADME.md,CHANGELOG.md, anddocs/MUTATION_SCORES.md.mkdocs.yml— Material-themed docs site, deployable togh-pagesvia.github/workflows/docs.yml. Build locally withpip 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 project is the gateway layer of the planned Topologica
Bio MCP suite. Multi-source orchestration
and tamper-evident provenance ledgers will live in a companion
topologica-bio repository under BUSL-1.1 (Change Date 2030-04-19,
auto-reverts to Apache-2.0). That companion repository is currently
private; this README will be updated with a public link when it ships.
uniprot-mcp itself is and will remain permissively Apache-2.0
regardless of the Topologica Bio side.
Copyright © 2026 Santiago Maniches. TOPOLOGICA LLC.
Available Tools
41 toolsuniprot_batch_entriesARead-only
Fetch multiple entries in a single call. Use this instead of repeated
uniprot_get_entry calls when you already have a list of accessions —
one network round-trip instead of N, with invalid accessions reported
rather than aborting the batch.
| Name | Required | Description | Default |
|---|---|---|---|
| accessions | Yes | Comma-separated UniProt accessions, e.g. 'P04637,P38398'. Invalid accessions are skipped rather than failing the whole call; only the first 100 valid accessions are fetched. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint. The description adds important context: invalid accessions are skipped (not aborting), and only the first 100 valid accessions are fetched. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with main purpose, followed by usage guidance and behavioral notes. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batch operation, two parameters, output schema exists), the description adequately covers usage scenario, failure behavior, and parameter details. It is complete for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by clarifying that invalid accessions are skipped and limiting to first 100, and mentioning response_format options. Slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch multiple entries in a single call', uses a specific verb and resource, and explicitly distinguishes this tool from the sibling 'uniprot_get_entry' by highlighting the batch efficiency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool instead of repeated 'uniprot_get_entry' calls when a list of accessions is already available, and it explains the behavior with invalid accessions (skipped, not abort).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_compute_propertiesARead-only
Derived sequence chemistry for a UniProt entry: molecular weight, theoretical pI, GRAVY hydrophobicity, aromaticity, net charge at pH 7, extinction coefficient at 280 nm, amino-acid composition. Computed from the canonical FASTA via standard methods (Lehninger pK values, Kyte-Doolittle hydropathy, Pace 1995 ε₂₈₀ formula). Pure-Python — no additional external API call beyond the FASTA fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint. The description adds crucial detail: 'Pure-Python — no additional external API call beyond the FASTA fetch' and specifies standard methods (Lehninger pK, Kyte-Doolittle, Pace 1995 formula), fully disclosing external dependencies and computation approach.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose and followed by methodology. Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context indicates has output schema=true), the description sufficiently explains inputs (accession, response_format) and outputs (list of properties). No gaps remain for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add parameter-level details beyond the schema, but it explains the overall computation context. No extra value for parameters beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Derived sequence chemistry for a UniProt entry' and enumerates specific properties (molecular weight, pI, GRAVY, aromaticity, net charge, extinction coefficient, composition). This uniquely distinguishes it from sibling tools that retrieve raw data, sequences, or features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for computing physical/chemical properties from the canonical sequence. While it does not explicitly state when to use this instead of siblings like uniprot_get_entry, the context and enumerated properties make the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_features_at_positionARead-only
List every UniProt feature that overlaps a residue position (1-indexed). Answers the question 'what's at residue 175 of TP53?' by intersecting the entry's features with the given position. Useful for variant-effect interpretation — surfaces every domain, binding site, modification, mutagenesis annotation, and natural variant at a single residue in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| position | Yes | 1-indexed residue position within the protein sequence. | |
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint) cover safety. Description adds 1-indexed, response_format options, and list of returned feature types, enriching beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, efficient. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and annotations are rich, description fully covers what, why, and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage; description repeats some details (1-indexed, markdown default) but adds no new parameter semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb ('List') and specific resource ('UniProt feature at position'). Distinguishes from sibling tools like uniprot_get_features which return full feature sets, making purpose evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example ('residue 175 of TP53') and variant-effect use case. Lacks explicit contrast with siblings or when-not-to-use, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_active_sitesARead-only
Return the active sites, binding sites, metal-binding residues, and DNA-binding regions annotated on a UniProt entry. Filtered view over the entry's feature array — this is the residue-level chemistry of the protein, the input to enzyme drug-design and antibiotic target-validation workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the bar is lower. The description adds that this is a filtered view over the feature array, providing domain context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are concise and front-loaded with the core purpose, followed by context. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to detail return values. It provides sufficient context about the data type (residue-level chemistry) and use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description does not add extra meaning to the parameters beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns active sites, binding sites, metal-binding residues, and DNA-binding regions, which is specific and distinct from sibling tools like uniprot_get_features by highlighting it as a filtered view over the entry's feature array.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use this tool by mentioning its role in enzyme drug-design and antibiotic target-validation workflows, but does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_alphafold_confidenceARead-only
Fetch the per-residue confidence (pLDDT) summary for an entry's
AlphaFold model, not just its existence. Returns the global mean pLDDT
score plus the four-band distribution (very high ≥ 90 / confident
70-90 / low 50-70 / very low < 50) so the agent can decide whether to
trust the model: 95% 'very high' is publication-grade, 40% 'very low'
is largely disordered and structural inference is unsafe. Call
uniprot_resolve_alphafold first if you only need the model ID and
viewer link, not its confidence.
This tool calls https://alphafold.ebi.ac.uk — declared in PRIVACY.md as a third party. Provenance carries source = AlphaFoldDB.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool calls a third-party API (https://alphafold.ebi.ac.uk) and references privacy implications in PRIVACY.md. The annotations (readOnlyHint, openWorldHint) are consistent. Description adds significant behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact 5-sentence description with clear front-loading: purpose, output details, usage guidance, and third-party disclosure. Every sentence serves a purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description sufficiently covers all relevant aspects: purpose, output content, usage scenarios, and third-party sourcing. No gaps remain for an AI agent to make an informed invocation decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes both parameters clearly (100% coverage). The description adds value by explaining the output bands and their meaning, which helps in understanding the response_format parameter's utility. However, it doesn't add new semantic information to the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches per-residue confidence (pLDDT) summary for an entry's AlphaFold model, not just its existence. It distinguishes from the sibling tool uniprot_resolve_alphafold by specifying that the latter only provides model ID and viewer link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to call uniprot_resolve_alphafold first if only the model ID and viewer link are needed. Provides concrete interpretation of the output bands (e.g., '95% very high' is publication-grade) to guide decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_citationARead-only
Fetch a UniProt citation record by ID (typically a PubMed ID, e.g. 9840937). Returns title, authors, journal, year, volume, pages, and cross-references.
| Name | Required | Description | Default |
|---|---|---|---|
| citation_id | Yes | Citation ID, typically a numeric PubMed ID, e.g. '9840937'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only and open-world semantics. The description adds detail on returned fields (title, authors, journal, year, volume, pages, cross-references), providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loaded with key information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch tool, the description is complete: it states the input, output summary, and usage context. Output schema exists, so return values need not be detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add new meaning to parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch a UniProt citation record by ID' with example (PubMed ID). It distinguishes from sibling tools like uniprot_search_citations (search) and uniprot_get_publications (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use: given a specific citation ID. It implies the alternative tool uniprot_search_citations for searching, but does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_cross_refsARead-only
List every external-database cross-reference UniProt has curated for
an entry (PDB, Pfam, Ensembl, Reactome, KEGG, STRING, and dozens more),
optionally narrowed to one database. For the common single-database
cases there are dedicated, richer tools that resolve structured details
beyond a bare ID: uniprot_resolve_pdb (structures with
method/resolution), uniprot_resolve_alphafold, uniprot_resolve_interpro,
and uniprot_resolve_chembl. Use this tool for any other database or
to see the full cross-reference set at once.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Optional exact database name to filter to, e.g. 'PDB', 'Pfam', 'Ensembl', 'Reactome', 'KEGG', 'STRING'. Leave empty to return cross-references to every linked database. | |
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds context about output formats (markdown with provenance footer, JSON payload) and the scope of data (every external-database cross-reference). It does not contradict annotations, and the additional behavioral details are valuable but not extensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste. The first sentence states the core function, and the second provides usage guidance and alternatives. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, annotations (readOnlyHint, openWorldHint), an output schema (exists), and clear guidelines for use, the description is complete. It tells exactly what the tool does, when to use it, and refers to richer alternatives. No missing information for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining the purpose of the database parameter (filtering) with examples, clarifying the accession parameter format with specific examples (P04637, P38398) and case-sensitivity, and detailing the response_format options (markdown vs JSON with descriptions). This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all external-database cross-references for a UniProt entry, with optional filtering by database. It distinguishes itself from dedicated richer tools for common databases like PDB, AlphaFold, InterPro, and ChEMBL, making the purpose highly specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for databases not covered by dedicated tools or to see the full set) and when not to (for common databases where dedicated tools provide richer details). It names specific alternative tools, providing excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_disease_associationsARead-only
Structured disease associations for a UniProt entry. Returns the diseases recorded in DISEASE-type comments with name, acronym, UniProt disease ID, OMIM cross-reference, description, and the annotation note. Critical for clinical interpretation — distinguishes a UniProt-curated disease association (literature-anchored) from a raw cross-reference. Empty result does not imply disease-irrelevant; see Open Targets / OMIM / DisGeNET for population-level evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description adds behavioral context: explains empty results do not imply disease irrelevance, and describes the provenance (literature-anchored). No contradictions; description enhances understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, front-loading the core purpose and key details (returned fields, clinical relevance). Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, description does not need to explain return structure. Covers tool purpose, usage guidance, behavioral nuances, and parameter context comprehensively. Context signals indicate no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with two parameters adequately described in the input schema. The description adds no additional semantic meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns structured disease associations for a UniProt entry, listing specific fields (name, acronym, UniProt disease ID, OMIM cross-reference, etc.). Distinguishes from sibling tools by emphasizing it is UniProt-curated versus raw cross-references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the tool is critical for clinical interpretation and clarifies what differentiates it from raw cross-references. Provides guidance on when not to rely on empty results, directing to alternative sources like Open Targets, OMIM, and DisGeNET for population-level evidence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_entryARead-only
Fetch a UniProt protein entry by accession (e.g. P04637 for p53, P38398 for BRCA1). Returns function, gene, organism, disease associations, cross-references.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the behavior is safe. The description adds value by detailing the specific return fields (function, gene, etc.), and it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and examples, no wasted words. Every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description adequately covers what the tool does and what it returns. An output schema exists, so return format details are not needed in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning by explaining accession example and acceptance of both reviewed/unreviewed. It also clarifies the response_format options (markdown default, human-readable; json machine-parseable) beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch a UniProt protein entry by accession' with concrete examples (P04637, P38398) and lists specific returned data (function, gene, organism, disease associations, cross-references). This distinguishes it from sibling tools like uniprot_get_sequence or uniprot_batch_entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide when to use this tool versus siblings (e.g., single entry vs. batch, overview vs. specific feature tools). The context implies it's for a comprehensive single entry fetch, but no alternatives or when-not-to-use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_evidence_summaryARead-only
Summarise and grade the ECO (Evidence and Conclusion Ontology) codes
attached to a UniProt entry's annotations. Counts how many features and
comments cite each evidence code, then classifies every occurrence as
experimental (wet-lab, ECO:0000269), manual (curator-reviewed inference),
or automatic (un-reviewed pipeline call) and collapses that into a single
0-100 evidence-confidence score with a high / moderate / low / very-low
band. A score near 100 means the entry is dominated by direct experimental
evidence; a score near 10 means it is almost entirely computationally
inferred. Critical for any downstream agent that must distinguish
'wet-lab confirmed' annotations from 'inferred by similarity'. JSON output
adds an evidence_confidence block (score, band, per-class breakdown,
weights) alongside the raw evidence_counts.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations (readOnlyHint, openWorldHint) by detailing the scoring algorithm, classification scheme, and output structure. It explains what a score of 100 vs. 10 means, providing actionable behavioral insights for downstream agents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with the core purpose. It efficiently covers why, how, and the output format without extraneous words. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately explains the tool's behavior, scoring rationale, and output blocks (evidence_confidence, evidence_counts). It provides sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by providing concrete examples (accession like 'P04637'), clarifying case-sensitivity for accessions, and elaborating on response_format options (markdown with provenance footer vs. JSON). These details enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool summarizes and grades ECO codes for a UniProt entry, counts evidence code usage, classifies into experimental/manual/automatic, and outputs a 0-100 confidence score. This specific verb-resource combination distinguishes it from sibling tools like uniprot_get_features or uniprot_get_entry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly calls out the critical use case: distinguishing 'wet-lab confirmed' from 'inferred by similarity'. This provides clear context for when to use the tool, though it does not explicitly mention when not to use it or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_featuresARead-only
Return the full, unfiltered feature array for an entry: domains,
binding sites, PTMs, signal peptides, and every other annotated region,
optionally narrowed by feature_types. For a residue-specific view
('what's at position 175?') use uniprot_features_at_position
instead; for the curated subsets (active/binding sites, processing,
PTMs alone) the dedicated uniprot_get_active_sites /
uniprot_get_processing_features / uniprot_get_ptms tools apply
the same filter server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| feature_types | No | Optional comma-separated allow-list of UniProt feature type names, e.g. 'Domain,Active site,Binding site,Modified residue'. Leave empty to return every feature on the entry. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's behavioral contribution is limited. It adds that the tool returns a 'full, unfiltered' array and optionally narrowed, which is consistent. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action and scope, then provides alternatives. No wasted words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage, existing annotations, and an output schema, the description fully covers what the tool does, its optional narrowing, and how it differs from sibling tools. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value beyond schema by explaining 'leave empty to return every feature' for feature_types and noting that 'any other value is rejected' for response_format. This contextualizes the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Return the full, unfiltered feature array for an entry' and lists domains, binding sites, PTMs, etc. Distinguishes from siblings by naming specific alternative tools for narrower views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (full feature array) and when not to (use uniprot_features_at_position for residue-specific view, or dedicated tools for curated subsets). Provides both usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_go_termsCRead-only
Get GO annotations grouped by aspect.
| Name | Required | Description | Default |
|---|---|---|---|
| aspect | No | Optional Gene Ontology aspect filter: 'F' (molecular function), 'P' (biological process), 'C' (cellular component), or empty for all three. | |
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description ('Get GO annotations') aligns with read-only behavior. However, no additional behavioral traits (e.g., data freshness, rate limits) are disclosed beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is technically concise but borderline under-specified. It lacks structure and does not elaborate on the output or grouping, making it less effective for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema, the description omits key context such as that the output is a grouped list of GO terms by aspect, and that it works for a single accession. This leaves the agent with an incomplete mental model of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with detailed descriptions, so the description adds no extra meaning. Baseline of 3 is appropriate as it neither harms nor helps beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Get GO annotations grouped by aspect' – specific verb and resource with a distinctive grouping behavior that helps differentiate from other UniProt tools that also retrieve GO annotations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives like uniprot_get_entry or uniprot_get_features; the agent receives no contextual clues for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_keywordARead-only
Fetch a UniProt keyword by ID (e.g. KW-0007 for Acetylation, KW-0539 for Nucleus). Returns name, definition, category, synonyms, GO cross-refs, and parent/child hierarchy.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword_id | Yes | UniProt keyword ID, e.g. 'KW-0007' (Acetylation). Always starts with 'KW-'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In addition to readOnlyHint and openWorldHint annotations, the description specifies that output can be markdown or JSON, adding behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and example, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description covers all necessary information for a fetch-by-ID tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaningful detail: example for keyword_id and explanation of response_format options including rejection of other values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a UniProt keyword by ID, provides an example, and lists returned data fields. This distinguishes it from sibling search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs. alternatives like search_keywords. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_processing_featuresARead-only
Return the maturation and processing features (signal peptide,
propeptide, transit peptide, initiator methionine, chain, peptide).
These describe how the translated polypeptide is cleaved and
targeted into its mature form — essential for therapeutic-protein
engineering and pathogen-secretion-system analysis. A pre-filtered
view over uniprot_get_features; for post-translational chemical
modifications instead of cleavage/targeting, use uniprot_get_ptms.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. Description adds context that it's a pre-filtered view but doesn't disclose additional behavioral traits. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and usage, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Has output schema, so return values are covered. Description explains feature types, related tools, and use cases. Complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. Description does not add extra meaning beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns maturation and processing features (signal peptide, propeptide, etc.) and distinguishes it from related tools like uniprot_get_ptms and uniprot_get_features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (for cleavage/targeting) and when not (for PTMs, use uniprot_get_ptms). Also provides use cases like therapeutic-protein engineering and pathogen-secretion-system analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_proteomeARead-only
Fetch a UniProt proteome by UP ID (e.g. UP000005640 = human reference). Returns organism, taxonomy lineage, protein count, gene count, BUSCO completeness score, annotation score, and component breakdown (chromosomes / contigs).
| Name | Required | Description | Default |
|---|---|---|---|
| proteome_id | Yes | UniProt proteome ID, e.g. 'UP000005640' (human reference). Always starts with 'UP'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint; description adds specific return fields (organism, taxonomy, counts, etc.), providing useful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lists return fields; output schema exists for detailed structure. Could mention error handling for invalid ID, but overall sufficient for a fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning for proteome_id with example and prefix note; response_format is already well-documented in schema. Schema coverage is 100%, so description adds moderate value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it fetches a UniProt proteome by UP ID with a specific example, distinguishing it from sibling tools like uniprot_get_entry or uniprot_search_proteomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via 'Fetch a UniProt proteome by UP ID', but does not explicitly state when to use versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_ptmsARead-only
Return the post-translational modification features (modified
residues, glycosylation sites, lipidation sites, disulfide bonds,
cross-links). PTMs are functionally critical: they switch enzymes
on, target proteins for degradation, anchor them to membranes, and
fold them via disulfides. A pre-filtered view over
uniprot_get_features; for cleavage/targeting features instead of
chemical modifications, use uniprot_get_processing_features. The
empty case carries an honest pointer to mass-spec databases
(PhosphoSitePlus, GlyConnect) for additional evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations (readOnlyHint, openWorldHint), such as explaining the functional importance of PTMs and acknowledging that empty results are an honest case with pointers to external databases. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the list of PTM types. While every sentence adds value, it could be slightly more concise. Overall, it is efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. It fully covers the tool's purpose, usage context, sibling differentiation, and edge cases (empty results), making it highly complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already fully described in the input schema. The tool description does not add new parameter information, but the provided schema descriptions are clear and complete, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns post-translational modification features (modified residues, glycosylation sites, etc.) and explicitly distinguishes from the sibling tool uniprot_get_processing_features for cleavage/targeting features. It uses specific verbs and resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives, including directing users to uniprot_get_processing_features for different feature types. It also advises on empty results by pointing to mass-spec databases like PhosphoSitePlus and GlyConnect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_publicationsARead-only
List the publications UniProt cites on an entry, with PubMed IDs,
DOIs, titles, authors, journal, year, and the 'reference position'
annotation (the experimental work each citation supports — e.g.
'CRYSTALLIZATION', 'PHOSPHORYLATION AT SER-15', 'INVOLVEMENT IN
LI-FRAUMENI SYNDROME'). Pure composition over the entry's
references block — no extra HTTP call beyond the entry fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the tool is a pure composition with no additional HTTP calls, and lists the specific fields returned (e.g., reference position annotations). This provides useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded paragraph that efficiently conveys all necessary information without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return values are already documented. The description covers the key content (fields, reference position examples), making it complete for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds minimal extra detail beyond restating the schema's description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists publications UniProt cites on an entry, with specific fields like PubMed IDs, DOIs, titles, authors, etc. It distinguishes from siblings by being a direct retrieval for a given entry, not a search or other operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it's a composition over the entry's references block with no extra HTTP call, suggesting efficiency. However, it does not explicitly state when to use vs alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_sequenceARead-only
Fetch the canonical protein sequence in FASTA format. Use this when
you need the raw residue string itself (e.g. for local sequence
analysis); for pre-computed chemistry derived from this same sequence
(molecular weight, pI, hydrophobicity) call uniprot_compute_properties
instead, which fetches the FASTA internally so you don't have to parse
it yourself. Always returns markdown/plain-text FASTA — there is no
response_format parameter because FASTA is already the interchange
format.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that output is always markdown/plain-text FASTA and that there is no response_format parameter. Consistent with readOnlyHint and openWorldHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the core action, then provide usage guidance and a relevant detail about the output format. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage context, output format, and parameter behavior. With an output schema present, explanation of return values is unnecessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (accession) is well-described in the input schema. The description adds value by clarifying the absence of other parameters (no response_format), so it goes beyond baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Fetch the canonical protein sequence in FASTA format', specifying the verb, resource, and output format. Distinguishes from sibling uniprot_compute_properties by contrasting use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when you need the raw residue string itself' and advises calling uniprot_compute_properties for derived properties, providing clear differentiation among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_subcellular_locationARead-only
Fetch a UniProt subcellular-location term by ID (e.g. SL-0039 Cell membrane, SL-0086 Cytoplasm, SL-0191 Nucleus). Returns name, definition, category, GO cross-refs, and the is-a / part-of hierarchy.
| Name | Required | Description | Default |
|---|---|---|---|
| location_id | Yes | UniProt subcellular-location ID, e.g. 'SL-0039' (Cell membrane). Always starts with 'SL-'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. Description adds useful context about the returned fields (name, definition, category, GO cross-refs, hierarchy), going beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first line states action with examples, second line lists returned content. No filler, front-loaded for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (fetch by ID), output schema exists, and annotations are present, the description fully covers purpose, parameters, and output. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by explaining the location_id format with examples and clarifying response_format options ('markdown' or 'json'), exceeding schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch a UniProt subcellular-location term by ID', provides specific ID examples (SL-0039, SL-0086, SL-0191), and lists returned data (name, definition, etc.). This distinguishes it from the sibling search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage when you have a specific ID, but does not explicitly state when to use vs alternatives like uniprot_search_subcellular_locations. No exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_uniparcARead-only
Fetch a UniParc sequence-archive record by its known UPI. Returns
sequence, MD5/CRC64 checksums, cross-reference counts, linked
UniProtKB accessions, and the common-taxa list. UniParc is the
non-redundant sequence archive — every protein sequence ever submitted
to a major public database has exactly one UniParc record, making this
the tool to use when a UniProtKB accession doesn't exist for a
sequence you have. Don't have a UPI yet? Use uniprot_search_uniparc
to find one first.
| Name | Required | Description | Default |
|---|---|---|---|
| upi | Yes | UniParc identifier, e.g. 'UPI000002ED67'. Always starts with 'UPI'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true (no mutation) and openWorldHint=true (results may vary). The description aligns with these, stating it returns data (sequence, checksums, etc.) and provides context about UniParc's non-redundant nature. No contradiction, and description adds useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences. The first sentence delivers the primary action and return value, and the second provides context and usage guidance. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, one required) and the presence of an output schema, the description covers purpose, usage conditions, return content, and sibling differentiation. It is complete for an AI agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters have descriptions). The description adds extra meaning beyond the schema by explaining what the returned data includes (sequence, MD5/CRC64, cross-reference counts, etc.), and it reinforces the UPI format. While the schema is sufficient, the description enriches understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('UniParc sequence-archive record'), clearly states the input requirement (known UPI), and distinguishes from sibling tools by explaining when to use a search tool instead ('Don't have a UPI yet? Use uniprot_search_uniparc').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (when you have a UPI) and when not to (if you don't have a UPI, use uniprot_search_uniparc). It also explains the uniqueness of UniParc records, reinforcing the rationale for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_unirefARead-only
Fetch a UniRef cluster by ID. Examples: UniRef100_P04637 (100 % identity, only exact-match members), UniRef90_P04637 (90 % identity), UniRef50_P04637 (50 %, broadest grouping). Returns representative member, member list, common taxon, last-updated date.
| Name | Required | Description | Default |
|---|---|---|---|
| uniref_id | Yes | UniRef cluster ID, e.g. 'UniRef90_P04637'. Prefix is 'UniRef50_'/'UniRef90_'/'UniRef100_' followed by the representative member's accession. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint. The description adds behavioral context by listing the returned fields (representative member, member list, common taxon, last-updated date) and explaining the meaning of cluster prefixes. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for the action, inline examples, and a bullet list of returned fields. No redundant information, every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description appropriately omits return value details. It covers all necessary context for a simple fetch-by-ID tool: valid IDs, response formats, and what the output contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds value by providing examples for uniref_id and clarifying the response_format behavior (markdown default, json option, rejection of other values). This goes beyond the schema's basic definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('UniRef cluster by ID'), with clear examples showing different identity levels. It distinguishes itself from sibling tools like uniprot_search_uniref by focusing on retrieval by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to get a specific cluster), but does not provide explicit guidance on when not to use it or mention alternatives such as uniprot_search_uniref for query-based discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_variantsARead-only
List every literature-described natural variant UniProt has curated
for an entry, including disease-associated mutations. Use this to see
the full variant catalogue for a protein; to check one specific
HGVS-shorthand change (e.g. 'R175H') use uniprot_lookup_variant
instead, which does the position/residue matching for you. UniProt's
natural-variant annotations only cover literature-described variants —
for population-scale clinical significance data use
uniprot_resolve_clinvar.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, indicating safe, read-only operations. The description adds valuable context that only literature-described variants are included, which is a behavioral trait not captured by annotations. It also clarifies that the tool returns curated, not all, variants. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of three sentences, each serving a distinct purpose: purpose, usage guidance, and limitation. No wasted words; front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only lookup tool with solid schema documentation and annotations. It explains scope, distinguishes from a key sibling, and references another tool for complementary data. Output schema exists, so return values need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The description does not add additional semantic meaning beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List every literature-described natural variant UniProt has curated for an entry, including disease-associated mutations.' This defines the verb (list), resource (variants for a protein), and scope (literature-described natural variants). It is specific and distinguishable from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'Use this to see the full variant catalogue for a protein.' It also tells when not to use it and points to an alternative: 'to check one specific HGVS-shorthand change (e.g. 'R175H') use uniprot_lookup_variant instead.' Additionally, it references uniprot_resolve_clinvar for population-scale data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_id_mappingARead-only
Map identifiers between UniProt and external databases (or between two external databases) via UniProt's ID mapping service. Submits an async job and polls it to completion server-side, so the call may take a few seconds for large batches.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Comma-separated identifiers to map, up to 100 per call. | |
| to_db | Yes | Target database code, same code set as ``from_db``. | |
| from_db | Yes | Source database code, e.g. 'UniProtKB_AC-ID', 'PDB', 'Ensembl', 'GeneID' (Entrez), or 'Gene_Name'. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the async polling behavior beyond the annotations (readOnlyHint and openWorldHint). It explains that the tool submits a job and polls to completion, which is important for the agent to understand the latency. No mention of error handling or rate limits, but the provided context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the purpose and immediately following with the key behavioral detail (async polling). Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the rich input schema and presence of an output schema, covers the essential aspects: what the tool does, how it works (async/polling), and parameter details. It could mention that mappings may be many-to-many, but the output schema likely covers return format. Overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents each parameter clearly. The tool description does not add new meaning beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps identifiers between UniProt and external databases, using UniProt's ID mapping service. This is a specific verb-resource combination that distinguishes it from all sibling tools, none of which offer ID mapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the async job submission and polling behavior, which informs the agent that the call may take a few seconds. However, it does not provide explicit guidance on when to use this tool versus alternatives (e.g., uniprot_get_entry or uniprot_get_cross_refs) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_lookup_variantARead-only
Look up an HGVS-shorthand amino-acid change (e.g. R175H,
V600E, R248*) in the UniProt entry's natural-variant
annotations. Returns the matching variant feature(s) including the
UniProt-curated description (often a disease association). A null
result here does NOT mean a variant is benign — UniProt only
annotates literature-described variants; ClinVar / dbSNP carry
population-level data.
| Name | Required | Description | Default |
|---|---|---|---|
| change | Yes | HGVS-shorthand amino-acid change, e.g. 'R175H', 'V600E', 'R248*' (stop). Format: <original residue><1-indexed position><alt residue or '*'>. | |
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds valuable behavioral context: the limitation of UniProt annotations (literature-described only) and interpretation of null results, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by examples and a critical caveat. Every sentence adds value without unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. It adequately covers purpose, parameter examples, and an important limitation (null meaning). The tool is fairly simple, and the description is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds examples for 'change' and 'accession', and clarifies the default and constraint for 'response_format'. This improves understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it looks up an HGVS-shorthand amino-acid change in UniProt's natural-variant annotations, provides examples, and explains the return type. However, it does not explicitly differentiate from sibling tools like uniprot_get_variants, which might also retrieve variant information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly suggests use for variant lookup but does not explicitly state when to use this tool versus alternatives. It does provide a helpful caveat about null results, advising consultation of ClinVar/dbSNP, which partially guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_provenance_verifyARead-only
Re-fetch a previously recorded UniProt URL and verify it still
returns the same release identifier and the same canonical response
body (SHA-256). Pass the values from a prior response's provenance
footer (url, release, response_sha256, accept_header); empty
optional fields skip the corresponding check. Returns a verification
report with explicit pass / drift / unreachable verdicts per check.
accept_header must match the Accept header used for the original
request (default application/json; use text/plain;format=fasta
for FASTA-originated provenance). Replaying the wrong header causes a
guaranteed hash mismatch because the upstream serves different content
depending on content negotiation.
This is the single tool that converts every prior uniprot-mcp response into an independently auditable artefact — a year from now, a third party can take the recorded provenance footer and confirm the upstream still serves the exact same bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| release | No | ||
| accept_header | No | application/json | |
| response_format | No | markdown | |
| response_sha256 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses output format (verification report with pass/drift/unreachable), explains the impact of wrong headers, and states that it makes prior responses auditable. This adds significant behavioral context beyond the annotations (readOnlyHint, openWorldHint) which only indicate safety and openness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with a code block for technical detail, and each sentence adds value. It is front-loaded with the core purpose and then expands logically. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's verification role, the description covers input parameters, behavioral nuances, and output (verification report). An output schema exists, so return value details are optional. The description is self-contained and adequate for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully explains each parameter's purpose and defaults. It details the critical 'accept_header' parameter with examples and warns of consequences. The 'response_format' is mentioned but not elaborated, slightly reducing clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Re-fetch', 'verify') and identifies the resource (UniProt URL with release and response body). It clearly distinguishes itself from sibling tools that retrieve data by focusing on verification of provenance. No tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the user to pass values from a prior response's provenance footer and warns about matching the Accept header. It describes when optional fields are skipped. Lacks explicit 'when not to use' but the context makes it clear; alternative tools are not mentioned but are semantically different.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_replay_from_cacheARead-only
Read a previously-cached UniProt response without hitting the
upstream. The local provenance cache is opt-in via the
UNIPROT_MCP_CACHE_DIR environment variable; when unset, this
tool always reports cache-disabled.
Useful for: reproducing a year-old answer from a sealed cache snapshot; working offline / behind air-gaps; reducing UniProt's load when running benchmarks twice.
Returns the cached body text wrapped in the recorded Provenance.
The annotation openWorldHint=False reflects that this tool
consults the local file system only — no upstream call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains behaviors beyond annotations: relies on local file system cache (consistent with openWorldHint=false), is read-only (consistent with readOnlyHint=true), and returns cached body wrapped in Provenance. It even clarifies the annotation meaning. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short paragraphs, front-loading the primary action. It wastes no words, though the annotation explanation could be omitted as it's redundant with the input. Still, it's concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail returns. It covers cache conditions, offline use, and provenance. Minor omission: no error handling (e.g., cache miss), but for a simple replay tool this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for parameter meaning. It does not explain the 'url' parameter (what URL to use) nor the 'response_format' default. Only the return format is hinted. Without this, the agent cannot correctly construe the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Read a previously-cached UniProt response without hitting the upstream,' clearly identifying the verb (read) and resource (cached response). It distinguishes from sibling tools that access upstream, e.g., uniprot_get_entry. This meets the highest standard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists specific use cases: reproducing old answers, working offline/air-gapped, and reducing upstream load. It also notes the cache is opt-in via an environment variable and reports cache-disabled when unset. While it lacks explicit direction on when not to use, these guidelines are sufficient for informed selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_alphafoldARead-only
Resolve the AlphaFoldDB cross-reference for a UniProt entry — typically one canonical model per accession. Includes a direct EBI viewer link.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description adds behavioral context: it includes a direct EBI viewer link and notes that there is typically one canonical model per accession, hinting at variability. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no extraneous information. The first sentence front-loads the core action and cardinality; the second adds a high-value detail (EBI link). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and low parameter count, the description is largely complete. It mentions the key output feature (EBI link) and typical cardinality. It could briefly mention what happens when no model exists, but the openWorldHint somewhat covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline applies. The description adds no additional parameter semantics beyond what the schema already provides for both 'accession' and 'response_format.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it resolves the AlphaFoldDB cross-reference for a UniProt entry, specifying 'one canonical model per accession.' It distinguishes this from sibling tools like uniprot_get_alphafold_confidence, and includes mention of the EBI viewer link as a key feature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing the AlphaFold cross-reference or a viewer link, but does not explicitly contrast with alternatives like uniprot_get_alphafold_confidence or state when not to use it. Guidance is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_chemblARead-only
Resolve ChEMBL drug-target cross-references for a UniProt entry. Returns the ChEMBL target IDs with EBI viewer links — empty if the protein has no documented bioactivity data in ChEMBL.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds that the result may be empty for proteins without ChEMBL data and returns IDs with links. This adds mild context but does not disclose additional behavioral traits beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences that are front-loaded and directly state the tool's purpose and output. Every sentence is essential, with no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown) and high schema coverage, the description provides a solid overview of the tool's function and output. It could be improved by mentioning error cases or the source of ChEMBL data, but it is sufficiently complete for a simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters (accession and response_format) well described. The description does not add meaningful details beyond the schema, such as the expected format of the returned data, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it resolves ChEMBL drug-target cross-references for a UniProt entry, specifying the return of ChEMBL target IDs with EBI viewer links and the empty result case. However, it does not explicitly distinguish itself from sibling tools like uniprot_resolve_alphafold or uniprot_resolve_pdb, leaving differentiation to the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when ChEMBL drug-target cross-references are needed, but it provides no explicit guidance on when to use this tool versus alternatives (e.g., other resolve tools) or when not to use it. No prerequisites or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_clinvarARead-only
Look up ClinVar records for the gene encoded by a UniProt entry.
First fetches the entry to extract the canonical gene symbol, then
queries NCBI eutils ClinVar by gene (and optional protein-change
filter, e.g. R175H). Returns clinical-significance classification,
review status, condition list (trait_set), molecular consequence,
and the protein-change list per record.
Critical for clinical workflows — UniProt's natural-variant
annotations stop at literature-described variants. ClinVar carries
every variant submitted by clinical labs, with curated significance
classifications. Combine uniprot_lookup_variant (UniProt side)
with uniprot_resolve_clinvar (population side) for a full
variant-effect picture.
Calls https://eutils.ncbi.nlm.nih.gov — declared in PRIVACY.md.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of ClinVar records to return; capped at 50. | |
| change | No | Optional HGVS-shorthand protein change to filter to, e.g. 'R175H'. Leave empty to return all ClinVar records for the gene. | |
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and openWorld hints; description adds details about fetching entry, querying NCBI, and external dependency, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured in paragraphs with front-loaded purpose; every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description still explains return fields (significance, review status, etc.) and covers external API usage, making it complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description supplements with examples (e.g., 'R175H' for change), explains response_format options, and notes size cap at 50, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it looks up ClinVar records for a gene encoded by a UniProt entry, distinguishing it from sibling tools like uniprot_lookup_variant by specifying it handles population-side variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions it is critical for clinical workflows because UniProt annotations are limited, and advises combining with uniprot_lookup_variant for a complete picture. Also notes external API call and privacy declaration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_interproARead-only
List InterPro signatures (domain / family classifications) for a UniProt entry, with names extracted from the entry's cross-reference properties.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the description adds moderate context about cross-reference extraction but no additional behavioral details like error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded with key action and resource, but lacks structural elements like bullet points or separate sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be described; description adequately covers tool purpose and data source but omits error handling or parameter validation notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add new meaning to parameters beyond the schema's existing explanations; baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List InterPro signatures' with clear focus on UniProt entries and distinguishes from sibling resolve_* tools by specifying InterPro specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are given, but the tool's name and description imply its purpose for InterPro data, providing minimal guidance compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_orthologyARead-only
Group every orthology cross-reference in a UniProt entry by source database (KEGG / OMA / OrthoDB / eggNOG / HOGENOM / PhylomeDB / InParanoid / TreeFam / GeneTree / PAN-GO / PANTHER / OrthoInspector). Different databases use different inference methods; surfacing them side-by-side lets the agent reason about consensus when comparing orthologs across species. Pure-Python — no extra HTTP call beyond the entry fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds valuable behavioral context: no extra HTTP call beyond entry fetch, pure-Python implementation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: first states action and list, second provides rationale, third notes implementation detail. No waste, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description is sufficiently complete. It explains the grouping, databases, rationale, and performance characteristic. Could mention expected output structure but not necessary due to output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameters well. The description does not add additional per-parameter details beyond the high-level grouping action, meeting the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: grouping orthology cross-references by source database, listing specific databases. It distinguishes from siblings by highlighting the no-extra-HTTP-call aspect and the comparative consensus reasoning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use it (comparing orthologs across species, surfacing databases with different methods) and an efficiency hint (no extra HTTP call), but does not explicitly exclude alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_resolve_pdbARead-only
List every PDB structure cross-referenced from a UniProt entry, with method, resolution, and chain coverage. Faster than parsing the raw cross-references blob — returns a structured list typed for downstream analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description has a lower burden. It adds that the tool returns a 'structured list typed for downstream analysis' but does not disclose behaviors like error handling or data freshness. Adequate given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the primary purpose and key return fields. No unnecessary words or repetition. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, annotations, and full schema documentation, the description is sufficiently complete. It covers the tool's function, key output fields, and a performance advantage. Could mention response_format handling but it's in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional parameter-level detail beyond what is in the schema, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and identifies the resource 'PDB structure cross-referenced from a UniProt entry', clearly stating the output includes method, resolution, and chain coverage. It differentiates from siblings by highlighting speed and structured output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool over parsing raw cross-references ('Faster than parsing the raw cross-references blob'), but does not explicitly state when not to use or mention alternative tools. Provides clear context for its advantage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_searchARead-only
The general-purpose entry point for finding UniProtKB proteins by any
combination of gene, organism, keyword, or free text. Use this first when
you don't already have an accession; use uniprot_get_entry once you
do. Examples: '(gene:TP53) AND (organism_id:9606)', 'kinase AND reviewed:true'.
reviewed_only and organism are convenience shortcuts equivalent to
adding the corresponding clause to query yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. | |
| organism | No | Optional organism filter: a taxonomy ID ('9606') or a scientific name ('Homo sapiens'). Applied as an additional AND clause on top of ``query``; leave empty to search all organisms. | |
| reviewed_only | No | If true, restrict results to reviewed Swiss-Prot entries only. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that size is capped at 500 server-side, explains response_format values, and clarifies that organism and reviewed_only are shortcuts. Annotations already indicate readOnlyHint and openWorldHint, but this adds valuable operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose and usage, followed by examples and parameter explanations. Every sentence adds value with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, description needn't explain returns. It covers purpose, usage, parameter semantics, and behavioral traits, and distinguishes from sibling tools, making it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds significant meaning: examples of query syntax, explanation of organism/reviewed_only as shortcuts, and description of response_format values, exceeding the schema's default descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's the general-purpose entry point for finding UniProtKB proteins by any combination of gene, organism, keyword, or free text, and distinguishes from sibling uniprot_get_entry by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this first when you don't already have an accession; use uniprot_get_entry once you do.' Also explains that reviewed_only and organism are convenience shortcuts equivalent to adding clauses to query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_citationsARead-only
Search the UniProt citations index (the literature UniProt references)
by title, author, or year. Use this to find a citation's ID (typically a
PubMed ID); once you have it, call uniprot_get_citation for the full
record. For the publications attached to one specific protein entry, use
uniprot_get_publications instead. Returns up to size matches, or an
empty list if nothing matches. Examples: 'p53 AND author:Vogelstein',
'BRCA1 AND year:[2020 TO 2024]'.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | Citation query using UniProt citation fields, e.g. 'p53 AND author:Vogelstein' or 'BRCA1 AND year:[2020 TO 2024]'. Supports free text plus 'author:', 'title:', and 'year:' ranges. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds return behavior (up to size matches, empty list if none) and a server-side cap of 500, which provides useful context beyond the annotations but does not discuss side effects or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and every sentence adds value (purpose, workflow, sibling differentiation, examples, behavior). No wasteful text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (context signal), the description adequately covers tool behavior, parameter usage, and differentiation among many sibling tools. It provides sufficient context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description significantly enhances meaning: explains query syntax with fields like author:, title:, year: ranges, gives examples, clarifies size cap, and describes response_format options including that invalid values are rejected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the UniProt citations index by title, author, or year, and explicitly distinguishes from sibling tools like uniprot_get_citation and uniprot_get_publications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the workflow: find a citation's ID with this tool, then call uniprot_get_citation for full record. It also provides an alternative for protein-specific publications (uniprot_get_publications) and includes query examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_keywordsARead-only
Search UniProt's controlled keyword vocabulary (the KW-#### terms)
by name or definition. Use this to discover a keyword ID from a concept;
once you have the KW-#### ID, call uniprot_get_keyword for its full
record (definition, category, hierarchy, GO cross-references). Returns up
to size matches, or an empty list if nothing matches.
Examples: 'acetylation', 'nucleus', 'kinase activity'.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | Free-text to match against UniProt keyword names, synonyms, and definitions, e.g. 'acetylation', 'nucleus', 'kinase activity'. Plain words, not a UniProtKB field query. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds valuable behavioral details: returns up to size matches, server-side cap at 500, response format options, and that query is plain text not field query. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-organized: purpose, usage instruction, return behavior, examples. It is concise but could benefit from slightly more structure (e.g., separation of return info). Still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and existence of output schema, the description covers all necessary aspects: purpose, usage, parameters, behavior, and output options. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The description adds meaning beyond schema by giving examples for 'query', clarifying the size cap, and explaining response_format options. It enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches UniProt's controlled keyword vocabulary, with specific examples and differentiation from the sibling tool uniprot_get_keyword. The verb 'search' and resource 'keyword vocabulary' are specific, and it distinguishes from other search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: 'Use this to discover a keyword ID from a concept; once you have the KW-#### ID, call uniprot_get_keyword for its full record.' It also explains return behavior (up to size matches, empty list) and mentions cap at 500.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_proteomesARead-only
Search UniProt proteomes (whole-organism protein sets) by organism or
proteome field. Use this to find a proteome's UP######### ID; once you
have it, call uniprot_get_proteome for the full record (protein / gene
counts, BUSCO completeness, component breakdown). Returns up to size
matches, or an empty list if nothing matches. Examples: 'organism_id:9606'
for human, 'proteome_type:1' for reference proteomes only,
'taxonomy_name:bacteria' for all bacterial proteomes.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | Proteome query using UniProt proteome fields, e.g. 'organism_id:9606' (human), 'proteome_type:1' (reference proteomes only), or 'taxonomy_name:bacteria'. Plain text also matches organism names. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds that it performs a search and returns results in markdown or json, with invalid formats rejected. This aligns with annotations and adds some context but doesn't reveal additional traits beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: purpose first, then usage flow, return behavior, and examples. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters, output schema present, and annotations, the description covers the tool's function, usage flow, and expected output. It links to a related tool. Could mention pagination or error behavior more explicitly, but 'empty list' and 'rejected' statements provide adequate completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enriches all parameters: query with examples (organism_id:9606, etc.), size with capping behavior, response_format with rejection details. This provides practical usage guidance beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'UniProt proteomes', and distinguishes from sibling `uniprot_get_proteome` by saying this tool is for finding the UP ID and the other for the full record. Examples reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool to find a proteome ID, then switching to `uniprot_get_proteome` for details. It also explains that it returns up to `size` matches or an empty list. However, it does not explicitly state when not to use it or list alternatives beyond the one sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_subcellular_locationsARead-only
Search UniProt's controlled subcellular-location vocabulary (the
SL-#### terms) by name or definition. Use this to discover a location
ID from a concept; once you have the SL-#### ID, call
uniprot_get_subcellular_location for its full record (definition,
category, hierarchy, GO cross-references). Returns up to size matches,
or an empty list if nothing matches.
Examples: 'membrane', 'mitochondrion', 'cytoplasm'.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | Free-text to match against UniProt subcellular-location names, synonyms, and definitions, e.g. 'membrane', 'mitochondrion', 'cytoplasm'. Plain words, not a UniProtKB field query. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint. Description adds context: it searches by name/definition, returns matches, and the query is free-text (not UniProtKB field query). No contradictions; fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus an example line. Front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the clear annotations, complete schema, and existence of output schema (not shown but noted), the description provides all necessary context. References sibling for next step and explains response format options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 parameters with descriptions. The description adds little beyond schema; for query it repeats examples, for size it says 'up to size matches' which is implied. With 100% coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches UniProt's controlled subcellular-location vocabulary by name or definition, with specific examples and differentiation from uniprot_get_subcellular_location.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('discover a location ID from a concept') and when to use the sibling ('call uniprot_get_subcellular_location for its full record'). Also explains result behavior (up to size matches, empty list if none).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_uniparcARead-only
Search the UniParc non-redundant sequence archive by taxonomy,
source database, or other UniParc query fields — the entry point when
you don't already have a UPI. Examples: 'taxonomy_id:9606' for human
sequences, 'database:Ensembl' for Ensembl-derived entries. Once you
have a UPI from the results, use uniprot_get_uniparc for the full
record.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's assertion that this is a search operation is consistent. It adds that results are capped at 500 server-side and describes the response format options. This adds value beyond annotations but does not disclose any unexpected behaviors (e.g., rate limits, data staleness).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences. The first sentence front-loads the purpose and entry point role. The second provides examples and a workflow pointer. Every sentence adds value; no fluff or repetition. This is an exemplary concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. It covers query syntax, size limit, and response format. The workflow hint (search then get) ties it to sibling tools. It could mention pagination behavior beyond the size cap, but overall it is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds concrete examples for the query parameter (e.g., 'taxonomy_id:9606') and explains the query language link. For size, it notes the server-side cap of 500. For response_format, it clarifies the difference between markdown and json. These details improve usability beyond the schema descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches UniParc by taxonomy, source database, or other query fields, and distinguishes itself from sibling tool uniprot_get_uniparc by noting that it is the entry point when you don't have a UPI. The verb 'search' combined with the specific resource 'UniParc' and context 'non-redundant sequence archive' makes purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('entry point when you don't already have a UPI') and what to do next ('once you have a UPI... use uniprot_get_uniparc'). Examples are provided. However, it does not contrast with other search tools like uniprot_search, which could cause confusion if the user is targeting a different database.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_unirefARead-only
Search for UniRef clusters by content (not by a known cluster ID —
for that, use uniprot_get_uniref directly). Example: query='kinase'
identity_tier='90' returns the 90% clusters matching 'kinase'. Use a
looser tier (50) to find broad homology groups, a tighter tier (100)
to find near-identical sequence sets.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | UniProt query-language expression, e.g. '(gene:TP53) AND (organism_id:9606)'. Field syntax follows https://www.uniprot.org/help/query-fields. | |
| identity_tier | No | Cluster identity threshold: '50' (loosest grouping), '90', '100' (tightest, only exact-match members), or empty for all tiers. Higher values return more, smaller, tighter clusters. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains response format options (markdown with provenance footer vs. JSON) and the server-side cap on size (500). Combined with annotations (readOnlyHint, openWorldHint), the behavior is well disclosed. Minor missing details like pagination behavior beyond the cap are not critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences efficiently cover purpose, usage distinction, example, and tier guidance. No filler words; every sentence serves a purpose. Front-loaded with the core distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 100% parameter coverage, the description adequately covers usage context and parameter semantics. It could mention result ordering or error handling, but the description is sufficient for typical scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage), but the description adds value: explains identity_tier thresholds with examples (50, 90, 100) and their implications, clarifies the response_format options, and gives a query example. This goes beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches UniRef clusters by content, contrasting with uniprot_get_uniref for known IDs. An example ('kinase') and tier values solidify the purpose, distinguishing it from sibling search or retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using uniprot_get_uniref for known cluster IDs and provides guidance on identity tier selection ('looser tier (50) to find broad homology groups, tighter (100) for near-identical sets'). This covers when and why to use different options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_target_dossierARead-only
One-call comprehensive characterisation of a UniProt entry, structured for drug-discovery / clinical workflows. Composes nine views over the same entry plus one FASTA fetch (so two upstream network calls, not nine):
Identity · Function · Sequence chemistry · Structural evidence (PDB count + best-resolution + AlphaFold model id + InterPro count) · Drug-target context (ChEMBL ids, DrugBank count) · Disease associations (with MIM IDs) · Variants count · Functional annotations (top GO MF, subcellular, ECO diversity) · Cross-references summary
For per-residue pLDDT confidence call uniprot_get_alphafold_confidence
separately. For full disease detail call
uniprot_get_disease_associations. The dossier is the entry-
level summary that decides which deeper tools are worth calling.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProt accession, e.g. 'P04637' (human TP53) or 'P38398' (human BRCA1). Both reviewed (Swiss-Prot) and unreviewed (TrEMBL) accessions are accepted; case-sensitive. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses network call optimization ('two upstream network calls, not nine') and output format options, adding value beyond readOnlyHint and openWorldHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bullet points, front-loaded purpose. Slightly lengthy but every sentence earns its place; compresses 9 views into clear enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains purpose, usage context, behavioral details, and parameter constraints. Output schema handles return specifics; description complete for entry-level summary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters well-documented in schema (100% coverage). Description adds minor detail ('Any other value is rejected' for response_format) but largely redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'One-call comprehensive characterisation of a UniProt entry' and lists nine specific views, distinguishing it from sibling tools that provide narrower or deeper detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs to use for entry-level summary to decide on deeper tools, and provides alternative tools for specific needs (e.g., pLDDT, full disease detail).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_taxonomy_searchARead-only
Resolve an organism name to its NCBI taxonomy ID(s) — the numeric ID
other UniProt tools expect (e.g. the organism parameter of
uniprot_search, or organism_id: in a query string). Returns
each match's taxonomy ID, scientific name, common name, and rank
(species / genus / etc.); a name can resolve to multiple IDs when
it's ambiguous (e.g. a genus with several species), so inspect the
rank and full scientific name before picking one. Use this before
filtering any other search by organism if you only know the name,
not the numeric ID.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Maximum number of results to return; capped at 500 server-side. | |
| query | Yes | Organism name or partial name to search for, e.g. 'Homo sapiens' or 'coli'. Matches against scientific and common names. | |
| response_format | No | 'markdown' (default) for a human-readable report with a provenance footer, or 'json' for a machine-parseable structured payload with the same data. Any other value is rejected. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to cover safety. It adds important behavioral details: returns multiple matches for ambiguous names, requires inspecting rank and scientific name. It does not mention rate limits or quotas, but the annotations and description together are sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of four sentences, each serving a purpose: primary function, output details, ambiguity handling, and usage guidance. No wasted words, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values, but it already lists the returned fields. It covers ambiguity, response formats, and usage context, making it complete for an agent to decide to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant value beyond the schema: explains that query matches against scientific and common names, details the response_format options ('markdown' with provenance footer, 'json' for machine-parseable), and notes that size is capped at 500 server-side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it resolves an organism name to NCBI taxonomy IDs, which is a specific verb+resource. It distinguishes itself from sibling search tools by focusing on taxonomy resolution and explains the context of use (other UniProt tools expect numeric IDs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this before filtering any other search by organism if you only know the name, not the numeric ID.' It also provides guidance on handling ambiguous results and mentions the response format options, giving clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, with detailed descriptions that prevent overlap. Specialized tools for features, cross-references, and searches are well-differentiated from general ones.
All tool names follow a consistent 'uniprot_verb_noun' pattern (e.g., uniprot_get_entry, uniprot_search_citations, uniprot_resolve_pdb), making them predictable and easy to navigate.
41 tools is on the higher end but justified by the breadth of the UniProt domain. Each tool addresses a specific functional need without redundancy.
The tool set is comprehensive, covering entry retrieval, search, features, cross-references, variants, properties, evidence, provenance, and domain-specific summaries. Missing functionality is minimal and well-excused.
Maintenance
Related MCP Connectors
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
MCP gateway federating 21 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
UniProt MCP — protein sequence + function database.
MyGene.info — gene annotation joining NCBI/Ensembl/UniProt/KEGG/OMIM
Related MCP Servers
- FlicenseCqualityDmaintenanceA comprehensive Model Context Protocol (MCP) server providing advanced access to the UniProt protein database.2620
- FlicenseBqualityDmaintenanceA comprehensive Model Context Protocol (MCP) server providing advanced access to the ChEMBL chemical database.2789
- FlicenseBqualityDmaintenanceA comprehensive Model Context Protocol (MCP) server that provides access to the AlphaFold Protein Structure Database through a rich set of tools and resources for protein structure prediction analysis.1935
- AlicenseNot gradedqualityCmaintenanceUnified MCP server providing AI-agent-ready access to AlphaFold, PubMed, ChEMBL, Ensembl, and 37+ scientific databases.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smaniches/uniprot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server