Other formats agents might prefer:
markdownjsonllms.txt

Agent? You probably want markdown or json, or Pod over MCP.

Reported issues for protein-mcp-server

Pod holds 23 of 54 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to protein-mcp-server.

Most discussed

feat(search): add retrieval for bounded RCSB result sets

Use case

protein_search_structures, protein_find_similar with by: "sequence", and protein_track_ligands with mode: "structures_with_ligand" expose totalCount but accept only limit. A caller cannot request a later RCSB page without leaving the server.

Proposed behavior

Add an optional start input to those three RCSB-backed result modes. start is a zero-based result offset, defaults to 0, and combines with the existing limit (1–100). The name matches RCSB Search AP

Read the thread · 2026-08-17 · closed · 2 comments

feat(protein_analyze_collection): disclose combined cross-tab bucket size

Use case

protein_analyze_collection applies the same bucket_limit cap independently to the parent dimension and to the nested cross-tab child, so a two-dimension group_by can return up to cap² buckets. At the default cap of 50 that is up to 2,500 buckets in one response; at the maximum it is larger still.

Each position honestly discloses its own truncation — the parent dimension carries truncated, and so does each child — so nothing is hidden from a caller who inspects every leve

Read the thread · 2026-08-17 · closed · 2 comments

bug(protein_analyze_collection): group_by accepts the same dimension twice

Server version

0.4.2

mcp-ts-core version

^0.11.5

Runtime

Bun

Runtime version

Bun 1.3.14

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_analyze_collection accepts the same dimension twice in group_by. {"group_by": ["method", "method"]} passes schema validation and reaches buildFacetSpec('method', interval, 'method'), which builds a method facet nested inside itself and sends that to RCSB.

Verified live against RCSB, the self-ne

Read the thread · 2026-08-16 · closed · 2 comments

feat(facets): nested cross-tab child is single-valued, not an array

Use case

The facet output schema advertises buckets[].children as an unbounded array of nested dimensions, but no code path can produce more than one element. Three independent bounds enforce that:

  • FacetSpec.child (src/services/rcsb/rcsb-service.ts) is a single optional spec, not a list.
  • toRcsbFacet requests exactly one nested facet: if (spec.child) facet.facets = [toRcsbFacet(spec.child)].
  • normalizeBuckets reads only index 0 of the upstream response and wraps the result

Read the thread · 2026-08-16 · closed · 2 comments

enhancement(protein_track_ligands): structures_with_ligand score is a constant; sort is undocumented

protein_track_ligands mode structures_with_ligand returns a score on every entry that carries no signal, and an ordering that isn't stated.

Observed

{ mode: "structures_with_ligand", comp_id: "HEM", limit: 8 } → every row scores 1.00, ordered by PDB ID ascending (101M, 102M, 103M … — myoglobins ahead of any hemoglobin). Containment is boolean (an entry either has the component or doesn't), so RCSB's relevance score is uniform and the column is noise; the PDB-ascending order is

Read the thread · 2026-07-03 · closed · 2 comments

enhancement(protein_find_similar): sequence hits return entity IDs that don't chain into other tools

protein_find_similar emits a different hit-ID format per mode, and the by:"sequence" format doesn't match the bare entry IDs the rest of the server uses — so feeding a sequence hit into protein_get_structure requires the caller to strip a suffix.

Observed

  • by:"sequence" → polymer-entity IDs like 1A00_1 (raw mmseqs2 h.id).
  • by:"structure" → bare entry IDs (1A00) or UniProt accessions (h.pdbId ?? h.uniprotAccession).
  • protein_search_structures and `protein_get_structur

Read the thread · 2026-07-03 · closed · 2 comments

enhancement(protein_track_ligands): find_ligand buries the canonical component for common names

protein_track_ligands mode find_ligand relays RCSB's chemical-name search ranking unchanged, which sorts by name-string match. For a common query the canonical component sinks below near-namesakes, and a find_ligand → structures_with_ligand chain on the top hit then silently resolves the wrong ligand.

Observed

{ mode: "find_ligand", query: "heme", limit: 10 } ranks HEM (protoporphyrin IX + Fe — the heme of hemoglobin, myoglobin, cytochromes) last of ten, below HEC, HEA, `

Read the thread · 2026-07-03 · closed · 2 comments

bug(protein_get_structure): best_available returns one coordinate format where experimental returns three

Server version

0.3.0

mcp-ts-core version

0.10.10

Runtime

Bun

Runtime version

Bun 1.3.x

Transport

stdio

Description

For an experimental pick, source: "best_available" and source: "experimental" resolve to the same PDB entry but expose different coordinate URLs. fetchExperimental builds all three formats from the entry ID (coordinateUrls: { cif, pdb, bcif } via rcsb.coordinateFileUrl), whereas fetchBest derives a single URL from the 3D-Beacons `modelU

Read the thread · 2026-07-03 · closed · 2 comments

Most recent

bug(protein_search_structures): sequence-only controls are silently ignored

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_search_structures accepts min_identity and max_evalue without sequence, then silently runs the non-sequence query. A malformed workflow therefore looks filtered even though neither threshold affects the result.

Steps to reproduce

  1. Call protein_search_structures with `{ "q

Read the thread · 2026-08-31 · open · 0 comments

bug(protein_analyze_collection): zero-match scopes omit the declared notice

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_analyze_collection returns an empty success for a zero-match scope without the empty-scope advisory declared by its enrichment contract. The result is technically distinguishable through total: 0, but it gives no recovery guidance.

Steps to reproduce

  1. Call `protein_analyze_coll

Read the thread · 2026-08-31 · open · 0 comments

docs(tools): make catalog descriptions caller-facing

The MCP catalog mixes user-facing contracts with implementation mechanics and audience assumptions. Examples include protein_analyze_collection describing a single upstream call and "no row pull," protein_compare_structures describing its internal fanout/concurrency cap, and an output field saying it lets "an agent" cite a structure.

Related: #38

Proposal

Keep provider identity, limits, partial-success behavior, and resume semantics. Remove API-call counts, internal routing/fanout deta

Read the thread · 2026-08-31 · open · 0 comments

bug(protein_find_similar): completed Foldseek results have no retrieval path

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_find_similar silently slices completed Foldseek results to limit. The response has no total, truncation flag, offset, or reusable completed-job ticket, so hits beyond that cap cannot be retrieved through the server.

Related: #41

Steps to reproduce

  1. Call protein_find_similar

Read the thread · 2026-08-31 · open · 0 comments

bug(protein_search_structures): truncated facets omit recovery guidance

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_search_structures marks a capped facet as truncated: true, but its enrichment omits the promised truncation advisory and gives no route to the remaining buckets.

Related: #13, #41

Steps to reproduce

  1. Call protein_search_structures with `{ "query": "kinase", "facets": ["organ

Read the thread · 2026-08-31 · open · 0 comments

bug(protein_analyze_collection): interval is silently ignored for incompatible dimensions

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_analyze_collection.interval is accepted for every group_by shape, but it only reaches the top-level facet when that facet is a histogram. A terms-only call silently drops it, and a numeric/date child in a cross-tab keeps its default interval.

Related: #15

Steps to reproduce

  1. C

Read the thread · 2026-08-31 · open · 0 comments

bug(protein_track_ligands): formula queries run as name searches

Server version

0.5.3

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0 / Node v26.5.0

Transport

HTTP (Streamable HTTP)

OS

macOS 26.1

Description

protein_track_ligands advertises find_ligand.query as a chemical name or formula, but formula input is handled as a name search. A caller can receive chemically unrelated component IDs with no indication that the declared formula path was not applied.

Related: #17

Steps to reproduce

Read the thread · 2026-08-31 · open · 0 comments

bug(rcsb): surface GraphQL errors returned with partial data

Server version

0.5.2

mcp-ts-core version

^0.12.3

Runtime

Bun / Node.js

Runtime version

Bun ≥1.3.0 / Node ≥24.0.0

Transport

stdio / HTTP (Streamable HTTP)

OS

macOS 26.1

Description

RcsbService.graphql() returns body.data before inspecting body.errors. A GraphQL response carrying both fields is therefore treated as a complete success even when the upstream reports field-level failures. Callers cannot distinguish metadata omitted because it is genuinel

Read the thread · 2026-08-30 · open · 1 comment

bug(protein_analyze_collection): declared unknown_dimension error is unreachable and describes a different condition than it guards

protein_analyze_collection advertises an unknown_dimension error reason in its outputSchema, but no input can produce it, and the condition the code guards is not the condition the contract documents.

The declared contract

src/mcp-server/tools/definitions/analyze-collection.tool.ts:

{
  reason: 'unknown_dimension',
  code: JsonRpcErrorCode.InvalidParams,
  when: 'A group_by value is outside the supported dimension set.',
  recovery: 'Use a supported dimension: method, organism,

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/47) · 2026-08-25 · open · 0 comments

### bug(protein_get_annotations): missing uniprot and pdb_id surfaces as no_uniprot_mapping NotFound instead of a validation error

### Server version

0.5.1

### mcp-ts-core version

^0.11.5

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

http

### Description

`protein_get_annotations` takes `uniprot` or `pdb_id`, both optional, with no schema-level one-of constraint. When neither is supplied the handler falls through to the post-resolution `!accession` check in `get-annotations.tool.ts` and throws `no_uniprot_mapping` (`-32001` NotFound) with the message "Provide a UniProt accession, or a PDB ID with a m

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/46) · 2026-08-22 · open · 0 comments

### feat(structure metadata): expose chain namespaces through existing surfaces

### Use case

`protein_compare_structures` takes `structures[].chain` as a `label_asym_id`, and no surface on this server emits a `label_asym_id`. `pdb://{entry_id}` exposes author chains only (`polymerEntities[].chains` is populated from `auth_asym_ids`), and `protein_get_structure` exposes no chain metadata at all. For any entry where the two namespaces differ, a per-chain alignment cannot be set up without leaving the server to look the mapping up.

In RCSB entry `6QNR`, polymer entity `6QNR_

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/45) · 2026-08-17 · open · 0 comments

### bug(protein_find_similar): sequence metadata enrichment silently stops at 50 hits

### Server version

0.5.2

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`protein_find_similar` with `by: "sequence"` passes `facetBucketCap` to `runSequence()`. That configuration belongs only to `protein_analyze_collection`, but `runSequence()` uses it to slice de-duplicated PDB entry IDs before its one batched `getEntries()` call. With the default cap of 50 and `lim

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/44) · 2026-08-17 · closed · 1 comment

### bug(protein_get_structure): capped batches lose the cap warning and original count

### Server version

0.5.1

### mcp-ts-core version

^0.11.5

### Runtime

Bun

### Runtime version

Bun 1.3.14 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`protein_get_structure` writes three independent advisories — batch cap, coordinate overflow, and partial failure — to `ctx.enrich.notice`, which is last-write-wins in the framework (`enrich.notice` assigns `store.values.notice = text`). The handler calls it in that order, so a partial failure er

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/43) · 2026-08-17 · open · 0 comments

### bug(protein_get_structure): coordinate inlining bypasses the response budget

### Server version

0.5.1

### mcp-ts-core version

^0.11.5

### Runtime

Bun

### Runtime version

Bun 1.3.14 / Node v26.5.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

Two defects in `protein_get_structure`'s coordinate inlining, both in the same block.

**1. A single coordinate file bypasses the overflow guard entirely.** The guard fires only when `withCoords.length > 1`, so one file inlines at any size. `4HHB.cif` is 772,198 bytes — 32× the 24,000-byte `DEFAU

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/42) · 2026-08-17 · open · 0 comments

### bug(protein_search_structures): method and resolution filters cannot stand alone

### Server version

0.5.2

### mcp-ts-core version

^0.12.3

### Runtime

Bun / Node.js

### Runtime version

Bun ≥1.3.0 / Node ≥24.0.0

### Transport

stdio / HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`protein_search_structures` rejects method-only and resolution-only requests before they reach RCSB. Its `no_criteria` guard recognizes only `query`, `sequence`, and `organism`, although the handler maps `method` and `max_resolution` into `StructureSearchParams` and `buildQuery(

[Read the thread](https://github.com/cyanheads/protein-mcp-server/issues/40) · 2026-08-17 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/protein-mcp-server/issues).