@cyanheads/brapi-mcp-server 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +391 -0
- package/Dockerfile +99 -0
- package/LICENSE +201 -0
- package/README.md +590 -0
- package/changelog/0.1.x/0.1.0.md +19 -0
- package/changelog/0.1.x/0.1.1.md +27 -0
- package/changelog/0.1.x/0.1.2.md +22 -0
- package/changelog/0.2.x/0.2.0.md +35 -0
- package/changelog/0.2.x/0.2.1.md +36 -0
- package/changelog/0.3.x/0.3.0.md +38 -0
- package/changelog/0.3.x/0.3.1.md +40 -0
- package/changelog/0.3.x/0.3.2.md +29 -0
- package/changelog/0.3.x/0.3.3.md +19 -0
- package/changelog/0.3.x/0.3.4.md +33 -0
- package/changelog/0.3.x/0.3.5.md +24 -0
- package/changelog/template.md +51 -0
- package/dist/config/alias-credentials.d.ts +82 -0
- package/dist/config/alias-credentials.d.ts.map +1 -0
- package/dist/config/alias-credentials.js +159 -0
- package/dist/config/alias-credentials.js.map +1 -0
- package/dist/config/server-config.d.ts +39 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +128 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts +14 -0
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js +75 -0
- package/dist/mcp-server/prompts/definitions/brapi-eda-study.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts +16 -0
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js +109 -0
- package/dist/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts +11 -0
- package/dist/mcp-server/resources/definitions/brapi-calls.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-calls.resource.js +46 -0
- package/dist/mcp-server/resources/definitions/brapi-calls.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts +13 -0
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js +26 -0
- package/dist/mcp-server/resources/definitions/brapi-dataset.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts +19 -0
- package/dist/mcp-server/resources/definitions/brapi-filters.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-filters.resource.js +45 -0
- package/dist/mcp-server/resources/definitions/brapi-filters.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts +18 -0
- package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js +34 -0
- package/dist/mcp-server/resources/definitions/brapi-germplasm.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts +11 -0
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js +28 -0
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts +18 -0
- package/dist/mcp-server/resources/definitions/brapi-study.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/brapi-study.resource.js +34 -0
- package/dist/mcp-server/resources/definitions/brapi-study.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts +82 -0
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.js +106 -0
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts +41 -0
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts +74 -0
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +386 -0
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts +72 -0
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js +290 -0
- package/dist/mcp-server/tools/definitions/brapi-find-germplasm.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts +65 -0
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js +243 -0
- package/dist/mcp-server/tools/definitions/brapi-find-images.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts +63 -0
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js +278 -0
- package/dist/mcp-server/tools/definitions/brapi-find-locations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts +74 -0
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js +288 -0
- package/dist/mcp-server/tools/definitions/brapi-find-observations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts +69 -0
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js +243 -0
- package/dist/mcp-server/tools/definitions/brapi-find-studies.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts +86 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js +337 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variables.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js +248 -0
- package/dist/mcp-server/tools/definitions/brapi-find-variants.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +306 -0
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts +57 -0
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js +291 -0
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts +75 -0
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js +323 -0
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts +87 -0
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js +296 -0
- package/dist/mcp-server/tools/definitions/brapi-manage-dataset.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts +35 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +148 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts +33 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +126 -0
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts +51 -0
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js +41 -0
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts +117 -0
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js +574 -0
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts +52 -0
- package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js +420 -0
- package/dist/mcp-server/tools/definitions/brapi-walk-pedigree.tool.js.map +1 -0
- package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts +29 -0
- package/dist/mcp-server/tools/shared/connect-auth-schema.d.ts.map +1 -0
- package/dist/mcp-server/tools/shared/connect-auth-schema.js +55 -0
- package/dist/mcp-server/tools/shared/connect-auth-schema.js.map +1 -0
- package/dist/mcp-server/tools/shared/find-helpers.d.ts +143 -0
- package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -0
- package/dist/mcp-server/tools/shared/find-helpers.js +319 -0
- package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -0
- package/dist/mcp-server/tools/shared/orientation-envelope.d.ts +97 -0
- package/dist/mcp-server/tools/shared/orientation-envelope.d.ts.map +1 -0
- package/dist/mcp-server/tools/shared/orientation-envelope.js +254 -0
- package/dist/mcp-server/tools/shared/orientation-envelope.js.map +1 -0
- package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts +10 -0
- package/dist/mcp-server/tools/shared/raw-routing-hints.d.ts.map +1 -0
- package/dist/mcp-server/tools/shared/raw-routing-hints.js +46 -0
- package/dist/mcp-server/tools/shared/raw-routing-hints.js.map +1 -0
- package/dist/services/brapi-client/brapi-client.d.ts +76 -0
- package/dist/services/brapi-client/brapi-client.d.ts.map +1 -0
- package/dist/services/brapi-client/brapi-client.js +320 -0
- package/dist/services/brapi-client/brapi-client.js.map +1 -0
- package/dist/services/brapi-client/index.d.ts +9 -0
- package/dist/services/brapi-client/index.d.ts.map +1 -0
- package/dist/services/brapi-client/index.js +7 -0
- package/dist/services/brapi-client/index.js.map +1 -0
- package/dist/services/brapi-client/types.d.ts +82 -0
- package/dist/services/brapi-client/types.d.ts.map +1 -0
- package/dist/services/brapi-client/types.js +8 -0
- package/dist/services/brapi-client/types.js.map +1 -0
- package/dist/services/brapi-filters/catalog.d.ts +14 -0
- package/dist/services/brapi-filters/catalog.d.ts.map +1 -0
- package/dist/services/brapi-filters/catalog.js +490 -0
- package/dist/services/brapi-filters/catalog.js.map +1 -0
- package/dist/services/brapi-filters/index.d.ts +8 -0
- package/dist/services/brapi-filters/index.d.ts.map +1 -0
- package/dist/services/brapi-filters/index.js +7 -0
- package/dist/services/brapi-filters/index.js.map +1 -0
- package/dist/services/brapi-filters/types.d.ts +23 -0
- package/dist/services/brapi-filters/types.d.ts.map +1 -0
- package/dist/services/brapi-filters/types.js +9 -0
- package/dist/services/brapi-filters/types.js.map +1 -0
- package/dist/services/capability-registry/capability-registry.d.ts +51 -0
- package/dist/services/capability-registry/capability-registry.d.ts.map +1 -0
- package/dist/services/capability-registry/capability-registry.js +234 -0
- package/dist/services/capability-registry/capability-registry.js.map +1 -0
- package/dist/services/capability-registry/index.d.ts +9 -0
- package/dist/services/capability-registry/index.d.ts.map +1 -0
- package/dist/services/capability-registry/index.js +7 -0
- package/dist/services/capability-registry/index.js.map +1 -0
- package/dist/services/capability-registry/types.d.ts +67 -0
- package/dist/services/capability-registry/types.d.ts.map +1 -0
- package/dist/services/capability-registry/types.js +9 -0
- package/dist/services/capability-registry/types.js.map +1 -0
- package/dist/services/dataset-store/dataset-store.d.ts +35 -0
- package/dist/services/dataset-store/dataset-store.d.ts.map +1 -0
- package/dist/services/dataset-store/dataset-store.js +190 -0
- package/dist/services/dataset-store/dataset-store.js.map +1 -0
- package/dist/services/dataset-store/index.d.ts +8 -0
- package/dist/services/dataset-store/index.d.ts.map +1 -0
- package/dist/services/dataset-store/index.js +7 -0
- package/dist/services/dataset-store/index.js.map +1 -0
- package/dist/services/dataset-store/types.d.ts +65 -0
- package/dist/services/dataset-store/types.d.ts.map +1 -0
- package/dist/services/dataset-store/types.js +8 -0
- package/dist/services/dataset-store/types.js.map +1 -0
- package/dist/services/ontology-resolver/index.d.ts +8 -0
- package/dist/services/ontology-resolver/index.d.ts.map +1 -0
- package/dist/services/ontology-resolver/index.js +7 -0
- package/dist/services/ontology-resolver/index.js.map +1 -0
- package/dist/services/ontology-resolver/ontology-resolver.d.ts +49 -0
- package/dist/services/ontology-resolver/ontology-resolver.d.ts.map +1 -0
- package/dist/services/ontology-resolver/ontology-resolver.js +99 -0
- package/dist/services/ontology-resolver/ontology-resolver.js.map +1 -0
- package/dist/services/ontology-resolver/types.d.ts +38 -0
- package/dist/services/ontology-resolver/types.d.ts.map +1 -0
- package/dist/services/ontology-resolver/types.js +8 -0
- package/dist/services/ontology-resolver/types.js.map +1 -0
- package/dist/services/reference-data-cache/index.d.ts +9 -0
- package/dist/services/reference-data-cache/index.d.ts.map +1 -0
- package/dist/services/reference-data-cache/index.js +7 -0
- package/dist/services/reference-data-cache/index.js.map +1 -0
- package/dist/services/reference-data-cache/reference-data-cache.d.ts +31 -0
- package/dist/services/reference-data-cache/reference-data-cache.d.ts.map +1 -0
- package/dist/services/reference-data-cache/reference-data-cache.js +131 -0
- package/dist/services/reference-data-cache/reference-data-cache.js.map +1 -0
- package/dist/services/reference-data-cache/types.d.ts +42 -0
- package/dist/services/reference-data-cache/types.d.ts.map +1 -0
- package/dist/services/reference-data-cache/types.js +9 -0
- package/dist/services/reference-data-cache/types.js.map +1 -0
- package/dist/services/server-registry/index.d.ts +9 -0
- package/dist/services/server-registry/index.d.ts.map +1 -0
- package/dist/services/server-registry/index.js +7 -0
- package/dist/services/server-registry/index.js.map +1 -0
- package/dist/services/server-registry/server-registry.d.ts +57 -0
- package/dist/services/server-registry/server-registry.d.ts.map +1 -0
- package/dist/services/server-registry/server-registry.js +210 -0
- package/dist/services/server-registry/server-registry.js.map +1 -0
- package/dist/services/server-registry/types.d.ts +43 -0
- package/dist/services/server-registry/types.d.ts.map +1 -0
- package/dist/services/server-registry/types.js +10 -0
- package/dist/services/server-registry/types.js.map +1 -0
- package/package.json +86 -0
- package/server.json +99 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_manage_dataset` — consolidated lifecycle tool for
|
|
3
|
+
* datasets created by `find_*` spillovers. Four modes discriminated by
|
|
4
|
+
* `mode`: list (enumerate with provenance), summary (metadata only), load
|
|
5
|
+
* (paged rows with optional column projection), delete (drop metadata +
|
|
6
|
+
* payload). Export (CSV/Parquet) is deferred until storage backends for the
|
|
7
|
+
* write path are wired up.
|
|
8
|
+
*
|
|
9
|
+
* @module mcp-server/tools/definitions/brapi-manage-dataset.tool
|
|
10
|
+
*/
|
|
11
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
12
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
13
|
+
import { getDatasetStore } from '../../../services/dataset-store/index.js';
|
|
14
|
+
const DatasetMetadataSchema = z.object({
|
|
15
|
+
datasetId: z.string().describe('Server-assigned dataset identifier.'),
|
|
16
|
+
source: z.string().describe('Tool/operation that produced the dataset (e.g. "find_studies").'),
|
|
17
|
+
baseUrl: z.string().describe('BrAPI base URL the dataset was pulled from.'),
|
|
18
|
+
query: z.unknown().describe('Original filter map — provenance for reproducibility.'),
|
|
19
|
+
rowCount: z.number().int().nonnegative().describe('Number of rows persisted in the dataset.'),
|
|
20
|
+
columns: z
|
|
21
|
+
.array(z.string().describe('Column name from the persisted rows.'))
|
|
22
|
+
.describe('Full column list of the persisted rows.'),
|
|
23
|
+
sizeBytes: z.number().int().nonnegative().describe('Serialized size of the dataset in bytes.'),
|
|
24
|
+
createdAt: z.string().describe('ISO 8601 timestamp the dataset was created.'),
|
|
25
|
+
expiresAt: z.string().describe('ISO 8601 timestamp after which the dataset will be purged.'),
|
|
26
|
+
truncated: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('True when the dataset hit the spillover row/page cap before exhausting upstream.'),
|
|
30
|
+
maxRows: z
|
|
31
|
+
.number()
|
|
32
|
+
.int()
|
|
33
|
+
.positive()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Cap that was applied at create time, when truncation occurred.'),
|
|
36
|
+
});
|
|
37
|
+
const ListResultSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
mode: z.literal('list').describe('Discriminator — `list` mode enumerates datasets.'),
|
|
40
|
+
datasets: z
|
|
41
|
+
.array(DatasetMetadataSchema.describe('Dataset metadata entry.'))
|
|
42
|
+
.describe('Datasets visible to this tenant, in creation order.'),
|
|
43
|
+
cursor: z.string().optional().describe('Opaque cursor when more datasets exist.'),
|
|
44
|
+
})
|
|
45
|
+
.describe('Enumeration of datasets visible to the current tenant.');
|
|
46
|
+
const SummaryResultSchema = z
|
|
47
|
+
.object({
|
|
48
|
+
mode: z.literal('summary').describe('Discriminator — `summary` mode returns one dataset.'),
|
|
49
|
+
dataset: DatasetMetadataSchema.describe('Metadata and provenance for the requested dataset.'),
|
|
50
|
+
})
|
|
51
|
+
.describe('Metadata + provenance for a single dataset.');
|
|
52
|
+
const LoadResultSchema = z
|
|
53
|
+
.object({
|
|
54
|
+
mode: z.literal('load').describe('Discriminator — `load` mode returns a page of rows.'),
|
|
55
|
+
datasetId: z.string().describe('Dataset the rows came from.'),
|
|
56
|
+
page: z.number().int().positive().describe('1-indexed page number that was served.'),
|
|
57
|
+
pageSize: z.number().int().positive().describe('Max rows per page (capped at 1000).'),
|
|
58
|
+
totalRows: z.number().int().nonnegative().describe('Total rows in the dataset.'),
|
|
59
|
+
totalPages: z.number().int().positive().describe('Total pages at the current pageSize.'),
|
|
60
|
+
rows: z
|
|
61
|
+
.array(z
|
|
62
|
+
.record(z.string(), z.unknown())
|
|
63
|
+
.describe('One persisted row, with optional column projection applied.'))
|
|
64
|
+
.describe('Rows for this page.'),
|
|
65
|
+
})
|
|
66
|
+
.describe('Paged rows from a persisted dataset.');
|
|
67
|
+
const DeleteResultSchema = z
|
|
68
|
+
.object({
|
|
69
|
+
mode: z.literal('delete').describe('Discriminator — `delete` mode confirms removal.'),
|
|
70
|
+
datasetId: z.string().describe('Dataset that was deleted.'),
|
|
71
|
+
deleted: z.literal(true).describe('Always `true` when the call succeeded.'),
|
|
72
|
+
})
|
|
73
|
+
.describe('Confirmation that a dataset was deleted.');
|
|
74
|
+
const OutputSchema = z.object({
|
|
75
|
+
result: z
|
|
76
|
+
.discriminatedUnion('mode', [
|
|
77
|
+
ListResultSchema,
|
|
78
|
+
SummaryResultSchema,
|
|
79
|
+
LoadResultSchema,
|
|
80
|
+
DeleteResultSchema,
|
|
81
|
+
])
|
|
82
|
+
.describe('Mode-specific result — discriminated by `mode`: list (dataset enumeration), summary (metadata+provenance), load (paged rows), delete (drop confirmation).'),
|
|
83
|
+
});
|
|
84
|
+
const InputSchema = z.object({
|
|
85
|
+
mode: z
|
|
86
|
+
.enum(['list', 'summary', 'load', 'delete'])
|
|
87
|
+
.describe('Operation: list (enumerate datasets), summary (metadata+provenance), load (page rows), delete (drop payload).'),
|
|
88
|
+
datasetId: z
|
|
89
|
+
.string()
|
|
90
|
+
.min(1)
|
|
91
|
+
.optional()
|
|
92
|
+
.describe('Required for mode=summary | load | delete. Ignored for mode=list.'),
|
|
93
|
+
cursor: z.string().optional().describe('mode=list: resume a previous call.'),
|
|
94
|
+
limit: z
|
|
95
|
+
.number()
|
|
96
|
+
.int()
|
|
97
|
+
.positive()
|
|
98
|
+
.max(200)
|
|
99
|
+
.optional()
|
|
100
|
+
.describe('mode=list: max datasets to return (default 50, capped at 200).'),
|
|
101
|
+
page: z
|
|
102
|
+
.number()
|
|
103
|
+
.int()
|
|
104
|
+
.positive()
|
|
105
|
+
.optional()
|
|
106
|
+
.describe('mode=load: 1-indexed page number (default 1).'),
|
|
107
|
+
pageSize: z
|
|
108
|
+
.number()
|
|
109
|
+
.int()
|
|
110
|
+
.positive()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe('mode=load: rows per page (default 100, max 1000).'),
|
|
113
|
+
columns: z
|
|
114
|
+
.array(z.string().min(1))
|
|
115
|
+
.optional()
|
|
116
|
+
.describe('mode=load: subset of columns to return. Omit for all columns.'),
|
|
117
|
+
});
|
|
118
|
+
export const brapiManageDataset = tool('brapi_manage_dataset', {
|
|
119
|
+
description: 'Dataset lifecycle — list (enumerate), summary (metadata+provenance), load (page rows with column projection), delete (drop payload). Datasets are produced by find_* tools when the upstream total exceeds loadLimit. Export (CSV/Parquet) is not yet implemented.',
|
|
120
|
+
annotations: { readOnlyHint: false, idempotentHint: false },
|
|
121
|
+
errors: [
|
|
122
|
+
{
|
|
123
|
+
reason: 'datasetid_required',
|
|
124
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
125
|
+
when: 'Mode summary, load, or delete was selected without a datasetId',
|
|
126
|
+
recovery: 'Call mode=list first to discover available dataset IDs, then retry with one.',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
reason: 'dataset_not_found',
|
|
130
|
+
code: JsonRpcErrorCode.NotFound,
|
|
131
|
+
when: 'Requested dataset is not present in the store (never existed or already expired)',
|
|
132
|
+
recovery: 'Run mode=list to confirm available datasets, or rerun the find_* tool that produced it.',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
reason: 'dataset_rows_missing',
|
|
136
|
+
code: JsonRpcErrorCode.NotFound,
|
|
137
|
+
when: 'Dataset metadata is present but the row payload was lost or partially expired',
|
|
138
|
+
recovery: 'Delete the stale dataset via mode=delete and rerun the find_* tool that produced it.',
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
input: InputSchema,
|
|
142
|
+
output: OutputSchema,
|
|
143
|
+
async handler(input, ctx) {
|
|
144
|
+
const store = getDatasetStore();
|
|
145
|
+
const requireDatasetId = () => {
|
|
146
|
+
if (!input.datasetId) {
|
|
147
|
+
throw ctx.fail('datasetid_required', `mode='${input.mode}' requires datasetId.`, {
|
|
148
|
+
mode: input.mode,
|
|
149
|
+
...ctx.recoveryFor('datasetid_required'),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return input.datasetId;
|
|
153
|
+
};
|
|
154
|
+
switch (input.mode) {
|
|
155
|
+
case 'list': {
|
|
156
|
+
const listOptions = {};
|
|
157
|
+
if (input.cursor !== undefined)
|
|
158
|
+
listOptions.cursor = input.cursor;
|
|
159
|
+
if (input.limit !== undefined)
|
|
160
|
+
listOptions.limit = input.limit;
|
|
161
|
+
const page = await store.list(ctx, listOptions);
|
|
162
|
+
const branch = {
|
|
163
|
+
mode: 'list',
|
|
164
|
+
datasets: page.datasets,
|
|
165
|
+
};
|
|
166
|
+
if (page.cursor !== undefined)
|
|
167
|
+
branch.cursor = page.cursor;
|
|
168
|
+
return { result: branch };
|
|
169
|
+
}
|
|
170
|
+
case 'summary': {
|
|
171
|
+
const datasetId = requireDatasetId();
|
|
172
|
+
const dataset = await store.summary(ctx, datasetId);
|
|
173
|
+
const branch = { mode: 'summary', dataset };
|
|
174
|
+
return { result: branch };
|
|
175
|
+
}
|
|
176
|
+
case 'load': {
|
|
177
|
+
const datasetId = requireDatasetId();
|
|
178
|
+
const loadOptions = {};
|
|
179
|
+
if (input.page !== undefined)
|
|
180
|
+
loadOptions.page = input.page;
|
|
181
|
+
if (input.pageSize !== undefined)
|
|
182
|
+
loadOptions.pageSize = input.pageSize;
|
|
183
|
+
if (input.columns !== undefined)
|
|
184
|
+
loadOptions.columns = input.columns;
|
|
185
|
+
const pageResult = await store.load(ctx, datasetId, loadOptions);
|
|
186
|
+
const branch = {
|
|
187
|
+
mode: 'load',
|
|
188
|
+
datasetId: pageResult.datasetId,
|
|
189
|
+
page: pageResult.page,
|
|
190
|
+
pageSize: pageResult.pageSize,
|
|
191
|
+
totalRows: pageResult.totalRows,
|
|
192
|
+
totalPages: pageResult.totalPages,
|
|
193
|
+
rows: pageResult.rows,
|
|
194
|
+
};
|
|
195
|
+
return { result: branch };
|
|
196
|
+
}
|
|
197
|
+
case 'delete': {
|
|
198
|
+
const datasetId = requireDatasetId();
|
|
199
|
+
await store.delete(ctx, datasetId);
|
|
200
|
+
const branch = {
|
|
201
|
+
mode: 'delete',
|
|
202
|
+
datasetId,
|
|
203
|
+
deleted: true,
|
|
204
|
+
};
|
|
205
|
+
return { result: branch };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
format: (result) => {
|
|
210
|
+
const branch = result.result;
|
|
211
|
+
switch (branch.mode) {
|
|
212
|
+
case 'list':
|
|
213
|
+
return [{ type: 'text', text: renderList(branch) }];
|
|
214
|
+
case 'summary':
|
|
215
|
+
return [{ type: 'text', text: renderSummary(branch.dataset) }];
|
|
216
|
+
case 'load':
|
|
217
|
+
return [{ type: 'text', text: renderLoad(branch) }];
|
|
218
|
+
case 'delete':
|
|
219
|
+
return [
|
|
220
|
+
{
|
|
221
|
+
type: 'text',
|
|
222
|
+
text: `# Dataset deleted\n- datasetId: \`${branch.datasetId}\`\n- deleted: ${branch.deleted}\n- mode: ${branch.mode}`,
|
|
223
|
+
},
|
|
224
|
+
];
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
function renderList(result) {
|
|
229
|
+
const lines = [];
|
|
230
|
+
lines.push(`# ${result.datasets.length} dataset(s) · mode=${result.mode}`);
|
|
231
|
+
if (result.cursor)
|
|
232
|
+
lines.push(`**Cursor:** \`${result.cursor}\` — pass to list again for next page.`);
|
|
233
|
+
if (result.datasets.length === 0) {
|
|
234
|
+
lines.push('');
|
|
235
|
+
lines.push('_No datasets. Run a find_* tool to produce one._');
|
|
236
|
+
return lines.join('\n');
|
|
237
|
+
}
|
|
238
|
+
lines.push('');
|
|
239
|
+
lines.push('| datasetId | source | rows | sizeBytes | createdAt | expiresAt | truncated |');
|
|
240
|
+
lines.push('|:----------|:-------|-----:|----------:|:----------|:----------|:----------|');
|
|
241
|
+
for (const ds of result.datasets) {
|
|
242
|
+
const truncated = ds.truncated ? `yes (cap=${ds.maxRows ?? '?'})` : 'no';
|
|
243
|
+
lines.push(`| \`${ds.datasetId}\` | ${ds.source} | ${ds.rowCount} | ${ds.sizeBytes} | ${ds.createdAt} | ${ds.expiresAt} | ${truncated} |`);
|
|
244
|
+
}
|
|
245
|
+
for (const ds of result.datasets) {
|
|
246
|
+
lines.push('');
|
|
247
|
+
lines.push(`### \`${ds.datasetId}\``);
|
|
248
|
+
lines.push(`- baseUrl: ${ds.baseUrl}`);
|
|
249
|
+
lines.push(`- columns: ${ds.columns.join(', ')}`);
|
|
250
|
+
lines.push(`- query: \`${JSON.stringify(ds.query)}\``);
|
|
251
|
+
}
|
|
252
|
+
return lines.join('\n');
|
|
253
|
+
}
|
|
254
|
+
function renderSummary(dataset) {
|
|
255
|
+
const lines = [];
|
|
256
|
+
lines.push(`# Dataset \`${dataset.datasetId}\``);
|
|
257
|
+
lines.push('');
|
|
258
|
+
lines.push(`- source: ${dataset.source}`);
|
|
259
|
+
lines.push(`- baseUrl: ${dataset.baseUrl}`);
|
|
260
|
+
lines.push(`- rowCount: ${dataset.rowCount}`);
|
|
261
|
+
lines.push(`- sizeBytes: ${dataset.sizeBytes}`);
|
|
262
|
+
lines.push(`- createdAt: ${dataset.createdAt}`);
|
|
263
|
+
lines.push(`- expiresAt: ${dataset.expiresAt}`);
|
|
264
|
+
if (dataset.truncated) {
|
|
265
|
+
lines.push(`- truncated: true (cap=${dataset.maxRows ?? '?'} rows)`);
|
|
266
|
+
}
|
|
267
|
+
lines.push(`- columns: ${dataset.columns.join(', ')}`);
|
|
268
|
+
lines.push(`- query: \`${JSON.stringify(dataset.query)}\``);
|
|
269
|
+
return lines.join('\n');
|
|
270
|
+
}
|
|
271
|
+
function renderLoad(result) {
|
|
272
|
+
const lines = [];
|
|
273
|
+
lines.push(`# Dataset \`${result.datasetId}\` — page ${result.page} of ${result.totalPages} (${result.rows.length}/${result.totalRows} rows) · mode=${result.mode}`);
|
|
274
|
+
lines.push('');
|
|
275
|
+
lines.push(`- pageSize: ${result.pageSize}`);
|
|
276
|
+
lines.push('');
|
|
277
|
+
if (result.rows.length === 0) {
|
|
278
|
+
lines.push('_No rows on this page._');
|
|
279
|
+
return lines.join('\n');
|
|
280
|
+
}
|
|
281
|
+
const columns = Object.keys(result.rows[0] ?? {});
|
|
282
|
+
lines.push('## Rows');
|
|
283
|
+
for (const [i, row] of result.rows.entries()) {
|
|
284
|
+
lines.push('');
|
|
285
|
+
lines.push(`### Row ${(result.page - 1) * result.pageSize + i + 1}`);
|
|
286
|
+
for (const col of columns) {
|
|
287
|
+
const value = row[col];
|
|
288
|
+
if (value === undefined || value === null)
|
|
289
|
+
continue;
|
|
290
|
+
const rendered = typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
291
|
+
lines.push(`- **${col}:** ${rendered}`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
return lines.join('\n');
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=brapi-manage-dataset.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-manage-dataset.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-manage-dataset.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_raw_get` — last-resort passthrough to any BrAPI GET
|
|
3
|
+
* endpoint the goal-shaped tools don't cover (e.g. `/samples`, `/methods`,
|
|
4
|
+
* `/scales`, `/crosses`). Returns the raw upstream envelope, plus a routing
|
|
5
|
+
* nudge when the target endpoint is actually covered by a curated tool.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/tools/definitions/brapi-raw-get.tool
|
|
8
|
+
*/
|
|
9
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
11
|
+
export declare const brapiRawGet: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
12
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
13
|
+
path: z.ZodString;
|
|
14
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>>>;
|
|
15
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
16
|
+
alias: z.ZodString;
|
|
17
|
+
url: z.ZodString;
|
|
18
|
+
path: z.ZodString;
|
|
19
|
+
metadata: z.ZodObject<{
|
|
20
|
+
pagination: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
currentPage: z.ZodNumber;
|
|
22
|
+
pageSize: z.ZodNumber;
|
|
23
|
+
totalCount: z.ZodNumber;
|
|
24
|
+
totalPages: z.ZodNumber;
|
|
25
|
+
}, z.core.$loose>>;
|
|
26
|
+
}, z.core.$loose>;
|
|
27
|
+
result: z.ZodUnknown;
|
|
28
|
+
suggestion: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>, readonly [{
|
|
30
|
+
readonly reason: "cross_origin_path";
|
|
31
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
32
|
+
readonly when: "path argument was a full URL instead of a relative BrAPI route";
|
|
33
|
+
readonly recovery: "Pass a path like \"/samples\" or \"/methods\" — the connection alias supplies the baseUrl.";
|
|
34
|
+
}]>;
|
|
35
|
+
//# sourceMappingURL=brapi-raw-get.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-raw-get.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-raw-get.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0CjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;GAuFtB,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_raw_get` — last-resort passthrough to any BrAPI GET
|
|
3
|
+
* endpoint the goal-shaped tools don't cover (e.g. `/samples`, `/methods`,
|
|
4
|
+
* `/scales`, `/crosses`). Returns the raw upstream envelope, plus a routing
|
|
5
|
+
* nudge when the target endpoint is actually covered by a curated tool.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/tools/definitions/brapi-raw-get.tool
|
|
8
|
+
*/
|
|
9
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
11
|
+
import { getBrapiClient, } from '../../../services/brapi-client/index.js';
|
|
12
|
+
import { DEFAULT_ALIAS, getServerRegistry } from '../../../services/server-registry/index.js';
|
|
13
|
+
import { AliasInput } from '../shared/find-helpers.js';
|
|
14
|
+
import { suggestForGet } from '../shared/raw-routing-hints.js';
|
|
15
|
+
const PaginationSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
currentPage: z.number().describe('0-indexed page number the server returned.'),
|
|
18
|
+
pageSize: z.number().describe('Rows per page.'),
|
|
19
|
+
totalCount: z.number().describe('Total rows matching the query across all pages.'),
|
|
20
|
+
totalPages: z.number().describe('Total pages at the current pageSize.'),
|
|
21
|
+
})
|
|
22
|
+
.passthrough()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('BrAPI pagination block. Absent when the endpoint does not paginate.');
|
|
25
|
+
const OutputSchema = z.object({
|
|
26
|
+
alias: z.string().describe('Alias of the registered BrAPI connection the call used.'),
|
|
27
|
+
url: z.string().describe('Fully resolved URL that was fetched (baseUrl + path + query string).'),
|
|
28
|
+
path: z
|
|
29
|
+
.string()
|
|
30
|
+
.describe('Normalized path (leading `/` preserved) that was appended to the baseUrl.'),
|
|
31
|
+
metadata: z
|
|
32
|
+
.object({
|
|
33
|
+
pagination: PaginationSchema,
|
|
34
|
+
})
|
|
35
|
+
.passthrough()
|
|
36
|
+
.describe('BrAPI envelope metadata (pagination and any additional upstream fields).'),
|
|
37
|
+
result: z.unknown().describe('Raw BrAPI `result` value — whatever shape the endpoint returns.'),
|
|
38
|
+
suggestion: z
|
|
39
|
+
.string()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Emitted when a curated goal-shaped tool covers this endpoint.'),
|
|
42
|
+
});
|
|
43
|
+
export const brapiRawGet = tool('brapi_raw_get', {
|
|
44
|
+
description: 'Passthrough to any BrAPI GET /{path} endpoint. Returns the raw upstream envelope without enrichment or foreign-key resolution. Emits a `suggestion` field when a curated tool exists for the same data.',
|
|
45
|
+
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
46
|
+
errors: [
|
|
47
|
+
{
|
|
48
|
+
reason: 'cross_origin_path',
|
|
49
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
50
|
+
when: 'path argument was a full URL instead of a relative BrAPI route',
|
|
51
|
+
recovery: 'Pass a path like "/samples" or "/methods" — the connection alias supplies the baseUrl.',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
input: z.object({
|
|
55
|
+
alias: AliasInput,
|
|
56
|
+
path: z
|
|
57
|
+
.string()
|
|
58
|
+
.min(1)
|
|
59
|
+
.describe('Endpoint path — e.g. "/samples", "/methods". Leading "/" is optional.'),
|
|
60
|
+
params: z
|
|
61
|
+
.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number()]))]))
|
|
62
|
+
.optional()
|
|
63
|
+
.describe('Query parameters to append. Arrays are repeated per BrAPI convention.'),
|
|
64
|
+
}),
|
|
65
|
+
output: OutputSchema,
|
|
66
|
+
async handler(input, ctx) {
|
|
67
|
+
const registry = getServerRegistry();
|
|
68
|
+
const client = getBrapiClient();
|
|
69
|
+
const connection = await registry.get(ctx, input.alias ?? DEFAULT_ALIAS);
|
|
70
|
+
// The path is appended to the registered baseUrl; if the caller smuggles a
|
|
71
|
+
// full URL (http://evil/...) `new URL()` would silently hijack the request.
|
|
72
|
+
if (/^https?:\/\//i.test(input.path)) {
|
|
73
|
+
throw ctx.fail('cross_origin_path', 'path must be a relative BrAPI route, not a full URL.', {
|
|
74
|
+
path: input.path,
|
|
75
|
+
...ctx.recoveryFor('cross_origin_path'),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const path = normalizePath(input.path);
|
|
79
|
+
const requestOptions = {};
|
|
80
|
+
if (connection.resolvedAuth)
|
|
81
|
+
requestOptions.auth = connection.resolvedAuth;
|
|
82
|
+
if (input.params) {
|
|
83
|
+
requestOptions.params = input.params;
|
|
84
|
+
}
|
|
85
|
+
const envelope = await client.get(connection.baseUrl, path, ctx, requestOptions);
|
|
86
|
+
const url = buildDisplayUrl(connection.baseUrl, path, input.params);
|
|
87
|
+
const result = {
|
|
88
|
+
alias: connection.alias,
|
|
89
|
+
url,
|
|
90
|
+
path,
|
|
91
|
+
metadata: buildMetadata(envelope.metadata),
|
|
92
|
+
result: envelope.result,
|
|
93
|
+
};
|
|
94
|
+
const suggestion = suggestForGet(path);
|
|
95
|
+
if (suggestion)
|
|
96
|
+
result.suggestion = suggestion;
|
|
97
|
+
return result;
|
|
98
|
+
},
|
|
99
|
+
format: (result) => {
|
|
100
|
+
const lines = [];
|
|
101
|
+
lines.push(`# GET ${result.path} — \`${result.alias}\``);
|
|
102
|
+
lines.push('');
|
|
103
|
+
lines.push(`URL: ${result.url}`);
|
|
104
|
+
const pagination = result.metadata.pagination;
|
|
105
|
+
if (pagination) {
|
|
106
|
+
lines.push('');
|
|
107
|
+
lines.push(`**Pagination:** page ${pagination.currentPage} of ${pagination.totalPages}, pageSize=${pagination.pageSize}, totalCount=${pagination.totalCount}`);
|
|
108
|
+
}
|
|
109
|
+
if (result.suggestion) {
|
|
110
|
+
lines.push('');
|
|
111
|
+
lines.push(`**Suggestion:** ${result.suggestion}`);
|
|
112
|
+
}
|
|
113
|
+
lines.push('');
|
|
114
|
+
lines.push('## Raw result');
|
|
115
|
+
lines.push('```json');
|
|
116
|
+
lines.push(JSON.stringify(result.result, null, 2));
|
|
117
|
+
lines.push('```');
|
|
118
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
function normalizePath(path) {
|
|
122
|
+
return path.startsWith('/') ? path : `/${path}`;
|
|
123
|
+
}
|
|
124
|
+
function buildMetadata(metadata) {
|
|
125
|
+
const pagination = metadata?.pagination;
|
|
126
|
+
if (pagination) {
|
|
127
|
+
return { pagination: { ...pagination } };
|
|
128
|
+
}
|
|
129
|
+
return {};
|
|
130
|
+
}
|
|
131
|
+
function buildDisplayUrl(baseUrl, path, params) {
|
|
132
|
+
const url = new URL(`${baseUrl.replace(/\/$/, '')}${path}`);
|
|
133
|
+
if (params) {
|
|
134
|
+
for (const [key, value] of Object.entries(params)) {
|
|
135
|
+
if (value === undefined)
|
|
136
|
+
continue;
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
for (const v of value)
|
|
139
|
+
url.searchParams.append(key, String(v));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
url.searchParams.set(key, String(value));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return url.toString();
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=brapi-raw-get.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-raw-get.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-raw-get.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_raw_search` — last-resort passthrough to any BrAPI
|
|
3
|
+
* `POST /search/{noun}` endpoint with async-search polling handled
|
|
4
|
+
* transparently. Returns the raw upstream envelope once the search completes.
|
|
5
|
+
* Emits a routing nudge when a curated goal-shaped tool covers the noun.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/tools/definitions/brapi-raw-search.tool
|
|
8
|
+
*/
|
|
9
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
export declare const brapiRawSearch: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
11
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
12
|
+
noun: z.ZodString;
|
|
13
|
+
body: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
alias: z.ZodString;
|
|
16
|
+
noun: z.ZodString;
|
|
17
|
+
kind: z.ZodEnum<{
|
|
18
|
+
sync: "sync";
|
|
19
|
+
async: "async";
|
|
20
|
+
}>;
|
|
21
|
+
searchResultsDbId: z.ZodOptional<z.ZodString>;
|
|
22
|
+
metadata: z.ZodObject<{
|
|
23
|
+
pagination: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
currentPage: z.ZodNumber;
|
|
25
|
+
pageSize: z.ZodNumber;
|
|
26
|
+
totalCount: z.ZodNumber;
|
|
27
|
+
totalPages: z.ZodNumber;
|
|
28
|
+
}, z.core.$loose>>;
|
|
29
|
+
}, z.core.$loose>;
|
|
30
|
+
result: z.ZodUnknown;
|
|
31
|
+
suggestion: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>, undefined>;
|
|
33
|
+
//# sourceMappingURL=brapi-raw-search.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-raw-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/brapi-raw-search.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA8CjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;6BA2FzB,CAAC"}
|