uniprot-link
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UNIPROT_LINK_PORT | No | Server port | 8000 |
| UNIPROT_LINK_TRANSPORT | No | Transport mode: unified, http, or stdio | unified |
| UNIPROT_LINK_SPARQL__TIMEOUT | No | Per-request timeout in seconds | 30 |
| UNIPROT_LINK_SPARQL__CONTACT_EMAIL | No | Contact email for User-Agent header (UniProt etiquette) | bernt.popp@charite.de |
| UNIPROT_LINK_SPARQL__DEFAULT_LIMIT | No | Auto-LIMIT for unbounded SELECT queries | 50 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_server_capabilitiesA | Return the uniprot-link discovery surface. detail='summary' (default) is light: identity/build/release, the tool list WITH call signatures, accepted argument aliases, response modes, recommended workflows, error taxonomy, and limits -- enough to call any tool without guessing an argument name. detail='full' adds the heavy reference blocks (21 named graphs with triple counts, the full SPARQL prefix map, full latency bands, feature-type and cross-reference vocabularies). Call this first in a cold session, or read uniprot://tools (signatures only) or uniprot://capabilities (full). Signature: get_server_capabilities(detail=). |
| run_sparql_queryA | Execute an arbitrary SPARQL 1.1 query against the UniProt endpoint (SELECT / ASK / CONSTRUCT / DESCRIBE, including SERVICE federation to Rhea, OMA, Bgee, etc.). SELECT results come back as columns+rows JSON; ASK as a boolean; CONSTRUCT/DESCRIBE as raw RDF in the chosen format. A LIMIT is auto-injected into unbounded SELECTs (see |
| search_example_queriesA | Search UniProt's 126 curated, executable SPARQL example queries by free text over their descriptions and keyword tags (e.g. 'disease', '3D structure', 'cross-reference', 'taxonomy'). Returns example ids, descriptions, tags, and query types. Fetch the full query text with get_example_query, then run it via run_sparql_query. The best way to learn how to query UniProt. Signature: search_example_queries(text=, limit=). |
| get_example_queryA | Fetch one curated example's full SPARQL text, description, keyword tags, and any federated endpoints it joins. Pass an example_id (full IRI) from search_example_queries. |
| find_proteinsA | Search UniProtKB by structured filters and return matching entries (accession, mnemonic, recommended name, reviewed flag, organism). Requires at least one anchor: gene symbol, mnemonic, EC number, keyword (KW-id or label), OR organism_taxon together with name_contains (matched per word, in any order, case-insensitive). Reviewed (Swiss-Prot) hits are ranked first. UniProt SPARQL has no general full-text index, so for broad text use search_example_queries or run_sparql_query. Pair with get_protein for full detail. Results are ordered reviewed-first, then by mnemonic, then accession (stable across pages). Cold search can take several seconds; an identical repeat is cached (~0 ms). If you already know the accession, call get_protein directly -- it is far faster than a cold search. Signature: find_proteins(gene=, organism_taxon=, reviewed=, keyword=, ec_number=, mnemonic=, name_contains=, limit=, offset=). |
| find_proteins_batchA | Resolve SEVERAL gene symbols to UniProtKB entries in ONE call, running the lookups concurrently -- so N genes cost about one cold round-trip instead of N sequential ones. Use this for multi-gene tasks (e.g. 'get domains for PNKP and NAA10'). Returns by_gene (gene -> accessions, reviewed-first), a flat proteins list tagged with matched_gene, resolved_genes, and unresolved_genes (a symbol that matched nothing is disclosed, never silently dropped). Optionally scope by organism_taxon and reviewed. next_commands fan out to get_protein on each resolved gene's top hit. For a single gene use find_proteins. Signature: find_proteins_batch(genes, organism_taxon=, reviewed=, limit_per_gene=). |
| get_proteinA | Return the core summary for a single UniProtKB entry by accession: mnemonic, reviewed flag, recommended/short name, gene(s), organism + taxon, protein existence, sequence length and mass, a function summary, and creation/modification dates, plus has_variants/has_diseases/has_structure presence flags that drive content-aware next_commands. An obsolete/demerged accession returns a flagged obsolete record (obsolete:true + replaced_by). response_mode (default compact) controls verbosity; standard/full add the created/modified dates. Signature: get_protein(accession, response_mode=). |
| get_protein_sequenceA | Return the amino-acid sequence(s) for an entry: the canonical isoform (length, mass, sequence) plus any additional (non-canonical) isoforms. Pass a canonical accession for all isoforms, or an isoform accession (e.g. P05067-2) to get THAT isoform's specific sequence and mass. response_mode controls verbosity: minimal=metadata only; compact (default)=length/mass + a first/last-30-residue sequence_preview (sequence_truncated:true) — cheap for large proteins; standard/full return the complete sequence string. Set canonical_only=true to return only the canonical isoform (skip the additional-isoform list). Signature: get_protein_sequence(accession, response_mode=, canonical_only=). |
| get_protein_featuresA | Return sequence features with begin/end coordinates (FALDO) for an entry: domains, regions, transmembrane segments, binding/active sites, PTMs, signal peptides, secondary structure, mutagenesis sites, and more. feature_types=['domain'] returns positional domain extents; each returned |
| get_protein_variantsA | Return natural-variant annotations for an entry: position, wild-type residue, amino-acid substitution, an HGVS-style |
| get_protein_diseasesA | Return disease annotations associated with an entry: disease name, UniProt disease id, mnemonic, MIM id, the clinical |
| get_protein_cross_referencesA | Return database cross-references for an entry, grouped by database (PDB, AlphaFoldDB, Ensembl, RefSeq, Reactome, STRING, InterPro, ...). Optionally restrict to specific databases (case-sensitive); any requested name that matched nothing is echoed under unmatched_databases with a did-you-mean, so a typo never reads as 'no data'. response_mode (default compact) returns short ids; full restores raw IRIs. Returns every cross-reference database; use map_identifiers for a focused primary-id mapping. Signature: get_protein_cross_references(accession, databases=, response_mode=). |
| get_protein_go_termsA | Return Gene Ontology annotations for an entry, grouped by aspect (biological_process / molecular_function / cellular_component) where available, each with GO id, label, and (when annotated) ECO |
| map_identifiersA | Map a UniProtKB accession to its PRIMARY external identifiers: the genomic/structural/family core (PDB, AlphaFoldDB, Ensembl, RefSeq, GeneID, HGNC, KEGG, OrthoDB, Pfam, InterPro) by default. Optionally restrict to specific databases. Returns ids grouped by database plus the databases that matched and per-database counts. response_mode (default compact) returns short ids; full restores raw IRIs. For the exhaustive cross-reference set (incl. drug/disease databases like DrugBank/ChEMBL/OpenTargets) use get_protein_cross_references instead. Signature: map_identifiers(accession, databases=, response_mode=). |
| get_taxonA | Resolve an organism in the UniProt taxonomy. Pass a numeric NCBI taxon id (e.g. 9606) for full detail (scientific/common name, rank, the DIRECT parent, and an optional ordered lineage from species up to root), or a scientific/common name to get candidate taxon ids. Use the resolved taxon id with find_proteins(organism_taxon=...). Name matches are ranked best-first (an exact scientific/common-name hit leads, tagged match_quality:'exact'), so matches[0] and next_commands point at the right organism. Numeric-id and common-organism-name lookups are fast (~0 ms for common names); an uncommon name triggers a multi-second taxonomy scan. Signature: get_taxon(taxon, include_lineage=). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| capabilities | |
| tools_overview | |
| usage | |
| reference | |
| prefixes | |
| research_use | |
| citation |
Latest Blog Posts
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/berntpopp/uniprot-link'
If you have feedback or need assistance with the MCP directory API, please join our Discord server