Skip to main content
Glama

protein-mcp-server

protein-mcp-server: track ligands

protein_track_ligands
Read-only

Ligand discovery and binding-site analysis across the PDB. mode "find_ligand" resolves a name or formula to chemical component IDs with metadata (formula, weight, SMILES), ranked by deposition frequency — most-deposited component first, so the top hit is the most common match for the name, not necessarily an exact name-string match. The ranking runs in blocks of max(limit, 25) candidates in RCSB's name-match order: start pages through the ranked blocks (keep limit fixed while paging), and totalCount and candidatesConsidered report how many components matched and how many the page ranked. mode "structures_with_ligand" returns PDB entries holding a bound copy of a ligand (by exact component ID — get the ID from find_ligand first), highest-resolution first, each with its resolution in Å, title, method, and the polymer entities whose chains carry the ligand. This mode and find_ligand's depositionCount count bound copies only: a component present only as a residue inside a polymer chain (e.g. MSE in a selenomethionine protein) or a sugar inside a branched glycan is not counted. mode "binding_site" returns the polymer residues lining a ligand's pocket in a given structure — amino acids, or nucleotides where the ligand binds DNA or RNA — with contact distances, each numbered in both the mmCIF label namespace (asymId, seqId) and the author namespace (authAsymId, authSeqId) used by deposited coordinates and most literature. Binding sites are experimental-only (computed from deposited coordinates; predicted models carry no bound ligands) and cover non-polymer ligands only: a peptide-like ligand deposited as a polymer chain (a BIRD molecule such as cyclosporin A in 1CWA) has none, and a miss names the components and polymer-chain ligands the entry does hold.

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": {
      "mode": "<mode>"
    },
    "name": "protein_track_ligands"
  }
}

Input Schema

NameRequiredDescriptionDefault
modeYesOperation: resolve a ligand, find structures containing it, or analyze its binding site.
limitNoMaximum results to return (1–100).
queryNoLigand name or formula (mode find_ligand).
startNoZero-based result offset: find_ligand pages its ranked candidates, structures_with_ligand its entries, binding_site its ligand instances.
pdb_idNoPDB entry ID (mode binding_site).
comp_idNoExact chemical component ID (modes structures_with_ligand and binding_site).

Output Schema

NameRequiredDescriptionDefault
modeNoEchoed mode.
errorNoPresent when the call failed. Absent on success.
startNoZero-based offset of the result page.
noticeNoAdvisory note: a find_ligand page whose ranked blocks hold fewer candidates than the upstream match count, or whose start is past the end; a structures_with_ligand page that is empty because no entry holds a bound copy of the component (saying whether the ID is a chemical component at all) or because start is past the end; or a binding_site page that leaves instances for a later start or starts past the last instance.
ligandsNoResolved chemical components (find_ligand).
nextStartNoOffset for the next page; absent on the final or past-end page.
structuresNoPDB entries holding a bound (non-polymer) copy of the ligand, highest-resolution first (structures_with_ligand).
totalCountNoTotal upstream matches before any local narrowing: PDB entries holding a bound (non-polymer) copy of the component (structures_with_ligand), chemical components matching the query (find_ligand), or ligand instances with pocket contacts (binding_site).
bindingSitesNoLigand instances and their pocket residues (binding_site), in a fixed order — ligands by entity number, then the instances of each ligand by author chain and author residue number — so start/limit pages read every instance exactly once.
resolvedCompIdNoThe chemical component ID used to query.
candidatesConsideredNoChemical components the find_ligand page ranked by deposition frequency: the one or two blocks of max(limit, 25) name matches holding the page. Below totalCount when the matches run past those blocks; the ranking then covers only these candidates.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly and openWorld, and the description stays consistent while adding non-obvious behavior: deposition-frequency ranking in blocks of max(limit,25), the instruction to keep limit fixed while paging, bound-copy-only counting (excluding polymer-residue components like MSE and glycan sugars), and the experimental-only restriction for binding sites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

Information-dense with essentially no filler, but it is delivered as a single long paragraph mixing mode mechanics, counting caveats, and error-message behavior. Bullets or per-mode structure would make the front-loaded definition far easier to parse.

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?

Covers all three modes, sequencing between them, counting edge cases, and even the failure-path message content for binding_site. Since an output schema exists, it correctly omits return-field documentation and spends its space on semantics instead.

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

Parameters5/5

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

Schema coverage is 100%, yet the description still adds critical meaning: the limit/start interaction with ranking blocks (hold limit constant while paging or the ranking shifts), per-mode meaning of start, and the requirement that comp_id be an exact resolved ID. It also warns the query resolves by frequency, so the top hit may not be an exact name match.

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?

Opens with a specific scope statement ("Ligand discovery and binding-site analysis across the PDB") and then defines each of the three modes with a distinct verb and resource: resolve a name/formula to component IDs, list structures holding a bound copy, and list pocket-lining residues. Nothing overlaps with the structure/annotation siblings.

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 explicit workflow ordering ("by exact component ID — get the ID from find_ligand first") and states mode preconditions (binding_site needs experimental structures, non-polymer ligands). It does not explicitly say when to prefer the structure-centric sibling tools over this one, which keeps it from a 5.

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.