@cyanheads/brapi-mcp-server 0.7.9 → 0.7.11

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 (105) hide show
  1. package/CLAUDE.md +18 -13
  2. package/Dockerfile +19 -5
  3. package/README.md +6 -3
  4. package/changelog/0.7.x/0.7.10.md +12 -0
  5. package/changelog/0.7.x/0.7.11.md +43 -0
  6. package/changelog/template.md +55 -16
  7. package/dist/config/alias-credentials.js.map +1 -1
  8. package/dist/config/builtin-aliases.js.map +1 -1
  9. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts +3 -3
  10. package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts.map +1 -1
  11. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts +3 -3
  12. package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts.map +1 -1
  13. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts +6 -6
  14. package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts.map +1 -1
  15. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts +3 -3
  16. package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts.map +1 -1
  17. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts +6 -6
  18. package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts.map +1 -1
  19. package/dist/mcp-server/resources/definitions/brapi-variable.resource.d.ts +6 -6
  20. package/dist/mcp-server/resources/definitions/brapi-variable.resource.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.d.ts +19 -14
  22. package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.js +59 -19
  24. package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts +12 -12
  26. package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts +2 -2
  28. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts.map +1 -1
  29. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts +14 -14
  30. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts +9 -4
  32. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts.map +1 -1
  33. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js +31 -0
  34. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js.map +1 -1
  35. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts +6 -6
  36. package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts.map +1 -1
  37. package/dist/mcp-server/tools/definitions/brapi-export-genotype-matrix.tool.d.ts +11 -11
  38. package/dist/mcp-server/tools/definitions/brapi-export-genotype-matrix.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +11 -11
  40. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -1
  41. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +6 -6
  42. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -1
  43. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +6 -6
  44. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -1
  45. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +6 -6
  46. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -1
  47. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +6 -6
  48. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -1
  49. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +6 -6
  50. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -1
  51. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +7 -7
  52. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -1
  53. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +6 -6
  54. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -1
  55. package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.d.ts +6 -6
  56. package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.d.ts.map +1 -1
  57. package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.js +27 -28
  58. package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.js.map +1 -1
  59. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts +6 -6
  60. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -1
  61. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts +6 -6
  62. package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts.map +1 -1
  63. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts +6 -6
  64. package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts.map +1 -1
  65. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +6 -6
  66. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -1
  67. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +7 -7
  68. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -1
  69. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts +9 -9
  70. package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts.map +1 -1
  71. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts +23 -27
  72. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts.map +1 -1
  73. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js +41 -55
  74. package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js.map +1 -1
  75. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts +8 -8
  76. package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts.map +1 -1
  77. package/dist/mcp-server/tools/definitions/index.d.ts +829 -824
  78. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  79. package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -1
  80. package/dist/mcp-server/tools/shared/observations.d.ts +67 -0
  81. package/dist/mcp-server/tools/shared/observations.d.ts.map +1 -1
  82. package/dist/mcp-server/tools/shared/observations.js +56 -0
  83. package/dist/mcp-server/tools/shared/observations.js.map +1 -1
  84. package/dist/mcp-server/tools/shared/orientation-envelope.d.ts +12 -12
  85. package/dist/services/brapi-client/brapi-client.d.ts +2 -3
  86. package/dist/services/brapi-client/brapi-client.d.ts.map +1 -1
  87. package/dist/services/brapi-client/brapi-client.js +11 -14
  88. package/dist/services/brapi-client/brapi-client.js.map +1 -1
  89. package/dist/services/brapi-client/types.d.ts +1 -1
  90. package/dist/services/brapi-dialect/detect.js.map +1 -1
  91. package/dist/services/brapi-dialect/index.js.map +1 -1
  92. package/dist/services/canvas-bridge/canvas-bridge.d.ts +1 -1
  93. package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -1
  94. package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -1
  95. package/dist/services/capability-registry/capability-registry.d.ts.map +1 -1
  96. package/dist/services/capability-registry/capability-registry.js.map +1 -1
  97. package/dist/services/ontology-resolver/ontology-resolver.d.ts.map +1 -1
  98. package/dist/services/ontology-resolver/ontology-resolver.js.map +1 -1
  99. package/dist/services/reference-data-cache/reference-data-cache.d.ts.map +1 -1
  100. package/dist/services/reference-data-cache/reference-data-cache.js.map +1 -1
  101. package/dist/services/server-registry/server-registry.d.ts.map +1 -1
  102. package/dist/services/server-registry/server-registry.js.map +1 -1
  103. package/manifest.json +1 -1
  104. package/package.json +11 -11
  105. package/server.json +3 -3
@@ -25,13 +25,13 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
25
25
  filters: import("zod").ZodArray<import("zod").ZodObject<{
26
26
  name: import("zod").ZodString;
27
27
  type: import("zod").ZodEnum<{
28
- string: "string";
29
- number: "number";
30
28
  boolean: "boolean";
31
29
  date: "date";
32
30
  integer: "integer";
33
- "string[]": "string[]";
34
31
  "integer[]": "integer[]";
32
+ number: "number";
33
+ string: "string";
34
+ "string[]": "string[]";
35
35
  }>;
36
36
  description: import("zod").ZodString;
37
37
  example: import("zod").ZodString;
@@ -39,128 +39,10 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
39
39
  specReference: import("zod").ZodOptional<import("zod").ZodString>;
40
40
  availableEndpoints: import("zod").ZodArray<import("zod").ZodString>;
41
41
  }, import("zod/v4/core").$strip>, readonly [{
42
- readonly reason: "unknown_endpoint";
43
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
44
- readonly when: "No filter catalog is registered for the requested endpoint";
45
- readonly recovery: "Pick an endpoint from data.availableEndpoints — same set as the input enum (studies, germplasm, observations, variables, images, variants, locations).";
46
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
47
- germplasmDbId: import("zod").ZodString;
48
- alias: import("zod").ZodOptional<import("zod").ZodString>;
49
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
50
- alias: import("zod").ZodString;
51
- germplasm: import("zod").ZodObject<{
52
- germplasmDbId: import("zod").ZodString;
53
- germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
54
- germplasmPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
55
- commonCropName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
56
- accessionNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
57
- genus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
58
- species: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
59
- subtaxa: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
60
- defaultDisplayName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
61
- pedigree: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
62
- biologicalStatusOfAccessionDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
63
- germplasmOrigin: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>>;
64
- countryOfOriginCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
65
- collection: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
66
- instituteCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
67
- instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
68
- synonyms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
69
- synonym: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
70
- type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
71
- }, import("zod/v4/core").$loose>>>>;
72
- }, import("zod/v4/core").$loose>;
73
- parents: import("zod").ZodArray<import("zod").ZodObject<{
74
- germplasmDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
75
- germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
76
- parentType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
77
- }, import("zod/v4/core").$loose>>;
78
- attributes: import("zod").ZodArray<import("zod").ZodObject<{
79
- attributeDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
80
- attributeName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
81
- attributeValue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
82
- determinedDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
83
- }, import("zod/v4/core").$loose>>;
84
- studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
85
- directParentCount: import("zod").ZodNumber;
86
- directDescendantCount: import("zod").ZodOptional<import("zod").ZodNumber>;
87
- warnings: import("zod").ZodArray<import("zod").ZodString>;
88
- }, import("zod/v4/core").$strip>, readonly [{
89
- readonly reason: "unknown_alias";
90
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
91
- readonly when: "No connection has been registered under the requested alias";
92
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_germplasm.";
93
- }, {
94
- readonly reason: "germplasm_not_found";
95
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
96
- readonly when: "Upstream returned no germplasm record for the requested DbId";
97
- readonly recovery: "Verify the germplasmDbId on the target server, or run brapi_find_germplasm to discover valid IDs.";
98
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
99
- alias: import("zod").ZodOptional<import("zod").ZodString>;
100
- forceRefresh: import("zod").ZodDefault<import("zod").ZodBoolean>;
101
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
102
- alias: import("zod").ZodString;
103
- baseUrl: import("zod").ZodString;
104
- server: import("zod").ZodObject<{
105
- name: import("zod").ZodOptional<import("zod").ZodString>;
106
- description: import("zod").ZodOptional<import("zod").ZodString>;
107
- organizationName: import("zod").ZodOptional<import("zod").ZodString>;
108
- organizationURL: import("zod").ZodOptional<import("zod").ZodString>;
109
- documentationURL: import("zod").ZodOptional<import("zod").ZodString>;
110
- contactEmail: import("zod").ZodOptional<import("zod").ZodString>;
111
- brapiVersion: import("zod").ZodOptional<import("zod").ZodString>;
112
- }, import("zod/v4/core").$strip>;
113
- auth: import("zod").ZodObject<{
114
- mode: import("zod").ZodEnum<{
115
- none: "none";
116
- sgn: "sgn";
117
- oauth2: "oauth2";
118
- api_key: "api_key";
119
- bearer: "bearer";
120
- }>;
121
- headerName: import("zod").ZodOptional<import("zod").ZodString>;
122
- expiresAt: import("zod").ZodOptional<import("zod").ZodString>;
123
- }, import("zod/v4/core").$strip>;
124
- capabilities: import("zod").ZodObject<{
125
- supportedCount: import("zod").ZodNumber;
126
- supported: import("zod").ZodArray<import("zod").ZodString>;
127
- notableGaps: import("zod").ZodArray<import("zod").ZodString>;
128
- }, import("zod/v4/core").$strip>;
129
- dialect: import("zod").ZodObject<{
130
- id: import("zod").ZodString;
131
- source: import("zod").ZodEnum<{
132
- "env-override": "env-override";
133
- "url-pattern": "url-pattern";
134
- "server-name": "server-name";
135
- "organization-name": "organization-name";
136
- fallback: "fallback";
137
- }>;
138
- envVar: import("zod").ZodString;
139
- disabledSearchEndpoints: import("zod").ZodArray<import("zod").ZodString>;
140
- notes: import("zod").ZodArray<import("zod").ZodString>;
141
- verifiedMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
142
- inferredMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
143
- }, import("zod/v4/core").$strip>;
144
- content: import("zod").ZodObject<{
145
- crops: import("zod").ZodArray<import("zod").ZodString>;
146
- studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
147
- germplasmCount: import("zod").ZodOptional<import("zod").ZodNumber>;
148
- programCount: import("zod").ZodOptional<import("zod").ZodNumber>;
149
- locationCount: import("zod").ZodOptional<import("zod").ZodNumber>;
150
- }, import("zod/v4/core").$strip>;
151
- attribution: import("zod").ZodOptional<import("zod").ZodObject<{
152
- homepage: import("zod").ZodString;
153
- license: import("zod").ZodString;
154
- citation: import("zod").ZodString;
155
- isDemo: import("zod").ZodOptional<import("zod").ZodBoolean>;
156
- }, import("zod/v4/core").$strip>>;
157
- notes: import("zod").ZodArray<import("zod").ZodString>;
158
- fetchedAt: import("zod").ZodString;
159
- }, import("zod/v4/core").$strip>, readonly [{
160
- readonly reason: "unknown_alias";
42
+ readonly reason: 'unknown_endpoint';
161
43
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
162
- readonly when: "No connection has been registered under the requested alias";
163
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_server_info.";
44
+ readonly when: 'No filter catalog is registered for the requested endpoint';
45
+ readonly recovery: 'Pick an endpoint from data.availableEndpoints same set as the input enum (studies, germplasm, observations, variables, images, variants, locations).';
164
46
  }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
165
47
  studyDbId: import("zod").ZodString;
166
48
  alias: import("zod").ZodOptional<import("zod").ZodString>;
@@ -221,50 +103,43 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
221
103
  variableCount: import("zod").ZodOptional<import("zod").ZodNumber>;
222
104
  warnings: import("zod").ZodArray<import("zod").ZodString>;
223
105
  }, import("zod/v4/core").$strip>, readonly [{
224
- readonly reason: "unknown_alias";
106
+ readonly reason: 'unknown_alias';
225
107
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
226
- readonly when: "No connection has been registered under the requested alias";
227
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_study.";
108
+ readonly when: 'No connection has been registered under the requested alias';
109
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_study.';
228
110
  }, {
229
- readonly reason: "study_not_found";
111
+ readonly reason: 'study_not_found';
230
112
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
231
- readonly when: "Upstream returned no study record for the requested DbId";
232
- readonly recovery: "Verify the studyDbId on the target server, or run brapi_find_studies to discover valid IDs.";
113
+ readonly when: 'Upstream returned no study record for the requested DbId';
114
+ readonly recovery: 'Verify the studyDbId on the target server, or run brapi_find_studies to discover valid IDs.';
233
115
  }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
234
116
  alias: import("zod").ZodOptional<import("zod").ZodString>;
235
- studies: import("zod").ZodArray<import("zod").ZodString>;
236
- variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
237
- germplasm: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
238
- shape: import("zod").ZodDefault<import("zod").ZodEnum<{
239
- wide: "wide";
240
- long: "long";
241
- }>>;
242
- aggregate: import("zod").ZodDefault<import("zod").ZodEnum<{
243
- all: "all";
244
- mean: "mean";
245
- median: "median";
246
- first: "first";
247
- }>>;
248
- loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
249
- extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
117
+ germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
118
+ variantSetDbId: import("zod").ZodString;
119
+ format: import("zod").ZodEnum<{
120
+ "matrix-json": "matrix-json";
121
+ plink: "plink";
122
+ "vcf-lite": "vcf-lite";
123
+ }>;
124
+ maxCalls: import("zod").ZodOptional<import("zod").ZodNumber>;
125
+ maxColumns: import("zod").ZodOptional<import("zod").ZodNumber>;
250
126
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
251
127
  alias: import("zod").ZodString;
252
- studies: import("zod").ZodArray<import("zod").ZodString>;
253
- shape: import("zod").ZodEnum<{
254
- wide: "wide";
255
- long: "long";
256
- }>;
257
- aggregate: import("zod").ZodEnum<{
258
- all: "all";
259
- mean: "mean";
260
- median: "median";
261
- first: "first";
128
+ format: import("zod").ZodEnum<{
129
+ "matrix-json": "matrix-json";
130
+ plink: "plink";
131
+ "vcf-lite": "vcf-lite";
262
132
  }>;
263
- observationCount: import("zod").ZodNumber;
264
- germplasmCount: import("zod").ZodNumber;
265
- variableCount: import("zod").ZodNumber;
266
- variableLegend: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
267
- dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
133
+ rowCount: import("zod").ZodNumber;
134
+ columnCount: import("zod").ZodNumber;
135
+ variantColumnLegend: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
136
+ callFormatting: import("zod").ZodObject<{
137
+ expandHomozygotes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
138
+ unknownString: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
139
+ sepPhased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
140
+ sepUnphased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
141
+ }, import("zod/v4/core").$strip>;
142
+ dataframe: import("zod").ZodObject<{
268
143
  tableName: import("zod").ZodString;
269
144
  rowCount: import("zod").ZodNumber;
270
145
  columns: import("zod").ZodArray<import("zod").ZodString>;
@@ -274,184 +149,66 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
274
149
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
275
150
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
276
151
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
277
- }, import("zod/v4/core").$strip>>;
152
+ }, import("zod/v4/core").$strip>;
153
+ vcf: import("zod").ZodOptional<import("zod").ZodString>;
154
+ ped: import("zod").ZodOptional<import("zod").ZodString>;
155
+ map: import("zod").ZodOptional<import("zod").ZodString>;
156
+ truncated: import("zod").ZodBoolean;
278
157
  warnings: import("zod").ZodArray<import("zod").ZodString>;
279
158
  }, import("zod/v4/core").$strip>, readonly [{
280
- readonly reason: "unknown_alias";
159
+ readonly reason: 'unknown_alias';
281
160
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
282
- readonly when: "No connection has been registered under the requested alias";
283
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_build_phenotype_matrix.";
161
+ readonly when: 'No connection has been registered under the requested alias';
162
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_export_genotype_matrix.';
284
163
  }, {
285
- readonly reason: "all_filters_dropped";
164
+ readonly reason: 'no_filters';
286
165
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
287
- readonly when: "The active dialect dropped every filter supplied — the call would silently widen to the unfiltered baseline";
288
- readonly recovery: "Drop unsupported filters or use studies / germplasm / variables to scope the query to supported filter paths on the active dialect.";
166
+ readonly when: 'No variantSetDbId was provided';
167
+ readonly recovery: 'Provide variantSetDbId before retrying unfiltered genotype-call pulls are too expensive.';
289
168
  }, {
290
- readonly reason: "no_observation_path";
291
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
292
- readonly when: "Neither /observations nor /observationunits returned data for any requested study after probing both paths";
293
- readonly recovery: "Verify the studyDbIds exist and the BrAPI server exposes /observations or /observationunits. Use brapi_server_info to inspect the capability list.";
169
+ readonly reason: 'search_endpoint_disabled';
170
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
171
+ readonly when: 'The active dialect declares POST /search/calls as known-dead on this server';
172
+ readonly recovery: 'Connect to a different BrAPI server that exposes a working /search/calls route genotype-call workflows are not viable here.';
294
173
  }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
295
- baseUrl: import("zod").ZodOptional<import("zod").ZodString>;
296
- auth: import("zod").ZodOptional<import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
297
- mode: import("zod").ZodLiteral<"none">;
298
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
299
- mode: import("zod").ZodLiteral<"bearer">;
300
- token: import("zod").ZodString;
301
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
302
- mode: import("zod").ZodLiteral<"api_key">;
303
- apiKey: import("zod").ZodString;
304
- headerName: import("zod").ZodOptional<import("zod").ZodString>;
305
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
306
- mode: import("zod").ZodLiteral<"sgn">;
307
- username: import("zod").ZodString;
308
- password: import("zod").ZodString;
309
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
310
- mode: import("zod").ZodLiteral<"oauth2">;
311
- clientId: import("zod").ZodString;
312
- clientSecret: import("zod").ZodString;
313
- tokenUrl: import("zod").ZodOptional<import("zod").ZodString>;
314
- }, import("zod/v4/core").$strip>], "mode">>;
315
- alias: import("zod").ZodDefault<import("zod").ZodString>;
174
+ alias: import("zod").ZodOptional<import("zod").ZodString>;
175
+ locations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
176
+ locationNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
177
+ countryCodes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
178
+ countryNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
179
+ locationTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
180
+ abbreviations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
181
+ bbox: import("zod").ZodOptional<import("zod").ZodObject<{
182
+ minLat: import("zod").ZodOptional<import("zod").ZodNumber>;
183
+ maxLat: import("zod").ZodOptional<import("zod").ZodNumber>;
184
+ minLon: import("zod").ZodOptional<import("zod").ZodNumber>;
185
+ maxLon: import("zod").ZodOptional<import("zod").ZodNumber>;
186
+ }, import("zod/v4/core").$strip>>;
187
+ loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
188
+ extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
316
189
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
317
190
  alias: import("zod").ZodString;
318
- baseUrl: import("zod").ZodString;
319
- server: import("zod").ZodObject<{
320
- name: import("zod").ZodOptional<import("zod").ZodString>;
321
- description: import("zod").ZodOptional<import("zod").ZodString>;
322
- organizationName: import("zod").ZodOptional<import("zod").ZodString>;
323
- organizationURL: import("zod").ZodOptional<import("zod").ZodString>;
324
- documentationURL: import("zod").ZodOptional<import("zod").ZodString>;
325
- contactEmail: import("zod").ZodOptional<import("zod").ZodString>;
326
- brapiVersion: import("zod").ZodOptional<import("zod").ZodString>;
327
- }, import("zod/v4/core").$strip>;
328
- auth: import("zod").ZodObject<{
329
- mode: import("zod").ZodEnum<{
330
- none: "none";
331
- sgn: "sgn";
332
- oauth2: "oauth2";
333
- api_key: "api_key";
334
- bearer: "bearer";
335
- }>;
336
- headerName: import("zod").ZodOptional<import("zod").ZodString>;
337
- expiresAt: import("zod").ZodOptional<import("zod").ZodString>;
338
- }, import("zod/v4/core").$strip>;
339
- capabilities: import("zod").ZodObject<{
340
- supportedCount: import("zod").ZodNumber;
341
- supported: import("zod").ZodArray<import("zod").ZodString>;
342
- notableGaps: import("zod").ZodArray<import("zod").ZodString>;
191
+ results: import("zod").ZodArray<import("zod").ZodObject<{
192
+ locationDbId: import("zod").ZodString;
193
+ locationName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
194
+ abbreviation: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
195
+ countryCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
196
+ countryName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
197
+ locationType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
198
+ latitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
199
+ longitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
200
+ altitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
201
+ coordinates: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>;
202
+ instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
203
+ instituteAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
204
+ documentationURL: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
205
+ }, import("zod/v4/core").$loose>>;
206
+ hasMore: import("zod").ZodBoolean;
207
+ distributions: import("zod").ZodObject<{
208
+ countryCode: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
209
+ locationType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
343
210
  }, import("zod/v4/core").$strip>;
344
- dialect: import("zod").ZodObject<{
345
- id: import("zod").ZodString;
346
- source: import("zod").ZodEnum<{
347
- "env-override": "env-override";
348
- "url-pattern": "url-pattern";
349
- "server-name": "server-name";
350
- "organization-name": "organization-name";
351
- fallback: "fallback";
352
- }>;
353
- envVar: import("zod").ZodString;
354
- disabledSearchEndpoints: import("zod").ZodArray<import("zod").ZodString>;
355
- notes: import("zod").ZodArray<import("zod").ZodString>;
356
- verifiedMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
357
- inferredMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
358
- }, import("zod/v4/core").$strip>;
359
- content: import("zod").ZodObject<{
360
- crops: import("zod").ZodArray<import("zod").ZodString>;
361
- studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
362
- germplasmCount: import("zod").ZodOptional<import("zod").ZodNumber>;
363
- programCount: import("zod").ZodOptional<import("zod").ZodNumber>;
364
- locationCount: import("zod").ZodOptional<import("zod").ZodNumber>;
365
- }, import("zod/v4/core").$strip>;
366
- attribution: import("zod").ZodOptional<import("zod").ZodObject<{
367
- homepage: import("zod").ZodString;
368
- license: import("zod").ZodString;
369
- citation: import("zod").ZodString;
370
- isDemo: import("zod").ZodOptional<import("zod").ZodBoolean>;
371
- }, import("zod/v4/core").$strip>>;
372
- notes: import("zod").ZodArray<import("zod").ZodString>;
373
- fetchedAt: import("zod").ZodString;
374
- }, import("zod/v4/core").$strip>, readonly [{
375
- readonly reason: "auth_token_exchange_failed";
376
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
377
- readonly when: "SGN or OAuth token exchange against the BrAPI /token endpoint failed";
378
- readonly recovery: "Verify the credentials and that the server exposes /token before retrying.";
379
- }, {
380
- readonly reason: "auth_no_access_token";
381
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
382
- readonly when: "Token endpoint responded but did not return an access_token";
383
- readonly recovery: "Confirm the credentials are valid and the upstream IdP issues access tokens for this grant.";
384
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
385
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
386
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
387
- tables: import("zod").ZodArray<import("zod").ZodObject<{
388
- name: import("zod").ZodString;
389
- rowCount: import("zod").ZodNumber;
390
- columns: import("zod").ZodArray<import("zod").ZodObject<{
391
- name: import("zod").ZodString;
392
- type: import("zod").ZodString;
393
- nullable: import("zod").ZodOptional<import("zod").ZodBoolean>;
394
- }, import("zod/v4/core").$strip>>;
395
- approxSizeBytes: import("zod").ZodOptional<import("zod").ZodNumber>;
396
- provenance: import("zod").ZodOptional<import("zod").ZodObject<{
397
- source: import("zod").ZodString;
398
- baseUrl: import("zod").ZodString;
399
- query: import("zod").ZodUnknown;
400
- createdAt: import("zod").ZodString;
401
- expiresAt: import("zod").ZodString;
402
- }, import("zod/v4/core").$strip>>;
403
- }, import("zod/v4/core").$strip>>;
404
- }, import("zod/v4/core").$strip>, readonly [{
405
- readonly reason: "list_all_disabled_on_shared_http";
406
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
407
- readonly when: "This server is running as a shared HTTP endpoint without per-caller auth — listing every dataframe would expose other concurrent clients' workspaces, since all callers resolve to one shared tenant.";
408
- readonly recovery: "Pass `dataframe` with a specific name — either from a prior find_* spillover result (`result.dataframe.tableName`) or one you registered via `brapi_dataframe_query` with `registerAs`. Listing all dataframes is not available on this deployment.";
409
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
410
- sql: import("zod").ZodString;
411
- registerAs: import("zod").ZodOptional<import("zod").ZodString>;
412
- preview: import("zod").ZodOptional<import("zod").ZodNumber>;
413
- rowLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
414
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
415
- rowCount: import("zod").ZodNumber;
416
- columns: import("zod").ZodArray<import("zod").ZodObject<{
417
- name: import("zod").ZodString;
418
- type: import("zod").ZodString;
419
- }, import("zod/v4/core").$strip>>;
420
- rows: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
421
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
422
- }, import("zod/v4/core").$strip>, readonly [{
423
- readonly reason: "sql_rejected";
424
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
425
- readonly when: "SQL violated read-only rules (multi-statement, non-SELECT, or disallowed operation)";
426
- readonly recovery: "Submit a single SELECT statement using only registered dataframes. For changes, use `registerAs` in this tool to materialize a result, or brapi_dataframe_drop to remove a dataframe.";
427
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
428
- alias: import("zod").ZodOptional<import("zod").ZodString>;
429
- germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
430
- variantSetDbId: import("zod").ZodString;
431
- format: import("zod").ZodEnum<{
432
- plink: "plink";
433
- "vcf-lite": "vcf-lite";
434
- "matrix-json": "matrix-json";
435
- }>;
436
- maxCalls: import("zod").ZodOptional<import("zod").ZodNumber>;
437
- maxColumns: import("zod").ZodOptional<import("zod").ZodNumber>;
438
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
439
- alias: import("zod").ZodString;
440
- format: import("zod").ZodEnum<{
441
- plink: "plink";
442
- "vcf-lite": "vcf-lite";
443
- "matrix-json": "matrix-json";
444
- }>;
445
- rowCount: import("zod").ZodNumber;
446
- columnCount: import("zod").ZodNumber;
447
- variantColumnLegend: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
448
- callFormatting: import("zod").ZodObject<{
449
- expandHomozygotes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
450
- unknownString: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
451
- sepPhased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
452
- sepUnphased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
453
- }, import("zod/v4/core").$strip>;
454
- dataframe: import("zod").ZodObject<{
211
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
455
212
  tableName: import("zod").ZodString;
456
213
  rowCount: import("zod").ZodNumber;
457
214
  columns: import("zod").ZodArray<import("zod").ZodString>;
@@ -461,65 +218,59 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
461
218
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
462
219
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
463
220
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
464
- }, import("zod/v4/core").$strip>;
465
- vcf: import("zod").ZodOptional<import("zod").ZodString>;
466
- ped: import("zod").ZodOptional<import("zod").ZodString>;
467
- map: import("zod").ZodOptional<import("zod").ZodString>;
468
- truncated: import("zod").ZodBoolean;
469
- warnings: import("zod").ZodArray<import("zod").ZodString>;
221
+ }, import("zod/v4/core").$strip>>;
222
+ coordinateAxisOrder: import("zod").ZodEnum<{
223
+ spec: "spec";
224
+ swapped: "swapped";
225
+ }>;
470
226
  }, import("zod/v4/core").$strip>, readonly [{
471
- readonly reason: "unknown_alias";
227
+ readonly reason: 'unknown_alias';
472
228
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
473
- readonly when: "No connection has been registered under the requested alias";
474
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_export_genotype_matrix.";
229
+ readonly when: 'No connection has been registered under the requested alias';
230
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_locations.';
475
231
  }, {
476
- readonly reason: "no_filters";
232
+ readonly reason: 'all_filters_dropped';
477
233
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
478
- readonly when: "No variantSetDbId was provided";
479
- readonly recovery: "Provide variantSetDbId before retryingunfiltered genotype-call pulls are too expensive.";
480
- }, {
481
- readonly reason: "search_endpoint_disabled";
482
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
483
- readonly when: "The active dialect declares POST /search/calls as known-dead on this server";
484
- readonly recovery: "Connect to a different BrAPI server that exposes a working /search/calls route — genotype-call workflows are not viable here.";
485
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
234
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
235
+ readonly recovery: 'Drop the unsupported filters and rescope by locations, locationNames, countryCodes, locationTypes, abbreviations, or bbox these filter paths are honored on the active dialect.';
236
+ }], {
237
+ readonly totalCount: import("zod").ZodNumber;
238
+ readonly returnedCount: import("zod").ZodNumber;
239
+ readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
240
+ readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
241
+ readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
242
+ readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
243
+ }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
486
244
  alias: import("zod").ZodOptional<import("zod").ZodString>;
487
- variantSetDbId: import("zod").ZodOptional<import("zod").ZodString>;
488
- variantSetDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
489
- germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
490
- callSetDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
491
- variantDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
492
- callFormat: import("zod").ZodOptional<import("zod").ZodEnum<{
493
- JSON: "JSON";
494
- VCF: "VCF";
495
- FLAPJACK: "FLAPJACK";
496
- DARTSEQ: "DARTSEQ";
497
- }>>;
245
+ variantSets: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
246
+ variants: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
247
+ references: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
248
+ referenceName: import("zod").ZodOptional<import("zod").ZodString>;
249
+ start: import("zod").ZodOptional<import("zod").ZodNumber>;
250
+ end: import("zod").ZodOptional<import("zod").ZodNumber>;
498
251
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
252
+ extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
499
253
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
500
254
  alias: import("zod").ZodString;
501
255
  results: import("zod").ZodArray<import("zod").ZodObject<{
502
- callSetDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
503
- callSetName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
504
- variantDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
505
- variantName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
506
- variantSetDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
507
- genotype: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
508
- values: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
509
- }, import("zod/v4/core").$loose>>>;
510
- genotypeValue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
511
- phaseSet: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
256
+ variantDbId: import("zod").ZodString;
257
+ variantNames: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
258
+ variantSetDbId: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>, import("zod").ZodNull]>>;
259
+ variantSetDbIds: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
260
+ variantType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
261
+ referenceBases: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
262
+ alternateBases: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
263
+ referenceName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
264
+ start: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
265
+ end: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
266
+ filtersPassed: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
267
+ filtersApplied: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
268
+ filtersFailed: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
512
269
  }, import("zod/v4/core").$loose>>;
513
270
  hasMore: import("zod").ZodBoolean;
514
- callFormatting: import("zod").ZodObject<{
515
- expandHomozygotes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
516
- unknownString: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
517
- sepPhased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
518
- sepUnphased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
519
- }, import("zod/v4/core").$strip>;
520
271
  distributions: import("zod").ZodObject<{
521
- callSetName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
522
- variantName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
272
+ variantType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
273
+ referenceName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
523
274
  variantSetDbId: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
524
275
  }, import("zod/v4/core").$strip>;
525
276
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
@@ -533,74 +284,42 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
533
284
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
534
285
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
535
286
  }, import("zod/v4/core").$strip>>;
536
- truncated: import("zod").ZodBoolean;
537
287
  }, import("zod/v4/core").$strip>, readonly [{
538
- readonly reason: "unknown_alias";
288
+ readonly reason: 'unknown_alias';
539
289
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
540
- readonly when: "No connection has been registered under the requested alias";
541
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_genotype_calls.";
290
+ readonly when: 'No connection has been registered under the requested alias';
291
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_variants.';
542
292
  }, {
543
- readonly reason: "no_filters";
293
+ readonly reason: 'all_filters_dropped';
544
294
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
545
- readonly when: "No variant set, germplasm, call set, or variant filter was provided";
546
- readonly recovery: "Provide variantSetDbId or germplasmDbIds before retryingunfiltered pulls are too expensive.";
547
- }, {
548
- readonly reason: "search_endpoint_disabled";
549
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
550
- readonly when: "The active dialect declares POST /search/calls as known-dead on this server";
551
- readonly recovery: "Connect to a different BrAPI server that exposes a working /search/calls route — genotype-call workflows are not viable here.";
295
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
296
+ readonly recovery: 'Drop the unsupported filters and rescope by variants, variantSets, references, or referenceName + start/endthese filter paths are honored on the active dialect.';
552
297
  }], {
553
298
  readonly totalCount: import("zod").ZodNumber;
554
299
  readonly returnedCount: import("zod").ZodNumber;
555
300
  readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
301
+ readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
556
302
  readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
557
303
  readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
558
304
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
559
305
  alias: import("zod").ZodOptional<import("zod").ZodString>;
560
- names: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
561
- germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
562
- germplasmPUIs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
563
- accessionNumbers: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
564
- crops: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
565
- synonyms: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
566
- collections: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
567
- genus: import("zod").ZodOptional<import("zod").ZodString>;
568
- species: import("zod").ZodOptional<import("zod").ZodString>;
569
- text: import("zod").ZodOptional<import("zod").ZodString>;
306
+ path: import("zod").ZodString;
307
+ params: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean, import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>]>>>;
570
308
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
571
- extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
572
309
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
573
310
  alias: import("zod").ZodString;
574
- results: import("zod").ZodArray<import("zod").ZodObject<{
575
- germplasmDbId: import("zod").ZodString;
576
- germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
577
- germplasmPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
578
- commonCropName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
579
- accessionNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
580
- genus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
581
- species: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
582
- subtaxa: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
583
- defaultDisplayName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
584
- pedigree: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
585
- biologicalStatusOfAccessionDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
586
- germplasmOrigin: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>>;
587
- countryOfOriginCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
588
- collection: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
589
- instituteCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
590
- instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
591
- synonyms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
592
- synonym: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
593
- type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
594
- }, import("zod/v4/core").$loose>>>>;
595
- }, import("zod/v4/core").$loose>>;
596
- hasMore: import("zod").ZodBoolean;
597
- distributions: import("zod").ZodObject<{
598
- commonCropName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
599
- genus: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
600
- species: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
601
- collection: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
602
- countryOfOriginCode: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
603
- }, import("zod/v4/core").$strip>;
311
+ url: import("zod").ZodString;
312
+ path: import("zod").ZodString;
313
+ metadata: import("zod").ZodObject<{
314
+ pagination: import("zod").ZodOptional<import("zod").ZodObject<{
315
+ currentPage: import("zod").ZodNumber;
316
+ pageSize: import("zod").ZodNumber;
317
+ totalCount: import("zod").ZodNumber;
318
+ totalPages: import("zod").ZodNumber;
319
+ }, import("zod/v4/core").$loose>>;
320
+ }, import("zod/v4/core").$loose>;
321
+ result: import("zod").ZodUnknown;
322
+ suggestion: import("zod").ZodOptional<import("zod").ZodString>;
604
323
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
605
324
  tableName: import("zod").ZodString;
606
325
  rowCount: import("zod").ZodNumber;
@@ -613,61 +332,139 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
613
332
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
614
333
  }, import("zod/v4/core").$strip>>;
615
334
  }, import("zod/v4/core").$strip>, readonly [{
616
- readonly reason: "unknown_alias";
617
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
618
- readonly when: "No connection has been registered under the requested alias";
619
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_germplasm.";
335
+ readonly reason: 'unknown_alias';
336
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
337
+ readonly when: 'No connection has been registered under the requested alias';
338
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_raw_get.';
339
+ }, {
340
+ readonly reason: 'cross_origin_path';
341
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
342
+ readonly when: 'path argument was a full URL instead of a relative BrAPI route';
343
+ readonly recovery: 'Pass a path like "/samples" or "/methods" — the connection alias supplies the baseUrl.';
344
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
345
+ baseUrl: import("zod").ZodOptional<import("zod").ZodString>;
346
+ auth: import("zod").ZodOptional<import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
347
+ mode: import("zod").ZodLiteral<"none">;
348
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
349
+ mode: import("zod").ZodLiteral<"bearer">;
350
+ token: import("zod").ZodString;
351
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
352
+ mode: import("zod").ZodLiteral<"api_key">;
353
+ apiKey: import("zod").ZodString;
354
+ headerName: import("zod").ZodOptional<import("zod").ZodString>;
355
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
356
+ mode: import("zod").ZodLiteral<"sgn">;
357
+ username: import("zod").ZodString;
358
+ password: import("zod").ZodString;
359
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
360
+ mode: import("zod").ZodLiteral<"oauth2">;
361
+ clientId: import("zod").ZodString;
362
+ clientSecret: import("zod").ZodString;
363
+ tokenUrl: import("zod").ZodOptional<import("zod").ZodString>;
364
+ }, import("zod/v4/core").$strip>], "mode">>;
365
+ alias: import("zod").ZodDefault<import("zod").ZodString>;
366
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
367
+ alias: import("zod").ZodString;
368
+ baseUrl: import("zod").ZodString;
369
+ server: import("zod").ZodObject<{
370
+ name: import("zod").ZodOptional<import("zod").ZodString>;
371
+ description: import("zod").ZodOptional<import("zod").ZodString>;
372
+ organizationName: import("zod").ZodOptional<import("zod").ZodString>;
373
+ organizationURL: import("zod").ZodOptional<import("zod").ZodString>;
374
+ documentationURL: import("zod").ZodOptional<import("zod").ZodString>;
375
+ contactEmail: import("zod").ZodOptional<import("zod").ZodString>;
376
+ brapiVersion: import("zod").ZodOptional<import("zod").ZodString>;
377
+ }, import("zod/v4/core").$strip>;
378
+ auth: import("zod").ZodObject<{
379
+ mode: import("zod").ZodEnum<{
380
+ api_key: "api_key";
381
+ bearer: "bearer";
382
+ none: "none";
383
+ oauth2: "oauth2";
384
+ sgn: "sgn";
385
+ }>;
386
+ headerName: import("zod").ZodOptional<import("zod").ZodString>;
387
+ expiresAt: import("zod").ZodOptional<import("zod").ZodString>;
388
+ }, import("zod/v4/core").$strip>;
389
+ capabilities: import("zod").ZodObject<{
390
+ supportedCount: import("zod").ZodNumber;
391
+ supported: import("zod").ZodArray<import("zod").ZodString>;
392
+ notableGaps: import("zod").ZodArray<import("zod").ZodString>;
393
+ }, import("zod/v4/core").$strip>;
394
+ dialect: import("zod").ZodObject<{
395
+ id: import("zod").ZodString;
396
+ source: import("zod").ZodEnum<{
397
+ "env-override": "env-override";
398
+ fallback: "fallback";
399
+ "organization-name": "organization-name";
400
+ "server-name": "server-name";
401
+ "url-pattern": "url-pattern";
402
+ }>;
403
+ envVar: import("zod").ZodString;
404
+ disabledSearchEndpoints: import("zod").ZodArray<import("zod").ZodString>;
405
+ notes: import("zod").ZodArray<import("zod").ZodString>;
406
+ verifiedMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
407
+ inferredMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
408
+ }, import("zod/v4/core").$strip>;
409
+ content: import("zod").ZodObject<{
410
+ crops: import("zod").ZodArray<import("zod").ZodString>;
411
+ studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
412
+ germplasmCount: import("zod").ZodOptional<import("zod").ZodNumber>;
413
+ programCount: import("zod").ZodOptional<import("zod").ZodNumber>;
414
+ locationCount: import("zod").ZodOptional<import("zod").ZodNumber>;
415
+ }, import("zod/v4/core").$strip>;
416
+ attribution: import("zod").ZodOptional<import("zod").ZodObject<{
417
+ homepage: import("zod").ZodString;
418
+ license: import("zod").ZodString;
419
+ citation: import("zod").ZodString;
420
+ isDemo: import("zod").ZodOptional<import("zod").ZodBoolean>;
421
+ }, import("zod/v4/core").$strip>>;
422
+ notes: import("zod").ZodArray<import("zod").ZodString>;
423
+ fetchedAt: import("zod").ZodString;
424
+ }, import("zod/v4/core").$strip>, readonly [{
425
+ readonly reason: 'auth_token_exchange_failed';
426
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
427
+ readonly when: 'SGN or OAuth token exchange against the BrAPI /token endpoint failed';
428
+ readonly recovery: 'Verify the credentials and that the server exposes /token before retrying.';
620
429
  }, {
621
- readonly reason: "all_filters_dropped";
622
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
623
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
624
- readonly recovery: "Drop the unsupported filters and rescope by names, germplasmDbIds, germplasmPUIs, accessionNumbers, crops, synonyms, genus, or species — these filter paths are honored on the active dialect.";
625
- }], {
626
- readonly totalCount: import("zod").ZodNumber;
627
- readonly returnedCount: import("zod").ZodNumber;
628
- readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
629
- readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
630
- readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
631
- readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
632
- }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
430
+ readonly reason: 'auth_no_access_token';
431
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
432
+ readonly when: 'Token endpoint responded but did not return an access_token';
433
+ readonly recovery: 'Confirm the credentials are valid and the upstream IdP issues access tokens for this grant.';
434
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
633
435
  alias: import("zod").ZodOptional<import("zod").ZodString>;
634
- images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
635
- observationUnits: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
636
- observations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
637
- studies: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
638
- imageFileNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
639
- mimeTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
640
- descriptiveOntologyTerms: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
436
+ studies: import("zod").ZodArray<import("zod").ZodString>;
437
+ variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
438
+ germplasm: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
439
+ shape: import("zod").ZodDefault<import("zod").ZodEnum<{
440
+ long: "long";
441
+ wide: "wide";
442
+ }>>;
443
+ aggregate: import("zod").ZodDefault<import("zod").ZodEnum<{
444
+ all: "all";
445
+ first: "first";
446
+ mean: "mean";
447
+ median: "median";
448
+ }>>;
641
449
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
642
450
  extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
643
451
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
644
452
  alias: import("zod").ZodString;
645
- results: import("zod").ZodArray<import("zod").ZodObject<{
646
- imageDbId: import("zod").ZodString;
647
- imageName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
648
- imageFileName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
649
- imageFileSize: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
650
- imageHeight: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
651
- imageWidth: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
652
- mimeType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
653
- imageTimeStamp: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
654
- imageURL: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
655
- observationUnitDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
656
- observationUnitName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
657
- observationDbIds: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
658
- studyDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
659
- studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
660
- descriptiveOntologyTerms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
661
- copyright: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
662
- description: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
663
- }, import("zod/v4/core").$loose>>;
664
- hasMore: import("zod").ZodBoolean;
665
- distributions: import("zod").ZodObject<{
666
- mimeType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
667
- studyName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
668
- observationUnitName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
669
- descriptiveOntologyTerms: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
670
- }, import("zod/v4/core").$strip>;
453
+ studies: import("zod").ZodArray<import("zod").ZodString>;
454
+ shape: import("zod").ZodEnum<{
455
+ long: "long";
456
+ wide: "wide";
457
+ }>;
458
+ aggregate: import("zod").ZodEnum<{
459
+ all: "all";
460
+ first: "first";
461
+ mean: "mean";
462
+ median: "median";
463
+ }>;
464
+ observationCount: import("zod").ZodNumber;
465
+ germplasmCount: import("zod").ZodNumber;
466
+ variableCount: import("zod").ZodNumber;
467
+ variableLegend: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
671
468
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
672
469
  tableName: import("zod").ZodString;
673
470
  rowCount: import("zod").ZodNumber;
@@ -679,60 +476,133 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
679
476
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
680
477
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
681
478
  }, import("zod/v4/core").$strip>>;
479
+ warnings: import("zod").ZodArray<import("zod").ZodString>;
682
480
  }, import("zod/v4/core").$strip>, readonly [{
683
- readonly reason: "unknown_alias";
481
+ readonly reason: 'unknown_alias';
684
482
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
685
- readonly when: "No connection has been registered under the requested alias";
686
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_images.";
483
+ readonly when: 'No connection has been registered under the requested alias';
484
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_build_phenotype_matrix.';
687
485
  }, {
688
- readonly reason: "all_filters_dropped";
486
+ readonly reason: 'all_filters_dropped';
689
487
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
690
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
691
- readonly recovery: "Drop the unsupported filters and rescope by images, observationUnits, observations, studies, descriptiveOntologyTerms, imageFileNames, or mimeTypes these filter paths are honored on the active dialect.";
488
+ readonly when: 'The active dialect dropped every filter supplied — the call would silently widen to the unfiltered baseline';
489
+ readonly recovery: 'Drop unsupported filters or use studies / germplasm / variables to scope the query to supported filter paths on the active dialect.';
490
+ }, {
491
+ readonly reason: 'no_observation_path';
492
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
493
+ readonly when: 'Neither /observations nor /observationunits returned data for any requested study after probing both paths';
494
+ readonly recovery: 'Verify the studyDbIds exist and the BrAPI server exposes /observations or /observationunits. Use brapi_server_info to inspect the capability list.';
692
495
  }], {
693
- readonly totalCount: import("zod").ZodNumber;
694
- readonly returnedCount: import("zod").ZodNumber;
695
- readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
696
- readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
496
+ readonly truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
497
+ readonly shown: import("zod").ZodOptional<import("zod").ZodNumber>;
498
+ readonly cap: import("zod").ZodOptional<import("zod").ZodNumber>;
697
499
  readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
698
- readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
699
500
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
700
501
  alias: import("zod").ZodOptional<import("zod").ZodString>;
701
- locations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
702
- locationNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
703
- countryCodes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
704
- countryNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
705
- locationTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
706
- abbreviations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
707
- bbox: import("zod").ZodOptional<import("zod").ZodObject<{
708
- minLat: import("zod").ZodOptional<import("zod").ZodNumber>;
709
- maxLat: import("zod").ZodOptional<import("zod").ZodNumber>;
710
- minLon: import("zod").ZodOptional<import("zod").ZodNumber>;
711
- maxLon: import("zod").ZodOptional<import("zod").ZodNumber>;
502
+ forceRefresh: import("zod").ZodDefault<import("zod").ZodBoolean>;
503
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
504
+ alias: import("zod").ZodString;
505
+ baseUrl: import("zod").ZodString;
506
+ server: import("zod").ZodObject<{
507
+ name: import("zod").ZodOptional<import("zod").ZodString>;
508
+ description: import("zod").ZodOptional<import("zod").ZodString>;
509
+ organizationName: import("zod").ZodOptional<import("zod").ZodString>;
510
+ organizationURL: import("zod").ZodOptional<import("zod").ZodString>;
511
+ documentationURL: import("zod").ZodOptional<import("zod").ZodString>;
512
+ contactEmail: import("zod").ZodOptional<import("zod").ZodString>;
513
+ brapiVersion: import("zod").ZodOptional<import("zod").ZodString>;
514
+ }, import("zod/v4/core").$strip>;
515
+ auth: import("zod").ZodObject<{
516
+ mode: import("zod").ZodEnum<{
517
+ api_key: "api_key";
518
+ bearer: "bearer";
519
+ none: "none";
520
+ oauth2: "oauth2";
521
+ sgn: "sgn";
522
+ }>;
523
+ headerName: import("zod").ZodOptional<import("zod").ZodString>;
524
+ expiresAt: import("zod").ZodOptional<import("zod").ZodString>;
525
+ }, import("zod/v4/core").$strip>;
526
+ capabilities: import("zod").ZodObject<{
527
+ supportedCount: import("zod").ZodNumber;
528
+ supported: import("zod").ZodArray<import("zod").ZodString>;
529
+ notableGaps: import("zod").ZodArray<import("zod").ZodString>;
530
+ }, import("zod/v4/core").$strip>;
531
+ dialect: import("zod").ZodObject<{
532
+ id: import("zod").ZodString;
533
+ source: import("zod").ZodEnum<{
534
+ "env-override": "env-override";
535
+ fallback: "fallback";
536
+ "organization-name": "organization-name";
537
+ "server-name": "server-name";
538
+ "url-pattern": "url-pattern";
539
+ }>;
540
+ envVar: import("zod").ZodString;
541
+ disabledSearchEndpoints: import("zod").ZodArray<import("zod").ZodString>;
542
+ notes: import("zod").ZodArray<import("zod").ZodString>;
543
+ verifiedMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
544
+ inferredMappingCount: import("zod").ZodOptional<import("zod").ZodNumber>;
545
+ }, import("zod/v4/core").$strip>;
546
+ content: import("zod").ZodObject<{
547
+ crops: import("zod").ZodArray<import("zod").ZodString>;
548
+ studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
549
+ germplasmCount: import("zod").ZodOptional<import("zod").ZodNumber>;
550
+ programCount: import("zod").ZodOptional<import("zod").ZodNumber>;
551
+ locationCount: import("zod").ZodOptional<import("zod").ZodNumber>;
552
+ }, import("zod/v4/core").$strip>;
553
+ attribution: import("zod").ZodOptional<import("zod").ZodObject<{
554
+ homepage: import("zod").ZodString;
555
+ license: import("zod").ZodString;
556
+ citation: import("zod").ZodString;
557
+ isDemo: import("zod").ZodOptional<import("zod").ZodBoolean>;
712
558
  }, import("zod/v4/core").$strip>>;
559
+ notes: import("zod").ZodArray<import("zod").ZodString>;
560
+ fetchedAt: import("zod").ZodString;
561
+ }, import("zod/v4/core").$strip>, readonly [{
562
+ readonly reason: 'unknown_alias';
563
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
564
+ readonly when: 'No connection has been registered under the requested alias';
565
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_server_info.';
566
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
567
+ alias: import("zod").ZodOptional<import("zod").ZodString>;
568
+ crop: import("zod").ZodOptional<import("zod").ZodString>;
569
+ trialTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
570
+ seasons: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
571
+ locations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
572
+ programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
573
+ trials: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
574
+ studyNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
575
+ active: import("zod").ZodOptional<import("zod").ZodBoolean>;
713
576
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
714
577
  extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
715
578
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
716
579
  alias: import("zod").ZodString;
717
580
  results: import("zod").ZodArray<import("zod").ZodObject<{
718
- locationDbId: import("zod").ZodString;
581
+ studyDbId: import("zod").ZodString;
582
+ studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
583
+ studyType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
584
+ studyDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
585
+ programDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
586
+ programName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
587
+ trialDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
588
+ trialName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
589
+ locationDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
719
590
  locationName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
720
- abbreviation: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
721
- countryCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
722
- countryName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
723
- locationType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
724
- latitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
725
- longitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
726
- altitude: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
727
- coordinates: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>;
728
- instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
729
- instituteAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
730
- documentationURL: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
591
+ commonCropName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
592
+ seasons: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodNullable<import("zod").ZodString>>>>;
593
+ active: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
594
+ startDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
595
+ endDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
596
+ studyCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
597
+ studyPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
731
598
  }, import("zod/v4/core").$loose>>;
732
599
  hasMore: import("zod").ZodBoolean;
733
600
  distributions: import("zod").ZodObject<{
734
- countryCode: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
735
- locationType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
601
+ programName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
602
+ studyType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
603
+ seasons: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
604
+ locationName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
605
+ commonCropName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
736
606
  }, import("zod/v4/core").$strip>;
737
607
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
738
608
  tableName: import("zod").ZodString;
@@ -745,20 +615,16 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
745
615
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
746
616
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
747
617
  }, import("zod/v4/core").$strip>>;
748
- coordinateAxisOrder: import("zod").ZodEnum<{
749
- spec: "spec";
750
- swapped: "swapped";
751
- }>;
752
618
  }, import("zod/v4/core").$strip>, readonly [{
753
- readonly reason: "unknown_alias";
619
+ readonly reason: 'unknown_alias';
754
620
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
755
- readonly when: "No connection has been registered under the requested alias";
756
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_locations.";
621
+ readonly when: 'No connection has been registered under the requested alias';
622
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_studies.';
757
623
  }, {
758
- readonly reason: "all_filters_dropped";
624
+ readonly reason: 'all_filters_dropped';
759
625
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
760
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
761
- readonly recovery: "Drop the unsupported filters and rescope by locations, locationNames, countryCodes, locationTypes, abbreviations, or bbox — these filter paths are honored on the active dialect.";
626
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
627
+ readonly recovery: 'Drop the unsupported filters and rescope by crop, trialTypes, seasons, programs, trials, studyNames, or active — these filter paths are honored on the active dialect.';
762
628
  }], {
763
629
  readonly totalCount: import("zod").ZodNumber;
764
630
  readonly returnedCount: import("zod").ZodNumber;
@@ -768,45 +634,49 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
768
634
  readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
769
635
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
770
636
  alias: import("zod").ZodOptional<import("zod").ZodString>;
771
- studies: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
772
- germplasm: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
773
- variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
774
- observationUnits: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
775
- observations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
776
- seasons: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
777
- programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
778
- trials: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
779
- observationLevels: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
780
- timestampFrom: import("zod").ZodOptional<import("zod").ZodString>;
781
- timestampTo: import("zod").ZodOptional<import("zod").ZodString>;
637
+ names: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
638
+ germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
639
+ germplasmPUIs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
640
+ accessionNumbers: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
641
+ crops: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
642
+ synonyms: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
643
+ collections: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
644
+ genus: import("zod").ZodOptional<import("zod").ZodString>;
645
+ species: import("zod").ZodOptional<import("zod").ZodString>;
646
+ text: import("zod").ZodOptional<import("zod").ZodString>;
782
647
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
783
648
  extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
784
649
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
785
650
  alias: import("zod").ZodString;
786
651
  results: import("zod").ZodArray<import("zod").ZodObject<{
787
- observationDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
788
- observationUnitDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
789
- observationUnitName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
790
- observationVariableDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
791
- observationVariableName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
792
- studyDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
793
- studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
794
- germplasmDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
652
+ germplasmDbId: import("zod").ZodString;
795
653
  germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
796
- observationLevel: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
797
- season: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodObject<{}, import("zod/v4/core").$loose>, import("zod").ZodNull]>>;
798
- value: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
799
- observationTimeStamp: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
800
- collector: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
801
- uploadedBy: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
654
+ germplasmPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
655
+ commonCropName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
656
+ accessionNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
657
+ genus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
658
+ species: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
659
+ subtaxa: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
660
+ defaultDisplayName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
661
+ pedigree: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
662
+ biologicalStatusOfAccessionDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
663
+ germplasmOrigin: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>>;
664
+ countryOfOriginCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
665
+ collection: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
666
+ instituteCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
667
+ instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
668
+ synonyms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
669
+ synonym: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
670
+ type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
671
+ }, import("zod/v4/core").$loose>>>>;
802
672
  }, import("zod/v4/core").$loose>>;
803
673
  hasMore: import("zod").ZodBoolean;
804
674
  distributions: import("zod").ZodObject<{
805
- observationVariableName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
806
- studyName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
807
- germplasmName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
808
- observationLevel: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
809
- season: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
675
+ commonCropName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
676
+ genus: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
677
+ species: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
678
+ collection: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
679
+ countryOfOriginCode: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
810
680
  }, import("zod/v4/core").$strip>;
811
681
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
812
682
  tableName: import("zod").ZodString;
@@ -820,15 +690,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
820
690
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
821
691
  }, import("zod/v4/core").$strip>>;
822
692
  }, import("zod/v4/core").$strip>, readonly [{
823
- readonly reason: "unknown_alias";
693
+ readonly reason: 'unknown_alias';
824
694
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
825
- readonly when: "No connection has been registered under the requested alias";
826
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_observations.";
695
+ readonly when: 'No connection has been registered under the requested alias';
696
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_germplasm.';
827
697
  }, {
828
- readonly reason: "all_filters_dropped";
698
+ readonly reason: 'all_filters_dropped';
829
699
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
830
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
831
- readonly recovery: "Drop the unsupported filters and rescope by germplasm, variables, observationUnits, observations, seasons, programs, or trials — these filter paths are honored on the active dialect.";
700
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
701
+ readonly recovery: 'Drop the unsupported filters and rescope by names, germplasmDbIds, germplasmPUIs, accessionNumbers, crops, synonyms, genus, or species — these filter paths are honored on the active dialect.';
832
702
  }], {
833
703
  readonly totalCount: import("zod").ZodNumber;
834
704
  readonly returnedCount: import("zod").ZodNumber;
@@ -837,47 +707,115 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
837
707
  readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
838
708
  readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
839
709
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
710
+ germplasmDbId: import("zod").ZodString;
840
711
  alias: import("zod").ZodOptional<import("zod").ZodString>;
841
- crop: import("zod").ZodOptional<import("zod").ZodString>;
842
- trialTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
843
- seasons: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
844
- locations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
845
- programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
846
- trials: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
847
- studyNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
848
- active: import("zod").ZodOptional<import("zod").ZodBoolean>;
849
- loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
850
- extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
851
712
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
852
713
  alias: import("zod").ZodString;
853
- results: import("zod").ZodArray<import("zod").ZodObject<{
854
- studyDbId: import("zod").ZodString;
855
- studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
856
- studyType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
857
- studyDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
858
- programDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
859
- programName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
860
- trialDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
861
- trialName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
862
- locationDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
863
- locationName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
714
+ germplasm: import("zod").ZodObject<{
715
+ germplasmDbId: import("zod").ZodString;
716
+ germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
717
+ germplasmPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
864
718
  commonCropName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
865
- seasons: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodNullable<import("zod").ZodString>>>>;
866
- active: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
867
- startDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
868
- endDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
869
- studyCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
870
- studyPUI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
719
+ accessionNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
720
+ genus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
721
+ species: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
722
+ subtaxa: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
723
+ defaultDisplayName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
724
+ pedigree: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
725
+ biologicalStatusOfAccessionDescription: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
726
+ germplasmOrigin: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{}, import("zod/v4/core").$loose>>>>;
727
+ countryOfOriginCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
728
+ collection: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
729
+ instituteCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
730
+ instituteName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
731
+ synonyms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
732
+ synonym: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
733
+ type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
734
+ }, import("zod/v4/core").$loose>>>>;
735
+ }, import("zod/v4/core").$loose>;
736
+ parents: import("zod").ZodArray<import("zod").ZodObject<{
737
+ germplasmDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
738
+ germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
739
+ parentType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
871
740
  }, import("zod/v4/core").$loose>>;
872
- hasMore: import("zod").ZodBoolean;
873
- distributions: import("zod").ZodObject<{
874
- programName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
875
- studyType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
876
- seasons: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
877
- locationName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
878
- commonCropName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
879
- }, import("zod/v4/core").$strip>;
880
- dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
741
+ attributes: import("zod").ZodArray<import("zod").ZodObject<{
742
+ attributeDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
743
+ attributeName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
744
+ attributeValue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
745
+ determinedDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
746
+ }, import("zod/v4/core").$loose>>;
747
+ studyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
748
+ directParentCount: import("zod").ZodNumber;
749
+ directDescendantCount: import("zod").ZodOptional<import("zod").ZodNumber>;
750
+ warnings: import("zod").ZodArray<import("zod").ZodString>;
751
+ }, import("zod/v4/core").$strip>, readonly [{
752
+ readonly reason: 'unknown_alias';
753
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
754
+ readonly when: 'No connection has been registered under the requested alias';
755
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_germplasm.';
756
+ }, {
757
+ readonly reason: 'germplasm_not_found';
758
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
759
+ readonly when: 'Upstream returned no germplasm record for the requested DbId';
760
+ readonly recovery: 'Verify the germplasmDbId on the target server, or run brapi_find_germplasm to discover valid IDs.';
761
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
762
+ germplasmDbIds: import("zod").ZodArray<import("zod").ZodString>;
763
+ direction: import("zod").ZodDefault<import("zod").ZodEnum<{
764
+ ancestors: "ancestors";
765
+ both: "both";
766
+ descendants: "descendants";
767
+ }>>;
768
+ maxDepth: import("zod").ZodDefault<import("zod").ZodNumber>;
769
+ loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
770
+ alias: import("zod").ZodOptional<import("zod").ZodString>;
771
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
772
+ alias: import("zod").ZodString;
773
+ direction: import("zod").ZodEnum<{
774
+ ancestors: "ancestors";
775
+ both: "both";
776
+ descendants: "descendants";
777
+ }>;
778
+ maxDepth: import("zod").ZodNumber;
779
+ nodes: import("zod").ZodArray<import("zod").ZodObject<{
780
+ germplasmDbId: import("zod").ZodString;
781
+ germplasmName: import("zod").ZodOptional<import("zod").ZodString>;
782
+ depth: import("zod").ZodNumber;
783
+ isRoot: import("zod").ZodBoolean;
784
+ direction: import("zod").ZodEnum<{
785
+ ancestor: "ancestor";
786
+ both: "both";
787
+ descendant: "descendant";
788
+ root: "root";
789
+ }>;
790
+ }, import("zod/v4/core").$strip>>;
791
+ edges: import("zod").ZodArray<import("zod").ZodObject<{
792
+ from: import("zod").ZodString;
793
+ to: import("zod").ZodString;
794
+ relationship: import("zod").ZodEnum<{
795
+ child: "child";
796
+ parent: "parent";
797
+ }>;
798
+ parentType: import("zod").ZodOptional<import("zod").ZodString>;
799
+ }, import("zod/v4/core").$strip>>;
800
+ depthReached: import("zod").ZodNumber;
801
+ rootCount: import("zod").ZodNumber;
802
+ leafCount: import("zod").ZodNumber;
803
+ cycleCount: import("zod").ZodNumber;
804
+ deadEndCount: import("zod").ZodNumber;
805
+ truncated: import("zod").ZodBoolean;
806
+ warnings: import("zod").ZodArray<import("zod").ZodString>;
807
+ nodesDataframe: import("zod").ZodOptional<import("zod").ZodObject<{
808
+ tableName: import("zod").ZodString;
809
+ rowCount: import("zod").ZodNumber;
810
+ columns: import("zod").ZodArray<import("zod").ZodString>;
811
+ columnLegend: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
812
+ createdAt: import("zod").ZodString;
813
+ expiresAt: import("zod").ZodString;
814
+ truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
815
+ maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
816
+ totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
817
+ }, import("zod/v4/core").$strip>>;
818
+ edgesDataframe: import("zod").ZodOptional<import("zod").ZodObject<{
881
819
  tableName: import("zod").ZodString;
882
820
  rowCount: import("zod").ZodNumber;
883
821
  columns: import("zod").ZodArray<import("zod").ZodString>;
@@ -889,23 +827,46 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
889
827
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
890
828
  }, import("zod/v4/core").$strip>>;
891
829
  }, import("zod/v4/core").$strip>, readonly [{
892
- readonly reason: "unknown_alias";
830
+ readonly reason: 'unknown_alias';
831
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
832
+ readonly when: 'No connection has been registered under the requested alias';
833
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_walk_pedigree.';
834
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
835
+ alias: import("zod").ZodOptional<import("zod").ZodString>;
836
+ germplasmDbId: import("zod").ZodString;
837
+ studyDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
838
+ variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
839
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
840
+ alias: import("zod").ZodString;
841
+ germplasmDbId: import("zod").ZodString;
842
+ germplasmName: import("zod").ZodOptional<import("zod").ZodString>;
843
+ studyCount: import("zod").ZodNumber;
844
+ studyDbIds: import("zod").ZodArray<import("zod").ZodString>;
845
+ perVariable: import("zod").ZodArray<import("zod").ZodObject<{
846
+ observationVariableDbId: import("zod").ZodString;
847
+ observationVariableName: import("zod").ZodOptional<import("zod").ZodString>;
848
+ n: import("zod").ZodNumber;
849
+ mean: import("zod").ZodOptional<import("zod").ZodNumber>;
850
+ median: import("zod").ZodOptional<import("zod").ZodNumber>;
851
+ sd: import("zod").ZodOptional<import("zod").ZodNumber>;
852
+ min: import("zod").ZodOptional<import("zod").ZodString>;
853
+ max: import("zod").ZodOptional<import("zod").ZodString>;
854
+ studyCount: import("zod").ZodNumber;
855
+ studyDbIds: import("zod").ZodArray<import("zod").ZodString>;
856
+ seasons: import("zod").ZodArray<import("zod").ZodString>;
857
+ }, import("zod/v4/core").$strip>>;
858
+ warnings: import("zod").ZodArray<import("zod").ZodString>;
859
+ }, import("zod/v4/core").$strip>, readonly [{
860
+ readonly reason: 'unknown_alias';
893
861
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
894
- readonly when: "No connection has been registered under the requested alias";
895
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_studies.";
862
+ readonly when: 'No connection has been registered under the requested alias';
863
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_germplasm_performance.';
896
864
  }, {
897
- readonly reason: "all_filters_dropped";
898
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
899
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
900
- readonly recovery: "Drop the unsupported filters and rescope by crop, trialTypes, seasons, programs, trials, studyNames, or active these filter paths are honored on the active dialect.";
901
- }], {
902
- readonly totalCount: import("zod").ZodNumber;
903
- readonly returnedCount: import("zod").ZodNumber;
904
- readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
905
- readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
906
- readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
907
- readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
908
- }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
865
+ readonly reason: 'germplasm_not_found';
866
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
867
+ readonly when: 'Upstream returned no germplasm record for the requested germplasmDbId';
868
+ readonly recovery: 'Verify the germplasmDbId on the target server, or run brapi_find_germplasm to discover valid IDs.';
869
+ }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
909
870
  alias: import("zod").ZodOptional<import("zod").ZodString>;
910
871
  variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
911
872
  variableNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
@@ -959,8 +920,8 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
959
920
  synonyms: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
960
921
  ontologyDbId: import("zod").ZodOptional<import("zod").ZodString>;
961
922
  source: import("zod").ZodEnum<{
962
- puiMatch: "puiMatch";
963
923
  nameMatch: "nameMatch";
924
+ puiMatch: "puiMatch";
964
925
  synonymMatch: "synonymMatch";
965
926
  traitClassMatch: "traitClassMatch";
966
927
  }>;
@@ -977,15 +938,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
977
938
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
978
939
  }, import("zod/v4/core").$strip>>;
979
940
  }, import("zod/v4/core").$strip>, readonly [{
980
- readonly reason: "unknown_alias";
941
+ readonly reason: 'unknown_alias';
981
942
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
982
- readonly when: "No connection has been registered under the requested alias";
983
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_variables.";
943
+ readonly when: 'No connection has been registered under the requested alias';
944
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_variables.';
984
945
  }, {
985
- readonly reason: "all_filters_dropped";
946
+ readonly reason: 'all_filters_dropped';
986
947
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
987
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
988
- readonly recovery: "Drop the unsupported filters and rescope by variables, traitClasses, ontologyDbIds, methodDbIds, scaleDbIds, or text — these filter paths are honored on the active dialect.";
948
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
949
+ readonly recovery: 'Drop the unsupported filters and rescope by variables, traitClasses, ontologyDbIds, methodDbIds, scaleDbIds, or text — these filter paths are honored on the active dialect.';
989
950
  }], {
990
951
  readonly totalCount: import("zod").ZodNumber;
991
952
  readonly returnedCount: import("zod").ZodNumber;
@@ -995,36 +956,112 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
995
956
  readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
996
957
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
997
958
  alias: import("zod").ZodOptional<import("zod").ZodString>;
998
- variantSets: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
999
- variants: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1000
- references: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1001
- referenceName: import("zod").ZodOptional<import("zod").ZodString>;
1002
- start: import("zod").ZodOptional<import("zod").ZodNumber>;
1003
- end: import("zod").ZodOptional<import("zod").ZodNumber>;
959
+ studies: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
960
+ germplasm: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
961
+ variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
962
+ observationUnits: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
963
+ observations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
964
+ seasons: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
965
+ programs: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
966
+ trials: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
967
+ observationLevels: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
968
+ timestampFrom: import("zod").ZodOptional<import("zod").ZodString>;
969
+ timestampTo: import("zod").ZodOptional<import("zod").ZodString>;
970
+ loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
971
+ extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
972
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
973
+ alias: import("zod").ZodString;
974
+ results: import("zod").ZodArray<import("zod").ZodObject<{
975
+ observationDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
976
+ observationUnitDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
977
+ observationUnitName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
978
+ observationVariableDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
979
+ observationVariableName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
980
+ studyDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
981
+ studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
982
+ germplasmDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
983
+ germplasmName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
984
+ observationLevel: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
985
+ season: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodObject<{}, import("zod/v4/core").$loose>, import("zod").ZodNull]>>;
986
+ value: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
987
+ observationTimeStamp: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
988
+ collector: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
989
+ uploadedBy: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
990
+ }, import("zod/v4/core").$loose>>;
991
+ hasMore: import("zod").ZodBoolean;
992
+ distributions: import("zod").ZodObject<{
993
+ observationVariableName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
994
+ studyName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
995
+ germplasmName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
996
+ observationLevel: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
997
+ season: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
998
+ }, import("zod/v4/core").$strip>;
999
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
1000
+ tableName: import("zod").ZodString;
1001
+ rowCount: import("zod").ZodNumber;
1002
+ columns: import("zod").ZodArray<import("zod").ZodString>;
1003
+ columnLegend: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
1004
+ createdAt: import("zod").ZodString;
1005
+ expiresAt: import("zod").ZodString;
1006
+ truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
1007
+ maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
1008
+ totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1009
+ }, import("zod/v4/core").$strip>>;
1010
+ }, import("zod/v4/core").$strip>, readonly [{
1011
+ readonly reason: 'unknown_alias';
1012
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1013
+ readonly when: 'No connection has been registered under the requested alias';
1014
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_observations.';
1015
+ }, {
1016
+ readonly reason: 'all_filters_dropped';
1017
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1018
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
1019
+ readonly recovery: 'Drop the unsupported filters and rescope by germplasm, variables, observationUnits, observations, seasons, programs, or trials — these filter paths are honored on the active dialect.';
1020
+ }], {
1021
+ readonly totalCount: import("zod").ZodNumber;
1022
+ readonly returnedCount: import("zod").ZodNumber;
1023
+ readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
1024
+ readonly refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
1025
+ readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
1026
+ readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
1027
+ }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1028
+ alias: import("zod").ZodOptional<import("zod").ZodString>;
1029
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1030
+ observationUnits: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1031
+ observations: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1032
+ studies: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1033
+ imageFileNames: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1034
+ mimeTypes: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1035
+ descriptiveOntologyTerms: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1004
1036
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
1005
1037
  extraFilters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
1006
1038
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1007
1039
  alias: import("zod").ZodString;
1008
1040
  results: import("zod").ZodArray<import("zod").ZodObject<{
1009
- variantDbId: import("zod").ZodString;
1010
- variantNames: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1011
- variantSetDbId: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodArray<import("zod").ZodString>, import("zod").ZodNull]>>;
1012
- variantSetDbIds: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1013
- variantType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1014
- referenceBases: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1015
- alternateBases: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1016
- referenceName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1017
- start: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
1018
- end: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
1019
- filtersPassed: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
1020
- filtersApplied: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
1021
- filtersFailed: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1041
+ imageDbId: import("zod").ZodString;
1042
+ imageName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1043
+ imageFileName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1044
+ imageFileSize: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
1045
+ imageHeight: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
1046
+ imageWidth: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedNumber<unknown>>>;
1047
+ mimeType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1048
+ imageTimeStamp: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1049
+ imageURL: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1050
+ observationUnitDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1051
+ observationUnitName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1052
+ observationDbIds: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1053
+ studyDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1054
+ studyName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1055
+ descriptiveOntologyTerms: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1056
+ copyright: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1057
+ description: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1022
1058
  }, import("zod/v4/core").$loose>>;
1023
1059
  hasMore: import("zod").ZodBoolean;
1024
1060
  distributions: import("zod").ZodObject<{
1025
- variantType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1026
- referenceName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1027
- variantSetDbId: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1061
+ mimeType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1062
+ studyName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1063
+ observationUnitName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1064
+ descriptiveOntologyTerms: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1028
1065
  }, import("zod/v4/core").$strip>;
1029
1066
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
1030
1067
  tableName: import("zod").ZodString;
@@ -1038,15 +1075,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1038
1075
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1039
1076
  }, import("zod/v4/core").$strip>>;
1040
1077
  }, import("zod/v4/core").$strip>, readonly [{
1041
- readonly reason: "unknown_alias";
1078
+ readonly reason: 'unknown_alias';
1042
1079
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1043
- readonly when: "No connection has been registered under the requested alias";
1044
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_variants.";
1080
+ readonly when: 'No connection has been registered under the requested alias';
1081
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_images.';
1045
1082
  }, {
1046
- readonly reason: "all_filters_dropped";
1083
+ readonly reason: 'all_filters_dropped';
1047
1084
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1048
- readonly when: "The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.";
1049
- readonly recovery: "Drop the unsupported filters and rescope by variants, variantSets, references, or referenceName + start/end — these filter paths are honored on the active dialect.";
1085
+ readonly when: 'The active dialect dropped every filter the agent supplied — the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline.';
1086
+ readonly recovery: 'Drop the unsupported filters and rescope by images, observationUnits, observations, studies, descriptiveOntologyTerms, imageFileNames, or mimeTypes — these filter paths are honored on the active dialect.';
1050
1087
  }], {
1051
1088
  readonly totalCount: import("zod").ZodNumber;
1052
1089
  readonly returnedCount: import("zod").ZodNumber;
@@ -1055,41 +1092,6 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1055
1092
  readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
1056
1093
  readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
1057
1094
  }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1058
- alias: import("zod").ZodOptional<import("zod").ZodString>;
1059
- germplasmDbId: import("zod").ZodString;
1060
- studyDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1061
- variables: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1062
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1063
- alias: import("zod").ZodString;
1064
- germplasmDbId: import("zod").ZodString;
1065
- germplasmName: import("zod").ZodOptional<import("zod").ZodString>;
1066
- studyCount: import("zod").ZodNumber;
1067
- studyDbIds: import("zod").ZodArray<import("zod").ZodString>;
1068
- perVariable: import("zod").ZodArray<import("zod").ZodObject<{
1069
- observationVariableDbId: import("zod").ZodString;
1070
- observationVariableName: import("zod").ZodOptional<import("zod").ZodString>;
1071
- n: import("zod").ZodNumber;
1072
- mean: import("zod").ZodOptional<import("zod").ZodNumber>;
1073
- median: import("zod").ZodOptional<import("zod").ZodNumber>;
1074
- sd: import("zod").ZodOptional<import("zod").ZodNumber>;
1075
- min: import("zod").ZodOptional<import("zod").ZodString>;
1076
- max: import("zod").ZodOptional<import("zod").ZodString>;
1077
- studyCount: import("zod").ZodNumber;
1078
- studyDbIds: import("zod").ZodArray<import("zod").ZodString>;
1079
- seasons: import("zod").ZodArray<import("zod").ZodString>;
1080
- }, import("zod/v4/core").$strip>>;
1081
- warnings: import("zod").ZodArray<import("zod").ZodString>;
1082
- }, import("zod/v4/core").$strip>, readonly [{
1083
- readonly reason: "unknown_alias";
1084
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1085
- readonly when: "No connection has been registered under the requested alias";
1086
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_germplasm_performance.";
1087
- }, {
1088
- readonly reason: "germplasm_not_found";
1089
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1090
- readonly when: "Upstream returned no germplasm record for the requested germplasmDbId";
1091
- readonly recovery: "Verify the germplasmDbId on the target server, or run brapi_find_germplasm to discover valid IDs.";
1092
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1093
1095
  imageDbIds: import("zod").ZodArray<import("zod").ZodString>;
1094
1096
  alias: import("zod").ZodOptional<import("zod").ZodString>;
1095
1097
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -1129,34 +1131,55 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1129
1131
  warning: import("zod").ZodString;
1130
1132
  }, import("zod/v4/core").$strip>>;
1131
1133
  }, import("zod/v4/core").$strip>, readonly [{
1132
- readonly reason: "unknown_alias";
1134
+ readonly reason: 'unknown_alias';
1133
1135
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1134
- readonly when: "No connection has been registered under the requested alias";
1135
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_image.";
1136
+ readonly when: 'No connection has been registered under the requested alias';
1137
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_get_image.';
1136
1138
  }, {
1137
- readonly reason: "images_unsupported";
1139
+ readonly reason: 'images_unsupported';
1138
1140
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1139
- readonly when: "BrAPI server does not advertise /images in /serverinfo";
1140
- readonly recovery: "Run brapi_server_info to inspect the advertised endpoints, or call brapi_connect with a different alias for a server that exposes /images.";
1141
+ readonly when: 'BrAPI server does not advertise /images in /serverinfo';
1142
+ readonly recovery: 'Run brapi_server_info to inspect the advertised endpoints, or call brapi_connect with a different alias for a server that exposes /images.';
1141
1143
  }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1142
1144
  alias: import("zod").ZodOptional<import("zod").ZodString>;
1143
- path: import("zod").ZodString;
1144
- params: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean, import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>]>>>;
1145
+ variantSetDbId: import("zod").ZodOptional<import("zod").ZodString>;
1146
+ variantSetDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1147
+ germplasmDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1148
+ callSetDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1149
+ variantDbIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1150
+ callFormat: import("zod").ZodOptional<import("zod").ZodEnum<{
1151
+ DARTSEQ: "DARTSEQ";
1152
+ FLAPJACK: "FLAPJACK";
1153
+ JSON: "JSON";
1154
+ VCF: "VCF";
1155
+ }>>;
1145
1156
  loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
1146
1157
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1147
1158
  alias: import("zod").ZodString;
1148
- url: import("zod").ZodString;
1149
- path: import("zod").ZodString;
1150
- metadata: import("zod").ZodObject<{
1151
- pagination: import("zod").ZodOptional<import("zod").ZodObject<{
1152
- currentPage: import("zod").ZodNumber;
1153
- pageSize: import("zod").ZodNumber;
1154
- totalCount: import("zod").ZodNumber;
1155
- totalPages: import("zod").ZodNumber;
1156
- }, import("zod/v4/core").$loose>>;
1157
- }, import("zod/v4/core").$loose>;
1158
- result: import("zod").ZodUnknown;
1159
- suggestion: import("zod").ZodOptional<import("zod").ZodString>;
1159
+ results: import("zod").ZodArray<import("zod").ZodObject<{
1160
+ callSetDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1161
+ callSetName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1162
+ variantDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1163
+ variantName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1164
+ variantSetDbId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1165
+ genotype: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
1166
+ values: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
1167
+ }, import("zod/v4/core").$loose>>>;
1168
+ genotypeValue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1169
+ phaseSet: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1170
+ }, import("zod/v4/core").$loose>>;
1171
+ hasMore: import("zod").ZodBoolean;
1172
+ callFormatting: import("zod").ZodObject<{
1173
+ expandHomozygotes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
1174
+ unknownString: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1175
+ sepPhased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1176
+ sepUnphased: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
1177
+ }, import("zod/v4/core").$strip>;
1178
+ distributions: import("zod").ZodObject<{
1179
+ callSetName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1180
+ variantName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1181
+ variantSetDbId: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
1182
+ }, import("zod/v4/core").$strip>;
1160
1183
  dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
1161
1184
  tableName: import("zod").ZodString;
1162
1185
  rowCount: import("zod").ZodNumber;
@@ -1168,17 +1191,77 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1168
1191
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
1169
1192
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1170
1193
  }, import("zod/v4/core").$strip>>;
1194
+ truncated: import("zod").ZodBoolean;
1171
1195
  }, import("zod/v4/core").$strip>, readonly [{
1172
- readonly reason: "unknown_alias";
1196
+ readonly reason: 'unknown_alias';
1173
1197
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1174
- readonly when: "No connection has been registered under the requested alias";
1175
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_raw_get.";
1198
+ readonly when: 'No connection has been registered under the requested alias';
1199
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_find_genotype_calls.';
1176
1200
  }, {
1177
- readonly reason: "cross_origin_path";
1201
+ readonly reason: 'no_filters';
1178
1202
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1179
- readonly when: "path argument was a full URL instead of a relative BrAPI route";
1180
- readonly recovery: "Pass a path like \"/samples\" or \"/methods\" the connection alias supplies the baseUrl.";
1203
+ readonly when: 'No variant set, germplasm, call set, or variant filter was provided';
1204
+ readonly recovery: 'Provide variantSetDbId or germplasmDbIds before retryingunfiltered pulls are too expensive.';
1205
+ }, {
1206
+ readonly reason: 'search_endpoint_disabled';
1207
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1208
+ readonly when: 'The active dialect declares POST /search/calls as known-dead on this server';
1209
+ readonly recovery: 'Connect to a different BrAPI server that exposes a working /search/calls route — genotype-call workflows are not viable here.';
1210
+ }], {
1211
+ readonly totalCount: import("zod").ZodNumber;
1212
+ readonly returnedCount: import("zod").ZodNumber;
1213
+ readonly appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
1214
+ readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
1215
+ readonly warnings: import("zod").ZodArray<import("zod").ZodString>;
1216
+ }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1217
+ dataframe: import("zod").ZodOptional<import("zod").ZodString>;
1218
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1219
+ tables: import("zod").ZodArray<import("zod").ZodObject<{
1220
+ name: import("zod").ZodString;
1221
+ rowCount: import("zod").ZodNumber;
1222
+ columns: import("zod").ZodArray<import("zod").ZodObject<{
1223
+ name: import("zod").ZodString;
1224
+ type: import("zod").ZodString;
1225
+ nullable: import("zod").ZodOptional<import("zod").ZodBoolean>;
1226
+ }, import("zod/v4/core").$strip>>;
1227
+ approxSizeBytes: import("zod").ZodOptional<import("zod").ZodNumber>;
1228
+ provenance: import("zod").ZodOptional<import("zod").ZodObject<{
1229
+ source: import("zod").ZodString;
1230
+ baseUrl: import("zod").ZodString;
1231
+ query: import("zod").ZodUnknown;
1232
+ createdAt: import("zod").ZodString;
1233
+ expiresAt: import("zod").ZodString;
1234
+ }, import("zod/v4/core").$strip>>;
1235
+ }, import("zod/v4/core").$strip>>;
1236
+ }, import("zod/v4/core").$strip>, readonly [{
1237
+ readonly reason: 'list_all_disabled_on_shared_http';
1238
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1239
+ readonly when: "This server is running as a shared HTTP endpoint without per-caller auth — listing every dataframe would expose other concurrent clients' workspaces, since all callers resolve to one shared tenant.";
1240
+ readonly recovery: 'Pass `dataframe` with a specific name — either from a prior find_* spillover result (`result.dataframe.tableName`) or one you registered via `brapi_dataframe_query` with `registerAs`. Listing all dataframes is not available on this deployment.';
1181
1241
  }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1242
+ sql: import("zod").ZodString;
1243
+ registerAs: import("zod").ZodOptional<import("zod").ZodString>;
1244
+ preview: import("zod").ZodOptional<import("zod").ZodNumber>;
1245
+ rowLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
1246
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1247
+ rowCount: import("zod").ZodNumber;
1248
+ columns: import("zod").ZodArray<import("zod").ZodObject<{
1249
+ name: import("zod").ZodString;
1250
+ type: import("zod").ZodString;
1251
+ }, import("zod/v4/core").$strip>>;
1252
+ rows: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
1253
+ dataframe: import("zod").ZodOptional<import("zod").ZodString>;
1254
+ }, import("zod/v4/core").$strip>, readonly [{
1255
+ readonly reason: 'sql_rejected';
1256
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1257
+ readonly when: 'SQL violated read-only rules (multi-statement, non-SELECT, or disallowed operation)';
1258
+ readonly recovery: 'Submit a single SELECT statement using only registered dataframes. For changes, use `registerAs` in this tool to materialize a result, or brapi_dataframe_drop to remove a dataframe.';
1259
+ }], {
1260
+ readonly truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
1261
+ readonly shown: import("zod").ZodOptional<import("zod").ZodNumber>;
1262
+ readonly cap: import("zod").ZodOptional<import("zod").ZodNumber>;
1263
+ readonly notice: import("zod").ZodOptional<import("zod").ZodString>;
1264
+ }> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1182
1265
  alias: import("zod").ZodOptional<import("zod").ZodString>;
1183
1266
  noun: import("zod").ZodString;
1184
1267
  body: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -1187,8 +1270,8 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1187
1270
  alias: import("zod").ZodString;
1188
1271
  noun: import("zod").ZodString;
1189
1272
  kind: import("zod").ZodEnum<{
1190
- sync: "sync";
1191
1273
  async: "async";
1274
+ sync: "sync";
1192
1275
  }>;
1193
1276
  searchResultsDbId: import("zod").ZodOptional<import("zod").ZodString>;
1194
1277
  metadata: import("zod").ZodObject<{
@@ -1213,88 +1296,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1213
1296
  totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1214
1297
  }, import("zod/v4/core").$strip>>;
1215
1298
  }, import("zod/v4/core").$strip>, readonly [{
1216
- readonly reason: "unknown_alias";
1299
+ readonly reason: 'unknown_alias';
1217
1300
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1218
- readonly when: "No connection has been registered under the requested alias";
1219
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_raw_search.";
1301
+ readonly when: 'No connection has been registered under the requested alias';
1302
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_raw_search.';
1220
1303
  }, {
1221
- readonly reason: "search_endpoint_disabled";
1304
+ readonly reason: 'search_endpoint_disabled';
1222
1305
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1223
- readonly when: "The active dialect declares this POST /search/{noun} route as known-dead on this server";
1224
- readonly recovery: "Use the curated find_* tool for this noun — it routes through GET filters instead and avoids the dead search route.";
1225
- }], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1226
- germplasmDbIds: import("zod").ZodArray<import("zod").ZodString>;
1227
- direction: import("zod").ZodDefault<import("zod").ZodEnum<{
1228
- both: "both";
1229
- ancestors: "ancestors";
1230
- descendants: "descendants";
1231
- }>>;
1232
- maxDepth: import("zod").ZodDefault<import("zod").ZodNumber>;
1233
- loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
1234
- alias: import("zod").ZodOptional<import("zod").ZodString>;
1235
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1236
- alias: import("zod").ZodString;
1237
- direction: import("zod").ZodEnum<{
1238
- both: "both";
1239
- ancestors: "ancestors";
1240
- descendants: "descendants";
1241
- }>;
1242
- maxDepth: import("zod").ZodNumber;
1243
- nodes: import("zod").ZodArray<import("zod").ZodObject<{
1244
- germplasmDbId: import("zod").ZodString;
1245
- germplasmName: import("zod").ZodOptional<import("zod").ZodString>;
1246
- depth: import("zod").ZodNumber;
1247
- isRoot: import("zod").ZodBoolean;
1248
- direction: import("zod").ZodEnum<{
1249
- root: "root";
1250
- ancestor: "ancestor";
1251
- descendant: "descendant";
1252
- both: "both";
1253
- }>;
1254
- }, import("zod/v4/core").$strip>>;
1255
- edges: import("zod").ZodArray<import("zod").ZodObject<{
1256
- from: import("zod").ZodString;
1257
- to: import("zod").ZodString;
1258
- relationship: import("zod").ZodEnum<{
1259
- parent: "parent";
1260
- child: "child";
1261
- }>;
1262
- parentType: import("zod").ZodOptional<import("zod").ZodString>;
1263
- }, import("zod/v4/core").$strip>>;
1264
- depthReached: import("zod").ZodNumber;
1265
- rootCount: import("zod").ZodNumber;
1266
- leafCount: import("zod").ZodNumber;
1267
- cycleCount: import("zod").ZodNumber;
1268
- deadEndCount: import("zod").ZodNumber;
1269
- truncated: import("zod").ZodBoolean;
1270
- warnings: import("zod").ZodArray<import("zod").ZodString>;
1271
- nodesDataframe: import("zod").ZodOptional<import("zod").ZodObject<{
1272
- tableName: import("zod").ZodString;
1273
- rowCount: import("zod").ZodNumber;
1274
- columns: import("zod").ZodArray<import("zod").ZodString>;
1275
- columnLegend: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
1276
- createdAt: import("zod").ZodString;
1277
- expiresAt: import("zod").ZodString;
1278
- truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
1279
- maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
1280
- totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1281
- }, import("zod/v4/core").$strip>>;
1282
- edgesDataframe: import("zod").ZodOptional<import("zod").ZodObject<{
1283
- tableName: import("zod").ZodString;
1284
- rowCount: import("zod").ZodNumber;
1285
- columns: import("zod").ZodArray<import("zod").ZodString>;
1286
- columnLegend: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
1287
- createdAt: import("zod").ZodString;
1288
- expiresAt: import("zod").ZodString;
1289
- truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
1290
- maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
1291
- totalCount: import("zod").ZodOptional<import("zod").ZodNumber>;
1292
- }, import("zod/v4/core").$strip>>;
1293
- }, import("zod/v4/core").$strip>, readonly [{
1294
- readonly reason: "unknown_alias";
1295
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1296
- readonly when: "No connection has been registered under the requested alias";
1297
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_walk_pedigree.";
1306
+ readonly when: 'The active dialect declares this POST /search/{noun} route as known-dead on this server';
1307
+ readonly recovery: 'Use the curated find_* tool for this noun — it routes through GET filters instead and avoids the dead search route.';
1298
1308
  }], undefined>)[];
1299
1309
  /**
1300
1310
  * Drop tool — opt-in via `BRAPI_CANVAS_DROP_ENABLED`. Off by default; the
@@ -1317,8 +1327,8 @@ export declare const exportToolDefinitions: import("@cyanheads/mcp-ts-core").Too
1317
1327
  dataframe: import("zod").ZodString;
1318
1328
  format: import("zod").ZodEnum<{
1319
1329
  csv: "csv";
1320
- parquet: "parquet";
1321
1330
  json: "json";
1331
+ parquet: "parquet";
1322
1332
  }>;
1323
1333
  filename: import("zod").ZodOptional<import("zod").ZodString>;
1324
1334
  columns: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
@@ -1327,8 +1337,8 @@ export declare const exportToolDefinitions: import("@cyanheads/mcp-ts-core").Too
1327
1337
  dataframe: import("zod").ZodString;
1328
1338
  format: import("zod").ZodEnum<{
1329
1339
  csv: "csv";
1330
- parquet: "parquet";
1331
1340
  json: "json";
1341
+ parquet: "parquet";
1332
1342
  }>;
1333
1343
  path: import("zod").ZodString;
1334
1344
  filename: import("zod").ZodString;
@@ -1340,25 +1350,25 @@ export declare const exportToolDefinitions: import("@cyanheads/mcp-ts-core").Too
1340
1350
  }, import("zod/v4/core").$strip>>;
1341
1351
  expiresAt: import("zod").ZodString;
1342
1352
  }, import("zod/v4/core").$strip>, readonly [{
1343
- readonly reason: "export_dir_unset";
1353
+ readonly reason: 'export_dir_unset';
1344
1354
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ConfigurationError;
1345
- readonly when: "BRAPI_EXPORT_DIR is not configured (defensive — the registration gate normally hides the tool when this happens)";
1346
- readonly recovery: "Set BRAPI_EXPORT_DIR on the server before retrying.";
1355
+ readonly when: 'BRAPI_EXPORT_DIR is not configured (defensive — the registration gate normally hides the tool when this happens)';
1356
+ readonly recovery: 'Set BRAPI_EXPORT_DIR on the server before retrying.';
1347
1357
  }, {
1348
- readonly reason: "dataframe_not_found";
1358
+ readonly reason: 'dataframe_not_found';
1349
1359
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1350
- readonly when: "No dataframe with this name exists on the canvas (expired, dropped, or typo)";
1351
- readonly recovery: "Call brapi_dataframe_describe to list available dataframes.";
1360
+ readonly when: 'No dataframe with this name exists on the canvas (expired, dropped, or typo)';
1361
+ readonly recovery: 'Call brapi_dataframe_describe to list available dataframes.';
1352
1362
  }, {
1353
- readonly reason: "invalid_filename";
1363
+ readonly reason: 'invalid_filename';
1354
1364
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1355
- readonly when: "filename contains path separators or traversal segments";
1356
- readonly recovery: "Provide a filename without \"/\", \"\\\", or \"..\" — leave it unset to use the default.";
1365
+ readonly when: 'filename contains path separators or traversal segments';
1366
+ readonly recovery: 'Provide a filename without "/", "\\", or ".." — leave it unset to use the default.';
1357
1367
  }, {
1358
- readonly reason: "mutually_exclusive_projection";
1368
+ readonly reason: 'mutually_exclusive_projection';
1359
1369
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1360
- readonly when: "Both `columns` and `sql` were supplied";
1361
- readonly recovery: "Pass either `columns` for a thin projection or `sql` for filtering/aggregation, not both.";
1370
+ readonly when: 'Both `columns` and `sql` were supplied';
1371
+ readonly recovery: 'Pass either `columns` for a thin projection or `sql` for filtering/aggregation, not both.';
1362
1372
  }], undefined>[];
1363
1373
  /** Write tools — registered only when `BRAPI_ENABLE_WRITES=true`. */
1364
1374
  export declare const writeToolDefinitions: import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
@@ -1385,8 +1395,8 @@ export declare const writeToolDefinitions: import("@cyanheads/mcp-ts-core").Tool
1385
1395
  }, import("zod/v4/core").$strip>>;
1386
1396
  }, import("zod/v4/core").$strip>>;
1387
1397
  mode: import("zod").ZodDefault<import("zod").ZodEnum<{
1388
- preview: "preview";
1389
1398
  apply: "apply";
1399
+ preview: "preview";
1390
1400
  }>>;
1391
1401
  force: import("zod").ZodDefault<import("zod").ZodBoolean>;
1392
1402
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -1435,39 +1445,34 @@ export declare const writeToolDefinitions: import("@cyanheads/mcp-ts-core").Tool
1435
1445
  warnings: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1436
1446
  }, import("zod/v4/core").$strip>], "mode">;
1437
1447
  }, import("zod/v4/core").$strip>, readonly [{
1438
- readonly reason: "unknown_alias";
1448
+ readonly reason: 'unknown_alias';
1439
1449
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1440
- readonly when: "No connection has been registered under the requested alias";
1441
- readonly recovery: "Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_submit_observations.";
1450
+ readonly when: 'No connection has been registered under the requested alias';
1451
+ readonly recovery: 'Run brapi_connect with this alias (or omit `alias` to use the default connection) before calling brapi_submit_observations.';
1442
1452
  }, {
1443
- readonly reason: "observations_unsupported";
1453
+ readonly reason: 'observations_unsupported';
1444
1454
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1445
- readonly when: "BrAPI server does not advertise /observations";
1446
- 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.";
1455
+ readonly when: 'BrAPI server does not advertise /observations';
1456
+ 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.';
1447
1457
  }, {
1448
- readonly reason: "study_not_found";
1458
+ readonly reason: 'study_not_found';
1449
1459
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1450
- readonly when: "Upstream returned no study record for the requested studyDbId";
1451
- readonly recovery: "Verify the studyDbId on the target server, or run brapi_find_studies to discover valid IDs before retrying.";
1460
+ readonly when: 'Upstream returned no study record for the requested studyDbId';
1461
+ readonly recovery: 'Verify the studyDbId on the target server, or run brapi_find_studies to discover valid IDs before retrying.';
1452
1462
  }, {
1453
- readonly reason: "post_unsupported";
1463
+ readonly reason: 'post_unsupported';
1454
1464
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1455
- readonly when: "Server does not advertise POST on /observations but new rows were submitted";
1456
- 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.";
1465
+ readonly when: 'Server does not advertise POST on /observations but new rows were submitted';
1466
+ 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.';
1457
1467
  }, {
1458
- readonly reason: "put_unsupported";
1468
+ readonly reason: 'put_unsupported';
1459
1469
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1460
- readonly when: "Server does not advertise PUT on /observations but update rows were submitted";
1461
- 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.";
1462
- }, {
1463
- readonly reason: "elicit_unavailable";
1464
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1465
- readonly when: "Apply mode invoked but client does not expose ctx.elicit and force was false";
1466
- readonly recovery: "Set force=true only with explicit user authorization, or use a client that supports elicitation.";
1470
+ readonly when: 'Server does not advertise PUT on /observations but update rows were submitted';
1471
+ 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.';
1467
1472
  }, {
1468
- readonly reason: "user_declined";
1473
+ readonly reason: 'user_declined';
1469
1474
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1470
- readonly when: "User declined the elicitation prompt for the apply write";
1471
- readonly recovery: "Re-run the tool when the user is ready to confirm the write.";
1475
+ readonly when: 'The confirmation round came back declined, cancelled, or without a true `confirm` value';
1476
+ readonly recovery: 'Re-run brapi_submit_observations when the user is ready to confirm, or pass force=true with explicit out-of-band authorization.';
1472
1477
  }], undefined>[];
1473
1478
  //# sourceMappingURL=index.d.ts.map