RCSB PDB

io.github.rcsb由 GitHub 账号 rcsb 发布v0.23.0更新于 Oct 27, 2026

MCP server to search, inspect, and cross-reference RCSB Protein Data Bank structures

概览

AI 生成的概览

用于检索、查看和交叉引用 RCSB 蛋白质数据库结构,让助手查找 PDB 条目并获取其元数据与注释。

可以做什么
  • 把自由文本解析为本体 ID:生物体、GO 术语、InterPro 结构域、酶分类、疾病
  • 发现检索属性,并按关键词、属性、序列、化学、三维形状、序列基序或结构基序构建查询,可用 AND/OR 组合
  • 执行检索,返回匹配的 PDB 标识、计数、分面、分组、排序与分页结果
  • 获取 Data API 记录:条目、聚合物/配体/糖类实体与实例、组装体、界面、化学组分、分组、UniProt 与 PubMed 记录
  • 在 PDB、UniProt 与 NCBI 之间映射序列和残基级特征,并查看实时 schema 以获取更多字段
  • 把检索结果渲染为自包含的 HTML 报告
适用场景
适合涉及蛋白质结构的问题:按关键词、序列、配体或折叠查找条目,查询已知 PDB 标识的详情,或把结构对应到 UniProt 与 NCBI 记录。适用于结构生物学研究和文献式汇总,而非通用网页搜索。
运行要求
以 stdio 方式在本地运行 PyPI 包 rcsb-mcp,通常用 uvx 启动,因此需要 Python 与 uv。无需 API 密钥或账号,RCSB 与 EBI 接口均为公开服务,但需要网络访问。另提供测试阶段的托管 HTTP 端点。
安装前请注意
操作均为只读,但每次查询和解析调用都会访问第三方服务:RCSB 的 search、data 与 sequence-coordinates 接口,以及 EBI QuickGO、EBI Search、OLS 和 UniProt taxonomy。托管端点为测试版,工具面可能随时变更。请注意请求频率;可选变量 RCSB_MCP_USER_AGENT 会改变对外发送的 User-Agent。

安装

在 SourceWeft 中

  1. 打开 控制台中的 RCSB PDB,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

rcsb-mcp

An MCP server for interrogating Protein Data Bank structures — discover, inspect, and cross-reference — from LLM clients (Claude Desktop, MCP Inspector, Cursor, etc.). It spans three RCSB APIs:

  • Discover — find structures with the Search API (keyword, attribute, sequence, chemistry, 3D shape, motif).
  • Inspect — fetch entry / entity / assembly / ligand details and annotations from the Data API.
  • Relate — map sequences and positional features across PDB, UniProt, and NCBI with the Sequence Coordinates API.

Tools

Search (search.rcsb.org)

Searching is two steps: build a query with an rcsb_query_* tool, then execute it with rcsb_search_request. The builders are pure — they return a query document (readable JSON plus a digest) and touch no network, so nothing is searched until you call rcsb_search_request. rcsb_query_composer joins two or more documents with AND/OR, which is also how a single search mixes services (e.g. sequence similarity AND an organism filter).

Build

ToolWhat it does
rcsb_query_fulltextFree-text keyword query (e.g. "CRISPR Cas9").
rcsb_query_attributeStructured query on one or more indexed attributes (resolution, organism, release date, ...) joined by a single logical_operator. Each condition supports exists, negation, case_sensitive; chemical_attributes=True selects the chemical-component catalog.
rcsb_query_sequenceMMseqs2 sequence-similarity query (BLAST-like), with identity / e-value cutoffs.
rcsb_query_chemicalChemical query by SMILES/InChI descriptor (whole-molecule or substructure) or molecular formula.
rcsb_query_structure3D shape-similarity query against a reference PDB assembly or chain.
rcsb_query_seqmotifShort sequence-motif query (PROSITE pattern, regex, or simple wildcards).
rcsb_query_strucmotif3D structural-motif query: a geometric arrangement of specific residues (e.g. a catalytic triad).
rcsb_query_composerJoin 2+ query documents with AND/OR — nested boolean logic, and the only way to combine different services in one search.

Run

ToolWhat it does
rcsb_search_requestExecute a query document and return matching identifiers only. Carries every output option: return_type, limit/offset, all_hits, facets, sort_by/sort_direction, group_by/group_by_ranking, include_computed_models.

Discover

ToolWhat it does
rcsb_list_pdb_search_attributesDiscover searchable attribute paths, types, and operators. schema="structure" (default, ~636) or schema="chemical" (~58: chem_comp.*, drugbank_info.*, ...). Records also carry enum (closed value sets) and nested_group (attributes stored in nested objects — see below).
rcsb_find_go_termsResolve a free-text molecular function / biological process / cellular component to Gene Ontology ids (via EBI QuickGO), annotated with PDB entry counts — then search by rcsb_polymer_entity_annotation.annotation_lineage.id.
rcsb_find_interpro_domainsResolve a free-text protein domain / family / fold to InterPro and Pfam ids (via EBI Search), annotated with PDB entry counts — then search by rcsb_polymer_entity_annotation.annotation_id.
rcsb_find_enzyme_classesResolve a free-text enzyme / reaction to Enzyme Commission (EC) numbers (via EBI Search/IntEnz), annotated with PDB entry counts — then search by rcsb_polymer_entity.rcsb_ec_lineage.id (hierarchical).
rcsb_find_disease_termsResolve a free-text disease / condition to MONDO ids (via EBI OLS), annotated with PDB entry counts — then search by rcsb_uniprot_annotation.annotation_lineage.id (hierarchical, UniProt-based).
rcsb_find_organismsResolve a free-text organism / common name / clade to NCBI Taxonomy ids (via UniProt taxonomy), annotated with PDB entry counts — then search by rcsb_entity_source_organism.taxonomy_lineage.id (hierarchical: a clade id matches every organism beneath it).

Both attribute catalogs are generated from the live metadata schemas by scripts/generate_search_attributes.py. To search chemical-component attributes, find the path with rcsb_list_pdb_search_attributes(schema="chemical"), pass chemical_attributes=True to rcsb_query_attribute, and usually set return_type="mol_definition".

Nested attributes. An object can hold many annotations, many binding affinities, many citations. For attributes carrying a nested_group, the query shape selects the semantics: conditions built in one rcsb_query_attribute call, with nothing else in it, must hold on the same record; conditions in separate calls are matched independently against any record. Both are valid and mean different things — type=Kd with value<1 describes one measurement, while an InterPro id and a GO type are necessarily two different annotations.

Counting and faceting are output options on rcsb_search_request, not separate tools: every response includes total_count (the full match count — for "how many ..." run the search with limit=1 and read it), and passing facets returns a breakdown (terms/histogram/date_histogram/range/cardinality) instead of hits. A terms facet also tells you what your hits share, which is how a handful of results becomes a re-searchable value.

Grouping. group_by returns one representative per cluster — seqid_30 … seqid_95 for sequence-identity clusters, or uniprot to collapse by accession — with group_by_ranking choosing the representative. Requires return_type="polymer_entity"; the response reports group_count alongside total_count.

Sorting. sort_by (an attribute path) + sort_direction (asc/desc) replaces the default score ordering (for similarity searches this overrides the similarity-ranked order). Only attributes indexed for sorting work — those exposing exact_match (strings) or equals (numbers/dates) in rcsb_list_pdb_search_attributes; sorting is not available for return_type="mol_definition".

Paging. rcsb_search_request accepts limit (1–100, default 10) and offset (default 0), and each response reports total_count, has_more, and next_offset — call again with the same query document and offset=next_offset. For an explicit "ALL ..." request, all_hits=True returns the complete set in one call (refused above 10,000 hits, and it cannot be combined with offset).

Data (data.rcsb.org/graphql)

There is one tool per Data API GraphQL root field. Each takes a list of IDs (singular lookups = a one-element list) plus an optional fields argument to override the curated default selection with your own GraphQL sub-selection. Unknown IDs are reported under not_found. Discover the paths to put in fields with rcsb_describe_data_object — browse a level, drill into a nested object with into=, or search the schema by keyword with query= + max_depth=. Every path it returns is verified against the live schema, so don't guess field names.

ToolObjectExample ID
rcsb_get_entriesPDB entries"4HHB"
rcsb_get_polymer_entitiesPolymer entities (protein/NA)"4HHB_1"
rcsb_get_nonpolymer_entitiesLigand/cofactor entities"4HHB_3"
rcsb_get_branched_entitiesCarbohydrate entities"5FMB_2"
rcsb_get_polymer_entity_instancesPolymer chains"4HHB.A"
rcsb_get_nonpolymer_entity_instancesBound-ligand instances"4HHB.E"
rcsb_get_branched_entity_instancesGlycan chains"5FMB.C"
rcsb_get_assembliesBiological assemblies"4HHB-1"
rcsb_get_interfacesAssembly interfaces"1BMV-1.1"
rcsb_get_chem_compsChemical components / ligands"HEM", "ATP"
rcsb_get_entry_groupsEntry groups"G_1002266"
rcsb_get_polymer_entity_groupsPolymer entity groups (seq. clusters)"85_70"
rcsb_get_nonpolymer_entity_groupsNon-polymer entity groups"ATP"
rcsb_get_uniprotUniProt record (single)"P69905"
rcsb_get_pubmedPubMed record (single, integer)6726807
rcsb_get_group_provenanceGrouping provenance (single)"provenance_sequence_identity"
rcsb_describe_data_objectIntrospect an object's live GraphQL schema to build a fields= selection: browse a level, drill into a nested object with into=, or search by keyword with query= + max_depth= (flat, incl. nested + cross-object paths). Returns verified dotted paths. The Data API analogue of rcsb_list_pdb_search_attributes.—

The Search API only returns identifiers, so a search is the first step: batch the returned ids into the matching rcsb_get_* tool to fetch titles, organisms, and other metadata (these tools query the GraphQL endpoint, batching every requested ID into one request). All 16 typed tools are generated from a single registry in queries.py (DATA_OBJECTS), so adding a field or endpoint is a one-line change.

Sequence Coordinates (sequence-coordinates.rcsb.org/graphql)

Maps alignments and positional annotations between sequence reference systems (UNIPROT, NCBI_PROTEIN, NCBI_GENOME, PDB_ENTITY, PDB_INSTANCE). Each tool takes an optional fields argument to override the default selection; use rcsb_describe_seqcoord_object to discover what fields are available.

This is the only RCSB API that cross-references NCBI (RefSeq protein / genome) — the Data API only knows UniProt. So "what NCBI proteins map to a PDB structure?" is answered by rcsb_seqcoord_alignments, not the Data API. PDB query ids must be entity-level (4HHB_1), not a bare entry (4HHB); for a whole entry, query each polymer entity.

ToolWhat it does
rcsb_seqcoord_alignmentsCross-reference a sequence across PDB / UniProt / NCBI with aligned ranges (e.g. 4HHB_1 → NCBI proteins NP_000508, NP_000549).
rcsb_seqcoord_annotationsPositional features of a PDB entity or instance (7CUT_1, 4HHB.A) from UniProt, the entity, its instances and their interfaces, optionally only some feature_types (ACTIVE_SITE); the sources follow from the types.
rcsb_describe_seqcoord_objectIntrospect the live schema to discover fields available on a seqcoord object (for use with fields=).

Report

ToolWhat it does
rcsb_render_reportRender a structured report of search results — title, columns, rows and evidence — into a formatted HTML document for the user.

Install

RCSB hosts the server, so most clients need no install — point them at https://mcp-beta.rcsb.org/mcp (see Connect an agent). Install only to run it yourself, pin a version, or develop against it:

bash
# run the published package without installinguvx rcsb-mcp# or install itpip install rcsb-mcp

rcsb-mcp is listed in the Official MCP Registry as io.github.rcsb/rcsb-mcp, so registry-aware clients can discover it directly.

For local development, install from the project root instead:

bash
pip install -e .# or with uvuv pip install -e .

Run / test

bash
# unit tests (no network)hatch test          # or: python tests/test_queries.py
# run the server over stdiopython -m rcsb_mcp.server# or, after install:rcsb-mcp
# inspect interactivelynpx @modelcontextprotocol/inspector python -m rcsb_mcp.server

There are two evaluation suites (evals/): rcsb_pdb_eval.xml, 14 read-only, stable questions measuring how well an LLM can drive these tools to answer real PDB questions, and evals/tool_selection/, a first-tool-call A/B harness for catching routing regressions after a docstring edit. See evals/README.md to run either.

Connect an agent

Hosted (beta)

https://mcp-beta.rcsb.org/mcp

Streamable HTTP, no install, no API key, no account. The deployment is stateless — any replica answers any request, so no session header is needed and there is nothing to keep alive between calls. It serves the same 36 tools and the rcsb_search_assistant prompt as a local run.

Claude Code

bash
claude mcp add --transport http rcsb-mcp https://mcp-beta.rcsb.org/mcp

Claude Desktop — Settings → Connectors → Add custom connector, and paste the URL.

Any client that takes a URL (.mcp.json, Cursor, VS Code, Zed, …):

json
{  "mcpServers": {    "rcsb-mcp": {      "type": "http",      "url": "https://mcp-beta.rcsb.org/mcp"    }  }}

Stdio-only clients can bridge with mcp-remote:

json
{  "mcpServers": {    "rcsb-mcp": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://mcp-beta.rcsb.org/mcp"]    }  }}

Check it by hand — a bare initialize needs no session setup:

bash
curl -s https://mcp-beta.rcsb.org/mcp \  -H 'Content-Type: application/json' \  -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{        "protocolVersion":"2025-06-18","capabilities":{},        "clientInfo":{"name":"curl","version":"0"}}}'

GET /healthz returns 200 for liveness checks. Opening the endpoint (or the site root) in a web browser shows a short page on how to connect a client; MCP clients are unaffected.

Beta. The endpoint, the tool surface and the tool descriptions may change without notice, and there is no stability guarantee — pin uvx rcsb-mcp==<version> and run it yourself if you need a fixed surface. When reporting a problem, include the serverInfo.version from the initialize response so the build is identifiable.

Local (stdio)

Run the server as a subprocess instead — for development, or to pin a version.

Edit claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{  "mcpServers": {    "rcsb-mcp": {      "command": "uvx",      "args": ["rcsb-mcp"]    }  }}

For a local source checkout, point at the module instead:

json
{  "mcpServers": {    "rcsb-mcp": {      "command": "python",      "args": ["-m", "rcsb_mcp.server"],      "cwd": "/absolute/path/to/rcsb-mcp/src"    }  }}

Restart Claude Desktop. The tools appear under the connectors (plug) icon.

Example prompts

  • "Find high-resolution human hemoglobin structures." → rcsb_query_fulltext + rcsb_query_attribute → rcsb_query_composer → rcsb_search_request
  • "Human hemoglobin structures better than 2 Å, best resolution first." → same, with sort_by on rcsb_search_request
  • "What PDB entries match this protein sequence: MTEY..." → rcsb_query_sequence → rcsb_search_request
  • "Find structures containing a ligand like this SMILES / with formula C8H9NO2." → rcsb_query_chemical → rcsb_search_request
  • "Which structures have a 3D fold similar to 4HHB?" → rcsb_query_structure → rcsb_search_request
  • "Find proteins with a zinc-finger motif." → rcsb_query_seqmotif → rcsb_search_request
  • "Structures of proteins with kinase activity / involved in DNA repair / in the mitochondrial membrane." → rcsb_find_go_terms → rcsb_query_attribute on rcsb_polymer_entity_annotation.annotation_lineage.id
  • "Structures containing an SH2 domain / immunoglobulin fold." → rcsb_find_interpro_domains → rcsb_query_attribute on rcsb_polymer_entity_annotation.annotation_id
  • "Alcohol dehydrogenase structures / any EC 3.4.21 serine protease." → rcsb_find_enzyme_classes → rcsb_query_attribute on rcsb_polymer_entity.rcsb_ec_lineage.id
  • "Structures of proteins associated with cystic fibrosis / breast cancer." → rcsb_find_disease_terms → rcsb_query_attribute on rcsb_uniprot_annotation.annotation_lineage.id
  • "Structures from mammals / from a particular organism or clade." → rcsb_find_organisms → rcsb_query_attribute on rcsb_entity_source_organism.taxonomy_lineage.id
  • "Non-redundant human kinase structures (90% identity clusters)." → rcsb_search_request with group_by="seqid_90", return_type="polymer_entity"
  • "How many human X-ray structures are there?" → rcsb_query_attribute → rcsb_search_request with limit=1 (read total_count)
  • "Break down ribosome structures by experimental method / by release year." → rcsb_search_request with facets
  • "Find structures with the same catalytic-site geometry as residues 162/193/219 of 2MNR." → rcsb_query_strucmotif → rcsb_search_request
  • "Find chemical components under 150 Da." → rcsb_list_pdb_search_attributes(schema="chemical") → rcsb_query_attribute with chemical_attributes=True → rcsb_search_request with return_type="mol_definition"
  • "Summarize PDB entries 4HHB, 1MBN and 6VXX." → rcsb_get_entries
  • "What's the sequence and organism of entity 4HHB_1?" → rcsb_get_polymer_entities
  • "Tell me about the ligand HEM." → rcsb_get_chem_comps
  • "What's the composition of the 4HHB biological assembly?" → rcsb_get_assemblies
  • "Which PDB entries does P69905 map to?" → rcsb_get_uniprot
  • "Which PDB entities align to UniProt P69905, and over what ranges?" → rcsb_seqcoord_alignments
  • "What NCBI proteins map to 4HHB?" → rcsb_seqcoord_alignments per entity (4HHB_1, 4HHB_2), to_ref=NCBI_PROTEIN
  • "Which binding sites map onto PDB entity 4HHB_1?" → rcsb_seqcoord_annotations with feature_types=["BINDING_SITE"]
  • "Pull a field the compact defaults don't include." → rcsb_describe_data_object to find the path, then the matching rcsb_get_* tool with fields=

Notes

  • Search endpoint: https://search.rcsb.org/rcsbsearch/v2/query (POST, JSON body).
  • Data endpoint: https://data.rcsb.org/graphql (POST, GraphQL). It returns HTTP 200 even for query errors, reporting them in an errors array.
  • Sequence Coordinates endpoint: https://sequence-coordinates.rcsb.org/graphql (POST, GraphQL; same HTTP-200-with-errors behavior).
  • The rcsb_find_* resolvers map free text to ontology ids via EBI services — the non-RCSB dependencies: GO via QuickGO (.../QuickGO/services/ontology/go/search), InterPro and Pfam via EBI Search (.../ebisearch/ws/rest/interpro7), EC via EBI Search/IntEnz (.../ebisearch/ws/rest/intenz), disease via OLS/MONDO (.../ols4/api/search?ontology=mondo), and organisms via UniProt (.../rest.uniprot.org/taxonomy/search). The resolved ids then drive RCSB annotation searches (rcsb_polymer_entity_annotation.*, rcsb_polymer_entity.rcsb_ec_lineage.id, rcsb_uniprot_annotation.annotation_lineage.id).
  • No API key required; the APIs are public. Be considerate with request volume.
  • Every outbound request sends User-Agent: rcsb-mcp/<version> (https://github.com/rcsb/rcsb-mcp), <version> being the installed package's (pyproject.toml's) version. Set RCSB_MCP_USER_AGENT to override it (printable ASCII; a {version} in it is filled in the same way); the Helm chart does, so the hosted service's traffic is distinguishable from local installs in upstream logs.
  • A full list of searchable attributes for rcsb_query_attribute is in the Search API attribute reference; the Data API schema is documented at data.rcsb.org/index.html#gql-api.

Prompt

The server exposes one MCP prompt, rcsb_search_assistant ("RCSB PDB search assistant") — the search requirements plus the HTML-report output format. Because it is served over the protocol's prompts capability, any MCP client can list and invoke it (Claude Desktop surfaces server prompts in the + / prompt menu); there's nothing to copy-paste. The text lives in src/rcsb_mcp/prompts/rcsb_search_assistant.md and ships with the package.

Invoke it when you want answers formatted as a PDB report. It is not required for the tools to work: every routing rule, gotcha and cross-reference lives on the tool descriptions themselves, which the protocol always delivers. That guidance used to live in two other places, both retired: the server instructions block (clients truncate or drop it) and a second rcsb_mcp_guide prompt (opt-in, so it may never be loaded). instructions now carries only a short map of the tool families, for clients that show tool names before loading their descriptions; every line restates a tool description, and nothing in it is needed to use the tools. prompts/rcsb_mcp_guide.md is kept on disk, unserved, as a source to rescue prose from.

来源:README.md,提交 311cd31

工具

36

rcsb_render_report

Render a PDB search report

Render a structure-search report as a styled, self-contained HTML page. Call this LAST, after the searches and rcsb_get_* calls that produce the values shown in the report. Supply facts only: the page is rendered from a fixed server-side template, so do not write HTML yourself and do not rewrite what this tool returns. Each field of ``report`` is described in the input schema. Returns: RenderReportResult with EITHER a `url` or `html` (never both), plus template_version. Prefer `url` — it is a self-contained link that renders the report on demand; deliver it to the user as-is. `html` is only returned as a fallback; write it to a `.html` file.

输入参数params必填

rcsb_find_go_terms

Resolve a free-text molecular function, biological process, or cellular component / location (e.g. kinase activity, ATP binding, DNA repair, apoptosis, signal transduction, mitochondrial membrane, nucleus) to Gene Ontology (GO) terms, so you can run precise GO-based PDB searches instead of keyword guessing. Use this when a request involves what a protein DOES or where it acts — "proteins that <do X> / are involved in / participate in / are responsible for ...", "localized to / located in ...". Resolve the phrase to a GO id here, then filter on it with rcsb_query_attribute: exact_match on rcsb_polymer_entity_annotation.annotation_lineage.id, id AS A STRING ("GO:0004672"). The *_lineage.id paths are HIERARCHICAL — they match the term AND everything beneath it; use `in` with several ids to broaden. For ONLY that exact term without descendants use annotation_id instead. Results are based on how each entry's text matched your query. Broader, synonym, or differently-worded terms for the same concept may produce different results. Rank is unrelated to how much of the archive each term covers. Returns: {query, namespace, count, terms:[{id, name, aspect, pdb_entry_count?}]}.

输入参数limitquery必填namespacewith_pdb_counts

rcsb_find_interpro_domains

Resolve a free-text protein domain, family, or fold (e.g. SH2 domain, immunoglobulin fold, zinc finger, beta-barrel, WD40 repeat, kinase domain) to InterPro entries, for precise InterPro-based PDB searches instead of keyword guessing. Use this whenever a request references a protein DOMAIN, FAMILY, or fold — "structures containing / with a <domain>", "<domain>-containing proteins", "members of the <family> family". Resolve the phrase to an accession here, then filter on it with rcsb_query_attribute: exact_match on rcsb_polymer_entity_annotation.annotation_id, accession AS A STRING ("IPR000719"). Lineage paths are not available; broaden with `in` over several accessions instead (IPR and PF mix freely). Ids come from InterPro ("IPR000719") or Pfam ("PF07859") — `source_database` on each entry says which. Both filter on the same attribute; nothing else needs to change. Results are based on how each entry's text matched your query. Broader, synonym, or differently-worded terms for the same concept may produce different results. Rank is unrelated to how much of the archive each term covers. Returns: {query, entry_type, count, entries:[{id, name, type, source_database, matched_text?, pdb_entry_count?}]}. `matched_text` appears only when the entry's NAME does not contain your words — it quotes the text that did match.

输入参数limitquery必填entry_typewith_pdb_counts

rcsb_find_enzyme_classes

Resolve a free-text enzyme, enzyme class, or catalyzed reaction (e.g. alcohol dehydrogenase, protease, kinase, DNA polymerase, hydrolase, oxidoreductase) to Enzyme Commission (EC) numbers, for precise EC-based PDB searches instead of keyword guessing. Use this when a request references an enzyme, enzyme class, or reaction — including "enzymes that catalyze / break down / degrade / synthesize / hydrolyze / phosphorylate ...". Resolve the phrase to an EC number here, then filter on it with rcsb_query_attribute: exact_match on rcsb_polymer_entity.rcsb_ec_lineage.id, EC number AS A STRING. The *_lineage.id paths are HIERARCHICAL — they match the term AND everything beneath it; use `in` with several ids to broaden. A partial EC like "3.4.21" therefore matches the whole sub-subclass. Results are based on how each entry's text matched your query. Broader, synonym, or differently-worded terms for the same concept may produce different results. Rank is unrelated to how much of the archive each term covers. Returns: {query, count, enzymes:[{ec, name, pdb_entry_count?}]}.

输入参数limitquery必填with_pdb_counts

rcsb_find_disease_terms

Resolve a free-text disease, disorder, syndrome, or condition (e.g. diabetes, cancer, Alzheimer disease, cystic fibrosis) to MONDO ontology ids, for precise disease-based PDB searches instead of keyword guessing. Use for ANY request mentioning a disease/disorder/syndrome/condition — "structures involved in / associated with / linked to <disease>", "proteins implicated in <disease>". Resolve the phrase to a MONDO id here, then filter on it with rcsb_query_attribute: exact_match on rcsb_uniprot_annotation.annotation_lineage.id, id AS A STRING ("MONDO:0005148"). The *_lineage.id paths are HIERARCHICAL — they match the term AND everything beneath it; use `in` with several ids to broaden. A MONDO id therefore finds the disease and its subtypes. Results are based on how each entry's text matched your query. Broader, synonym, or differently-worded terms for the same concept may produce different results. Rank is unrelated to how much of the archive each term covers. Returns: {query, count, diseases:[{id, name, matched_synonym?, pdb_entry_count?}]}. `matched_synonym` appears only when the formal MONDO name does not contain your words — it names the synonym that did match.

输入参数limitquery必填with_pdb_counts

rcsb_find_organisms

Resolve a free-text organism, common name, or clade (e.g. human, mouse, baker's yeast, Escherichia coli, mammals, bacteria, primates) to NCBI Taxonomy ids, for precise taxonomy-based PDB searches instead of keyword guessing. Use when a request restricts structures by SOURCE ORGANISM or any higher taxon — a common name you want as a canonical taxon ("human", "fruit fly"), or a CLADE, which a plain name search cannot expand. Resolve the phrase to a taxon id here, then filter on it with rcsb_query_attribute: exact_match on rcsb_entity_source_organism.taxonomy_lineage.id, id AS A STRING ("9606", not 9606 — a bare number does not match). The *_lineage.id paths are HIERARCHICAL — they match the term AND everything beneath it; use `in` with several ids to broaden. A clade id ("40674" = Mammalia) therefore finds every organism beneath it; for a known exact species ncbi_scientific_name exact_match also works. An informal, polyphyletic group ("filamentous fungi", "extremophiles", "algae") is NOT a taxon and has no id: resolve the nearest CONTAINING taxon, then classify each hit from the lineage its own record returns. Results are based on how each entry's text matched your query. Broader, synonym, or differently-worded terms for the same concept may produce different results. Rank is unrelated to how much of the archive each term covers. Returns: {query, count, taxa:[{tax_id, scientific_name, common_name, rank, pdb_entry_count?}]}.

输入参数limitquery必填with_pdb_counts

rcsb_query_fulltext

Build a FREE-TEXT keyword query (e.g. "CRISPR Cas9", "hemoglobin"). Best for broad or exploratory lookups. When a request resolves to a clear attribute and value, prefer rcsb_query_attribute — more precise, and it avoids spurious keyword matches. BEFORE keyword-searching a biological CONCEPT (disease/function/domain/ enzyme/organism), resolve it to an ontology id with the matching rcsb_find_* tool and filter on the annotation instead; fall back to keywords only if that yields nothing. Matching spans many text attributes beyond the title — abstracts, keywords, synonyms, author names — so judge each hit yourself: a high `score` is text-relevance, NOT biological importance; never tell the user one hit is better than another because its score is higher. For evidence on a hit, rcsb_get_entries returns its title and, for many entries, a PubMed abstract (pubmed.rcsb_pubmed_abstract_text). Broader, synonym, or differently-worded terms for the same concept may produce different results. Returns: A query document — pass it to rcsb_search_request to run it, or to rcsb_query_composer to combine it with other queries first.

输入参数query必填

rcsb_list_pdb_search_attributes

Discover the RCSB PDB Search schema: attribute paths, value types, and operators. Call this FIRST when a request resolves to a clear attribute and value but you don't know the exact path; pick the attribute here, build the condition with `rcsb_query_attribute`, then execute with `rcsb_search_request`. Returns: {count, match_mode, attributes, note?}. `attributes` holds {attribute, type, operators, description, enum?, nested_group?} records — the RCSB/PDB attribute path (e.g. "rcsb_entry_info.resolution_combined"), its value type (string/number/integer/date), the operators it supports (exact_match, greater, range, exists, ...), and a human-readable description. `enum` appears on the ~16% of attributes that accept only a FIXED SET of values (e.g. exptl.method); when it does, use one of those values verbatim — anything else is rejected by rcsb_query_attribute. `nested_group` appears on the ~19% stored in NESTED DOCUMENTS — an entry has many citations, an entity many binding affinities — and its value is the container path. For these, grouping selects the semantics: conditions sharing a nested_group built in ONE rcsb_query_attribute call with nothing else in it must hold on the SAME record; in separate calls each is matched independently. Group the ones that describe one record, leave the rest apart. The value is NOT the attribute's first path segment for all of them, so read it rather than deriving it. `match_mode` is "exact" (every word matched, best match first), "partial" (only some did — read `note`), "none" (nothing matched — read `note`), or "all" (query omitted, whole catalog).

输入参数queryschema

rcsb_query_attribute

Build a STRUCTURED query from attribute conditions — the precise alternative to keyword search, and preferred whenever a request resolves to clear attribute(s) and value(s). NEVER invent, guess, or infer an attribute path: call rcsb_list_pdb_search_attributes first if you don't know it or its operators. For a biological concept, resolve it to an ontology id with the matching rcsb_find_* tool and filter on that annotation. If a resolver returns no usable id, or a concept filter yields no hits, fall back to rcsb_query_fulltext for the concept. For ordinary constraints — resolution, organism, dates — an empty result is a valid answer: report it, don't keyword-search instead. An attribute path also works as the `query` for rcsb_describe_data_object: every attribute here is also a Data API field, so pasting one in tells you which rcsb_get_* tool fetches the value. Example ("human X-ray structures better than 2 A"): attributes=[ {"attribute": "rcsb_entity_source_organism.ncbi_scientific_name", "operator": "exact_match", "value": "Homo sapiens"}, {"attribute": "exptl.method", "operator": "exact_match", "value": "X-RAY DIFFRACTION"}, {"attribute": "rcsb_entry_info.resolution_combined", "operator": "less", "value": 2.0}, ] Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer. Note the per-hit `score` of a pure attribute filter is near-uniform and carries NO biological meaning; don't rank hits by it.

输入参数attributes必填logical_operatorchemical_attributes

rcsb_query_sequence

Build a SEQUENCE-SIMILARITY query (MMseqs2, BLAST-like) from a raw sequence. Use when you have actual residues to match. For a short motif or pattern use rcsb_query_seqmotif; for a named protein use rcsb_query_fulltext or a resolver. Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer.

输入参数sequence必填evalue_cutoffsequence_typeidentity_cutoff

rcsb_query_chemical

Build a CHEMICAL query from a SMILES/InChI descriptor or a molecular formula. Use for ligand and small-molecule questions where you have the chemistry itself. To find a ligand by NAME, use rcsb_query_fulltext or filter on a chemical attribute. Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer.

输入参数value必填match_typequery_typematch_subsetdescriptor_type

rcsb_query_structure

Build a 3D SHAPE-SIMILARITY query against an existing PDB structure. Whole-shape similarity — use it for "structures shaped like X" / "same fold as X". For a geometric arrangement of specific residues use rcsb_query_strucmotif; for sequence similarity use rcsb_query_sequence. Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer.

输入参数asym_identry_id必填assembly_id

rcsb_query_seqmotif

Build a SHORT SEQUENCE-MOTIF query — a pattern, not a full sequence. Use for active-site signatures, N-glycosylation sequons, zinc fingers, and similar short patterns. For a whole sequence use rcsb_query_sequence; for a 3D arrangement of residues use rcsb_query_strucmotif. Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer.

输入参数pattern必填pattern_typesequence_type

rcsb_query_strucmotif

Build a 3D STRUCTURAL-MOTIF query — a geometric arrangement of specific residues. Geometry-based, and different from rcsb_query_structure (whole-shape similarity) and rcsb_query_seqmotif (sequence pattern). Use it for catalytic triads, binding sites, metal-coordination geometries, and similar. Returns: A query document — pass it to rcsb_search_request, or to rcsb_query_composer.

输入参数entry_id必填exchangesresidue_ids必填rmsd_cutoffangle_toleranceatom_pairing_schememotif_pruning_strategybackbone_distance_toleranceside_chain_distance_tolerance

rcsb_query_composer

Combine query documents with one AND/OR — call repeatedly to nest. You do NOT need this for conditions that share a single operator: several attribute conditions ANDed together are one rcsb_query_attribute call, and a list of alternatives for one attribute is better expressed with the `in` operator than with OR. Reach for the composer when a query needs BOTH operators, or mixes services: * (human OR mouse) AND resolution < 2 A -> build the OR group with rcsb_query_attribute(logical_operator="or"), build the resolution condition, then compose the two with "and". * sequence-similar to X AND containing ligand Y -> compose rcsb_query_sequence with rcsb_query_attribute. Nest by feeding a composed document straight back in as one of `queries`. Groups that share this call's operator are folded in rather than nested, so repeated composition stays flat and readable. Returns: A query document — pass it to rcsb_search_request, or back into this tool. A query mixing two services has no single meaningful relevance ranking, so hits come back in the API's default order; set `sort_by` on rcsb_search_request if the order matters.

输入参数queries必填logical_operator

rcsb_search_request

RUN a query built by the rcsb_query_* tools and return matching PDB identifiers. Every search ends here: build with rcsb_query_fulltext / rcsb_query_attribute / rcsb_query_sequence / rcsb_query_chemical / rcsb_query_structure / rcsb_query_seqmotif / rcsb_query_strucmotif, optionally join with rcsb_query_composer, then execute with this tool. Nothing is searched until you call it — a query document on its own is not a result. Results are IDENTIFIERS only. Batch them into rcsb_get_entries, or the rcsb_get_* tool matching `return_type`, to get metadata. Returns: {total_count, returned, result_type, fetch_with, offset, has_more, next_offset, hits:[{id, score}], editor} — `result_type` is the kind of identifier that came back and `fetch_with` names the rcsb_get_* tool that takes it, so check those before batching the ids onward. `editor` opens the query in the RCSB search UI. With `all_hits` the paging fields are omitted; with `facets` returns {total_count, facets, editor} instead of hits. A `notes` list appears only when the results need a caveat; read it before describing the hits or treating them as complete.

输入参数limitquery必填facetsoffsetsort_byall_hitsgroup_byreturn_typesort_directiongroup_by_rankinginclude_computed_models

rcsb_describe_seqcoord_object

Discover the fields available on a Sequence Coordinates object, from the live schema. The Sequence Coordinates analogue of rcsb_describe_data_object, with the same shape: the rcsb_seqcoord_* tools return a compact default selection; use this to find what else you can request via their `fields=` argument. Every path it returns is verified against the live schema, so it is safe to pass to `fields=` directly. Browse a level, drill in / scope with `into`, or pass `query` to flatten the tree into dotted paths and keep only matching fields. The walk depth follows which one you are doing, so you do not have to set it: browsing lists one level, searching goes three deep. This schema is small and bottoms out at 3 levels (~20-31 fields per object), so a search covers an object in full in ONE call: rcsb_describe_seqcoord_object("alignments", max_depth=3) -> pick paths -> call rcsb_seqcoord_alignments(..., fields="target_alignments{ ... }"). Each returned field has path (dotted, ready for `fields=`), kind ("scalar" leaf or "object"), type, list (whether it's a list), and description (when present). NEVER invent, guess, or infer a field path — an unverified path fails schema validation and wastes the call. `fields=` accepts dotted paths or GraphQL nested-brace syntax, the two may be mixed, and multiple paths are separated by spaces or commas. Returns: {object_key, graphql_type, path, query, max_depth, field_count, fields:[{path, kind, type, list, description}], truncated?, note?}.

输入参数intoquerymax_depthobject_key必填

rcsb_seqcoord_alignments

Cross-reference a sequence across PDB, UniProt, and NCBI, with aligned ranges. This is the tool for "which X identifiers correspond to this sequence?" across databases — including NCBI. The RCSB Data API only cross-references UniProt, so use THIS tool for NCBI RefSeq protein / genome mappings (and PDB<->UniProt too). The returned target_alignments[].target_id values are the mapped identifiers in the to_ref system, each with its aligned regions. Examples: - "What NCBI proteins map to PDB entity 4HHB_1?" query_id="4HHB_1", from_ref="PDB_ENTITY", to_ref="NCBI_PROTEIN" - "Which PDB entities correspond to UniProt P69905?" query_id="P69905", from_ref="UNIPROT", to_ref="PDB_ENTITY"

输入参数fieldsto_ref必填from_ref必填query_id必填seq_range

rcsb_seqcoord_annotations

Residue-level features of one PDB polymer entity (4HHB_1) or instance (4HHB.A), positioned on its sequence. The tool for questions about specific residues: which form an active site, bind a ligand or metal, are modified, glycosylated or disulfide-bonded, lie in a domain, helix or membrane segment, are unobserved or poorly fitted. Without feature_types every feature is returned. An answer too large to return (an entity's chain features come once per copy) fails with the feature types the sequence has and their counts: ask again for the ones needed, or for one instance. With feature_types only those come back, from the sources that have them.

输入参数fieldsquery_id必填feature_types

rcsb_describe_data_object

Discover the fields available on a Data API object, from the live GraphQL schema. Use this to find what to request in a rcsb_get_* tool's `fields=` argument: its default selection is a compact summary of a far richer type (CoreEntry has ~100 fields). Every path returned is verified against the live schema, so it is safe to pass directly. NEVER invent, guess, or infer a field path from memory, from a naming convention, or from another API. An unverified path fails GraphQL schema validation and wastes the call. Paths shown in a rcsb_get_* tool's own description or examples are already verified — use those directly; for anything else, confirm it here FIRST. `fields=` takes dotted paths ("rcsb_polymer_entity.pdbx_description"), GraphQL brace syntax ("rcsb_polymer_entity { pdbx_description }"), or both, separated by spaces or commas. Start with only a `query` when you know what you want but not where it lives: it searches every object and answers with the tool to call and the path to give it, best matches first — rcsb_describe_data_object(query="release_date") -> rcsb_get_entries + "rcsb_accession_info.initial_release_date". Name an `object_key` to search just that object, or omit `query` to browse its fields level by level with `into`. Returns: For a named object: {object_key, graphql_type, path, query, max_depth, field_count, fields, truncated?, note?}. Searching every object: the same with object_key null plus `searched`, and each field also names the rcsb_get_* `tool` that owns it. Each field is {path, kind, type, list, description, searchable?}: `kind` is "scalar" (select it directly) or "object" (drill in, or select with a sub-selection); `searchable` (about 3% of fields) marks one you can ALSO filter on with rcsb_query_attribute. A field is reported once, under the object reaching it most directly. A capped result sets `truncated`, a

输入参数intoquerymax_depthobject_key

rcsb_get_entries

Fetch metadata for one or more PDB entries (title, method, resolution, size, dates, and primary citation). The response also lists the entry's component ids under rcsb_entry_container_identifiers — use these to drill into the structure. They are bare numbers; compose them with the entry id to call the matching rcsb_get_* tool: polymer_entity_ids/non_polymer_entity_ids "N" -> "<ENTRY>_N" (rcsb_get_polymer_entities / rcsb_get_nonpolymer_entities); assembly_ids "N" -> "<ENTRY>-N" (rcsb_get_assemblies).

输入参数fieldsentry_ids必填

rcsb_get_polymer_entities

Fetch polymer entities (protein/nucleic-acid molecules) — description, length, weight, and source organism. Default fields: description, length, weight, and source organism. Polymer-based (sequence) annotations can be fetched adding rcsb_polymer_entity_annotation.* fields, and positional features adding rcsb_polymer_entity_feature.*

输入参数fieldsentity_ids必填

rcsb_get_nonpolymer_entities

Fetch non-polymer (ligand/cofactor) entities, e.g. ["4HHB_3"]. Default fields: description, weight, copy count, and the bound chemical component ID. Use rcsb_get_chem_comps for the chemistry of that component.

输入参数fieldsentity_ids必填

rcsb_get_branched_entities

Fetch branched (carbohydrate / oligosaccharide) entities, e.g. ["5FMB_2"]. Default fields: description, weight, copy count, branch type, and component count.

输入参数fieldsentity_ids必填

rcsb_get_polymer_entity_instances

Fetch polymer entity instances (individual chains), e.g. ["4HHB.A"] (entry.asym_id). Instance-based (chain) annotations can be fetched adding rcsb_polymer_instance_annotation.* fields, and positional features rcsb_polymer_instance_feature.* Default fields: the entry/entity/chain identifiers and modeled-residue count.

输入参数fieldsinstance_ids必填

rcsb_get_nonpolymer_entity_instances

Fetch non-polymer entity instances (individual bound ligands), e.g. ["4HHB.E"]. Default fields: the entry/entity/chain identifiers, bound component id, and author seq id.

输入参数fieldsinstance_ids必填

rcsb_get_branched_entity_instances

Fetch branched entity instances (individual glycan chains), e.g. ["5FMB.C"]. Default fields: the entry/entity/chain identifiers.

输入参数fieldsinstance_ids必填

rcsb_get_assemblies

Fetch biological assemblies, e.g. ["4HHB-1"] (entry-assembly). Default fields: composition counts and oligomeric state. Assembly-based (complex) annotations can be fetched adding rcsb_assembly_annotation.* fields, and positional features rcsb_assembly_feature.*

输入参数fieldsassembly_ids必填

rcsb_get_interfaces

Fetch assembly interfaces, e.g. ["1BMV-1.1"] (entry-assembly.interface). Default fields: buried area, character, composition, residue count.

输入参数fieldsinterface_ids必填

rcsb_get_chem_comps

Fetch chemical components / ligands by their short codes, e.g. ["HEM", "ATP"]. Default fields: name, formula, weight, type, SMILES, InChIKey.

输入参数fieldscomp_ids必填

rcsb_get_entry_groups

Fetch entry groups (clusters of related entries) by group ID. Default fields: group name, description, member count, and member ids.

输入参数fieldsgroup_ids必填

rcsb_get_polymer_entity_groups

Fetch polymer entity groups (e.g. sequence clusters), e.g. ["85_70"]. Default fields: group name, description, member count, and member ids.

输入参数fieldsgroup_ids必填

rcsb_get_nonpolymer_entity_groups

Fetch non-polymer entity groups (clusters of related ligands) by group ID. Default fields: group name, description, member count, and member ids.

输入参数fieldsgroup_ids必填

rcsb_get_uniprot

Fetch the UniProt record RCSB maps to an accession, e.g. "P69905". Default fields give a functional snapshot: accession(s), entry name, protein and gene names, EC number, the UniProt function comment, source organism, and keywords (which often summarize biology directly, e.g. "ATP-binding", "Viral attachment to host entry receptor"). RCSB's UniProt integration is rich — `fields` can also pull the heavier annotation sets (kept out of the default because they can run to hundreds of entries): `rcsb_uniprot_annotation` (GO terms, InterPro, disease associations), `rcsb_uniprot_feature` (domains, sites, binding sites, sequence variants), and `rcsb_uniprot_external_reference`.

输入参数fieldsuniprot_id必填

rcsb_get_pubmed

Fetch the PubMed record for a citation by its integer ID, e.g. 6726807. Default fields: PubMed Central ID, DOI, abstract text.

输入参数fieldspubmed_id必填

rcsb_get_group_provenance

Fetch provenance/method metadata for a grouping, e.g. "provenance_sequence_identity". Default fields: the aggregation method/type and provenance id.

输入参数fieldsgroup_provenance_id必填

版本历史

8
  1. v0.23.0最新Oct 23, 2026
  2. v0.22.0Oct 12, 2026
  3. v0.21.0Oct 10, 2026
  4. v0.20.0Oct 6, 2026
  5. v0.19.0Oct 6, 2026
  6. v0.18.0Oct 5, 2026
  7. v0.16.0Oct 5, 2026
  8. v0.15.0Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分