uniprot-mcp-server
Server Details
Protein research over UniProtKB — search by function, fetch curated records, map IDs, proteomes.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/uniprot-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/uniprot-mcp-server
Available Tools
6 toolsuniprot_get_entryuniprot-mcp-server: get entryARead-onlyIdempotentInspect
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/withdrawn accessions in failed[]. Pass fields to trim the upstream projection. A single oversized record returns kind: "outline" (a section listing with byte sizes) instead of overflowing context — re-call the same accession with sections:[...] (e.g. ["disease","variants"]) to pull only those. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | 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 | No | Only used to re-call after a kind: "outline" response — pass a subset of the outlined section keys to fetch just those sections. Do not pass on the initial call. | |
| accessions | Yes | Accessions to fetch (1–20). From uniprot_search_proteins or uniprot_map_ids. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | Result kind. "full": the batch resolved — read succeeded[] and failed[]. "outline": a single record exceeded the context budget and is returned as a section listing — re-call the same accession with sections:[...] to pull specific sections. |
| error | No | Present when the call failed. Absent on success. |
| failed | No | Accessions that were well-formed but not found in UniProtKB. Present when kind is "full". |
| notice | No | Re-call guidance when kind is "outline" — re-call the same accession with sections:[...] to pull specific sections. |
| sections | No | Section outline returned when a single record exceeds the context budget. Present when kind is "outline". |
| succeeded | No | Entries that resolved successfully. Present when kind is "full". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description adds key behavioral details: partial failures populate succeeded[] and failed[], oversized records trigger an 'outline' response with byte sizes, and isoform suffixes must be stripped before calling. This is substantial non-obvious behavior an agent needs to know.
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 longer than the typical two-sentence ideal, but every sentence carries substantive information: batch behavior, entry contents, trimming, outline handling, and source requirement. It is front-loaded with the core purpose and uses structured clauses without unnecessary 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 and annotations, the description sufficiently covers the remaining workflow: batch size, partial failure results, oversized record handling, section re-calls, accession sources, and preprocessing requirements. It is complete enough for reliable tool invocation and adaptation.
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 schema already documents all parameters at 100% coverage. The description adds valuable usage semantics beyond schema: 'fields' is for trimming the initial projection, 'sections' is only used for re-calls after an outline and should not be passed initially, and accessions require canonical form with suffixes stripped.
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 opens with a specific action: 'Fetch full curated UniProtKB entries by accession in one batch (up to 20)', clearly identifying the tool's resource and scope. It also distinguishes itself from search behavior with 'This tool does not search', preventing confusion with 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 provides explicit guidance on when not to use this tool: 'This tool does not search: accessions come from uniprot_search_proteins.results[].accession or uniprot_map_ids.' It also explains the workflow for trimming fields initially and using sections only after an 'outline' response, which guides invocation steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_proteomeuniprot-mcp-server: get proteomeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Proteins per page when include_proteins is true (max 500). Omit for the server default. | |
| upid | No | Proteome UPID. Provide this OR taxon_id, not both. | |
| query | No | 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 | No | Forward-pagination cursor from a prior protein page. Only meaningful with include_proteins. | |
| taxon_id | No | NCBI taxon ID, e.g. 9606 for human. Resolves to the reference proteome. Provide this OR upid, not both. | |
| include_proteins | No | When true, also return a capped, cursor-paginated page of the proteome's proteins. Defaults to false — metadata alone is the common case. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page-size cap that was applied. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of proteins returned in this page. |
| cursor | No | Forward cursor for the next protein page. Absent on the last page. |
| notice | No | Truncation guidance when the protein page was capped — how to reach the rest (walk the cursor or narrow with the query filter). |
| proteins | No | A capped page of the proteome's proteins. Present only when include_proteins is true. |
| proteome | No | Proteome metadata. |
| truncated | No | True when the protein page hit the size cap — more remain via cursor. |
| totalProteinsMatched | No | Total proteins matching the (optionally filtered) proteome query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent), the description discloses concrete behavior: the returned metadata fields, large protein set size (~147,506 for human), capped pages with a forward cursor, and optional query filtering. This gives the agent strong expectations about cost and paging behavior.
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 dense but efficient, with no filler. Each sentence carries distinct value: what the tool fetches, what metadata comes back, how proteins are paginated and filtered, and what to call first for organism names.
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 tool with 6 parameters, an output schema, and sibling tools, the description is complete: it covers input selection rules, output highlights, pagination, size caveats, query behavior, and the relevant prerequisite workflow. The output schema covers the full return shape, so the description does not need to repeat it.
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 input schema already has 100% parameter coverage, so the baseline is 3. The description adds useful context beyond schema details: the protein list is very large, pagination is capped, and the query filter applies specifically to the protein subset. It reinforces the exclusive upid/taxon_id relationship though the schema already states it.
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 starts with a specific verb and resource: 'Fetch the reference proteome for an organism by UPID... or NCBI taxon ID.' It clearly distinguishes this from sibling tools by focusing on proteome-level retrieval rather than individual entries, sequences, or 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 gives explicit usage context: provide exactly one of upid or taxon_id, metadata-only is the common case, proteins are opt-in via include_proteins, and query can be narrowed with a Lucene filter. It also names the prerequisite tool, uniprot_get_taxonomy, for resolving organism names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_sequenceuniprot-mcp-server: get sequenceARead-onlyIdempotentInspect
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. Accessions come from uniprot_search_proteins or uniprot_map_ids; strip any "-N" isoform suffix (P04637-2 to P04637) before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| accession | Yes | UniProtKB primary accession, e.g. "P04637". Canonical form only — strip any "-N" isoform suffix. | |
| include_isoforms | No | When true, also return the isoform sequences. Defaults to false (canonical only). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| isoforms | No | Isoform sequence records. Present only when include_isoforms is true and isoforms exist. |
| accession | No | The accession that was fetched. |
| canonical | No | The canonical sequence record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context beyond those: the 'cheap sequence-only' cost characterization, the toggle behavior for include_isoforms (alternatively-spliced sequences), and the output shape (length, parsed header). 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?
Four sentences, each earning its place: purpose/outputs, isoform parameter behavior, alternative tool, and input provenance + constraint. Front-loaded with the core action, no filler or repetition of annotation data.
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 an output schema exists (so return format doesn't need restating), full schema coverage, and rich annotations, the description covers everything else: purpose, output components, param toggle, cheaper-vs-fuller alternative, input chain, and a handling caveat. Nothing critical is missing for a 2-param 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?
Schema description coverage is 100% — both parameters are fully documented in the schema (accession pattern + canonical-only instruction; include_isoforms default and behavior). The description adds minimal param-level value beyond what the schema provides, so the baseline of 3 applies. The isoform-stripping note is duplicated in schema, not new semantic info.
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?
Uses a specific verb+resource ('Fetch the canonical amino-acid sequence (FASTA) for a UniProtKB accession') and names the exact outputs delivered (sequence, length, parsed header). It explicitly contrasts with uniprot_get_entry ('full functional record'), clearly distinguishing itself from its sibling.
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 explicit when-to-use guidance ('This is the cheap sequence-only path') and names the alternative for full records (uniprot_get_entry). It also tells the agent where inputs originate (uniprot_search_proteins or uniprot_map_ids) and gives a concrete prerequisite instruction (strip '-N' isoform suffix) before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_get_taxonomyuniprot-mcp-server: get taxonomyARead-onlyIdempotentInspect
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). Use this to turn an organism name into the taxon ID that uniprot_search_proteins (organism_id) and uniprot_get_proteome (taxon_id) expect.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Organism scientific name, e.g. "Homo sapiens". Provide this OR taxon_id, not both. Matched against the scientific name. | |
| taxon_id | No | NCBI taxonomy ID, e.g. 9606. Provide this OR name, not both. | |
| include_children | No | When true, also fetch the immediate child taxa via a follow-up search. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| taxon | No | The taxonomy record. |
| lineage | No | Full lineage from root to the taxon's near ancestor. |
| children | No | Immediate children. Present only when include_children is true. |
| childCount | No | Number of immediate children returned (when include_children is true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context: it notes that include_children triggers a separate follow-up lookup (not inline), and that the tool returns a specific set of fields. This goes beyond the annotations without contradicting them.
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 the primary purpose, and every clause earns its place. It packs essential information (input options, output fields, include_children behavior, and cross-references to sibling tools) without redundancy. 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 tool's moderate complexity (3 params, output schema present, annotations provided), the description is complete. It covers input constraints, output contents, the optional children behavior, and how it integrates with sibling tools. The output schema exists, so return values don't need elaboration. This is a well-rounded description for the context.
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 all three parameters well. The description adds value by clarifying the mutual exclusivity of name and taxon_id ('provide exactly one') and by explaining the purpose of include_children as a separate lookup. This is slightly above the baseline 3 because it reinforces the constraint and adds context about the follow-up behavior.
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 resolves a taxonomy record by NCBI taxon ID or scientific name, and lists the returned fields (scientific/common name, mnemonic, rank, parent, lineage). It distinguishes itself from siblings by explicitly mentioning how it feeds into uniprot_search_proteins and uniprot_get_proteome, which is a specific verb+resource+scope.
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 to provide exactly one of name or taxon_id, and explains when to use this tool: to turn an organism name into a taxon ID for other tools. It also clarifies that include_children is a separate lookup, not inline, which prevents misuse. This is explicit when-to-use guidance with alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_map_idsuniprot-mcp-server: map IDsARead-onlyIdempotentInspect
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 / UniProtKB_AC-ID to include TrEMBL. Pair a gene-symbol from_db with tax_id to disambiguate species. Chain the resulting accessions into uniprot_get_entry.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Identifiers to translate. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation. | |
| to_db | No | Target database. UniProtKB-Swiss-Prot = reviewed accessions only (the usual intent); UniProtKB / UniProtKB_AC-ID also include unreviewed TrEMBL. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation. | |
| tax_id | No | 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 | No | 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 | No | 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 | No | Completed-page continuation from a prior status "finished" response. Pass it alone to fetch the next page without polling or re-submitting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Status guidance — e.g. that the job is still running, or that no IDs mapped. |
| status | No | Job state: "finished" (one completed results page included) or "running" (poll with ticket). |
| ticket | No | Running-job ticket (present only when status is "running"). Pass it alone to poll the same job. |
| results | No | Resolved mappings on this completed page (present only when status is "finished"). Failed source IDs are reported in unmappedIds. |
| mappedCount | No | Number of resolved mappings (finished jobs only). |
| unmappedIds | No | Source IDs UniProt reported as failed on this completed page. Absent when none failed. |
| continuation | No | Next completed-page continuation (finished jobs only). Pass it alone to fetch the next page; absent on the terminal page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint, idempotentHint), the description reveals that jobs run asynchronously, return 'running' with a ticket or 'finished' with a results page, and support paginated continuation. It also explains the reviewed vs. unreviewed Swiss-Prot/TrEMBL distinction, which materially affects results.
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 dense but every sentence earns its place: core purpose first, then async mechanics, then the reviewed/unreviewed nuance, species disambiguation, and successor tool. It packs substantial guidance into a compact paragraph 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?
The description fully covers the non-obvious workflow: submitting, polling by ticket, fetching continuation pages, and choosing the right target database. Since an output schema exists, the absence of a return-field breakdown is not a gap. This is complete for a complex asynchronous 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?
Although schema coverage is 100%, the description adds crucial operational meaning: which parameters apply only to submission, that ticket and continuation must be passed alone, and that tax_id should accompany Gene_Name. This goes well beyond the schema's per-field 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 opens with a specific verb and resource: 'Translate identifiers across databases via UniProt's ID-mapping service,' and gives concrete examples of mappings. This clearly distinguishes it from sibling tools like uniprot_get_entry or uniprot_search_proteins.
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 gives explicit when-to-use context, including the async submission/poll/continuation workflow, when to pass a ticket vs. a continuation, and species disambiguation with tax_id. It also tells the agent to chain results into uniprot_get_entry, which is actionable routing to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uniprot_search_proteinsuniprot-mcp-server: search proteinsARead-onlyIdempotentInspect
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 include TrEMBL. Request facets (e.g. reviewed, model_organism) for server-side count breakdowns. Results page forward with an opaque cursor; UniProtKB has no offset paging. This is the discovery entry point — chain results[].accession into uniprot_get_entry for full records, or uniprot_get_sequence for FASTA.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of hits per page (max 500). Omit for the server default. | |
| query | No | 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 | No | Opaque forward-pagination cursor from a prior response. Walk pages with this; random access to page N is not supported. | |
| facets | No | Comma-separated upstream facet names for count breakdowns, e.g. "reviewed,model_organism,proteins_with". Returns a facets array alongside the hits. | |
| fields | No | 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 | No | Restrict to reviewed Swiss-Prot entries. Defaults to true (curated only); set false to include unreviewed TrEMBL. Ignored when query already pins a reviewed: clause. | |
| organism_id | No | Restrict to an NCBI taxon ID, e.g. 9606 for human. A convenience filter ANDed onto the query; resolve names with uniprot_get_taxonomy. | |
| text_search | No | Plain-language search across protein names, gene names, and function, e.g. "kinase apoptosis". Provide this OR query, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| cursor | No | Forward cursor for the next page. Absent on the last page. |
| facets | No | Upstream facet count breakdowns. Present only when facets were requested. |
| notice | No | Guidance when nothing matched — echoes the query and suggests how to broaden. |
| results | No | Matching protein hits for this page. |
| totalResults | No | Total matches for the query before pagination (from the upstream result count). |
| effectiveQuery | No | The query as the server assembled and sent it to UniProtKB. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent, but the description adds substantive behavioral context: the reviewed=true default exists to avoid drowning in ~30x more TrEMBL predictions, paging is forward-only via an opaque cursor with no offset support, and facets produce server-side count breakdowns. This is exactly the kind of value that goes beyond the annotation hints while remaining consistent with them.
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 dense but well-organized: it leads with the core purpose, then covers query modes, filtering defaults, facets, paging, and integration with sibling tools. Every sentence earns its place, and the structured flow from usage to boundaries to follow-up actions makes it easy for an agent to parse.
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 (8 parameters, two mutually exclusive query modes, server-side facets, cursor pagination, and downstream chaining), the description covers all critical operational behavior while the output schema handles return details. It leaves no major usage question unanswered and explicitly names sibling tools for next steps.
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?
Although the schema has 100% parameter coverage, the description adds complementary semantics: it frames text_search vs query as the 80% case versus the advanced syntax, explains the rationale for the reviewed default, states the exclusivity constraint, and clarifies that organism_id is a convenience filter ANDed onto the query. These are meaning-enriching details not fully derivable from 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 opens with a specific verb+resource: 'Search UniProtKB and return curated protein records.' It clearly distinguishes this tool from siblings by calling it 'the discovery entry point' and explaining that result accessions chain into uniprot_get_entry and uniprot_get_sequence.
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 gives explicit when-to-use guidance: use text_search for the 80% plain-language case, use query for full Lucene syntax, and exactly one is required. It also specifies when to include TrEMBL via reviewed=false, explains cursor paging limitations, and points alternatives for follow-up record retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
- Changed
uniprot_map_ids13 fields changed- added
Input schema / properties / continuationAdded value: +{ + "description": "Completed-page continuation from a prior status \"finished\" response. Pass it alone to fetch the next page without polling or re-submitting.", + "properties": { + "cursor": { + "description": "Opaque cursor for the next completed results page.", + "minLength": 1, + "type": "string" + }, + "jobId": { + "description": "UniProt ID-mapping job identifier for the completed job.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "jobId", + "cursor" + ], + "type": "object" +} - changed
Input schema / properties / from_db / descriptionPrevious value: -"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 unless resuming with a ticket."New value: +"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." - changed
Input schema / properties / ids / descriptionPrevious value: -"Identifiers to translate. Required unless resuming with a ticket."New value: +"Identifiers to translate. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation." - changed
Input schema / properties / ticket / descriptionPrevious value: -"A ticket from a prior status \"running\" response. Pass this alone (no from_db/to_db/ids) to fetch the completed result."New value: +"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." - added
Input schema / properties / ticket / minLengthAdded value: +1 - changed
Input schema / properties / to_db / descriptionPrevious value: -"Target database. UniProtKB-Swiss-Prot = reviewed accessions only (the usual intent); UniProtKB / UniProtKB_AC-ID also include unreviewed TrEMBL. Required unless resuming with a ticket."New value: +"Target database. UniProtKB-Swiss-Prot = reviewed accessions only (the usual intent); UniProtKB / UniProtKB_AC-ID also include unreviewed TrEMBL. Required only when submitting a new mapping job; omitted when resuming with a ticket or continuation." - added
Output schema / properties / continuationAdded value: +{ + "additionalProperties": false, + "description": "Next completed-page continuation (finished jobs only). Pass it alone to fetch the next page; absent on the terminal page.", + "properties": { + "cursor": { + "description": "Opaque cursor for the next completed results page.", + "minLength": 1, + "type": "string" + }, + "jobId": { + "description": "UniProt ID-mapping job identifier for the completed job.", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "jobId", + "cursor" + ], + "type": "object" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `missing_inputs`: Neither a ticket nor the full from_db/to_db/ids triple was provided. `unsupported_db_pair`: The from_db/to_db combination is not supported by the ID-mapping service. `invalid_ticket`: The resume ticket is unknown or has expired server-side (UniProt holds jobs only temporarily). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_inputs`: No complete submission, running-job ticket, or completed-page continuation was provided. `conflicting_inputs`: Submission inputs, a running-job ticket, or a completed-page continuation were combined. `unsupported_db_pair`: The from_db/to_db combination is not supported by the ID-mapping service. `invalid_ticket`: The resume ticket is unknown or has expired server-side (UniProt holds jobs only temporarily). `invalid_continuation`: The completed-page continuation refers to a result page that is unknown or expired. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "missing_inputs", - "unsupported_db_pair", - "invalid_ticket" -]New value: +[ + "missing_inputs", + "conflicting_inputs", + "unsupported_db_pair", + "invalid_ticket", + "invalid_continuation" +] - changed
Output schema / properties / results / descriptionPrevious value: -"Resolved mappings (present when status is \"finished\"). A source ID with no mapping is simply absent."New value: +"Resolved mappings on this completed page (present only when status is \"finished\"). Failed source IDs are reported in unmappedIds." - changed
Output schema / properties / status / descriptionPrevious value: -"Job state: \"finished\" (results included) or \"running\" (re-call with the ticket)."New value: +"Job state: \"finished\" (one completed results page included) or \"running\" (poll with ticket)." - changed
Output schema / properties / ticket / descriptionPrevious value: -"Resumable job ticket (present when status is \"running\"). Re-call this tool with ticket set, and nothing else, to fetch the result."New value: +"Running-job ticket (present only when status is \"running\"). Pass it alone to poll the same job." - changed
Output schema / properties / unmappedIds / descriptionPrevious value: -"Input IDs with no mapping in the target database (finished jobs only). Absent when resuming or all mapped."New value: +"Source IDs UniProt reported as failed on this completed page. Absent when none failed."
6 tool updates
- First observed
uniprot_get_entry - First observed
uniprot_get_proteome - First observed
uniprot_get_sequence - First observed
uniprot_get_taxonomy - First observed
uniprot_map_ids - First observed
uniprot_search_proteins
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
UniProt MCP — protein sequence + function database.
STRING protein-protein interaction networks across ~12k organisms
InterPro MCP (EBI) — protein family / domain / functional-site classification.
AlphaFold DB MCP — predicted protein structures.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides seamless access to UniProtKB protein database, enabling queries for protein entries, sequences, Gene Ontology annotations, full-text search, and ID mapping across 200+ database types.52MIT
- AlicenseNot gradedqualityCmaintenanceProvides access to UniProt protein sequence and function knowledge base, enabling search and retrieval of protein entries, proteomes, taxonomy, and feature annotations.13MIT
- FlicenseCqualityDmaintenanceA comprehensive Model Context Protocol (MCP) server providing advanced access to the UniProt protein database.2620-
- AlicenseBqualityDmaintenanceProvides seamless access to UniProtKB protein data, enabling querying of protein entries, sequences, Gene Ontology annotations, and ID mappings through a typed, resilient interface.5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct purpose: retrieving entries, proteomes, sequences, taxonomy, mapping IDs, and searching proteins. There is no overlap; even the batch entry retrieval is distinct from the sequence-only retrieval.
All tools follow a consistent verb_noun pattern with a consistent prefix: uniprot_get_entry, uniprot_get_proteome, uniprot_get_sequence, uniprot_get_taxonomy, uniprot_map_ids, uniprot_search_proteins. This makes it easy to predict available operations.
With 6 tools, the server is well-scoped for its purpose of querying and retrieving UniProt data. Each tool serves a core function and no tool feels redundant.
The toolset covers the main workflows: search proteins, fetch full entries, fetch sequences, map IDs, resolve taxonomy, and fetch proteomes. Minor gaps include lack of tools for browsing taxonomy children inline or fetching isoforms in entries, but these can be worked around with existing tools.