Skip to main content
Glama

protein-mcp-server

protein-mcp-server: search structures

protein_search_structures
Read-only

Search experimental (PDB) and predicted (computed-model) protein structures by free text, protein sequence (triggers an mmseqs2 similarity search), and/or organism, method, resolution, and bound-ligand filters. Returns ranked hits; the experimental page is enriched with title, method, resolution, and source organisms (for a sequence hit, those of the matched entity), and every sequence hit carries its identity, E-value, bit score, and aligned range against the query. Chain hit IDs into protein_get_structure. Optionally returns a facet breakdown (counts by method / organism / release year / …) alongside the hits in the same response. Facets count the filtered result set, so an active organism or method filter also constrains its own facet: the facet lists only the values found in the matching entries (other organisms in the same complexes, other methods deposited with the same entries), never the alternatives the filter excluded. Numeric histogram buckets (resolution, molecular weight) carry explicit rangeFrom/rangeTo bounds so a boundary label is unambiguous.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "protein_search_structures"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum hits to return (1–100).
queryNoFree-text query (protein name, gene, keyword, PDB title terms).
startNoZero-based result offset. Combine with limit to retrieve later pages.
facetsNoOptional dimensions to summarize as a facet breakdown alongside the hits. Each dimension at most once; repeating one is rejected.
ligandNoFilter by bound ligand: an exact chemical component ID (e.g. "STI" for imatinib, "HEM"), in any letter case. Keeps structures holding the component as a bound (non-polymer) copy, not as a residue inside a polymer chain. Resolve a ligand name to its ID with protein_track_ligands mode "find_ligand". Computed models carry no ligands, so under content_type "predicted" this filter matches nothing.
methodNoFilter by experimental method: X-RAY DIFFRACTION, ELECTRON MICROSCOPY, SOLUTION NMR, SOLID-STATE NMR, ELECTRON CRYSTALLOGRAPHY, NEUTRON DIFFRACTION, FIBER DIFFRACTION, POWDER DIFFRACTION, SOLUTION SCATTERING, EPR, FLUORESCENCE TRANSFER, INFRARED SPECTROSCOPY, THEORETICAL MODEL (any letter case), or an alias: cryo-EM / cryoEM / EM → ELECTRON MICROSCOPY; X-ray / xray → X-RAY DIFFRACTION; NMR → SOLUTION NMR + SOLID-STATE NMR. Any other value is rejected. Computed models carry no method, so under content_type "predicted" this filter matches nothing.
organismNoFilter by source organism: a scientific name ("Homo sapiens"), an NCBI common name ("human", "E. coli"), or an NCBI taxon ID ("9606"), in any letter case. Matches that taxon and every taxon under it (strains, subspecies); a multi-word name also matches scientific names that contain it, such as "Escherichia coli (strain K12)". A word fragment ("coli") matches nothing.
sequenceNoProtein sequence for RCSB mmseqs2: 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.
max_evalueNoMaximum E-value for a sequence search. Requires sequence — supplying it without one is rejected, since the threshold filters only a sequence search. Default 1.
content_typeNoWhich structure universe to search: experimental (PDB), predicted (computed models), or all. With a sequence, all searches each universe on its own and merges the hits by bit score.all
min_identityNoMinimum sequence identity (0–1) for a sequence search. Requires sequence — supplying it without one is rejected, since the threshold filters only a sequence search. Default 0.
max_resolutionNoMaximum resolution in Å (lower is sharper); applies to experimental structures.

Output Schema

NameRequiredDescriptionDefault
hitsNoRanked structure hits.
errorNoPresent when the call failed. Absent on success.
startNoZero-based offset of the returned page.
facetsNoOptional facet breakdown when requested — one flat dimension per requested facet. Cross-tabs (a dimension nested inside another) are protein_analyze_collection territory.
noticeNoAdvisory note (empty results, predicted-search caveats, truncation, facet dimensions whose buckets cover materially less than totalCount, a universe a sequence search left out because its search failed, a sequence search at RCSB's 2,000-hit ceiling). Carries every applicable advisory in one string.
nextStartNoOffset for the next page; absent on the final or past-end page.
totalCountNoTotal matches upstream before pagination.
queryLengthNoLength in residues of the query sequence that every hit's queryStart and queryEnd index into (sequence searches whose hits carry an alignment).
effectiveQueryNoEchoed text query for follow-up calls.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past readOnlyHint/openWorldHint: it discloses ranked-hit return shape, per-hit enrichment fields (title, method, resolution, organisms; identity, E-value, bit score, aligned range for sequence hits), and two non-obvious behaviors — facets count the filtered result set so a filter constrains its own facet, and ligand/method filters match nothing under content_type 'predicted'. Bucket boundary semantics (rangeFrom/rangeTo) are also pre-empted.

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?

Purpose and return shape are front-loaded, and most sentences carry operational facts. The facet sentence is dense and clause-heavy, and the histogram-bound sentence is a minor detail that could be trimmed, but no sentence is pure filler.

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, no-required-parameter search tool with an output schema, the description covers filtering semantics, sequence-search mechanics, facet caveats, and the natural follow-up call. Nothing an agent needs to invoke it correctly appears to be missing.

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%, so the baseline is 3, and the description adds genuine meaning on top: how 'all' with a sequence searches each universe separately and merges by bit score, why max_evalue/min_identity are rejected without a sequence, and that facets may list each dimension at most once. Remaining parameter detail (limit/start paging) is left to the schema, which is adequate.

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 a precisely scoped resource: 'Search experimental (PDB) and predicted (computed-model) protein structures', followed by the exact axes (free text, sequence, organism, method, resolution, ligand). An agent immediately knows this is a multi-filter structure search rather than a lookup or comparison.

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

Usage Guidelines4/5

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

Gives clear routing cues: chain hit IDs into protein_get_structure, and resolve ligand names with protein_track_ligands mode 'find_ligand'. It also explains the sequence-search behavior per content_type. It never states when to prefer protein_find_similar over this tool for sequence work, so the closest sibling is left undifferentiated.

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.