Protein research over UniProtKB: search by function, fetch curated records, map IDs, proteomes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch full curated UniProtKB entries by accession in one batch (up to 20). Each entry carries function, catalytic activity, cofactors, subcellular location, disease involvement, PTMs, natural variants, isoforms, domains, GO terms, keywords, and cross-references. Partial failures do not abort the batch — resolved entries land in succeeded[] and unknown or inactive (merged, demerged, deleted) accessions in failed[], where an inactive accession names its replacement or UniParc ID. Pass fields to trim the upstream projection. Initial responses exceeding 24,000 UTF-8 bytes across both output surfaces return kind: "outline": a single resolved record lists sections with byte sizes; a batch lists outlinedEntries in request order and retains failed[]. Re-call each outlined accession individually, e.g. accessions:["P04637"], for its full record or section outline, then add sections:["disease","variants"] to select sections. sections takes exactly one accession; trim a batch with fields instead. All returned list items and cross-reference IDs render in full. A large list section pages with section_limit/section_offset on a re-call naming that one section. This tool does not search: accessions come from uniprot_search_proteins.results[].accession or uniprot_map_ids. Strip any isoform suffix (P04637-2 to P04637) before calling.
Accessions to fetch (1–20). From uniprot_search_proteins or uniprot_map_ids.
Comma-separated UniProtKB field names to project, e.g. "accession,gene_names,cc_function,ft_variant". Omit for the full curated default set. Use this on the initial call to trim payload.
Only used to re-call one accession after a kind: "outline" response — pass a subset of the outlined section keys to fetch just those sections. Requires exactly one accession: a batch with sections is rejected, so trim a batch with fields. A requested section the record lacks is named in absentSections, not an error. Do not pass on the initial call.
Window size for one list section on a sections re-call: return at most this many items of it (1–500). Requires sections naming exactly one list section, e.g. ["variants"] (or ptms, domains, goTerms). Omit together with section_offset to return the whole section.
Zero-based index of the first item in the windowed section. Defaults to 0. Pass the previous response's nextOffset to page forward. Same requirements as section_limit; set without section_limit, returns every item from this index on.
Fetch full curated UniProtKB entries by accession in one batch (up to 20). Each entry carries function, catalytic activity, cofactors, subcellular location, disease involvement, PTMs, natural variants, isoforms, domains, GO terms, keywords, and cross-references. Partial failures do not abort the batch — resolved entries land in succeeded[] and unknown or inactive (merged, demerged, deleted) accessions in failed[], where an inactive accession names its replacement or UniParc ID. Pass fields to trim the upstream projection. Initial responses exceeding 24,000 UTF-8 bytes across both output surfaces return kind: "outline": a single resolved record lists sections with byte sizes; a batch lists outlinedEntries in request order and retains failed[]. Re-call each outlined accession individually, e.g. accessions:["P04637"], for its full record or section outline, then add sections:["disease","variants"] to select sections. sections takes exactly one accession; trim a batch with fields instead. All returned list items and cross-reference IDs render in full. A large list section pages with section_limit/section_offset on a re-call naming that one section. This tool does not search: accessions come from uniprot_search_proteins.results[].accession or uniprot_map_ids. Strip any isoform suffix (P04637-2 to P04637) before calling.
| Argument | Type | Description |
|---|---|---|
| fields | string | Comma-separated UniProtKB field names to project, e.g. "accession,gene_names,cc_function,ft_variant". Omit for the full curated default set. Use this on the initial call to trim payload. |
| sections | array | Only used to re-call one accession after a kind: "outline" response — pass a subset of the outlined section keys to fetch just those sections. Requires exactly one accession: a batch with sections is rejected, so trim a batch with fields. A requested section the record lacks is named in absentSections, not an error. Do not pass on the initial call. |
| accessions* | array | Accessions to fetch (1–20). From uniprot_search_proteins or uniprot_map_ids. |
| section_limit | integer | Window size for one list section on a sections re-call: return at most this many items of it (1–500). Requires sections naming exactly one list section, e.g. ["variants"] (or ptms, domains, goTerms). Omit together with section_offset to return the whole section. |
| section_offset | integer | Zero-based index of the first item in the windowed section. Defaults to 0. Pass the previous response's nextOffset to page forward. Same requirements as section_limit; set without section_limit, returns every item from this index on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"accessions"
],
"properties": {
"fields": {
"type": "string",
"description": "Comma-separated UniProtKB field names to project, e.g. \"accession,gene_names,cc_function,ft_variant\". Omit for the full curated default set. Use this on the initial call to trim payload."
},
"sections": {
"type": "array",
"items": {
"type": "string",
"description": "A section key from a prior outline response, e.g. \"disease\", \"variants\", \"function\", \"xrefs\"."
},
"description": "Only used to re-call one accession after a kind: \"outline\" response — pass a subset of the outlined section keys to fetch just those sections. Requires exactly one accession: a batch with sections is rejected, so trim a batch with fields. A requested section the record lacks is named in absentSections, not an error. Do not pass on the initial call."
},
"accessions": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})$",
"description": "A UniProtKB primary accession, e.g. \"P04637\". Canonical form only — strip any \"-N\" isoform suffix."
},
"maxItems": 20,
"minItems": 1,
"description": "Accessions to fetch (1–20). From uniprot_search_proteins or uniprot_map_ids."
},
"section_limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Window size for one list section on a sections re-call: return at most this many items of it (1–500). Requires sections naming exactly one list section, e.g. [\"variants\"] (or ptms, domains, goTerms). Omit together with section_offset to return the whole section."
},
"section_offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based index of the first item in the windowed section. Defaults to 0. Pass the previous response's nextOffset to page forward. Same requirements as section_limit; set without section_limit, returns every item from this index on."
}
},
"additionalProperties": false
}Fetch the reference proteome for an organism by UPID (e.g. "UP000005640") or NCBI taxon ID (e.g. 9606) — provide exactly one. Returns metadata inline: proteome type, total protein count, BUSCO completeness (score, complete/fragmented/missing counts, lineage dataset), and the genome assembly accession. The protein set is opt-in via include_proteins (it is large — human is ~147,506) and returns a capped page with a forward cursor; narrow it with the query filter (UniProtKB Lucene syntax) for a subset. Resolve an organism name to a taxon ID first with uniprot_get_taxonomy.
| Argument | Type | Description |
|---|---|---|
| size | integer | Proteins per page when include_proteins is true (max 500). Omit for the server default. |
| upid | any | Proteome UPID. Provide this OR taxon_id, not both. |
| query | string | Optional UniProtKB Lucene filter to narrow the protein list, e.g. "reviewed:true AND keyword:KW-0067". Only applies when include_proteins is true. |
| cursor | string | Opaque cursor from this tool for the same resolved UPID and exact query. Identifier aliases resolving to that UPID and size changes are allowed. Older raw cursors are rejected; restart without cursor. Only meaningful with include_proteins. |
| taxon_id | integer | NCBI taxon ID, e.g. 9606 for human. Resolves to the reference proteome. Provide this OR upid, not both. |
| include_proteins |
Fetch the canonical amino-acid sequence (FASTA) for a UniProtKB accession, with length and the parsed header. Set include_isoforms to also return the alternatively-spliced isoform sequences. This is the cheap sequence-only path — for the full functional record use uniprot_get_entry. A merged accession returns the sequences of its merge target, labelled with the target accession and the requested one in mergedFrom; a demerged or deleted accession fails not_found naming its replacements or UniParc ID. Accessions come from uniprot_search_proteins or uniprot_map_ids; strip any "-N" isoform suffix (P04637-2 to P04637) before calling.
| Argument | Type | Description |
|---|---|---|
| accession* | string | UniProtKB primary accession, e.g. "P04637". Canonical form only — strip any "-N" isoform suffix. |
| include_isoforms | boolean | When true, also return the isoform sequences. Defaults to false (canonical only). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"accession"
],
"properties": {
"accession": {
"type": "string",
"pattern": "^(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})$",
"description": "UniProtKB primary accession, e.g. \"P04637\". Canonical form only — strip any \"-N\" isoform suffix."
},
"include_isoforms": {
"type": "boolean",
"default": false,
"description": "When true, also return the isoform sequences. Defaults to false (canonical only)."
}
},
"additionalProperties": false
}Resolve a taxonomy record by NCBI taxon ID (e.g. 9606) or scientific name (e.g. "Homo sapiens") — provide exactly one. Returns the scientific and common name, mnemonic, rank, parent, and the full lineage. Set include_children to also fetch immediate child taxa (a separate lookup — not inline on the record) in pages of 100 with the total child count; when more remain, pass the returned cursor to fetch the next page. Use this to turn an organism name into the taxon ID that uniprot_search_proteins (organism_id) and uniprot_get_proteome (taxon_id) expect.
| Argument | Type | Description |
|---|---|---|
| name | string | Organism scientific name, e.g. "Homo sapiens". Provide this OR taxon_id, not both. Matched against the scientific name. |
| cursor | string | Forward-pagination cursor from a prior children page, for the next page of the same taxon; a cursor issued for another taxon is rejected. Only meaningful with include_children. |
| taxon_id | integer | NCBI taxonomy ID, e.g. 9606. Provide this OR name, not both. |
| include_children | boolean | When true, also fetch a page of up to 100 immediate child taxa via a follow-up search. Defaults to false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Organism scientific name, e.g. \"Homo sapiens\". Provide this OR taxon_id, not both. Matched against the scientific name."
},
"cursor": {
"type": "string",
"description": "Forward-pagination cursor from a prior children page, for the next page of the same taxon; a cursor issued for another taxon is rejected. Only meaningful with include_children."
},
"taxon_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "NCBI taxonomy ID, e.g. 9606. Provide this OR name, not both.",
"exclusiveMinimum": 0
},
"include_children": {
"type": "boolean",
"default": false,
"description": "When true, also fetch a page of up to 100 immediate child taxa via a follow-up search. Defaults to false."
}
},
"additionalProperties": false
}Translate identifiers across databases via UniProt's ID-mapping service — gene names to accessions, accession to PDB / Ensembl / RefSeq / ChEMBL / GeneID, and back. The job runs asynchronously; this tool submits it and polls within a budget. A running job returns status "running" with a ticket; pass that ticket alone to poll the same job. A completed call returns status "finished" with one results page; when continuation is present, pass it alone to fetch the next completed page without re-submitting or polling the job. A gene name often maps to one reviewed Swiss-Prot accession plus dozens of unreviewed TrEMBL ones, so target UniProtKB-Swiss-Prot (reviewed only) for the usual intent, or UniProtKB to include TrEMBL. Pair a gene-symbol from_db with tax_id to disambiguate species. A row whose UniProtKB target is inactive (merged, demerged, or deleted) carries an inactive marker naming its replacements. Chain the resulting active accessions into uniprot_get_entry.
| Argument | Type | Description |
|---|---|---|
| ids | array | Identifiers to translate. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation. |
| to_db | string | Target database. UniProtKB-Swiss-Prot = reviewed accessions only (the usual intent); UniProtKB also includes unreviewed TrEMBL. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation. |
| tax_id | integer | NCBI taxon ID to disambiguate ambiguous source IDs (e.g. a gene symbol across species). Recommended with Gene_Name; e.g. 9606 for human. |
| ticket | string | Running-job ticket from a prior status "running" response. Pass it alone to poll that job; do not combine it with continuation or submission inputs. |
Search UniProtKB and return curated protein records. Pass text_search for a plain-language query (the 80% case) or query for the full Lucene field syntax (gene:TP53 AND organism_id:9606 AND reviewed:true) — exactly one is required. Reviewed (Swiss-Prot) entries are manually curated; unreviewed (TrEMBL) are computationally predicted and ~30x more numerous, so reviewed defaults to true to avoid drowning in predictions — set it false to search both tiers together (for TrEMBL only, put reviewed:false in query). The organism_id and reviewed filters apply to the whole query. Request facets (e.g. reviewed, model_organism) for server-side count breakdowns. Results page forward with an opaque cursor; UniProtKB has no offset paging. An inactive accession the query matches (merged, demerged, or deleted) comes back in inactive[] with the accessions that replace it, never as a result. This is the discovery entry point — chain results[].accession into uniprot_get_entry for full records, or uniprot_get_sequence for FASTA.
| Argument | Type | Description |
|---|---|---|
| size | integer | Number of hits per page (max 500). Omit for the server default. |
| query | string | UniProtKB Lucene query with field prefixes — gene, organism_id, keyword (KW-xxxx), go (GO id), reviewed, protein_name, family, length, existence, accession. Example: "gene:BRCA1 AND organism_id:9606 AND reviewed:true". Provide this OR text_search, not both. |
| cursor | string | Opaque forward cursor from this tool for the same exact effective query and filters. Size, fields, and facets may change. Older raw cursors are rejected; restart without cursor. Random access to page N is not supported. |
| facets |
| boolean |
| When true, also return a capped, cursor-paginated page of the proteome's proteins. Defaults to false — metadata alone is the common case. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"size": {
"type": "integer",
"maximum": 500,
"description": "Proteins per page when include_proteins is true (max 500). Omit for the server default.",
"exclusiveMinimum": 0
},
"upid": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^UP[0-9]{9}$",
"description": "Proteome identifier, e.g. \"UP000005640\"."
}
],
"description": "Proteome UPID. Provide this OR taxon_id, not both."
},
"query": {
"type": "string",
"description": "Optional UniProtKB Lucene filter to narrow the protein list, e.g. \"reviewed:true AND keyword:KW-0067\". Only applies when include_proteins is true."
},
"cursor": {
"type": "string",
"description": "Opaque cursor from this tool for the same resolved UPID and exact query. Identifier aliases resolving to that UPID and size changes are allowed. Older raw cursors are rejected; restart without cursor. Only meaningful with include_proteins."
},
"taxon_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "NCBI taxon ID, e.g. 9606 for human. Resolves to the reference proteome. Provide this OR upid, not both.",
"exclusiveMinimum": 0
},
"include_proteins": {
"type": "boolean",
"default": false,
"description": "When true, also return a capped, cursor-paginated page of the proteome's proteins. Defaults to false — metadata alone is the common case."
}
},
"additionalProperties": false
}| from_db | string | Source database. Gene_Name = HGNC symbol (pair with tax_id); UniProtKB_AC-ID = accession or entry name; Ensembl/Ensembl_Protein = ENSG/ENSP; PDB; RefSeq_Nucleotide/RefSeq_Protein = NM_/NP_; ChEMBL; GeneID = NCBI Gene. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation. |
| continuation | object | Completed-page continuation from a prior status "finished" response. Pass it alone to fetch the next page without polling or re-submitting. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"description": "A source identifier in the from_db namespace, e.g. \"TP53\" for Gene_Name."
},
"maxItems": 100000,
"description": "Identifiers to translate. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation."
},
"to_db": {
"enum": [
"UniProtKB",
"UniProtKB-Swiss-Prot",
"Gene_Name",
"GeneID",
"Ensembl",
"Ensembl_Protein",
"PDB",
"RefSeq_Nucleotide",
"RefSeq_Protein",
"ChEMBL",
"PomBase",
"WormBase_Protein"
],
"type": "string",
"description": "Target database. UniProtKB-Swiss-Prot = reviewed accessions only (the usual intent); UniProtKB also includes unreviewed TrEMBL. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation."
},
"tax_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "NCBI taxon ID to disambiguate ambiguous source IDs (e.g. a gene symbol across species). Recommended with Gene_Name; e.g. 9606 for human.",
"exclusiveMinimum": 0
},
"ticket": {
"type": "string",
"minLength": 1,
"description": "Running-job ticket from a prior status \"running\" response. Pass it alone to poll that job; do not combine it with continuation or submission inputs."
},
"from_db": {
"enum": [
"UniProtKB_AC-ID",
"Gene_Name",
"GeneID",
"Ensembl",
"Ensembl_Protein",
"PDB",
"RefSeq_Nucleotide",
"RefSeq_Protein",
"ChEMBL",
"PomBase",
"WormBase_Protein"
],
"type": "string",
"description": "Source database. Gene_Name = HGNC symbol (pair with tax_id); UniProtKB_AC-ID = accession or entry name; Ensembl/Ensembl_Protein = ENSG/ENSP; PDB; RefSeq_Nucleotide/RefSeq_Protein = NM_/NP_; ChEMBL; GeneID = NCBI Gene. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation."
},
"continuation": {
"type": "object",
"required": [
"jobId",
"cursor"
],
"properties": {
"jobId": {
"type": "string",
"minLength": 1,
"description": "UniProt ID-mapping job identifier for the completed job."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque cursor for the next completed results page."
}
},
"description": "Completed-page continuation from a prior status \"finished\" response. Pass it alone to fetch the next page without polling or re-submitting."
}
},
"additionalProperties": false
}| string |
| Comma-separated upstream facet names for count breakdowns, e.g. "reviewed,model_organism,proteins_with". Returns a facets array alongside the hits. |
| fields | string | Comma-separated UniProtKB field names to project, e.g. "accession,gene_names,cc_function". Omit for a sensible default set covering name, gene, organism, length, reviewed, score, and a function snippet. |
| reviewed | boolean | Restrict to reviewed Swiss-Prot entries. Defaults to true (curated only). false applies no tier filter, returning reviewed and unreviewed TrEMBL entries together; for TrEMBL only, put reviewed:false in query. Ignored when query or text_search already contains a reviewed: clause. |
| organism_id | integer | Restrict to an NCBI taxon ID, e.g. 9606 for human. A convenience filter ANDed onto the whole query; resolve names with uniprot_get_taxonomy. |
| text_search | string | Plain-language search across protein names, gene names, and function, e.g. "kinase apoptosis". Provide this OR query, not both. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"size": {
"type": "integer",
"maximum": 500,
"description": "Number of hits per page (max 500). Omit for the server default.",
"exclusiveMinimum": 0
},
"query": {
"type": "string",
"description": "UniProtKB Lucene query with field prefixes — gene, organism_id, keyword (KW-xxxx), go (GO id), reviewed, protein_name, family, length, existence, accession. Example: \"gene:BRCA1 AND organism_id:9606 AND reviewed:true\". Provide this OR text_search, not both."
},
"cursor": {
"type": "string",
"description": "Opaque forward cursor from this tool for the same exact effective query and filters. Size, fields, and facets may change. Older raw cursors are rejected; restart without cursor. Random access to page N is not supported."
},
"facets": {
"type": "string",
"description": "Comma-separated upstream facet names for count breakdowns, e.g. \"reviewed,model_organism,proteins_with\". Returns a facets array alongside the hits."
},
"fields": {
"type": "string",
"description": "Comma-separated UniProtKB field names to project, e.g. \"accession,gene_names,cc_function\". Omit for a sensible default set covering name, gene, organism, length, reviewed, score, and a function snippet."
},
"reviewed": {
"type": "boolean",
"default": true,
"description": "Restrict to reviewed Swiss-Prot entries. Defaults to true (curated only). false applies no tier filter, returning reviewed and unreviewed TrEMBL entries together; for TrEMBL only, put reviewed:false in query. Ignored when query or text_search already contains a reviewed: clause."
},
"organism_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Restrict to an NCBI taxon ID, e.g. 9606 for human. A convenience filter ANDed onto the whole query; resolve names with uniprot_get_taxonomy.",
"exclusiveMinimum": 0
},
"text_search": {
"type": "string",
"description": "Plain-language search across protein names, gene names, and function, e.g. \"kinase apoptosis\". Provide this OR query, not both."
}
},
"additionalProperties": false
}