@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,126 @@
1
+ /**
2
+ * @fileoverview `brapi_raw_search` — last-resort passthrough to any BrAPI
3
+ * `POST /search/{noun}` endpoint with async-search polling handled
4
+ * transparently. Returns the raw upstream envelope once the search completes.
5
+ * Emits a routing nudge when a curated goal-shaped tool covers the noun.
6
+ *
7
+ * @module mcp-server/tools/definitions/brapi-raw-search.tool
8
+ */
9
+ import { tool, z } from '@cyanheads/mcp-ts-core';
10
+ import { getBrapiClient, } from '../../../services/brapi-client/index.js';
11
+ import { DEFAULT_ALIAS, getServerRegistry } from '../../../services/server-registry/index.js';
12
+ import { AliasInput, buildRequestOptions } from '../shared/find-helpers.js';
13
+ import { suggestForSearch } from '../shared/raw-routing-hints.js';
14
+ const PaginationSchema = z
15
+ .object({
16
+ currentPage: z.number().describe('0-indexed page number the server returned.'),
17
+ pageSize: z.number().describe('Rows per page.'),
18
+ totalCount: z.number().describe('Total rows matching the query across all pages.'),
19
+ totalPages: z.number().describe('Total pages at the current pageSize.'),
20
+ })
21
+ .passthrough()
22
+ .optional()
23
+ .describe('BrAPI pagination block. Absent when the endpoint does not paginate.');
24
+ const OutputSchema = z.object({
25
+ alias: z.string().describe('Alias of the registered BrAPI connection the call used.'),
26
+ noun: z.string().describe('The `/search/{noun}` segment the body was posted to.'),
27
+ kind: z
28
+ .enum(['sync', 'async'])
29
+ .describe('Whether the server returned inline results or we polled an async search.'),
30
+ searchResultsDbId: z
31
+ .string()
32
+ .optional()
33
+ .describe('Populated when the server returned an async searchResultsDbId.'),
34
+ metadata: z
35
+ .object({
36
+ pagination: PaginationSchema,
37
+ })
38
+ .passthrough()
39
+ .describe('BrAPI envelope metadata (pagination and any additional upstream fields).'),
40
+ result: z.unknown().describe('Raw BrAPI `result` value — whatever shape the endpoint returns.'),
41
+ suggestion: z
42
+ .string()
43
+ .optional()
44
+ .describe('Emitted when a curated goal-shaped tool covers this search.'),
45
+ });
46
+ export const brapiRawSearch = tool('brapi_raw_search', {
47
+ description: 'Passthrough to any BrAPI POST /search/{noun} endpoint, returning the resolved envelope (async polling resolved upstream). Raw passthrough — no distributions, foreign-key resolution, or dataset spillover applied.',
48
+ annotations: { readOnlyHint: true, openWorldHint: true },
49
+ input: z.object({
50
+ alias: AliasInput,
51
+ noun: z
52
+ .string()
53
+ .min(1)
54
+ .regex(/^[a-zA-Z0-9_-]+$/)
55
+ .describe('Search noun — e.g. "observations", "calls", "germplasm".'),
56
+ body: z
57
+ .record(z.string(), z.unknown())
58
+ .describe('Filter body passed verbatim to POST /search/{noun}.'),
59
+ }),
60
+ output: OutputSchema,
61
+ async handler(input, ctx) {
62
+ const registry = getServerRegistry();
63
+ const client = getBrapiClient();
64
+ const connection = await registry.get(ctx, input.alias ?? DEFAULT_ALIAS);
65
+ const requestOptions = {};
66
+ if (connection.resolvedAuth)
67
+ requestOptions.auth = connection.resolvedAuth;
68
+ const response = await client.postSearch(connection.baseUrl, input.noun, input.body, ctx, requestOptions);
69
+ let envelope;
70
+ let kind;
71
+ let searchResultsDbId;
72
+ if (response.kind === 'sync') {
73
+ envelope = response.envelope;
74
+ kind = 'sync';
75
+ }
76
+ else {
77
+ searchResultsDbId = response.searchResultsDbId;
78
+ envelope = await client.getSearchResults(connection.baseUrl, input.noun, response.searchResultsDbId, ctx, buildRequestOptions(connection));
79
+ kind = 'async';
80
+ }
81
+ const result = {
82
+ alias: connection.alias,
83
+ noun: input.noun,
84
+ kind,
85
+ metadata: buildMetadata(envelope.metadata),
86
+ result: envelope.result,
87
+ };
88
+ if (searchResultsDbId !== undefined)
89
+ result.searchResultsDbId = searchResultsDbId;
90
+ const suggestion = suggestForSearch(input.noun);
91
+ if (suggestion)
92
+ result.suggestion = suggestion;
93
+ return result;
94
+ },
95
+ format: (result) => {
96
+ const lines = [];
97
+ lines.push(`# POST /search/${result.noun} (${result.kind}) — \`${result.alias}\``);
98
+ if (result.searchResultsDbId) {
99
+ lines.push('');
100
+ lines.push(`**searchResultsDbId:** \`${result.searchResultsDbId}\``);
101
+ }
102
+ const pagination = result.metadata.pagination;
103
+ if (pagination) {
104
+ lines.push('');
105
+ lines.push(`**Pagination:** page ${pagination.currentPage} of ${pagination.totalPages}, pageSize=${pagination.pageSize}, totalCount=${pagination.totalCount}`);
106
+ }
107
+ if (result.suggestion) {
108
+ lines.push('');
109
+ lines.push(`**Suggestion:** ${result.suggestion}`);
110
+ }
111
+ lines.push('');
112
+ lines.push('## Raw result');
113
+ lines.push('```json');
114
+ lines.push(JSON.stringify(result.result, null, 2));
115
+ lines.push('```');
116
+ return [{ type: 'text', text: lines.join('\n') }];
117
+ },
118
+ });
119
+ function buildMetadata(metadata) {
120
+ const pagination = metadata?.pagination;
121
+ if (pagination) {
122
+ return { pagination: { ...pagination } };
123
+ }
124
+ return {};
125
+ }
126
+ //# sourceMappingURL=brapi-raw-search.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-raw-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-raw-search.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @fileoverview `brapi_server_info` — on-demand orientation envelope for the
3
+ * active (or aliased) connection. Returns the same shape that `brapi_connect`
4
+ * inlines. Useful for refreshing capability data after a long session or
5
+ * when switching between registered aliases.
6
+ *
7
+ * @module mcp-server/tools/definitions/brapi-server-info.tool
8
+ */
9
+ import { z } from '@cyanheads/mcp-ts-core';
10
+ export declare const brapiServerInfo: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
11
+ alias: z.ZodOptional<z.ZodString>;
12
+ forceRefresh: z.ZodDefault<z.ZodBoolean>;
13
+ }, z.core.$strip>, z.ZodObject<{
14
+ alias: z.ZodString;
15
+ baseUrl: z.ZodString;
16
+ server: z.ZodObject<{
17
+ name: z.ZodOptional<z.ZodString>;
18
+ description: z.ZodOptional<z.ZodString>;
19
+ organizationName: z.ZodOptional<z.ZodString>;
20
+ organizationURL: z.ZodOptional<z.ZodString>;
21
+ documentationURL: z.ZodOptional<z.ZodString>;
22
+ contactEmail: z.ZodOptional<z.ZodString>;
23
+ brapiVersion: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ auth: z.ZodObject<{
26
+ mode: z.ZodEnum<{
27
+ none: "none";
28
+ sgn: "sgn";
29
+ oauth2: "oauth2";
30
+ api_key: "api_key";
31
+ bearer: "bearer";
32
+ }>;
33
+ headerName: z.ZodOptional<z.ZodString>;
34
+ expiresAt: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>;
36
+ capabilities: z.ZodObject<{
37
+ supportedCount: z.ZodNumber;
38
+ supported: z.ZodArray<z.ZodString>;
39
+ notableGaps: z.ZodArray<z.ZodString>;
40
+ }, z.core.$strip>;
41
+ content: z.ZodObject<{
42
+ crops: z.ZodArray<z.ZodString>;
43
+ studyCount: z.ZodOptional<z.ZodNumber>;
44
+ germplasmCount: z.ZodOptional<z.ZodNumber>;
45
+ programCount: z.ZodOptional<z.ZodNumber>;
46
+ locationCount: z.ZodOptional<z.ZodNumber>;
47
+ }, z.core.$strip>;
48
+ notes: z.ZodArray<z.ZodString>;
49
+ fetchedAt: z.ZodString;
50
+ }, z.core.$strip>, undefined>;
51
+ //# sourceMappingURL=brapi-server-info.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-server-info.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-server-info.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAUjD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAkC1B,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @fileoverview `brapi_server_info` — on-demand orientation envelope for the
3
+ * active (or aliased) connection. Returns the same shape that `brapi_connect`
4
+ * inlines. Useful for refreshing capability data after a long session or
5
+ * when switching between registered aliases.
6
+ *
7
+ * @module mcp-server/tools/definitions/brapi-server-info.tool
8
+ */
9
+ import { tool, z } from '@cyanheads/mcp-ts-core';
10
+ import { getBrapiClient } from '../../../services/brapi-client/index.js';
11
+ import { getCapabilityRegistry } from '../../../services/capability-registry/index.js';
12
+ import { DEFAULT_ALIAS, getServerRegistry } from '../../../services/server-registry/index.js';
13
+ import { buildOrientationEnvelope, formatOrientationEnvelope, OrientationEnvelopeSchema, } from '../shared/orientation-envelope.js';
14
+ export const brapiServerInfo = tool('brapi_server_info', {
15
+ description: 'Return the full orientation envelope for a registered BrAPI connection — server identity, capabilities, content counts, and notes. Re-running refreshes the cached capability scan; pass an alias to read a non-default connection.',
16
+ annotations: { readOnlyHint: true, idempotentHint: true },
17
+ input: z.object({
18
+ alias: z
19
+ .string()
20
+ .regex(/^[a-zA-Z0-9_-]+$/)
21
+ .optional()
22
+ .describe('Connection alias. Omit to use the default connection from the most recent `brapi_connect` call.'),
23
+ forceRefresh: z
24
+ .boolean()
25
+ .default(false)
26
+ .describe('Bypass the cached capability profile and refetch from the server.'),
27
+ }),
28
+ output: OrientationEnvelopeSchema,
29
+ async handler(input, ctx) {
30
+ const registry = getServerRegistry();
31
+ const capabilities = getCapabilityRegistry();
32
+ const client = getBrapiClient();
33
+ const connection = await registry.get(ctx, input.alias ?? DEFAULT_ALIAS);
34
+ if (input.forceRefresh) {
35
+ await capabilities.invalidate(connection.baseUrl, ctx);
36
+ }
37
+ return buildOrientationEnvelope(ctx, connection, { registry: capabilities, client });
38
+ },
39
+ format: (result) => [{ type: 'text', text: formatOrientationEnvelope(result) }],
40
+ });
41
+ //# sourceMappingURL=brapi-server-info.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-server-info.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-server-info.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE;IACvD,WAAW,EACT,qOAAqO;IACvO,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,KAAK,CAAC,kBAAkB,CAAC;aACzB,QAAQ,EAAE;aACV,QAAQ,CACP,iGAAiG,CAClG;QACH,YAAY,EAAE,CAAC;aACZ,OAAO,EAAE;aACT,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,mEAAmE,CAAC;KACjF,CAAC;IACF,MAAM,EAAE,yBAAyB;IAEjC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QAEzE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,wBAAwB,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;CAChF,CAAC,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @fileoverview `brapi_submit_observations` — submit new or updated
3
+ * observations for a study. Two-phase write: `mode: 'preview'` validates rows
4
+ * against the study's observation variables and returns a routing breakdown
5
+ * (POST for new rows, PUT for rows carrying `observationDbId`); `mode: 'apply'`
6
+ * elicits confirmation when supported, fans the rows out to POST + PUT in
7
+ * parallel, then verifies the post-state with a cheap `pageSize=0` count.
8
+ * Additive write — no observation is destroyed by this tool.
9
+ *
10
+ * @module mcp-server/tools/definitions/brapi-submit-observations.tool
11
+ */
12
+ import { z } from '@cyanheads/mcp-ts-core';
13
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
14
+ export declare const brapiSubmitObservations: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
15
+ alias: z.ZodOptional<z.ZodString>;
16
+ studyDbId: z.ZodString;
17
+ observations: z.ZodArray<z.ZodObject<{
18
+ observationDbId: z.ZodOptional<z.ZodString>;
19
+ observationUnitDbId: z.ZodString;
20
+ observationVariableDbId: z.ZodString;
21
+ value: z.ZodString;
22
+ collector: z.ZodOptional<z.ZodString>;
23
+ observationTimeStamp: z.ZodOptional<z.ZodString>;
24
+ season: z.ZodOptional<z.ZodObject<{
25
+ seasonDbId: z.ZodOptional<z.ZodString>;
26
+ year: z.ZodOptional<z.ZodString>;
27
+ season: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>>;
29
+ geoCoordinates: z.ZodOptional<z.ZodObject<{
30
+ type: z.ZodLiteral<"Feature">;
31
+ geometry: z.ZodObject<{
32
+ type: z.ZodLiteral<"Point">;
33
+ coordinates: z.ZodArray<z.ZodNumber>;
34
+ }, z.core.$strip>;
35
+ }, z.core.$strip>>;
36
+ }, z.core.$strip>>;
37
+ mode: z.ZodDefault<z.ZodEnum<{
38
+ preview: "preview";
39
+ apply: "apply";
40
+ }>>;
41
+ force: z.ZodDefault<z.ZodBoolean>;
42
+ }, z.core.$strip>, z.ZodObject<{
43
+ alias: z.ZodString;
44
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
45
+ mode: z.ZodLiteral<"preview">;
46
+ studyDbId: z.ZodString;
47
+ studyName: z.ZodOptional<z.ZodString>;
48
+ valid: z.ZodNumber;
49
+ invalid: z.ZodNumber;
50
+ routing: z.ZodObject<{
51
+ postCount: z.ZodNumber;
52
+ putCount: z.ZodNumber;
53
+ }, z.core.$strip>;
54
+ perRowWarnings: z.ZodArray<z.ZodObject<{
55
+ rowIndex: z.ZodNumber;
56
+ observationVariableDbId: z.ZodOptional<z.ZodString>;
57
+ observationUnitDbId: z.ZodOptional<z.ZodString>;
58
+ warning: z.ZodString;
59
+ }, z.core.$strip>>;
60
+ knownVariableCount: z.ZodNumber;
61
+ }, z.core.$strip>, z.ZodObject<{
62
+ mode: z.ZodLiteral<"apply">;
63
+ studyDbId: z.ZodString;
64
+ studyName: z.ZodOptional<z.ZodString>;
65
+ posted: z.ZodArray<z.ZodObject<{
66
+ observationDbId: z.ZodOptional<z.ZodString>;
67
+ observationUnitDbId: z.ZodOptional<z.ZodString>;
68
+ observationVariableDbId: z.ZodOptional<z.ZodString>;
69
+ value: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strip>>;
71
+ updated: z.ZodArray<z.ZodObject<{
72
+ observationDbId: z.ZodString;
73
+ observationUnitDbId: z.ZodOptional<z.ZodString>;
74
+ observationVariableDbId: z.ZodOptional<z.ZodString>;
75
+ value: z.ZodOptional<z.ZodString>;
76
+ }, z.core.$strip>>;
77
+ studyObservationCount: z.ZodOptional<z.ZodNumber>;
78
+ latestObservationTimestamp: z.ZodOptional<z.ZodString>;
79
+ perRowWarnings: z.ZodArray<z.ZodObject<{
80
+ rowIndex: z.ZodNumber;
81
+ observationVariableDbId: z.ZodOptional<z.ZodString>;
82
+ observationUnitDbId: z.ZodOptional<z.ZodString>;
83
+ warning: z.ZodString;
84
+ }, z.core.$strip>>;
85
+ }, z.core.$strip>], "mode">;
86
+ }, z.core.$strip>, readonly [{
87
+ readonly reason: "observations_unsupported";
88
+ readonly code: JsonRpcErrorCode.ValidationError;
89
+ readonly when: "BrAPI server does not advertise /observations";
90
+ readonly recovery: "Run brapi_server_info to inspect the advertised endpoints, or call brapi_connect with a different alias for a server that exposes /observations.";
91
+ }, {
92
+ readonly reason: "study_not_found";
93
+ readonly code: JsonRpcErrorCode.NotFound;
94
+ readonly when: "Upstream returned no study record for the requested studyDbId";
95
+ readonly recovery: "Verify the studyDbId on the target server, or run brapi_find_studies to discover valid IDs before retrying.";
96
+ }, {
97
+ readonly reason: "post_unsupported";
98
+ readonly code: JsonRpcErrorCode.ValidationError;
99
+ readonly when: "Server does not advertise POST on /observations but new rows were submitted";
100
+ readonly recovery: "Remove the rows that lack observationDbId (those are the new rows) before retrying, or connect to a different server that supports POST on /observations.";
101
+ }, {
102
+ readonly reason: "put_unsupported";
103
+ readonly code: JsonRpcErrorCode.ValidationError;
104
+ readonly when: "Server does not advertise PUT on /observations but update rows were submitted";
105
+ readonly recovery: "Connect to a different server that supports PUT on /observations — dropping observationDbId would route as POST and create duplicates instead of updating the existing rows.";
106
+ }, {
107
+ readonly reason: "elicit_unavailable";
108
+ readonly code: JsonRpcErrorCode.Forbidden;
109
+ readonly when: "Apply mode invoked but client does not expose ctx.elicit and force was false";
110
+ readonly recovery: "Set force=true only with explicit user authorization, or use a client that supports elicitation.";
111
+ }, {
112
+ readonly reason: "user_declined";
113
+ readonly code: JsonRpcErrorCode.Forbidden;
114
+ readonly when: "User declined the elicitation prompt for the apply write";
115
+ readonly recovery: "Re-run the tool when the user is ready to confirm the write.";
116
+ }]>;
117
+ //# sourceMappingURL=brapi-submit-observations.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brapi-submit-observations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-submit-observations.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA2C,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAkOjE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsSlC,CAAC"}