@cyanheads/brapi-mcp-server 0.4.13 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CLAUDE.md +25 -19
  2. package/README.md +40 -26
  3. package/changelog/0.4.x/0.4.13.md +15 -0
  4. package/changelog/0.4.x/0.4.14.md +22 -0
  5. package/changelog/0.5.x/0.5.0.md +59 -0
  6. package/dist/config/builtin-aliases.d.ts +1 -1
  7. package/dist/config/builtin-aliases.js +1 -1
  8. package/dist/config/server-config.d.ts +3 -3
  9. package/dist/config/server-config.d.ts.map +1 -1
  10. package/dist/config/server-config.js +13 -13
  11. package/dist/config/server-config.js.map +1 -1
  12. package/dist/index.js +62 -15
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +1 -1
  15. package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -1
  16. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +3 -3
  17. package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts +8 -11
  19. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js +15 -25
  21. package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts +6 -10
  23. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js +6 -16
  25. package/dist/mcp-server/tools/definitions/brapi-dataframe-drop.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts +69 -0
  27. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts.map +1 -0
  28. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js +233 -0
  29. package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js.map +1 -0
  30. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts +19 -11
  31. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.d.ts.map +1 -1
  32. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js +80 -28
  33. package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js.map +1 -1
  34. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +4 -6
  35. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -1
  36. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +28 -36
  37. package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -1
  38. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +3 -5
  39. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -1
  40. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +21 -17
  41. package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -1
  42. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +4 -6
  43. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -1
  44. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +16 -16
  45. package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -1
  46. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +3 -5
  47. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -1
  48. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +15 -15
  49. package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -1
  50. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +4 -6
  51. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -1
  52. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +17 -17
  53. package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -1
  54. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +4 -6
  55. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -1
  56. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +17 -17
  57. package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -1
  58. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +2 -4
  59. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -1
  60. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +60 -19
  61. package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -1
  62. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +3 -5
  63. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -1
  64. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +15 -15
  65. package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -1
  66. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -1
  67. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +6 -2
  68. package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -1
  69. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +17 -2
  70. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -1
  71. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +51 -7
  72. package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -1
  73. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +16 -2
  74. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -1
  75. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +51 -5
  76. package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -1
  77. package/dist/mcp-server/tools/definitions/index.d.ts +141 -165
  78. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  79. package/dist/mcp-server/tools/definitions/index.js +28 -17
  80. package/dist/mcp-server/tools/definitions/index.js.map +1 -1
  81. package/dist/mcp-server/tools/shared/find-helpers.d.ts +79 -39
  82. package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -1
  83. package/dist/mcp-server/tools/shared/find-helpers.js +167 -70
  84. package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -1
  85. package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -1
  86. package/dist/mcp-server/tools/shared/raw-routing-hints.js +6 -6
  87. package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -1
  88. package/dist/services/canvas-bridge/canvas-bridge.d.ts +69 -44
  89. package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -1
  90. package/dist/services/canvas-bridge/canvas-bridge.js +220 -103
  91. package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -1
  92. package/dist/services/canvas-bridge/index.d.ts +1 -1
  93. package/dist/services/canvas-bridge/index.d.ts.map +1 -1
  94. package/dist/services/canvas-bridge/index.js +1 -1
  95. package/dist/services/canvas-bridge/index.js.map +1 -1
  96. package/dist/services/canvas-bridge/types.d.ts +11 -12
  97. package/dist/services/canvas-bridge/types.d.ts.map +1 -1
  98. package/dist/services/canvas-bridge/types.js +4 -4
  99. package/package.json +3 -11
  100. package/server.json +3 -3
  101. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +0 -13
  102. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +0 -1
  103. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +0 -26
  104. package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +0 -1
  105. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +0 -89
  106. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +0 -1
  107. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +0 -306
  108. package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +0 -1
  109. package/dist/services/dataset-store/dataset-store.d.ts +0 -44
  110. package/dist/services/dataset-store/dataset-store.d.ts.map +0 -1
  111. package/dist/services/dataset-store/dataset-store.js +0 -208
  112. package/dist/services/dataset-store/dataset-store.js.map +0 -1
  113. package/dist/services/dataset-store/index.d.ts +0 -8
  114. package/dist/services/dataset-store/index.d.ts.map +0 -1
  115. package/dist/services/dataset-store/index.js +0 -7
  116. package/dist/services/dataset-store/index.js.map +0 -1
  117. package/dist/services/dataset-store/types.d.ts +0 -72
  118. package/dist/services/dataset-store/types.d.ts.map +0 -1
  119. package/dist/services/dataset-store/types.js +0 -8
  120. package/dist/services/dataset-store/types.js.map +0 -1
@@ -1,11 +1,20 @@
1
1
  /**
2
- * @fileoverview Tool registration barrel. The write tool
3
- * (`brapi_submit_observations`) is exported separately so callers can decide
4
- * whether to register it based on the `BRAPI_ENABLE_WRITES` flag keeping
5
- * this module free of eager config reads.
2
+ * @fileoverview Tool registration barrel. Splits definitions into four groups
3
+ * the entry point composes based on operator gates: read-only tools register
4
+ * unconditionally, `brapi_dataframe_drop` registers only when
5
+ * `BRAPI_CANVAS_DROP_ENABLED=true`, `brapi_dataframe_export` registers only
6
+ * when `BRAPI_EXPORT_DIR` is set AND `MCP_TRANSPORT_TYPE=stdio`, and
7
+ * `brapi_submit_observations` registers only when `BRAPI_ENABLE_WRITES=true`.
8
+ * Keeping the gating in `src/index.ts` keeps this module free of eager
9
+ * config reads.
10
+ *
6
11
  * @module mcp-server/tools/definitions/index
7
12
  */
8
- /** Read-only tools registered unconditionally on every server. */
13
+ /**
14
+ * Read-only tools registered unconditionally on every server. Includes
15
+ * `brapi_dataframe_describe` and `brapi_dataframe_query` — canvas is
16
+ * mandatory, so the discovery + read surface always registers.
17
+ */
9
18
  export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
10
19
  endpoint: import("zod").ZodEnum<{
11
20
  [x: string]: string;
@@ -292,6 +301,44 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
292
301
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
293
302
  readonly when: "Token endpoint responded but did not return an access_token";
294
303
  readonly recovery: "Confirm the credentials are valid and the upstream IdP issues access tokens for this grant.";
304
+ }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
305
+ dataframe: import("zod").ZodOptional<import("zod").ZodString>;
306
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
307
+ tables: import("zod").ZodArray<import("zod").ZodObject<{
308
+ name: import("zod").ZodString;
309
+ rowCount: import("zod").ZodNumber;
310
+ columns: import("zod").ZodArray<import("zod").ZodObject<{
311
+ name: import("zod").ZodString;
312
+ type: import("zod").ZodString;
313
+ nullable: import("zod").ZodOptional<import("zod").ZodBoolean>;
314
+ }, import("zod/v4/core").$strip>>;
315
+ approxSizeBytes: import("zod").ZodOptional<import("zod").ZodNumber>;
316
+ provenance: import("zod").ZodOptional<import("zod").ZodObject<{
317
+ source: import("zod").ZodString;
318
+ baseUrl: import("zod").ZodString;
319
+ query: import("zod").ZodUnknown;
320
+ createdAt: import("zod").ZodString;
321
+ expiresAt: import("zod").ZodString;
322
+ }, import("zod/v4/core").$strip>>;
323
+ }, import("zod/v4/core").$strip>>;
324
+ }, import("zod/v4/core").$strip>, undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
325
+ sql: import("zod").ZodString;
326
+ registerAs: import("zod").ZodOptional<import("zod").ZodString>;
327
+ preview: import("zod").ZodOptional<import("zod").ZodNumber>;
328
+ rowLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
329
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
330
+ rowCount: import("zod").ZodNumber;
331
+ columns: import("zod").ZodArray<import("zod").ZodObject<{
332
+ name: import("zod").ZodString;
333
+ type: import("zod").ZodString;
334
+ }, import("zod/v4/core").$strip>>;
335
+ rows: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
336
+ dataframe: import("zod").ZodOptional<import("zod").ZodString>;
337
+ }, import("zod/v4/core").$strip>, readonly [{
338
+ readonly reason: "sql_rejected";
339
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
340
+ readonly when: "SQL violated read-only rules (multi-statement, non-SELECT, or disallowed operation)";
341
+ 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.";
295
342
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
296
343
  alias: import("zod").ZodOptional<import("zod").ZodString>;
297
344
  variantSetDbId: import("zod").ZodOptional<import("zod").ZodString>;
@@ -334,16 +381,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
334
381
  variantName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
335
382
  variantSetDbId: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
336
383
  }, import("zod/v4/core").$strip>;
337
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
338
- datasetId: import("zod").ZodString;
384
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
385
+ tableName: import("zod").ZodString;
339
386
  rowCount: import("zod").ZodNumber;
340
- sizeBytes: import("zod").ZodNumber;
341
387
  columns: import("zod").ZodArray<import("zod").ZodString>;
342
388
  createdAt: import("zod").ZodString;
343
389
  expiresAt: import("zod").ZodString;
344
390
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
345
391
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
346
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
347
392
  }, import("zod/v4/core").$strip>>;
348
393
  truncated: import("zod").ZodBoolean;
349
394
  warnings: import("zod").ZodArray<import("zod").ZodString>;
@@ -407,16 +452,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
407
452
  countryOfOriginCode: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
408
453
  }, import("zod/v4/core").$strip>;
409
454
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
410
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
411
- datasetId: import("zod").ZodString;
455
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
456
+ tableName: import("zod").ZodString;
412
457
  rowCount: import("zod").ZodNumber;
413
- sizeBytes: import("zod").ZodNumber;
414
458
  columns: import("zod").ZodArray<import("zod").ZodString>;
415
459
  createdAt: import("zod").ZodString;
416
460
  expiresAt: import("zod").ZodString;
417
461
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
418
462
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
419
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
420
463
  }, import("zod/v4/core").$strip>>;
421
464
  warnings: import("zod").ZodArray<import("zod").ZodString>;
422
465
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -467,16 +510,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
467
510
  descriptiveOntologyTerms: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
468
511
  }, import("zod/v4/core").$strip>;
469
512
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
470
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
471
- datasetId: import("zod").ZodString;
513
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
514
+ tableName: import("zod").ZodString;
472
515
  rowCount: import("zod").ZodNumber;
473
- sizeBytes: import("zod").ZodNumber;
474
516
  columns: import("zod").ZodArray<import("zod").ZodString>;
475
517
  createdAt: import("zod").ZodString;
476
518
  expiresAt: import("zod").ZodString;
477
519
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
478
520
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
479
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
480
521
  }, import("zod/v4/core").$strip>>;
481
522
  warnings: import("zod").ZodArray<import("zod").ZodString>;
482
523
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -525,16 +566,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
525
566
  locationType: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
526
567
  }, import("zod/v4/core").$strip>;
527
568
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
528
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
529
- datasetId: import("zod").ZodString;
569
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
570
+ tableName: import("zod").ZodString;
530
571
  rowCount: import("zod").ZodNumber;
531
- sizeBytes: import("zod").ZodNumber;
532
572
  columns: import("zod").ZodArray<import("zod").ZodString>;
533
573
  createdAt: import("zod").ZodString;
534
574
  expiresAt: import("zod").ZodString;
535
575
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
536
576
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
537
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
538
577
  }, import("zod/v4/core").$strip>>;
539
578
  warnings: import("zod").ZodArray<import("zod").ZodString>;
540
579
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -597,16 +636,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
597
636
  season: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
598
637
  }, import("zod/v4/core").$strip>;
599
638
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
600
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
601
- datasetId: import("zod").ZodString;
639
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
640
+ tableName: import("zod").ZodString;
602
641
  rowCount: import("zod").ZodNumber;
603
- sizeBytes: import("zod").ZodNumber;
604
642
  columns: import("zod").ZodArray<import("zod").ZodString>;
605
643
  createdAt: import("zod").ZodString;
606
644
  expiresAt: import("zod").ZodString;
607
645
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
608
646
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
609
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
610
647
  }, import("zod/v4/core").$strip>>;
611
648
  warnings: import("zod").ZodArray<import("zod").ZodString>;
612
649
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -659,16 +696,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
659
696
  commonCropName: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
660
697
  }, import("zod/v4/core").$strip>;
661
698
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
662
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
663
- datasetId: import("zod").ZodString;
699
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
700
+ tableName: import("zod").ZodString;
664
701
  rowCount: import("zod").ZodNumber;
665
- sizeBytes: import("zod").ZodNumber;
666
702
  columns: import("zod").ZodArray<import("zod").ZodString>;
667
703
  createdAt: import("zod").ZodString;
668
704
  expiresAt: import("zod").ZodString;
669
705
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
670
706
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
671
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
672
707
  }, import("zod/v4/core").$strip>>;
673
708
  warnings: import("zod").ZodArray<import("zod").ZodString>;
674
709
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -740,16 +775,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
740
775
  }>;
741
776
  }, import("zod/v4/core").$strip>>;
742
777
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
743
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
744
- datasetId: import("zod").ZodString;
778
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
779
+ tableName: import("zod").ZodString;
745
780
  rowCount: import("zod").ZodNumber;
746
- sizeBytes: import("zod").ZodNumber;
747
781
  columns: import("zod").ZodArray<import("zod").ZodString>;
748
782
  createdAt: import("zod").ZodString;
749
783
  expiresAt: import("zod").ZodString;
750
784
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
751
785
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
752
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
753
786
  }, import("zod/v4/core").$strip>>;
754
787
  warnings: import("zod").ZodArray<import("zod").ZodString>;
755
788
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -794,16 +827,14 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
794
827
  variantSetDbId: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNumber>;
795
828
  }, import("zod/v4/core").$strip>;
796
829
  refinementHint: import("zod").ZodOptional<import("zod").ZodString>;
797
- dataset: import("zod").ZodOptional<import("zod").ZodObject<{
798
- datasetId: import("zod").ZodString;
830
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
831
+ tableName: import("zod").ZodString;
799
832
  rowCount: import("zod").ZodNumber;
800
- sizeBytes: import("zod").ZodNumber;
801
833
  columns: import("zod").ZodArray<import("zod").ZodString>;
802
834
  createdAt: import("zod").ZodString;
803
835
  expiresAt: import("zod").ZodString;
804
836
  truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
805
837
  maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
806
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
807
838
  }, import("zod/v4/core").$strip>>;
808
839
  warnings: import("zod").ZodArray<import("zod").ZodString>;
809
840
  appliedFilters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
@@ -856,85 +887,11 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
856
887
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
857
888
  readonly when: "BrAPI server does not advertise /images in /serverinfo";
858
889
  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.";
859
- }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
860
- mode: import("zod").ZodEnum<{
861
- delete: "delete";
862
- list: "list";
863
- summary: "summary";
864
- load: "load";
865
- }>;
866
- datasetId: import("zod").ZodOptional<import("zod").ZodString>;
867
- cursor: import("zod").ZodOptional<import("zod").ZodString>;
868
- limit: import("zod").ZodOptional<import("zod").ZodNumber>;
869
- page: import("zod").ZodOptional<import("zod").ZodNumber>;
870
- pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
871
- columns: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
872
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
873
- result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
874
- mode: import("zod").ZodLiteral<"list">;
875
- datasets: import("zod").ZodArray<import("zod").ZodObject<{
876
- datasetId: import("zod").ZodString;
877
- source: import("zod").ZodString;
878
- baseUrl: import("zod").ZodString;
879
- query: import("zod").ZodUnknown;
880
- rowCount: import("zod").ZodNumber;
881
- columns: import("zod").ZodArray<import("zod").ZodString>;
882
- sizeBytes: import("zod").ZodNumber;
883
- createdAt: import("zod").ZodString;
884
- expiresAt: import("zod").ZodString;
885
- truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
886
- maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
887
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
888
- }, import("zod/v4/core").$strip>>;
889
- cursor: import("zod").ZodOptional<import("zod").ZodString>;
890
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
891
- mode: import("zod").ZodLiteral<"summary">;
892
- dataset: import("zod").ZodObject<{
893
- datasetId: import("zod").ZodString;
894
- source: import("zod").ZodString;
895
- baseUrl: import("zod").ZodString;
896
- query: import("zod").ZodUnknown;
897
- rowCount: import("zod").ZodNumber;
898
- columns: import("zod").ZodArray<import("zod").ZodString>;
899
- sizeBytes: import("zod").ZodNumber;
900
- createdAt: import("zod").ZodString;
901
- expiresAt: import("zod").ZodString;
902
- truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
903
- maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
904
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
905
- }, import("zod/v4/core").$strip>;
906
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
907
- mode: import("zod").ZodLiteral<"load">;
908
- datasetId: import("zod").ZodString;
909
- page: import("zod").ZodNumber;
910
- pageSize: import("zod").ZodNumber;
911
- totalRows: import("zod").ZodNumber;
912
- totalPages: import("zod").ZodNumber;
913
- rows: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
914
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
915
- mode: import("zod").ZodLiteral<"delete">;
916
- datasetId: import("zod").ZodString;
917
- deleted: import("zod").ZodLiteral<true>;
918
- }, import("zod/v4/core").$strip>], "mode">;
919
- }, import("zod/v4/core").$strip>, readonly [{
920
- readonly reason: "datasetid_required";
921
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
922
- readonly when: "Mode summary, load, or delete was selected without a datasetId";
923
- readonly recovery: "Call mode=list first to discover available dataset IDs, then retry with one.";
924
- }, {
925
- readonly reason: "dataset_not_found";
926
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
927
- readonly when: "Requested dataset is not present in the store (never existed or already expired)";
928
- readonly recovery: "Run mode=list to confirm available datasets, or rerun the find_* tool that produced it.";
929
- }, {
930
- readonly reason: "dataset_rows_missing";
931
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
932
- readonly when: "Dataset metadata is present but the row payload was lost or partially expired";
933
- readonly recovery: "Delete the stale dataset via mode=delete and rerun the find_* tool that produced it.";
934
890
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
935
891
  alias: import("zod").ZodOptional<import("zod").ZodString>;
936
892
  path: import("zod").ZodString;
937
893
  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]>>]>>>;
894
+ loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
938
895
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
939
896
  alias: import("zod").ZodString;
940
897
  url: import("zod").ZodString;
@@ -949,6 +906,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
949
906
  }, import("zod/v4/core").$loose>;
950
907
  result: import("zod").ZodUnknown;
951
908
  suggestion: import("zod").ZodOptional<import("zod").ZodString>;
909
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
910
+ tableName: import("zod").ZodString;
911
+ rowCount: import("zod").ZodNumber;
912
+ columns: import("zod").ZodArray<import("zod").ZodString>;
913
+ createdAt: import("zod").ZodString;
914
+ expiresAt: import("zod").ZodString;
915
+ truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
916
+ maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
917
+ }, import("zod/v4/core").$strip>>;
952
918
  }, import("zod/v4/core").$strip>, readonly [{
953
919
  readonly reason: "cross_origin_path";
954
920
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -958,6 +924,7 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
958
924
  alias: import("zod").ZodOptional<import("zod").ZodString>;
959
925
  noun: import("zod").ZodString;
960
926
  body: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
927
+ loadLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
961
928
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
962
929
  alias: import("zod").ZodString;
963
930
  noun: import("zod").ZodString;
@@ -976,6 +943,15 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
976
943
  }, import("zod/v4/core").$loose>;
977
944
  result: import("zod").ZodUnknown;
978
945
  suggestion: import("zod").ZodOptional<import("zod").ZodString>;
946
+ dataframe: import("zod").ZodOptional<import("zod").ZodObject<{
947
+ tableName: import("zod").ZodString;
948
+ rowCount: import("zod").ZodNumber;
949
+ columns: import("zod").ZodArray<import("zod").ZodString>;
950
+ createdAt: import("zod").ZodString;
951
+ expiresAt: import("zod").ZodString;
952
+ truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
953
+ maxRows: import("zod").ZodOptional<import("zod").ZodNumber>;
954
+ }, import("zod/v4/core").$strip>>;
979
955
  }, import("zod/v4/core").$strip>, readonly [{
980
956
  readonly reason: "search_endpoint_disabled";
981
957
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -1022,69 +998,69 @@ export declare const readOnlyToolDefinitions: (import("@cyanheads/mcp-ts-core").
1022
998
  warnings: import("zod").ZodArray<import("zod").ZodString>;
1023
999
  }, import("zod/v4/core").$strip>, undefined>)[];
1024
1000
  /**
1025
- * Dataframe toolsregistered only when both the framework canvas service
1026
- * and BRAPI_CANVAS_ENABLED are on. The dataframe surface is opt-in (Tier 3,
1027
- * requires the optional `@duckdb/node-api` peer dep). Hidden from
1028
- * `tools/list` when disabled so the agent doesn't see capabilities it can't
1029
- * use.
1001
+ * Drop toolopt-in via `BRAPI_CANVAS_DROP_ENABLED`. Off by default; the
1002
+ * underlying canvas tables expire via TTL when left unmanaged, so explicit
1003
+ * drop is only needed when the operator wants to free workspace memory
1004
+ * immediately.
1030
1005
  */
1031
- export declare const dataframeToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1032
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
1033
- }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1034
- tables: import("zod").ZodArray<import("zod").ZodObject<{
1035
- name: import("zod").ZodString;
1036
- rowCount: import("zod").ZodNumber;
1037
- columns: import("zod").ZodArray<import("zod").ZodObject<{
1038
- name: import("zod").ZodString;
1039
- type: import("zod").ZodString;
1040
- nullable: import("zod").ZodOptional<import("zod").ZodBoolean>;
1041
- }, import("zod/v4/core").$strip>>;
1042
- approxSizeBytes: import("zod").ZodOptional<import("zod").ZodNumber>;
1043
- provenance: import("zod").ZodOptional<import("zod").ZodObject<{
1044
- datasetId: import("zod").ZodString;
1045
- source: import("zod").ZodString;
1046
- baseUrl: import("zod").ZodString;
1047
- query: import("zod").ZodUnknown;
1048
- createdAt: import("zod").ZodString;
1049
- expiresAt: import("zod").ZodString;
1050
- }, import("zod/v4/core").$strip>>;
1051
- }, import("zod/v4/core").$strip>>;
1052
- }, import("zod/v4/core").$strip>, readonly [{
1053
- readonly reason: "dataframe_disabled";
1054
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
1055
- readonly when: "Dataframe surface is not enabled on this deployment";
1056
- readonly recovery: "Use brapi_manage_dataset (mode=list) to enumerate datasets directly — the dataframe surface is gated off here.";
1057
- }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1006
+ export declare const dropToolDefinitions: import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1058
1007
  dataframe: import("zod").ZodString;
1059
1008
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1060
1009
  dataframe: import("zod").ZodString;
1061
1010
  dropped: import("zod").ZodBoolean;
1062
- }, import("zod/v4/core").$strip>, readonly [{
1063
- readonly reason: "dataframe_disabled";
1064
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
1065
- readonly when: "Dataframe surface is not enabled on this deployment";
1066
- readonly recovery: "Use brapi_manage_dataset (mode=delete) to drop the underlying dataset the dataframe surface is gated off here.";
1067
- }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1068
- sql: import("zod").ZodString;
1069
- registerAs: import("zod").ZodOptional<import("zod").ZodString>;
1070
- preview: import("zod").ZodOptional<import("zod").ZodNumber>;
1071
- rowLimit: import("zod").ZodOptional<import("zod").ZodNumber>;
1011
+ }, import("zod/v4/core").$strip>, undefined>[];
1012
+ /**
1013
+ * Export tool — gated by `BRAPI_EXPORT_DIR` (the opt-in) AND
1014
+ * `MCP_TRANSPORT_TYPE=stdio` (path output is meaningful only when the server
1015
+ * runs on the user's machine). Both checks live in `src/index.ts`.
1016
+ */
1017
+ export declare const exportToolDefinitions: import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1018
+ dataframe: import("zod").ZodString;
1019
+ format: import("zod").ZodEnum<{
1020
+ csv: "csv";
1021
+ parquet: "parquet";
1022
+ json: "json";
1023
+ }>;
1024
+ filename: import("zod").ZodOptional<import("zod").ZodString>;
1025
+ columns: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
1026
+ sql: import("zod").ZodOptional<import("zod").ZodString>;
1072
1027
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1028
+ dataframe: import("zod").ZodString;
1029
+ format: import("zod").ZodEnum<{
1030
+ csv: "csv";
1031
+ parquet: "parquet";
1032
+ json: "json";
1033
+ }>;
1034
+ path: import("zod").ZodString;
1035
+ filename: import("zod").ZodString;
1036
+ sizeBytes: import("zod").ZodNumber;
1073
1037
  rowCount: import("zod").ZodNumber;
1074
- columns: import("zod").ZodArray<import("zod").ZodString>;
1075
- rows: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
1076
- dataframe: import("zod").ZodOptional<import("zod").ZodString>;
1038
+ columns: import("zod").ZodArray<import("zod").ZodObject<{
1039
+ name: import("zod").ZodString;
1040
+ type: import("zod").ZodString;
1041
+ }, import("zod/v4/core").$strip>>;
1042
+ expiresAt: import("zod").ZodString;
1077
1043
  }, import("zod/v4/core").$strip>, readonly [{
1078
- readonly reason: "dataframe_disabled";
1079
- readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
1080
- readonly when: "Dataframe surface is not enabled on this deployment";
1081
- readonly recovery: "Use brapi_manage_dataset (mode=load) to page rows from the underlying dataset — SQL across dataframes is gated off here.";
1044
+ readonly reason: "export_dir_unset";
1045
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ConfigurationError;
1046
+ readonly when: "BRAPI_EXPORT_DIR is not configured (defensive — the registration gate normally hides the tool when this happens)";
1047
+ readonly recovery: "Set BRAPI_EXPORT_DIR on the server before retrying.";
1082
1048
  }, {
1083
- readonly reason: "sql_rejected";
1049
+ readonly reason: "dataframe_not_found";
1050
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1051
+ readonly when: "No dataframe with this name exists on the canvas (expired, dropped, or typo)";
1052
+ readonly recovery: "Call brapi_dataframe_describe to list available dataframes.";
1053
+ }, {
1054
+ readonly reason: "invalid_filename";
1084
1055
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1085
- readonly when: "SQL violated read-only rules (multi-statement, non-SELECT, or disallowed operation)";
1086
- 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.";
1087
- }]>)[];
1056
+ readonly when: "filename contains path separators or traversal segments";
1057
+ readonly recovery: "Provide a filename without \"/\", \"\\\", or \"..\" leave it unset to use the default.";
1058
+ }, {
1059
+ readonly reason: "mutually_exclusive_projection";
1060
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1061
+ readonly when: "Both `columns` and `sql` were supplied";
1062
+ readonly recovery: "Pass either `columns` for a thin projection or `sql` for filtering/aggregation, not both.";
1063
+ }]>[];
1088
1064
  /** Write tools — registered only when `BRAPI_ENABLE_WRITES=true`. */
1089
1065
  export declare const writeToolDefinitions: import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1090
1066
  alias: import("zod").ZodOptional<import("zod").ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH,kEAAkE;AAClE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAmBnC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAIpC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyBH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAoBnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;8CAAuB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAAyB,CAAC;AAE5D,qEAAqE;AACrE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAA4B,CAAC"}
@@ -1,13 +1,19 @@
1
1
  /**
2
- * @fileoverview Tool registration barrel. The write tool
3
- * (`brapi_submit_observations`) is exported separately so callers can decide
4
- * whether to register it based on the `BRAPI_ENABLE_WRITES` flag keeping
5
- * this module free of eager config reads.
2
+ * @fileoverview Tool registration barrel. Splits definitions into four groups
3
+ * the entry point composes based on operator gates: read-only tools register
4
+ * unconditionally, `brapi_dataframe_drop` registers only when
5
+ * `BRAPI_CANVAS_DROP_ENABLED=true`, `brapi_dataframe_export` registers only
6
+ * when `BRAPI_EXPORT_DIR` is set AND `MCP_TRANSPORT_TYPE=stdio`, and
7
+ * `brapi_submit_observations` registers only when `BRAPI_ENABLE_WRITES=true`.
8
+ * Keeping the gating in `src/index.ts` keeps this module free of eager
9
+ * config reads.
10
+ *
6
11
  * @module mcp-server/tools/definitions/index
7
12
  */
8
13
  import { brapiConnect } from './brapi-connect.tool.js';
9
14
  import { brapiDataframeDescribe } from './brapi-dataframe-describe.tool.js';
10
15
  import { brapiDataframeDrop } from './brapi-dataframe-drop.tool.js';
16
+ import { brapiDataframeExport } from './brapi-dataframe-export.tool.js';
11
17
  import { brapiDataframeQuery } from './brapi-dataframe-query.tool.js';
12
18
  import { brapiDescribeFilters } from './brapi-describe-filters.tool.js';
13
19
  import { brapiFindGenotypeCalls } from './brapi-find-genotype-calls.tool.js';
@@ -21,13 +27,16 @@ import { brapiFindVariants } from './brapi-find-variants.tool.js';
21
27
  import { brapiGetGermplasm } from './brapi-get-germplasm.tool.js';
22
28
  import { brapiGetImage } from './brapi-get-image.tool.js';
23
29
  import { brapiGetStudy } from './brapi-get-study.tool.js';
24
- import { brapiManageDataset } from './brapi-manage-dataset.tool.js';
25
30
  import { brapiRawGet } from './brapi-raw-get.tool.js';
26
31
  import { brapiRawSearch } from './brapi-raw-search.tool.js';
27
32
  import { brapiServerInfo } from './brapi-server-info.tool.js';
28
33
  import { brapiSubmitObservations } from './brapi-submit-observations.tool.js';
29
34
  import { brapiWalkPedigree } from './brapi-walk-pedigree.tool.js';
30
- /** Read-only tools registered unconditionally on every server. */
35
+ /**
36
+ * Read-only tools registered unconditionally on every server. Includes
37
+ * `brapi_dataframe_describe` and `brapi_dataframe_query` — canvas is
38
+ * mandatory, so the discovery + read surface always registers.
39
+ */
31
40
  export const readOnlyToolDefinitions = [
32
41
  brapiConnect,
33
42
  brapiServerInfo,
@@ -44,22 +53,24 @@ export const readOnlyToolDefinitions = [
44
53
  brapiFindLocations,
45
54
  brapiFindVariants,
46
55
  brapiFindGenotypeCalls,
47
- brapiManageDataset,
56
+ brapiDataframeDescribe,
57
+ brapiDataframeQuery,
48
58
  brapiRawGet,
49
59
  brapiRawSearch,
50
60
  ];
51
61
  /**
52
- * Dataframe toolsregistered only when both the framework canvas service
53
- * and BRAPI_CANVAS_ENABLED are on. The dataframe surface is opt-in (Tier 3,
54
- * requires the optional `@duckdb/node-api` peer dep). Hidden from
55
- * `tools/list` when disabled so the agent doesn't see capabilities it can't
56
- * use.
62
+ * Drop toolopt-in via `BRAPI_CANVAS_DROP_ENABLED`. Off by default; the
63
+ * underlying canvas tables expire via TTL when left unmanaged, so explicit
64
+ * drop is only needed when the operator wants to free workspace memory
65
+ * immediately.
57
66
  */
58
- export const dataframeToolDefinitions = [
59
- brapiDataframeQuery,
60
- brapiDataframeDescribe,
61
- brapiDataframeDrop,
62
- ];
67
+ export const dropToolDefinitions = [brapiDataframeDrop];
68
+ /**
69
+ * Export tool — gated by `BRAPI_EXPORT_DIR` (the opt-in) AND
70
+ * `MCP_TRANSPORT_TYPE=stdio` (path output is meaningful only when the server
71
+ * runs on the user's machine). Both checks live in `src/index.ts`.
72
+ */
73
+ export const exportToolDefinitions = [brapiDataframeExport];
63
74
  /** Write tools — registered only when `BRAPI_ENABLE_WRITES=true`. */
64
75
  export const writeToolDefinitions = [brapiSubmitObservations];
65
76
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,kEAAkE;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,WAAW;IACX,cAAc;CACf,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;CACnB,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,WAAW;IACX,cAAc;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAE5D,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,uBAAuB,CAAC,CAAC"}