@cyanheads/protein-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/AGENTS.md +416 -0
  2. package/CLAUDE.md +416 -0
  3. package/Dockerfile +121 -0
  4. package/LICENSE +201 -0
  5. package/README.md +321 -0
  6. package/changelog/0.1.x/0.1.0.md +21 -0
  7. package/changelog/template.md +127 -0
  8. package/dist/config/server-config.d.ts +27 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +110 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +9 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +53 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/resources/definitions/af-summary.resource.d.ts +29 -0
  17. package/dist/mcp-server/resources/definitions/af-summary.resource.d.ts.map +1 -0
  18. package/dist/mcp-server/resources/definitions/af-summary.resource.js +61 -0
  19. package/dist/mcp-server/resources/definitions/af-summary.resource.js.map +1 -0
  20. package/dist/mcp-server/resources/definitions/index.d.ts +7 -0
  21. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  22. package/dist/mcp-server/resources/definitions/index.js +7 -0
  23. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  24. package/dist/mcp-server/resources/definitions/pdb-summary.resource.d.ts +31 -0
  25. package/dist/mcp-server/resources/definitions/pdb-summary.resource.d.ts.map +1 -0
  26. package/dist/mcp-server/resources/definitions/pdb-summary.resource.js +68 -0
  27. package/dist/mcp-server/resources/definitions/pdb-summary.resource.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/_schemas.d.ts +31 -0
  29. package/dist/mcp-server/tools/definitions/_schemas.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/_schemas.js +82 -0
  31. package/dist/mcp-server/tools/definitions/_schemas.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/analyze-collection.tool.d.ts +61 -0
  33. package/dist/mcp-server/tools/definitions/analyze-collection.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/analyze-collection.tool.js +115 -0
  35. package/dist/mcp-server/tools/definitions/analyze-collection.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/compare-structures.tool.d.ts +49 -0
  37. package/dist/mcp-server/tools/definitions/compare-structures.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/compare-structures.tool.js +168 -0
  39. package/dist/mcp-server/tools/definitions/compare-structures.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/find-similar.tool.d.ts +67 -0
  41. package/dist/mcp-server/tools/definitions/find-similar.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/find-similar.tool.js +274 -0
  43. package/dist/mcp-server/tools/definitions/find-similar.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/get-annotations.tool.d.ts +58 -0
  45. package/dist/mcp-server/tools/definitions/get-annotations.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/get-annotations.tool.js +180 -0
  47. package/dist/mcp-server/tools/definitions/get-annotations.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/get-structure.tool.d.ts +78 -0
  49. package/dist/mcp-server/tools/definitions/get-structure.tool.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/get-structure.tool.js +365 -0
  51. package/dist/mcp-server/tools/definitions/get-structure.tool.js.map +1 -0
  52. package/dist/mcp-server/tools/definitions/index.d.ts +12 -0
  53. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/definitions/index.js +12 -0
  55. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  56. package/dist/mcp-server/tools/definitions/search-structures.tool.d.ts +71 -0
  57. package/dist/mcp-server/tools/definitions/search-structures.tool.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/definitions/search-structures.tool.js +216 -0
  59. package/dist/mcp-server/tools/definitions/search-structures.tool.js.map +1 -0
  60. package/dist/mcp-server/tools/definitions/track-ligands.tool.d.ts +59 -0
  61. package/dist/mcp-server/tools/definitions/track-ligands.tool.d.ts.map +1 -0
  62. package/dist/mcp-server/tools/definitions/track-ligands.tool.js +195 -0
  63. package/dist/mcp-server/tools/definitions/track-ligands.tool.js.map +1 -0
  64. package/dist/services/alignment/alignment-service.d.ts +56 -0
  65. package/dist/services/alignment/alignment-service.d.ts.map +1 -0
  66. package/dist/services/alignment/alignment-service.js +129 -0
  67. package/dist/services/alignment/alignment-service.js.map +1 -0
  68. package/dist/services/alphafold/alphafold-service.d.ts +57 -0
  69. package/dist/services/alphafold/alphafold-service.d.ts.map +1 -0
  70. package/dist/services/alphafold/alphafold-service.js +84 -0
  71. package/dist/services/alphafold/alphafold-service.js.map +1 -0
  72. package/dist/services/beacons/beacons-service.d.ts +52 -0
  73. package/dist/services/beacons/beacons-service.d.ts.map +1 -0
  74. package/dist/services/beacons/beacons-service.js +63 -0
  75. package/dist/services/beacons/beacons-service.js.map +1 -0
  76. package/dist/services/foldseek/foldseek-service.d.ts +71 -0
  77. package/dist/services/foldseek/foldseek-service.d.ts.map +1 -0
  78. package/dist/services/foldseek/foldseek-service.js +131 -0
  79. package/dist/services/foldseek/foldseek-service.js.map +1 -0
  80. package/dist/services/rcsb/facets.d.ts +50 -0
  81. package/dist/services/rcsb/facets.d.ts.map +1 -0
  82. package/dist/services/rcsb/facets.js +59 -0
  83. package/dist/services/rcsb/facets.js.map +1 -0
  84. package/dist/services/rcsb/rcsb-service.d.ts +81 -0
  85. package/dist/services/rcsb/rcsb-service.d.ts.map +1 -0
  86. package/dist/services/rcsb/rcsb-service.js +473 -0
  87. package/dist/services/rcsb/rcsb-service.js.map +1 -0
  88. package/dist/services/rcsb/types.d.ts +150 -0
  89. package/dist/services/rcsb/types.d.ts.map +1 -0
  90. package/dist/services/rcsb/types.js +8 -0
  91. package/dist/services/rcsb/types.js.map +1 -0
  92. package/dist/services/shared/async.d.ts +41 -0
  93. package/dist/services/shared/async.d.ts.map +1 -0
  94. package/dist/services/shared/async.js +64 -0
  95. package/dist/services/shared/async.js.map +1 -0
  96. package/dist/services/shared/http.d.ts +54 -0
  97. package/dist/services/shared/http.d.ts.map +1 -0
  98. package/dist/services/shared/http.js +115 -0
  99. package/dist/services/shared/http.js.map +1 -0
  100. package/dist/services/shared/identifiers.d.ts +12 -0
  101. package/dist/services/shared/identifiers.d.ts.map +1 -0
  102. package/dist/services/shared/identifiers.js +23 -0
  103. package/dist/services/shared/identifiers.js.map +1 -0
  104. package/dist/services/uniprot/uniprot-service.d.ts +65 -0
  105. package/dist/services/uniprot/uniprot-service.d.ts.map +1 -0
  106. package/dist/services/uniprot/uniprot-service.js +146 -0
  107. package/dist/services/uniprot/uniprot-service.js.map +1 -0
  108. package/package.json +106 -0
  109. package/server.json +99 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview Maps the agent-facing facet dimension enum to RCSB attributes +
3
+ * aggregation types. Shared by `protein_analyze_collection` and the optional
4
+ * facet breakdown on `protein_search_structures`.
5
+ * @module services/rcsb/facets
6
+ */
7
+ import type { FacetSpec } from './rcsb-service.js';
8
+ /** The supported `group_by` / facet dimensions and how RCSB aggregates each. */
9
+ export declare const FACET_DIMENSIONS: {
10
+ readonly method: {
11
+ readonly attribute: "exptl.method";
12
+ readonly aggregation: "terms";
13
+ readonly label: "Experimental method";
14
+ };
15
+ readonly organism: {
16
+ readonly attribute: "rcsb_entity_source_organism.ncbi_scientific_name";
17
+ readonly aggregation: "terms";
18
+ readonly label: "Source organism";
19
+ };
20
+ readonly polymer_type: {
21
+ readonly attribute: "rcsb_entry_info.polymer_composition";
22
+ readonly aggregation: "terms";
23
+ readonly label: "Polymer composition";
24
+ };
25
+ readonly resolution: {
26
+ readonly attribute: "rcsb_entry_info.resolution_combined";
27
+ readonly aggregation: "histogram";
28
+ readonly defaultInterval: 0.5;
29
+ readonly label: "Resolution (Å)";
30
+ };
31
+ readonly release_year: {
32
+ readonly attribute: "rcsb_accession_info.initial_release_date";
33
+ readonly aggregation: "date_histogram";
34
+ readonly defaultInterval: "year";
35
+ readonly label: "Release year";
36
+ };
37
+ readonly molecular_weight: {
38
+ readonly attribute: "rcsb_entry_info.molecular_weight";
39
+ readonly aggregation: "histogram";
40
+ readonly defaultInterval: 50;
41
+ readonly label: "Molecular weight (kDa)";
42
+ };
43
+ };
44
+ /** A supported facet dimension name. */
45
+ export type FacetDimensionName = keyof typeof FACET_DIMENSIONS;
46
+ /** All supported dimension names (for Zod enums). */
47
+ export declare const FACET_DIMENSION_NAMES: [FacetDimensionName, ...FacetDimensionName[]];
48
+ /** Build a {@link FacetSpec} for a dimension, with an optional interval override and nested child. */
49
+ export declare function buildFacetSpec(dimension: FacetDimensionName, interval?: number | string, child?: FacetDimensionName): FacetSpec;
50
+ //# sourceMappingURL=facets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../../../src/services/rcsb/facets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAWnD,gFAAgF;AAChF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCoB,CAAC;AAElD,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE/D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,EAAoC,CACpE,kBAAkB,EAClB,GAAG,kBAAkB,EAAE,CACxB,CAAC;AAEF,sGAAsG;AACtG,wBAAgB,cAAc,CAC5B,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAC1B,KAAK,CAAC,EAAE,kBAAkB,GACzB,SAAS,CAYX"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview Maps the agent-facing facet dimension enum to RCSB attributes +
3
+ * aggregation types. Shared by `protein_analyze_collection` and the optional
4
+ * facet breakdown on `protein_search_structures`.
5
+ * @module services/rcsb/facets
6
+ */
7
+ /** The supported `group_by` / facet dimensions and how RCSB aggregates each. */
8
+ export const FACET_DIMENSIONS = {
9
+ method: {
10
+ attribute: 'exptl.method',
11
+ aggregation: 'terms',
12
+ label: 'Experimental method',
13
+ },
14
+ organism: {
15
+ attribute: 'rcsb_entity_source_organism.ncbi_scientific_name',
16
+ aggregation: 'terms',
17
+ label: 'Source organism',
18
+ },
19
+ polymer_type: {
20
+ attribute: 'rcsb_entry_info.polymer_composition',
21
+ aggregation: 'terms',
22
+ label: 'Polymer composition',
23
+ },
24
+ resolution: {
25
+ attribute: 'rcsb_entry_info.resolution_combined',
26
+ aggregation: 'histogram',
27
+ defaultInterval: 0.5,
28
+ label: 'Resolution (Å)',
29
+ },
30
+ release_year: {
31
+ attribute: 'rcsb_accession_info.initial_release_date',
32
+ aggregation: 'date_histogram',
33
+ defaultInterval: 'year',
34
+ label: 'Release year',
35
+ },
36
+ molecular_weight: {
37
+ attribute: 'rcsb_entry_info.molecular_weight',
38
+ aggregation: 'histogram',
39
+ defaultInterval: 50,
40
+ label: 'Molecular weight (kDa)',
41
+ },
42
+ };
43
+ /** All supported dimension names (for Zod enums). */
44
+ export const FACET_DIMENSION_NAMES = Object.keys(FACET_DIMENSIONS);
45
+ /** Build a {@link FacetSpec} for a dimension, with an optional interval override and nested child. */
46
+ export function buildFacetSpec(dimension, interval, child) {
47
+ const def = FACET_DIMENSIONS[dimension];
48
+ const resolvedInterval = interval ?? def.defaultInterval;
49
+ return {
50
+ dimension,
51
+ attribute: def.attribute,
52
+ aggregation: def.aggregation,
53
+ ...(def.aggregation !== 'terms' && resolvedInterval !== undefined
54
+ ? { interval: resolvedInterval }
55
+ : {}),
56
+ ...(child ? { child: buildFacetSpec(child) } : {}),
57
+ };
58
+ }
59
+ //# sourceMappingURL=facets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facets.js","sourceRoot":"","sources":["../../../src/services/rcsb/facets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE;QACN,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,qBAAqB;KAC7B;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,kDAAkD;QAC7D,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,iBAAiB;KACzB;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,qCAAqC;QAChD,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,qBAAqB;KAC7B;IACD,UAAU,EAAE;QACV,SAAS,EAAE,qCAAqC;QAChD,WAAW,EAAE,WAAW;QACxB,eAAe,EAAE,GAAG;QACpB,KAAK,EAAE,gBAAgB;KACxB;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,0CAA0C;QACrD,WAAW,EAAE,gBAAgB;QAC7B,eAAe,EAAE,MAAM;QACvB,KAAK,EAAE,cAAc;KACtB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,kCAAkC;QAC7C,WAAW,EAAE,WAAW;QACxB,eAAe,EAAE,EAAE;QACnB,KAAK,EAAE,wBAAwB;KAChC;CAC8C,CAAC;AAKlD,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAGhE,CAAC;AAEF,sGAAsG;AACtG,MAAM,UAAU,cAAc,CAC5B,SAA6B,EAC7B,QAA0B,EAC1B,KAA0B;IAE1B,MAAM,GAAG,GAAiB,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,QAAQ,IAAI,GAAG,CAAC,eAAe,CAAC;IACzD,OAAO;QACL,SAAS;QACT,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO,IAAI,gBAAgB,KAAK,SAAS;YAC/D,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE;YAChC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @fileoverview RCSB service — wraps the RCSB Search API v2 (text / sequence /
3
+ * chemical search + server-side faceted aggregation), the Data API GraphQL
4
+ * endpoint (batched entry metadata + ligand binding-site residues via
5
+ * `rcsb_target_neighbors`), the REST chemical-component endpoint, and coordinate
6
+ * file URLs. The PDB's full query surface lives only here; predicted models are
7
+ * served by the AlphaFold / 3D-Beacons services.
8
+ * @module services/rcsb/rcsb-service
9
+ */
10
+ import type { Context } from '@cyanheads/mcp-ts-core';
11
+ import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
12
+ import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
13
+ import type { ServerConfig } from '../../config/server-config.js';
14
+ import type { BindingSite, ChemComp, ContentType, EntryMeta, FacetDimension, SearchResult, StructureSearchParams } from './types.js';
15
+ /** RCSB return types relevant to this server. */
16
+ export type ReturnType = 'entry' | 'polymer_entity' | 'mol_definition';
17
+ /** A facet dimension request: friendly name + how RCSB should aggregate it. */
18
+ export interface FacetSpec {
19
+ /** Aggregation kind. */
20
+ aggregation: 'terms' | 'histogram' | 'date_histogram';
21
+ /** RCSB attribute to aggregate. */
22
+ attribute: string;
23
+ /** Optional nested dimension for a cross-tab. */
24
+ child?: FacetSpec;
25
+ /** Friendly dimension name surfaced to the agent. */
26
+ dimension: string;
27
+ /** Numeric bin width (histogram) or period string `year`/`month`/`quarter` (date_histogram). */
28
+ interval?: number | string;
29
+ }
30
+ export declare class RcsbService {
31
+ private readonly searchUrl;
32
+ private readonly graphqlUrl;
33
+ private readonly dataRestBase;
34
+ private readonly filesBase;
35
+ constructor(_config: AppConfig, _storage: StorageService, serverConfig: ServerConfig);
36
+ /** Full-text / filtered structure search, optionally with a facet breakdown. */
37
+ search(params: StructureSearchParams, ctx: Context, facets?: FacetSpec[]): Promise<SearchResult>;
38
+ /** mmseqs2 sequence-similarity search. Returns polymer-entity hits. */
39
+ searchSequence(sequence: string, opts: {
40
+ maxEvalue?: number;
41
+ minIdentity?: number;
42
+ limit?: number;
43
+ contentType?: ContentType;
44
+ }, ctx: Context): Promise<SearchResult>;
45
+ /** Find entries containing a given ligand (exact chemical component ID). */
46
+ searchByLigand(compId: string, opts: {
47
+ limit?: number;
48
+ contentType?: ContentType;
49
+ }, ctx: Context): Promise<SearchResult>;
50
+ /** Resolve a ligand name/synonym to candidate chemical component IDs. */
51
+ findChemComps(query: string, limit: number, ctx: Context): Promise<string[]>;
52
+ /** Facet-only aggregation over an optional scoping query (no row pull). */
53
+ analyzeFacets(params: StructureSearchParams, facets: FacetSpec[], ctx: Context): Promise<{
54
+ total: number;
55
+ facets: FacetDimension[];
56
+ }>;
57
+ /** Batched entry metadata for up to N PDB IDs in one GraphQL call. */
58
+ getEntries(ids: string[], ctx: Context): Promise<EntryMeta[]>;
59
+ /** Resolve a PDB entry to its cross-referenced UniProt accession(s). */
60
+ resolveUniprot(pdbId: string, ctx: Context): Promise<string[]>;
61
+ /** First polymer entity's one-letter sequence for a PDB entry. */
62
+ getSequence(pdbId: string, ctx: Context): Promise<{
63
+ entityId: string;
64
+ sequence: string;
65
+ } | null>;
66
+ /** Ligand binding-site residues for an entry, optionally filtered to one ligand. */
67
+ getBindingSites(pdbId: string, compId: string | undefined, ctx: Context): Promise<BindingSite[]>;
68
+ /** Chemical-component metadata (formula, weight, SMILES, InChIKey). */
69
+ getChemComp(compId: string, ctx: Context): Promise<ChemComp | null>;
70
+ /** Construct a coordinate-file download URL for a PDB entry. */
71
+ coordinateFileUrl(pdbId: string, format: 'cif' | 'pdb' | 'bcif'): string;
72
+ private postSearch;
73
+ private graphql;
74
+ }
75
+ /** Build the RCSB query node from search params (match-all when no constraint given). */
76
+ export declare function buildQuery(params: StructureSearchParams): unknown;
77
+ /** Translate a friendly FacetSpec into the RCSB facet request shape (recursively). */
78
+ export declare function toRcsbFacet(spec: FacetSpec): Record<string, unknown>;
79
+ export declare function initRcsbService(config: AppConfig, storage: StorageService, serverConfig: ServerConfig): void;
80
+ export declare function getRcsbService(): RcsbService;
81
+ //# sourceMappingURL=rcsb-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rcsb-service.d.ts","sourceRoot":"","sources":["../../../src/services/rcsb/rcsb-service.ts"],"names":[],"mappings":"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"}