Skip to main content
Glama

protein-mcp-server

protein-mcp-server: find similar

protein_find_similar
Read-only

Find structurally or evolutionarily related proteins. by:"sequence" runs an RCSB mmseqs2 sequence-similarity search (synchronous; experimental PDB entries only — protein_search_structures with a sequence also reaches computed models) over a sequence — supplied directly, taken from one protein entity of a PDB entry (chain picks it; by default the lowest-numbered protein entity of at least 10 residues; queryEntityId names it), or pulled from a UniProt accession (isoforms included) or entry name (HBA_HUMAN); each hit carries its identity, E-value, bit score, and aligned range. by:"structure" runs a Foldseek fold-similarity search (asynchronous) against experimental and predicted databases, uploading the PDB entry's mmCIF file or the accession's AlphaFold DB model, up to 16,000,000 characters; if the job is still computing when the poll budget elapses, or the call's 50 s budget runs out after Foldseek accepted the job, the response reports status "computing" with a ticket — re-call with ticket_id set to that value to resume the same job instead of resubmitting, and a complete response carries the same ticket so a finished job can be re-paged with a different start. Foldseek searches each chain of a multichain structure as its own query: a response covers one query (query, default 0), reports queryCount, and ranks that query's hits by score across all searched databases. Each mode reads only its own controls: sequence, chain, max_evalue and min_identity belong to by:"sequence"; ticket_id, databases and query belong to by:"structure"; pdb_id, uniprot, start and limit are shared. A field the selected mode cannot consume is rejected rather than silently ignored. A UniProt accession merged into another entry answers for its successor with a notice; a demerged or deleted one fails with its replacements. Output names the engine and database each hit came from; a structure hit also carries its Foldseek target name, and an id only where that name maps to a PDB entry or UniProt accession that protein_get_structure resolves.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "by": "<by>"
    },
    "name": "protein_find_similar"
  }
}

Input Schema

NameRequiredDescriptionDefault
byYesSimilarity axis: sequence (mmseqs2) or structure (Foldseek).
chainNoAuthor chain ID (auth_asym_id, case-sensitive) of pdb_id selecting the protein entity whose sequence by:"sequence" searches, e.g. "B" for the beta chain of 4HHB. Requires pdb_id. Default: the lowest-numbered protein entity of at least 10 residues; DNA and RNA chains never qualify.
limitNoMaximum hits to return (1–100).
queryNoZero-based Foldseek query index (by:structure). Default 0. Foldseek splits a multichain structure into one query per chain, in file order; queryCount in the response says how many the job holds. Pass the same value with ticket_id to resume or re-page that query.
startNoZero-based result offset. Pages a by:sequence search, and a completed by:structure job when re-called with its ticket_id.
pdb_idNoPDB entry ID to derive the query from. by:"sequence" searches one of its protein entities (see chain); by:"structure" uploads its mmCIF file, up to 16,000,000 characters.
uniprotNoUniProt identifier to derive the query from: a canonical accession (e.g. P69905), an isoform accession (e.g. P04637-2), or a UniProtKB entry name (e.g. HBA_HUMAN), which resolves to its entry’s accession. by:"sequence" searches its UniProt sequence, by:"structure" its AlphaFold DB model. A merged accession answers for its successor, with a notice.
sequenceNoProtein sequence for by:sequence: at least 10 residues in A–I or K–Z (J excluded; B/O/U/X/Z accepted). Whitespace is removed and ASCII lowercase normalized.
databasesNoFoldseek target databases (by:structure), by exact name. Default pdb100 + afdb50. pdb100: experimental PDB entries; afdb50, afdb-swissprot, afdb-proteome: AlphaFold DB models; cath50: CATH domains of PDB chains and AlphaFold models; bfvd_v3: predicted viral proteins; mgnify_esm30, gmgcl_id: predicted metagenomic proteins; bfmd: predicted complexes.
ticket_idNoFoldseek ticket ID from a prior by:structure response whose status was "computing". When set, polls that existing job instead of submitting a new search (by:structure only) — pdb_id/uniprot/databases are ignored.
max_evalueNoMaximum E-value (by:sequence). Default 1.
min_identityNoMinimum sequence identity 0–1 (by:sequence). Default 0.

Output Schema

NameRequiredDescriptionDefault
byNoEchoed similarity axis.
hitsNoSimilar proteins, best first. Structure hits are ranked by score across all searched databases (hits without a score last, ties by database then target).
errorNoPresent when the call failed. Absent on success.
queryNoZero-based Foldseek query index the hits belong to (by:structure).
startNoZero-based offset of the returned result page.
engineNoThe engine that answered (e.g. "RCSB mmseqs2", "Foldseek").
noticeNoAdvisory note: a structure job still computing, or one the call’s time budget cut off after submitting (with how to resume it), no matches, a start past the end of the results, a sequence search at RCSB’s 2,000-hit ceiling, other queries in a multichain structure job, the default protein entity a pdb_id sequence query searched alongside the entry’s other protein entities, or a merged UniProt accession answered for its successor.
statusNocomplete with hits, or computing (async — re-call with ticket_id to resume).
ticketIdNoAsync job ticket ID (by:structure). Present while status is computing, and also on a complete response — re-call with ticket_id plus a different start/limit to page the same finished job instead of resubmitting.
nextStartNoOffset for the next result page; absent on the final or past-end page.
queryCountNoNumber of queries the Foldseek job holds, one per chain of the submitted structure (by:structure, complete). Valid query values run from 0 to queryCount - 1.
totalCountNoTotal upstream matches before pagination.
queryLengthNoLength in residues of the query sequence that queryStart and queryEnd index into on every hit (complete responses whose hits carry aligned ranges; for by:structure, the chain of the selected query).
queryEntityIdNoPolymer entity of pdb_id whose sequence by:"sequence" searched (e.g. 4HHB_1). Present only when the query came from pdb_id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond readOnlyHint/openWorldHint: it discloses synchronous versus asynchronous execution, the 50 s poll budget and "computing" status, the 16,000,000-character upload cap, per-chain query splitting with queryCount, and error semantics for merged, demerged and deleted UniProt accessions. These are operational traits an agent cannot infer from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and then organizes the body by mode, with every sentence carrying information about routing, budgets or output. It is dense to the point of being hard to scan, and a few facts (the 16,000,000-character limit, chain-default selection) restate the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, dual-mode, partly asynchronous tool, the description covers mode selection, budgets, pagination, resumption, error handling and hit-field composition. Even though an output schema exists, the note that hits name their engine, database and Foldseek target adds useful interpretive context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions are already detailed, so the baseline is 3; the description still adds cross-parameter rules the schema states only per-field, notably mode-scoped parameter validity and the default entity-selection logic. The gain is real but modest, since most individual semantics are duplicated from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Find structurally or evolutionarily related proteins") and immediately splits the two axes by engine: mmseqs2 sequence search versus Foldseek fold search. It also names the sibling it differs from ("protein_search_structures with a sequence also reaches computed models"), so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to pick each mode, which parameters each mode consumes ("sequence, chain, max_evalue and min_identity belong to by:\"sequence\"; ticket_id, databases and query belong to by:\"structure\""), and that unusable fields are rejected. It also gives a concrete recovery path: re-call with ticket_id to resume rather than resubmit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.