@cyanheads/brapi-mcp-server 0.3.5

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 (238) hide show
  1. package/CLAUDE.md +391 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +201 -0
  4. package/README.md +590 -0
  5. package/changelog/0.1.x/0.1.0.md +19 -0
  6. package/changelog/0.1.x/0.1.1.md +27 -0
  7. package/changelog/0.1.x/0.1.2.md +22 -0
  8. package/changelog/0.2.x/0.2.0.md +35 -0
  9. package/changelog/0.2.x/0.2.1.md +36 -0
  10. package/changelog/0.3.x/0.3.0.md +38 -0
  11. package/changelog/0.3.x/0.3.1.md +40 -0
  12. package/changelog/0.3.x/0.3.2.md +29 -0
  13. package/changelog/0.3.x/0.3.3.md +19 -0
  14. package/changelog/0.3.x/0.3.4.md +33 -0
  15. package/changelog/0.3.x/0.3.5.md +24 -0
  16. package/changelog/template.md +51 -0
  17. package/dist/config/alias-credentials.d.ts +82 -0
  18. package/dist/config/alias-credentials.d.ts.map +1 -0
  19. package/dist/config/alias-credentials.js +159 -0
  20. package/dist/config/alias-credentials.js.map +1 -0
  21. package/dist/config/server-config.d.ts +39 -0
  22. package/dist/config/server-config.d.ts.map +1 -0
  23. package/dist/config/server-config.js +128 -0
  24. package/dist/config/server-config.js.map +1 -0
  25. package/dist/index.d.ts +10 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +85 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts +14 -0
  30. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts.map +1 -0
  31. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +75 -0
  32. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -0
  33. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts +16 -0
  34. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +109 -0
  36. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -0
  37. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts +11 -0
  38. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts.map +1 -0
  39. package/dist/mcp-server/resources/definitions/brapi-calls.resource.js +46 -0
  40. package/dist/mcp-server/resources/definitions/brapi-calls.resource.js.map +1 -0
  41. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +13 -0
  42. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +1 -0
  43. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +26 -0
  44. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +1 -0
  45. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts +19 -0
  46. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts.map +1 -0
  47. package/dist/mcp-server/resources/definitions/brapi-filters.resource.js +45 -0
  48. package/dist/mcp-server/resources/definitions/brapi-filters.resource.js.map +1 -0
  49. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts +18 -0
  50. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts.map +1 -0
  51. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js +34 -0
  52. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js.map +1 -0
  53. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts +11 -0
  54. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts.map +1 -0
  55. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js +28 -0
  56. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js.map +1 -0
  57. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts +18 -0
  58. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts.map +1 -0
  59. package/dist/mcp-server/resources/definitions/brapi-study.resource.js +34 -0
  60. package/dist/mcp-server/resources/definitions/brapi-study.resource.js.map +1 -0
  61. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts +82 -0
  62. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts.map +1 -0
  63. package/dist/mcp-server/tools/definitions/brapi-connect.tool.js +106 -0
  64. package/dist/mcp-server/tools/definitions/brapi-connect.tool.js.map +1 -0
  65. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts +41 -0
  66. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts.map +1 -0
  67. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js +88 -0
  68. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js.map +1 -0
  69. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +74 -0
  70. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -0
  71. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +386 -0
  72. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -0
  73. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +72 -0
  74. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -0
  75. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +290 -0
  76. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -0
  77. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +65 -0
  78. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -0
  79. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +243 -0
  80. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -0
  81. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +63 -0
  82. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -0
  83. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +278 -0
  84. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -0
  85. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +74 -0
  86. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -0
  87. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +288 -0
  88. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -0
  89. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +69 -0
  90. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -0
  91. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +243 -0
  92. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -0
  93. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +86 -0
  94. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -0
  95. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +337 -0
  96. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -0
  97. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +59 -0
  98. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -0
  99. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +248 -0
  100. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -0
  101. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts +59 -0
  102. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -0
  103. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +306 -0
  104. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -0
  105. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts +57 -0
  106. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts.map +1 -0
  107. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js +291 -0
  108. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js.map +1 -0
  109. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts +75 -0
  110. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts.map +1 -0
  111. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js +323 -0
  112. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js.map +1 -0
  113. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +87 -0
  114. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +1 -0
  115. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +296 -0
  116. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +1 -0
  117. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +35 -0
  118. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -0
  119. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +148 -0
  120. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -0
  121. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +33 -0
  122. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -0
  123. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +126 -0
  124. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -0
  125. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts +51 -0
  126. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts.map +1 -0
  127. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js +41 -0
  128. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js.map +1 -0
  129. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts +117 -0
  130. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts.map +1 -0
  131. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js +574 -0
  132. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js.map +1 -0
  133. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts +52 -0
  134. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts.map +1 -0
  135. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js +420 -0
  136. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js.map +1 -0
  137. package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts +29 -0
  138. package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts.map +1 -0
  139. package/dist/mcp-server/tools/shared/connect-auth-schema.js +55 -0
  140. package/dist/mcp-server/tools/shared/connect-auth-schema.js.map +1 -0
  141. package/dist/mcp-server/tools/shared/find-helpers.d.ts +143 -0
  142. package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -0
  143. package/dist/mcp-server/tools/shared/find-helpers.js +319 -0
  144. package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -0
  145. package/dist/mcp-server/tools/shared/orientation-envelope.d.ts +97 -0
  146. package/dist/mcp-server/tools/shared/orientation-envelope.d.ts.map +1 -0
  147. package/dist/mcp-server/tools/shared/orientation-envelope.js +254 -0
  148. package/dist/mcp-server/tools/shared/orientation-envelope.js.map +1 -0
  149. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts +10 -0
  150. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -0
  151. package/dist/mcp-server/tools/shared/raw-routing-hints.js +46 -0
  152. package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -0
  153. package/dist/services/brapi-client/brapi-client.d.ts +76 -0
  154. package/dist/services/brapi-client/brapi-client.d.ts.map +1 -0
  155. package/dist/services/brapi-client/brapi-client.js +320 -0
  156. package/dist/services/brapi-client/brapi-client.js.map +1 -0
  157. package/dist/services/brapi-client/index.d.ts +9 -0
  158. package/dist/services/brapi-client/index.d.ts.map +1 -0
  159. package/dist/services/brapi-client/index.js +7 -0
  160. package/dist/services/brapi-client/index.js.map +1 -0
  161. package/dist/services/brapi-client/types.d.ts +82 -0
  162. package/dist/services/brapi-client/types.d.ts.map +1 -0
  163. package/dist/services/brapi-client/types.js +8 -0
  164. package/dist/services/brapi-client/types.js.map +1 -0
  165. package/dist/services/brapi-filters/catalog.d.ts +14 -0
  166. package/dist/services/brapi-filters/catalog.d.ts.map +1 -0
  167. package/dist/services/brapi-filters/catalog.js +490 -0
  168. package/dist/services/brapi-filters/catalog.js.map +1 -0
  169. package/dist/services/brapi-filters/index.d.ts +8 -0
  170. package/dist/services/brapi-filters/index.d.ts.map +1 -0
  171. package/dist/services/brapi-filters/index.js +7 -0
  172. package/dist/services/brapi-filters/index.js.map +1 -0
  173. package/dist/services/brapi-filters/types.d.ts +23 -0
  174. package/dist/services/brapi-filters/types.d.ts.map +1 -0
  175. package/dist/services/brapi-filters/types.js +9 -0
  176. package/dist/services/brapi-filters/types.js.map +1 -0
  177. package/dist/services/capability-registry/capability-registry.d.ts +51 -0
  178. package/dist/services/capability-registry/capability-registry.d.ts.map +1 -0
  179. package/dist/services/capability-registry/capability-registry.js +234 -0
  180. package/dist/services/capability-registry/capability-registry.js.map +1 -0
  181. package/dist/services/capability-registry/index.d.ts +9 -0
  182. package/dist/services/capability-registry/index.d.ts.map +1 -0
  183. package/dist/services/capability-registry/index.js +7 -0
  184. package/dist/services/capability-registry/index.js.map +1 -0
  185. package/dist/services/capability-registry/types.d.ts +67 -0
  186. package/dist/services/capability-registry/types.d.ts.map +1 -0
  187. package/dist/services/capability-registry/types.js +9 -0
  188. package/dist/services/capability-registry/types.js.map +1 -0
  189. package/dist/services/dataset-store/dataset-store.d.ts +35 -0
  190. package/dist/services/dataset-store/dataset-store.d.ts.map +1 -0
  191. package/dist/services/dataset-store/dataset-store.js +190 -0
  192. package/dist/services/dataset-store/dataset-store.js.map +1 -0
  193. package/dist/services/dataset-store/index.d.ts +8 -0
  194. package/dist/services/dataset-store/index.d.ts.map +1 -0
  195. package/dist/services/dataset-store/index.js +7 -0
  196. package/dist/services/dataset-store/index.js.map +1 -0
  197. package/dist/services/dataset-store/types.d.ts +65 -0
  198. package/dist/services/dataset-store/types.d.ts.map +1 -0
  199. package/dist/services/dataset-store/types.js +8 -0
  200. package/dist/services/dataset-store/types.js.map +1 -0
  201. package/dist/services/ontology-resolver/index.d.ts +8 -0
  202. package/dist/services/ontology-resolver/index.d.ts.map +1 -0
  203. package/dist/services/ontology-resolver/index.js +7 -0
  204. package/dist/services/ontology-resolver/index.js.map +1 -0
  205. package/dist/services/ontology-resolver/ontology-resolver.d.ts +49 -0
  206. package/dist/services/ontology-resolver/ontology-resolver.d.ts.map +1 -0
  207. package/dist/services/ontology-resolver/ontology-resolver.js +99 -0
  208. package/dist/services/ontology-resolver/ontology-resolver.js.map +1 -0
  209. package/dist/services/ontology-resolver/types.d.ts +38 -0
  210. package/dist/services/ontology-resolver/types.d.ts.map +1 -0
  211. package/dist/services/ontology-resolver/types.js +8 -0
  212. package/dist/services/ontology-resolver/types.js.map +1 -0
  213. package/dist/services/reference-data-cache/index.d.ts +9 -0
  214. package/dist/services/reference-data-cache/index.d.ts.map +1 -0
  215. package/dist/services/reference-data-cache/index.js +7 -0
  216. package/dist/services/reference-data-cache/index.js.map +1 -0
  217. package/dist/services/reference-data-cache/reference-data-cache.d.ts +31 -0
  218. package/dist/services/reference-data-cache/reference-data-cache.d.ts.map +1 -0
  219. package/dist/services/reference-data-cache/reference-data-cache.js +131 -0
  220. package/dist/services/reference-data-cache/reference-data-cache.js.map +1 -0
  221. package/dist/services/reference-data-cache/types.d.ts +42 -0
  222. package/dist/services/reference-data-cache/types.d.ts.map +1 -0
  223. package/dist/services/reference-data-cache/types.js +9 -0
  224. package/dist/services/reference-data-cache/types.js.map +1 -0
  225. package/dist/services/server-registry/index.d.ts +9 -0
  226. package/dist/services/server-registry/index.d.ts.map +1 -0
  227. package/dist/services/server-registry/index.js +7 -0
  228. package/dist/services/server-registry/index.js.map +1 -0
  229. package/dist/services/server-registry/server-registry.d.ts +57 -0
  230. package/dist/services/server-registry/server-registry.d.ts.map +1 -0
  231. package/dist/services/server-registry/server-registry.js +210 -0
  232. package/dist/services/server-registry/server-registry.js.map +1 -0
  233. package/dist/services/server-registry/types.d.ts +43 -0
  234. package/dist/services/server-registry/types.d.ts.map +1 -0
  235. package/dist/services/server-registry/types.js +10 -0
  236. package/dist/services/server-registry/types.js.map +1 -0
  237. package/package.json +86 -0
  238. package/server.json +99 -0
@@ -0,0 +1,490 @@
1
+ /**
2
+ * @fileoverview Static BrAPI v2.1 filter catalog. Covers the endpoints the
3
+ * goal-shaped tools target plus the common escape-hatch nouns. Agents use
4
+ * this via `brapi_describe_filters` to discover valid filter names before
5
+ * constructing `extraFilters` on `find_*` tools. Catalog entries reflect the
6
+ * BrAPI v2.1 spec — individual servers may implement subsets; filter failures
7
+ * surface through the upstream 400 body, not a static check.
8
+ *
9
+ * @module services/brapi-filters/catalog
10
+ */
11
+ const PAGINATION_FILTERS = [
12
+ {
13
+ name: 'page',
14
+ type: 'integer',
15
+ description: 'Zero-indexed page number.',
16
+ example: '0',
17
+ },
18
+ {
19
+ name: 'pageSize',
20
+ type: 'integer',
21
+ description: 'Rows per page. Cap varies by server; 1000 is a safe upper bound.',
22
+ example: '100',
23
+ },
24
+ ];
25
+ const STUDIES = [
26
+ {
27
+ name: 'commonCropNames',
28
+ type: 'string[]',
29
+ description: 'Common crop names (e.g. "Cassava", "Wheat"). Matches /commoncropnames.',
30
+ example: 'Cassava',
31
+ },
32
+ {
33
+ name: 'studyTypes',
34
+ type: 'string[]',
35
+ description: 'Study types — e.g. "Yield Trial", "Phenotyping".',
36
+ example: 'Yield Trial',
37
+ },
38
+ {
39
+ name: 'programDbIds',
40
+ type: 'string[]',
41
+ description: 'Filter to studies within specific breeding programs.',
42
+ example: 'program-1',
43
+ },
44
+ {
45
+ name: 'programNames',
46
+ type: 'string[]',
47
+ description: 'Filter by program display name.',
48
+ example: 'Cassava Breeding',
49
+ },
50
+ {
51
+ name: 'studyDbIds',
52
+ type: 'string[]',
53
+ description: 'Restrict to specific studies by DbId.',
54
+ example: 'study-42',
55
+ },
56
+ {
57
+ name: 'studyNames',
58
+ type: 'string[]',
59
+ description: 'Restrict by study display name.',
60
+ example: 'IBA-2022-YT',
61
+ },
62
+ {
63
+ name: 'trialDbIds',
64
+ type: 'string[]',
65
+ description: 'Restrict to studies inside specific trials.',
66
+ example: 'trial-1',
67
+ },
68
+ {
69
+ name: 'trialNames',
70
+ type: 'string[]',
71
+ description: 'Restrict by trial display name.',
72
+ example: 'West Africa Yield Trial',
73
+ },
74
+ {
75
+ name: 'locationDbIds',
76
+ type: 'string[]',
77
+ description: 'Restrict to studies at specific locations / research stations.',
78
+ example: 'loc-ibadan',
79
+ },
80
+ {
81
+ name: 'locationNames',
82
+ type: 'string[]',
83
+ description: 'Restrict by location display name.',
84
+ example: 'NCSU Station 1',
85
+ },
86
+ {
87
+ name: 'seasonDbIds',
88
+ type: 'string[]',
89
+ description: 'Restrict to specific seasons.',
90
+ example: '2022',
91
+ },
92
+ {
93
+ name: 'active',
94
+ type: 'boolean',
95
+ description: 'Only active (or only inactive) studies.',
96
+ example: 'true',
97
+ },
98
+ {
99
+ name: 'studyCodes',
100
+ type: 'string[]',
101
+ description: 'Short alphanumeric study codes.',
102
+ example: 'IBA-YT-22',
103
+ },
104
+ {
105
+ name: 'studyPUIs',
106
+ type: 'string[]',
107
+ description: 'Persistent unique identifiers (DOIs, URIs) for the studies.',
108
+ example: 'doi:10.25739/abc123',
109
+ },
110
+ {
111
+ name: 'externalReferenceIds',
112
+ type: 'string[]',
113
+ description: 'External reference identifier for cross-system joins.',
114
+ example: 'ext-ref-1',
115
+ },
116
+ {
117
+ name: 'externalReferenceSources',
118
+ type: 'string[]',
119
+ description: 'Source system name paired with externalReferenceIds.',
120
+ example: 'GRIN',
121
+ },
122
+ ];
123
+ const GERMPLASM = [
124
+ {
125
+ name: 'germplasmDbIds',
126
+ type: 'string[]',
127
+ description: 'Restrict to specific germplasm by DbId.',
128
+ example: 'germplasm-1',
129
+ },
130
+ {
131
+ name: 'germplasmNames',
132
+ type: 'string[]',
133
+ description: 'Restrict by germplasm display name.',
134
+ example: 'TME419',
135
+ },
136
+ {
137
+ name: 'germplasmPUIs',
138
+ type: 'string[]',
139
+ description: 'Persistent unique identifiers (DOIs, URIs).',
140
+ example: 'doi:10.25739/germplasm-xyz',
141
+ },
142
+ {
143
+ name: 'commonCropNames',
144
+ type: 'string[]',
145
+ description: 'Crop names the germplasm belongs to.',
146
+ example: 'Cassava',
147
+ },
148
+ {
149
+ name: 'accessionNumbers',
150
+ type: 'string[]',
151
+ description: 'Accession numbers from a genebank or seed repository.',
152
+ example: 'TMe-419',
153
+ },
154
+ {
155
+ name: 'collections',
156
+ type: 'string[]',
157
+ description: 'Collection the germplasm is curated under.',
158
+ example: 'IITA Core',
159
+ },
160
+ {
161
+ name: 'genus',
162
+ type: 'string',
163
+ description: 'Botanical genus.',
164
+ example: 'Manihot',
165
+ },
166
+ {
167
+ name: 'species',
168
+ type: 'string',
169
+ description: 'Botanical species epithet.',
170
+ example: 'esculenta',
171
+ },
172
+ {
173
+ name: 'synonyms',
174
+ type: 'string[]',
175
+ description: 'Known synonyms / alternate names.',
176
+ example: 'TME419',
177
+ },
178
+ {
179
+ name: 'familyCode',
180
+ type: 'string',
181
+ description: 'Pedigree family identifier.',
182
+ example: 'TME-F1',
183
+ },
184
+ {
185
+ name: 'programDbIds',
186
+ type: 'string[]',
187
+ description: 'Programs the germplasm is associated with.',
188
+ example: 'program-1',
189
+ },
190
+ {
191
+ name: 'trialDbIds',
192
+ type: 'string[]',
193
+ description: 'Trials the germplasm has been tested in.',
194
+ example: 'trial-1',
195
+ },
196
+ {
197
+ name: 'studyDbIds',
198
+ type: 'string[]',
199
+ description: 'Studies the germplasm has been tested in.',
200
+ example: 'study-1',
201
+ },
202
+ {
203
+ name: 'externalReferenceIds',
204
+ type: 'string[]',
205
+ description: 'External reference identifier for cross-system joins.',
206
+ example: 'ext-ref-1',
207
+ },
208
+ ];
209
+ const VARIABLES = [
210
+ {
211
+ name: 'observationVariableDbIds',
212
+ type: 'string[]',
213
+ description: 'Restrict to specific variables.',
214
+ example: 'var-dry-matter',
215
+ },
216
+ {
217
+ name: 'observationVariableNames',
218
+ type: 'string[]',
219
+ description: 'Restrict by variable display name.',
220
+ example: 'Dry Matter %',
221
+ },
222
+ {
223
+ name: 'observationVariablePUIs',
224
+ type: 'string[]',
225
+ description: 'Persistent ontology URIs.',
226
+ example: 'CO_334:0000013',
227
+ },
228
+ {
229
+ name: 'traitClasses',
230
+ type: 'string[]',
231
+ description: 'Trait class (e.g. "Agronomic", "Morphological").',
232
+ example: 'Agronomic',
233
+ },
234
+ {
235
+ name: 'methodDbIds',
236
+ type: 'string[]',
237
+ description: 'Measurement method identifiers.',
238
+ example: 'method-1',
239
+ },
240
+ {
241
+ name: 'scaleDbIds',
242
+ type: 'string[]',
243
+ description: 'Measurement scale identifiers.',
244
+ example: 'scale-percent',
245
+ },
246
+ {
247
+ name: 'ontologyDbIds',
248
+ type: 'string[]',
249
+ description: 'Ontology identifiers — scope the search to a specific ontology.',
250
+ example: 'CO_334',
251
+ },
252
+ {
253
+ name: 'commonCropName',
254
+ type: 'string',
255
+ description: 'Crop context for the variable.',
256
+ example: 'Cassava',
257
+ },
258
+ {
259
+ name: 'studyDbId',
260
+ type: 'string',
261
+ description: 'Return only variables exposed inside a specific study.',
262
+ example: 'study-42',
263
+ },
264
+ ];
265
+ const OBSERVATIONS = [
266
+ {
267
+ name: 'observationDbIds',
268
+ type: 'string[]',
269
+ description: 'Restrict to specific observations.',
270
+ example: 'obs-1',
271
+ },
272
+ {
273
+ name: 'observationUnitDbIds',
274
+ type: 'string[]',
275
+ description: 'Restrict to specific observation units (plots, plants, samples).',
276
+ example: 'ou-1',
277
+ },
278
+ {
279
+ name: 'observationVariableDbIds',
280
+ type: 'string[]',
281
+ description: 'Restrict to specific variables (traits).',
282
+ example: 'var-dry-matter',
283
+ },
284
+ {
285
+ name: 'studyDbIds',
286
+ type: 'string[]',
287
+ description: 'Restrict to specific studies.',
288
+ example: 'study-1',
289
+ },
290
+ {
291
+ name: 'germplasmDbIds',
292
+ type: 'string[]',
293
+ description: 'Restrict to specific germplasm.',
294
+ example: 'germplasm-1',
295
+ },
296
+ {
297
+ name: 'seasonDbIds',
298
+ type: 'string[]',
299
+ description: 'Restrict by season.',
300
+ example: '2022',
301
+ },
302
+ {
303
+ name: 'observationLevels',
304
+ type: 'string[]',
305
+ description: 'Observation unit level — e.g. "plot", "plant", "field".',
306
+ example: 'plot',
307
+ },
308
+ {
309
+ name: 'programDbIds',
310
+ type: 'string[]',
311
+ description: 'Restrict by program.',
312
+ example: 'program-1',
313
+ },
314
+ {
315
+ name: 'trialDbIds',
316
+ type: 'string[]',
317
+ description: 'Restrict by trial.',
318
+ example: 'trial-1',
319
+ },
320
+ {
321
+ name: 'observationTimeStampRangeStart',
322
+ type: 'date',
323
+ description: 'ISO 8601 start of the observation-time window.',
324
+ example: '2022-01-01T00:00:00Z',
325
+ },
326
+ {
327
+ name: 'observationTimeStampRangeEnd',
328
+ type: 'date',
329
+ description: 'ISO 8601 end of the observation-time window.',
330
+ example: '2022-12-31T23:59:59Z',
331
+ },
332
+ ];
333
+ const IMAGES = [
334
+ {
335
+ name: 'imageDbIds',
336
+ type: 'string[]',
337
+ description: 'Restrict to specific images.',
338
+ example: 'img-1',
339
+ },
340
+ {
341
+ name: 'imageFileNames',
342
+ type: 'string[]',
343
+ description: 'Filter by uploaded file name.',
344
+ example: 'plot-042.jpg',
345
+ },
346
+ {
347
+ name: 'observationUnitDbIds',
348
+ type: 'string[]',
349
+ description: 'Images associated with specific observation units.',
350
+ example: 'ou-1',
351
+ },
352
+ {
353
+ name: 'observationDbIds',
354
+ type: 'string[]',
355
+ description: 'Images attached to specific observations.',
356
+ example: 'obs-1',
357
+ },
358
+ {
359
+ name: 'studyDbIds',
360
+ type: 'string[]',
361
+ description: 'Restrict to specific studies.',
362
+ example: 'study-1',
363
+ },
364
+ {
365
+ name: 'mimeTypes',
366
+ type: 'string[]',
367
+ description: 'MIME filter — e.g. "image/jpeg", "image/png".',
368
+ example: 'image/jpeg',
369
+ },
370
+ {
371
+ name: 'descriptiveOntologyTerms',
372
+ type: 'string[]',
373
+ description: 'Ontology tags attached to the image.',
374
+ example: 'CO_334:plot',
375
+ },
376
+ ];
377
+ const VARIANTS = [
378
+ {
379
+ name: 'variantSetDbIds',
380
+ type: 'string[]',
381
+ description: 'Restrict to specific variant sets.',
382
+ example: 'vset-1',
383
+ },
384
+ {
385
+ name: 'variantDbIds',
386
+ type: 'string[]',
387
+ description: 'Restrict to specific variants.',
388
+ example: 'variant-1',
389
+ },
390
+ {
391
+ name: 'referenceDbIds',
392
+ type: 'string[]',
393
+ description: 'Reference sequence identifiers.',
394
+ example: 'ref-chr1',
395
+ },
396
+ {
397
+ name: 'referenceName',
398
+ type: 'string',
399
+ description: 'Reference display name — e.g. "chr01".',
400
+ example: 'chr1',
401
+ },
402
+ {
403
+ name: 'start',
404
+ type: 'integer',
405
+ description: 'Inclusive start position on the reference (1-based).',
406
+ example: '1000',
407
+ },
408
+ {
409
+ name: 'end',
410
+ type: 'integer',
411
+ description: 'Exclusive end position on the reference.',
412
+ example: '5000',
413
+ },
414
+ ];
415
+ const LOCATIONS = [
416
+ {
417
+ name: 'locationDbIds',
418
+ type: 'string[]',
419
+ description: 'Restrict to specific locations.',
420
+ example: 'loc-1',
421
+ },
422
+ {
423
+ name: 'locationNames',
424
+ type: 'string[]',
425
+ description: 'Restrict by display name.',
426
+ example: 'NCSU Station 1',
427
+ },
428
+ {
429
+ name: 'locationTypes',
430
+ type: 'string[]',
431
+ description: 'Location type — e.g. "Research Station", "Field".',
432
+ example: 'Research Station',
433
+ },
434
+ {
435
+ name: 'countryCodes',
436
+ type: 'string[]',
437
+ description: 'ISO 3166-1 alpha-3 country codes.',
438
+ example: 'USA',
439
+ },
440
+ {
441
+ name: 'abbreviations',
442
+ type: 'string[]',
443
+ description: 'Short location abbreviations.',
444
+ example: 'NCSU-1',
445
+ },
446
+ ];
447
+ const SPEC_BASE = 'https://brapi.org/specification';
448
+ const CATALOG = {
449
+ studies: {
450
+ specReference: `${SPEC_BASE}/core/get-studies`,
451
+ filters: withPagination(STUDIES),
452
+ },
453
+ germplasm: {
454
+ specReference: `${SPEC_BASE}/germplasm/get-germplasm`,
455
+ filters: withPagination(GERMPLASM),
456
+ },
457
+ variables: {
458
+ specReference: `${SPEC_BASE}/phenotyping/get-variables`,
459
+ filters: withPagination(VARIABLES),
460
+ },
461
+ observations: {
462
+ specReference: `${SPEC_BASE}/phenotyping/get-observations`,
463
+ filters: withPagination(OBSERVATIONS),
464
+ },
465
+ images: {
466
+ specReference: `${SPEC_BASE}/phenotyping/get-images`,
467
+ filters: withPagination(IMAGES),
468
+ },
469
+ variants: {
470
+ specReference: `${SPEC_BASE}/genotyping/get-variants`,
471
+ filters: withPagination(VARIANTS),
472
+ },
473
+ locations: {
474
+ specReference: `${SPEC_BASE}/core/get-locations`,
475
+ filters: withPagination(LOCATIONS),
476
+ },
477
+ };
478
+ function withPagination(filters) {
479
+ return [...filters, ...PAGINATION_FILTERS];
480
+ }
481
+ export function getFilterCatalog(endpoint) {
482
+ const entry = CATALOG[endpoint];
483
+ if (!entry)
484
+ return;
485
+ return { endpoint, ...entry };
486
+ }
487
+ export function listFilterEndpoints() {
488
+ return Object.keys(CATALOG).sort();
489
+ }
490
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/services/brapi-filters/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the BrAPI filter catalog.
3
+ *
4
+ * @module services/brapi-filters
5
+ */
6
+ export { getFilterCatalog, listFilterEndpoints } from './catalog.js';
7
+ export type { FilterCatalog, FilterDescriptor, FilterType } from './types.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/brapi-filters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Public API barrel for the BrAPI filter catalog.
3
+ *
4
+ * @module services/brapi-filters
5
+ */
6
+ export { getFilterCatalog, listFilterEndpoints } from './catalog.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/brapi-filters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Types for the BrAPI filter catalog — the static map of
3
+ * endpoint → valid filter names used by `brapi_describe_filters` and the
4
+ * `extraFilters` passthrough on `find_*` tools.
5
+ *
6
+ * @module services/brapi-filters/types
7
+ */
8
+ export type FilterType = 'string' | 'integer' | 'number' | 'boolean' | 'date' | 'string[]' | 'integer[]';
9
+ export interface FilterDescriptor {
10
+ description: string;
11
+ /** Example value, always stringified — renderable directly in tool output. */
12
+ example: string;
13
+ /** Filter parameter name (matches what BrAPI accepts on the query string). */
14
+ name: string;
15
+ type: FilterType;
16
+ }
17
+ export interface FilterCatalog {
18
+ endpoint: string;
19
+ filters: FilterDescriptor[];
20
+ /** Pointer to the BrAPI v2 spec section covering this endpoint. */
21
+ specReference?: string;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/brapi-filters/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,UAAU,GACV,WAAW,CAAC;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Types for the BrAPI filter catalog — the static map of
3
+ * endpoint → valid filter names used by `brapi_describe_filters` and the
4
+ * `extraFilters` passthrough on `find_*` tools.
5
+ *
6
+ * @module services/brapi-filters/types
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/brapi-filters/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview Capability profile loader + cache for BrAPI servers. Pulls
3
+ * `/serverinfo`, `/calls`, and `/commoncropnames` on first use (or refresh),
4
+ * normalizes the shape, and stores the result in tenant-scoped state. Tools
5
+ * consult this before routing requests — if a required endpoint isn't in the
6
+ * server's capability set, the service surfaces a clear `ValidationError`
7
+ * instead of letting the call fail downstream.
8
+ *
9
+ * @module services/capability-registry/capability-registry
10
+ */
11
+ import type { Context } from '@cyanheads/mcp-ts-core';
12
+ import type { ServerConfig } from '../../config/server-config.js';
13
+ import { type BrapiClient, type BrapiRequestOptions } from '../../services/brapi-client/index.js';
14
+ import type { CallDescriptor, CapabilityProfile, EndpointProbe } from './types.js';
15
+ export interface CapabilityLookupOptions extends Pick<BrapiRequestOptions, 'auth'> {
16
+ /** Force a fresh fetch, bypassing the cached profile. */
17
+ forceRefresh?: boolean;
18
+ }
19
+ export declare class CapabilityRegistry {
20
+ private readonly serverConfig;
21
+ private readonly client;
22
+ constructor(serverConfig: ServerConfig, client?: () => BrapiClient);
23
+ /**
24
+ * Load the capability profile for a base URL. Returns the cached profile
25
+ * when present and not expired; otherwise fetches fresh and caches it.
26
+ */
27
+ profile(baseUrl: string, ctx: Context, options?: CapabilityLookupOptions): Promise<CapabilityProfile>;
28
+ /**
29
+ * Throw a `ValidationError` if the requested endpoint (service + optional
30
+ * HTTP method) is not in the server's capability set. Tools call this
31
+ * before routing requests so missing-capability errors surface early with
32
+ * a clear recovery hint.
33
+ */
34
+ ensure(baseUrl: string, probe: EndpointProbe, ctx: Context, options?: CapabilityLookupOptions): Promise<CallDescriptor>;
35
+ /** Drop the cached profile for a base URL (e.g. on explicit reconnect). */
36
+ invalidate(baseUrl: string, ctx: Context): Promise<void>;
37
+ private fetchProfile;
38
+ /**
39
+ * `/calls` fallback — some servers don't embed calls in `/serverinfo` and
40
+ * expect clients to hit the dedicated endpoint. Degrades to an empty list
41
+ * if the server lacks this too; downstream `ensure()` will surface the
42
+ * missing-capability error with a useful message.
43
+ */
44
+ private fetchCallsFallback;
45
+ private fetchCrops;
46
+ private cacheKey;
47
+ }
48
+ export declare function initCapabilityRegistry(serverConfig: ServerConfig): void;
49
+ export declare function getCapabilityRegistry(): CapabilityRegistry;
50
+ export declare function resetCapabilityRegistry(): void;
51
+ //# sourceMappingURL=capability-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-registry.d.ts","sourceRoot":"","sources":["../../../src/services/capability-registry/capability-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,mBAAmB,EAEzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;IAChF,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAID,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,MAAM,WAA4B;IAG7D;;;OAGG;IACG,OAAO,CACX,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC;IAa7B;;;;;OAKG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,cAAc,CAAC;IA2B1B,2EAA2E;IACrE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhD,YAAY;IAkC1B;;;;;OAKG;YACW,kBAAkB;YAsBlB,UAAU;IAsBxB,OAAO,CAAC,QAAQ;CAGjB;AAoGD,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAEvE;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAO1D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}