Skip to main content
Glama
berntpopp
by berntpopp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
UNIPROT_LINK_PORTNoServer port8000
UNIPROT_LINK_TRANSPORTNoTransport mode: unified, http, or stdiounified
UNIPROT_LINK_SPARQL__TIMEOUTNoPer-request timeout in seconds30
UNIPROT_LINK_SPARQL__CONTACT_EMAILNoContact email for User-Agent header (UniProt etiquette)bernt.popp@charite.de
UNIPROT_LINK_SPARQL__DEFAULT_LIMITNoAuto-LIMIT for unbounded SELECT queries50

Capabilities

Features and capabilities supported by this server

CapabilityDetails
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

NameDescription
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 _meta/truncated). This is the escape hatch for anything the typed tools do not cover -- seed queries from search_example_queries. Use uniprot://prefixes for the standard PREFIX block. Unbounded or federated queries can take 10-60 s; bound lookups (anchored on an accession/gene/taxon) return in <2 s. Signature: run_sparql_query(query, result_format=, limit=, timeout_seconds=).

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. _meta.next_commands offers to run it directly via run_sparql_query. Signature: get_example_query(example_id).

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 type round-trips to the filter vocabulary. Filter keys come from capabilities (feature_types); a zero-match filter echoes the accepted keys as a filter_hint. Secondary-structure features (helix/strand/turn) are hidden by default and disclosed under excluded_secondary_structure; set include_secondary_structure=true (or name them in feature_types) to return them. Signature: get_protein_features(accession, feature_types=, limit=, include_secondary_structure=).

get_protein_variantsA

Return natural-variant annotations for an entry: position, wild-type residue, amino-acid substitution, an HGVS-style notation (e.g. L176F) for simple substitutions, variant_type (substitution|other), free-text description, structured linked diseases, and dbsnp rsIDs. Set disease_associated_only=true to keep only disease-linked variants. Signature: get_protein_variants(accession, limit=, disease_associated_only=).

get_protein_diseasesA

Return disease annotations associated with an entry: disease name, UniProt disease id, mnemonic, MIM id, the clinical definition (the disease vocabulary's own description), and involvement (the entry-specific note). Pairs with get_protein_variants for variant-level disease evidence. Signature: get_protein_diseases(accession).

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 evidence ids plus mapped GO evidence_codes (IDA/IEA/IMP/...) for citation. Always returns count and count_by_aspect; pass aspect to scope to one ontology and limit to cap a large set (token economy). Signature: get_protein_go_terms(accession, aspect=, limit=).

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
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