@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,63 @@
1
+ /**
2
+ * @fileoverview `brapi_find_locations` — find research stations / field sites
3
+ * by country, abbreviation, type, or free-text. Supports a client-side bbox
4
+ * filter (minLat/maxLat/minLon/maxLon) applied after the initial page load,
5
+ * since BrAPI doesn't define a spec-level bounding-box filter. Standard
6
+ * find_* pattern: distributions + dataset spillover.
7
+ *
8
+ * @module mcp-server/tools/definitions/brapi-find-locations.tool
9
+ */
10
+ import { z } from '@cyanheads/mcp-ts-core';
11
+ export declare const brapiFindLocations: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
12
+ alias: z.ZodOptional<z.ZodString>;
13
+ locations: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ locationNames: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ countryCodes: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ locationTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ abbreviations: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ bbox: z.ZodOptional<z.ZodObject<{
19
+ minLat: z.ZodOptional<z.ZodNumber>;
20
+ maxLat: z.ZodOptional<z.ZodNumber>;
21
+ minLon: z.ZodOptional<z.ZodNumber>;
22
+ maxLon: z.ZodOptional<z.ZodNumber>;
23
+ }, z.core.$strip>>;
24
+ loadLimit: z.ZodOptional<z.ZodNumber>;
25
+ extraFilters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ alias: z.ZodString;
28
+ results: z.ZodArray<z.ZodObject<{
29
+ locationDbId: z.ZodString;
30
+ locationName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ abbreviation: z.ZodOptional<z.ZodNullable<z.ZodString>>;
32
+ countryCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
33
+ countryName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
34
+ locationType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35
+ latitude: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
36
+ longitude: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
37
+ altitude: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
38
+ instituteName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
39
+ instituteAddress: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
+ documentationURL: z.ZodOptional<z.ZodNullable<z.ZodString>>;
41
+ }, z.core.$loose>>;
42
+ returnedCount: z.ZodNumber;
43
+ totalCount: z.ZodNumber;
44
+ hasMore: z.ZodBoolean;
45
+ distributions: z.ZodObject<{
46
+ countryCode: z.ZodRecord<z.ZodString, z.ZodNumber>;
47
+ locationType: z.ZodRecord<z.ZodString, z.ZodNumber>;
48
+ }, z.core.$strip>;
49
+ refinementHint: z.ZodOptional<z.ZodString>;
50
+ dataset: z.ZodOptional<z.ZodObject<{
51
+ datasetId: z.ZodString;
52
+ rowCount: z.ZodNumber;
53
+ sizeBytes: z.ZodNumber;
54
+ columns: z.ZodArray<z.ZodString>;
55
+ createdAt: z.ZodString;
56
+ expiresAt: z.ZodString;
57
+ truncated: z.ZodOptional<z.ZodBoolean>;
58
+ maxRows: z.ZodOptional<z.ZodNumber>;
59
+ }, z.core.$strip>>;
60
+ warnings: z.ZodArray<z.ZodString>;
61
+ appliedFilters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
62
+ }, z.core.$strip>, undefined>;
63
+ //# sourceMappingURL=brapi-find-locations.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-find-locations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-find-locations.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAyFjD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAkM7B,CAAC"}
@@ -0,0 +1,278 @@
1
+ /**
2
+ * @fileoverview `brapi_find_locations` — find research stations / field sites
3
+ * by country, abbreviation, type, or free-text. Supports a client-side bbox
4
+ * filter (minLat/maxLat/minLon/maxLon) applied after the initial page load,
5
+ * since BrAPI doesn't define a spec-level bounding-box filter. Standard
6
+ * find_* pattern: distributions + dataset spillover.
7
+ *
8
+ * @module mcp-server/tools/definitions/brapi-find-locations.tool
9
+ */
10
+ import { tool, z } from '@cyanheads/mcp-ts-core';
11
+ import { getServerConfig } from '../../../config/server-config.js';
12
+ import { getBrapiClient } from '../../../services/brapi-client/index.js';
13
+ import { getCapabilityRegistry } from '../../../services/capability-registry/index.js';
14
+ import { getDatasetStore } from '../../../services/dataset-store/index.js';
15
+ import { DEFAULT_ALIAS, getServerRegistry } from '../../../services/server-registry/index.js';
16
+ import { AliasInput, asString, buildRefinementHint, computeDistribution, DatasetHandleSchema, ExtraFiltersInput, LoadLimitInput, loadInitialPage, maybeSpill, mergeFilters, renderDatasetHandle, renderDistributions, } from '../shared/find-helpers.js';
17
+ const LocationRowSchema = z
18
+ .object({
19
+ locationDbId: z.string().describe('Server-side identifier for the location.'),
20
+ locationName: z.string().nullish().describe('Display name.'),
21
+ abbreviation: z.string().nullish().describe('Short abbreviation.'),
22
+ countryCode: z.string().nullish().describe('ISO 3166-1 alpha-3 country code.'),
23
+ countryName: z.string().nullish().describe('Display name of the country.'),
24
+ locationType: z
25
+ .string()
26
+ .nullish()
27
+ .describe('Type of location (e.g. "Research Station", "Field", "Greenhouse").'),
28
+ latitude: z.number().nullish().describe('WGS84 latitude in decimal degrees.'),
29
+ longitude: z.number().nullish().describe('WGS84 longitude in decimal degrees.'),
30
+ altitude: z.number().nullish().describe('Altitude in meters above sea level.'),
31
+ instituteName: z.string().nullish().describe('Owning institute display name.'),
32
+ instituteAddress: z.string().nullish().describe('Postal address of the institute.'),
33
+ documentationURL: z.string().nullish().describe('URL pointing at extra documentation.'),
34
+ })
35
+ .passthrough()
36
+ .describe('One BrAPI location record.');
37
+ const OutputSchema = z.object({
38
+ alias: z.string().describe('Alias of the registered BrAPI connection the call used.'),
39
+ results: z
40
+ .array(LocationRowSchema)
41
+ .describe('Location rows returned in-context (up to loadLimit). Bbox filter is applied after the upstream fetch.'),
42
+ returnedCount: z
43
+ .number()
44
+ .int()
45
+ .nonnegative()
46
+ .describe('Length of `results[]` after any bbox filtering.'),
47
+ totalCount: z
48
+ .number()
49
+ .int()
50
+ .nonnegative()
51
+ .describe('Total rows reported by the server (or the post-bbox count when a bbox filter is active).'),
52
+ hasMore: z.boolean().describe('True when more rows exist beyond the returned set.'),
53
+ distributions: z
54
+ .object({
55
+ countryCode: z
56
+ .record(z.string(), z.number())
57
+ .describe('ISO country code → count of locations in that country.'),
58
+ locationType: z
59
+ .record(z.string(), z.number())
60
+ .describe('Location type → count of locations of that type.'),
61
+ })
62
+ .describe('Value frequency per field across the full result set.'),
63
+ refinementHint: z
64
+ .string()
65
+ .optional()
66
+ .describe('Suggested next-step query refinement when the result set is large.'),
67
+ dataset: DatasetHandleSchema.optional().describe('Dataset handle when the full result set was persisted to DatasetStore.'),
68
+ warnings: z
69
+ .array(z.string())
70
+ .describe('Advisory messages (bbox malformed, filter overrides, capability gaps, etc.).'),
71
+ appliedFilters: z
72
+ .record(z.string(), z.unknown())
73
+ .describe('The final filter map sent to the server (named + extraFilters).'),
74
+ });
75
+ export const brapiFindLocations = tool('brapi_find_locations', {
76
+ description: 'Find research stations / field sites by country, abbreviation, type, location ID, or free-text. Optional bbox parameter restricts rows to a latitude/longitude window. Returns a dataset handle when the upstream total exceeds loadLimit.',
77
+ annotations: { readOnlyHint: true, openWorldHint: true },
78
+ input: z.object({
79
+ alias: AliasInput,
80
+ locations: z.array(z.string()).optional().describe('Filter by locationDbIds.'),
81
+ locationNames: z.array(z.string()).optional().describe('Filter by display name.'),
82
+ countryCodes: z.array(z.string()).optional().describe('ISO 3166-1 alpha-3 country codes.'),
83
+ locationTypes: z
84
+ .array(z.string())
85
+ .optional()
86
+ .describe('Location type — e.g. "Research Station", "Field".'),
87
+ abbreviations: z.array(z.string()).optional().describe('Short location abbreviations.'),
88
+ bbox: z
89
+ .object({
90
+ minLat: z
91
+ .number()
92
+ .min(-90)
93
+ .max(90)
94
+ .optional()
95
+ .describe('Minimum latitude in WGS84 decimal degrees.'),
96
+ maxLat: z
97
+ .number()
98
+ .min(-90)
99
+ .max(90)
100
+ .optional()
101
+ .describe('Maximum latitude in WGS84 decimal degrees.'),
102
+ minLon: z
103
+ .number()
104
+ .min(-180)
105
+ .max(180)
106
+ .optional()
107
+ .describe('Minimum longitude in WGS84 decimal degrees.'),
108
+ maxLon: z
109
+ .number()
110
+ .min(-180)
111
+ .max(180)
112
+ .optional()
113
+ .describe('Maximum longitude in WGS84 decimal degrees.'),
114
+ })
115
+ .optional()
116
+ .describe('Optional post-fetch bounding box. All four corners must be set to activate the filter.'),
117
+ loadLimit: LoadLimitInput,
118
+ extraFilters: ExtraFiltersInput,
119
+ }),
120
+ output: OutputSchema,
121
+ async handler(input, ctx) {
122
+ const registry = getServerRegistry();
123
+ const capabilities = getCapabilityRegistry();
124
+ const client = getBrapiClient();
125
+ const datasetStore = getDatasetStore();
126
+ const config = getServerConfig();
127
+ const connection = await registry.get(ctx, input.alias ?? DEFAULT_ALIAS);
128
+ const capabilityLookup = {};
129
+ if (connection.resolvedAuth)
130
+ capabilityLookup.auth = connection.resolvedAuth;
131
+ await capabilities.ensure(connection.baseUrl, { service: 'locations', method: 'GET' }, ctx, capabilityLookup);
132
+ const warnings = [];
133
+ const filters = mergeFilters({
134
+ locationDbIds: input.locations,
135
+ locationNames: input.locationNames,
136
+ countryCodes: input.countryCodes,
137
+ locationTypes: input.locationTypes,
138
+ abbreviations: input.abbreviations,
139
+ }, input.extraFilters, warnings);
140
+ const loadLimit = input.loadLimit ?? config.loadLimit;
141
+ const firstPage = await loadInitialPage(client, connection, '/locations', filters, loadLimit, ctx);
142
+ const { fullRows, dataset: datasetMeta } = await maybeSpill({
143
+ firstPage,
144
+ client,
145
+ connection,
146
+ path: '/locations',
147
+ filters,
148
+ source: 'find_locations',
149
+ loadLimit,
150
+ ctx,
151
+ store: datasetStore,
152
+ });
153
+ const bbox = normalizeBbox(input.bbox, warnings);
154
+ const filteredFull = bbox ? fullRows.filter((r) => insideBbox(r, bbox)) : fullRows;
155
+ const filteredReturned = bbox
156
+ ? firstPage.rows.filter((r) => insideBbox(r, bbox))
157
+ : firstPage.rows;
158
+ if (bbox && fullRows.length > 0 && filteredFull.length === 0) {
159
+ warnings.push(`bbox excluded all ${fullRows.length} upstream location(s). Verify the latitude/longitude window matches the server's coordinate convention.`);
160
+ }
161
+ else if (bbox && filteredFull.length < fullRows.length) {
162
+ warnings.push(`bbox excluded ${fullRows.length - filteredFull.length} of ${fullRows.length} upstream location(s).`);
163
+ }
164
+ const distributions = {
165
+ countryCode: computeDistribution(filteredFull, (r) => asString(r.countryCode)),
166
+ locationType: computeDistribution(filteredFull, (r) => asString(r.locationType)),
167
+ };
168
+ const totalCount = bbox ? filteredFull.length : (firstPage.totalCount ?? firstPage.rows.length);
169
+ const refinementHint = buildRefinementHint(totalCount, loadLimit, distributions);
170
+ const result = {
171
+ alias: connection.alias,
172
+ results: filteredReturned,
173
+ returnedCount: filteredReturned.length,
174
+ totalCount,
175
+ hasMore: firstPage.hasMore,
176
+ distributions,
177
+ warnings,
178
+ appliedFilters: filters,
179
+ };
180
+ if (refinementHint)
181
+ result.refinementHint = refinementHint;
182
+ if (datasetMeta)
183
+ result.dataset = datasetMeta;
184
+ return result;
185
+ },
186
+ format: (result) => {
187
+ const lines = [];
188
+ lines.push(`# ${result.returnedCount} of ${result.totalCount} locations — \`${result.alias}\``);
189
+ lines.push('');
190
+ if (result.hasMore) {
191
+ lines.push(`⚠ More rows exist beyond the returned set. ${result.dataset ? `Full set persisted as dataset \`${result.dataset.datasetId}\`.` : 'Narrow filters or raise loadLimit.'}`);
192
+ lines.push('');
193
+ }
194
+ if (result.refinementHint) {
195
+ lines.push(`**Refinement hint:** ${result.refinementHint}`);
196
+ lines.push('');
197
+ }
198
+ lines.push(`Applied filters: \`${JSON.stringify(result.appliedFilters)}\``);
199
+ lines.push('');
200
+ lines.push('## Distributions');
201
+ lines.push(renderDistributions(result.distributions) || '_No values to summarize._');
202
+ lines.push('');
203
+ lines.push('## Locations');
204
+ if (result.results.length === 0) {
205
+ lines.push('_No rows returned._');
206
+ }
207
+ else {
208
+ for (const loc of result.results) {
209
+ const parts = [`**${loc.locationName ?? loc.locationDbId}**`];
210
+ parts.push(`id=\`${loc.locationDbId}\``);
211
+ if (loc.abbreviation)
212
+ parts.push(`abbr=${loc.abbreviation}`);
213
+ if (loc.locationType)
214
+ parts.push(`type=${loc.locationType}`);
215
+ if (loc.countryCode)
216
+ parts.push(`country=${loc.countryCode}`);
217
+ if (loc.countryName)
218
+ parts.push(`countryName=${loc.countryName}`);
219
+ if (loc.latitude != null && loc.longitude != null) {
220
+ parts.push(`lat=${loc.latitude}`);
221
+ parts.push(`lon=${loc.longitude}`);
222
+ }
223
+ if (loc.altitude != null)
224
+ parts.push(`alt=${loc.altitude}`);
225
+ if (loc.instituteName)
226
+ parts.push(`institute=${loc.instituteName}`);
227
+ if (loc.instituteAddress)
228
+ parts.push(`addr=${loc.instituteAddress}`);
229
+ if (loc.documentationURL)
230
+ parts.push(`docs=${loc.documentationURL}`);
231
+ lines.push(`- ${parts.join(' · ')}`);
232
+ }
233
+ }
234
+ if (result.dataset) {
235
+ lines.push('');
236
+ lines.push('## Dataset handle');
237
+ lines.push(...renderDatasetHandle(result.dataset));
238
+ }
239
+ if (result.warnings.length > 0) {
240
+ lines.push('');
241
+ lines.push('## Warnings');
242
+ for (const w of result.warnings)
243
+ lines.push(`- ${w}`);
244
+ }
245
+ return [{ type: 'text', text: lines.join('\n') }];
246
+ },
247
+ });
248
+ function normalizeBbox(bbox, warnings) {
249
+ if (!bbox)
250
+ return;
251
+ const { minLat, maxLat, minLon, maxLon } = bbox;
252
+ if (minLat === undefined &&
253
+ maxLat === undefined &&
254
+ minLon === undefined &&
255
+ maxLon === undefined) {
256
+ return;
257
+ }
258
+ if (minLat === undefined ||
259
+ maxLat === undefined ||
260
+ minLon === undefined ||
261
+ maxLon === undefined) {
262
+ warnings.push('bbox ignored: all four corners (minLat, maxLat, minLon, maxLon) are required.');
263
+ return;
264
+ }
265
+ if (minLat > maxLat || minLon > maxLon) {
266
+ warnings.push('bbox ignored: min value exceeds max value on latitude or longitude.');
267
+ return;
268
+ }
269
+ return { minLat, maxLat, minLon, maxLon };
270
+ }
271
+ function insideBbox(row, bbox) {
272
+ const lat = row.latitude;
273
+ const lon = row.longitude;
274
+ if (typeof lat !== 'number' || typeof lon !== 'number')
275
+ return false;
276
+ return lat >= bbox.minLat && lat <= bbox.maxLat && lon >= bbox.minLon && lon <= bbox.maxLon;
277
+ }
278
+ //# sourceMappingURL=brapi-find-locations.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-find-locations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-find-locations.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @fileoverview `brapi_find_observations` — pull observation records filtered
3
+ * by study, germplasm, variable, season, or observation unit. Matches the
4
+ * find_* pattern: paged single pull capped at loadLimit, distributions across
5
+ * variable/study/germplasm/level, dataset spillover when the upstream total
6
+ * exceeds loadLimit.
7
+ *
8
+ * @module mcp-server/tools/definitions/brapi-find-observations.tool
9
+ */
10
+ import { z } from '@cyanheads/mcp-ts-core';
11
+ export declare const brapiFindObservations: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
12
+ alias: z.ZodOptional<z.ZodString>;
13
+ studies: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ germplasm: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ variables: z.ZodOptional<z.ZodArray<z.ZodString>>;
16
+ observationUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
+ observations: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ seasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ programs: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ trials: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
+ observationLevels: z.ZodOptional<z.ZodArray<z.ZodString>>;
22
+ timestampFrom: z.ZodOptional<z.ZodString>;
23
+ timestampTo: z.ZodOptional<z.ZodString>;
24
+ loadLimit: z.ZodOptional<z.ZodNumber>;
25
+ extraFilters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ alias: z.ZodString;
28
+ results: z.ZodArray<z.ZodObject<{
29
+ observationDbId: z.ZodOptional<z.ZodString>;
30
+ observationUnitDbId: z.ZodOptional<z.ZodString>;
31
+ observationUnitName: z.ZodOptional<z.ZodString>;
32
+ observationVariableDbId: z.ZodOptional<z.ZodString>;
33
+ observationVariableName: z.ZodOptional<z.ZodString>;
34
+ studyDbId: z.ZodOptional<z.ZodString>;
35
+ studyName: z.ZodOptional<z.ZodString>;
36
+ germplasmDbId: z.ZodOptional<z.ZodString>;
37
+ germplasmName: z.ZodOptional<z.ZodString>;
38
+ observationLevel: z.ZodOptional<z.ZodString>;
39
+ season: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
40
+ seasonDbId: z.ZodOptional<z.ZodString>;
41
+ year: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
42
+ season: z.ZodOptional<z.ZodString>;
43
+ seasonName: z.ZodOptional<z.ZodString>;
44
+ }, z.core.$loose>]>>;
45
+ value: z.ZodOptional<z.ZodString>;
46
+ observationTimeStamp: z.ZodOptional<z.ZodString>;
47
+ collector: z.ZodOptional<z.ZodString>;
48
+ uploadedBy: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$loose>>;
50
+ returnedCount: z.ZodNumber;
51
+ totalCount: z.ZodNumber;
52
+ hasMore: z.ZodBoolean;
53
+ distributions: z.ZodObject<{
54
+ observationVariableName: z.ZodRecord<z.ZodString, z.ZodNumber>;
55
+ studyName: z.ZodRecord<z.ZodString, z.ZodNumber>;
56
+ germplasmName: z.ZodRecord<z.ZodString, z.ZodNumber>;
57
+ observationLevel: z.ZodRecord<z.ZodString, z.ZodNumber>;
58
+ season: z.ZodRecord<z.ZodString, z.ZodNumber>;
59
+ }, z.core.$strip>;
60
+ refinementHint: z.ZodOptional<z.ZodString>;
61
+ dataset: z.ZodOptional<z.ZodObject<{
62
+ datasetId: z.ZodString;
63
+ rowCount: z.ZodNumber;
64
+ sizeBytes: z.ZodNumber;
65
+ columns: z.ZodArray<z.ZodString>;
66
+ createdAt: z.ZodString;
67
+ expiresAt: z.ZodString;
68
+ truncated: z.ZodOptional<z.ZodBoolean>;
69
+ maxRows: z.ZodOptional<z.ZodNumber>;
70
+ }, z.core.$strip>>;
71
+ warnings: z.ZodArray<z.ZodString>;
72
+ appliedFilters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
73
+ }, z.core.$strip>, undefined>;
74
+ //# sourceMappingURL=brapi-find-observations.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-find-observations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-find-observations.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA8HjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA2KhC,CAAC"}