@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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-specific configuration for brapi-mcp-server. Covers
|
|
3
|
+
* default connection details, HTTP client behavior (timeouts, retries,
|
|
4
|
+
* concurrency), async-search polling, dataset lifecycle, and reference-data
|
|
5
|
+
* cache tuning. Lazy-parsed via `parseEnvConfig` so env-var names appear in
|
|
6
|
+
* validation errors.
|
|
7
|
+
*
|
|
8
|
+
* @module config/server-config
|
|
9
|
+
*/
|
|
10
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
11
|
+
declare const ServerConfigSchema: z.ZodObject<{
|
|
12
|
+
defaultBaseUrl: z.ZodOptional<z.ZodString>;
|
|
13
|
+
defaultUsername: z.ZodOptional<z.ZodString>;
|
|
14
|
+
defaultPassword: z.ZodOptional<z.ZodString>;
|
|
15
|
+
defaultOauthClientId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
defaultOauthClientSecret: z.ZodOptional<z.ZodString>;
|
|
17
|
+
defaultApiKey: z.ZodOptional<z.ZodString>;
|
|
18
|
+
defaultApiKeyHeader: z.ZodDefault<z.ZodString>;
|
|
19
|
+
datasetTtlSeconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
20
|
+
datasetStoreDir: z.ZodOptional<z.ZodString>;
|
|
21
|
+
loadLimit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
22
|
+
maxConcurrentRequests: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
23
|
+
retryMaxAttempts: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
24
|
+
retryBaseDelayMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
25
|
+
referenceCacheTtlSeconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
26
|
+
requestTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
27
|
+
searchPollTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
28
|
+
searchPollIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
29
|
+
allowPrivateIps: z.ZodPipe<z.ZodDefault<z.ZodEnum<{
|
|
30
|
+
true: "true";
|
|
31
|
+
false: "false";
|
|
32
|
+
}>>, z.ZodTransform<boolean, "true" | "false">>;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type ServerConfig = z.infer<typeof ServerConfigSchema>;
|
|
35
|
+
export declare function getServerConfig(): ServerConfig;
|
|
36
|
+
/** Test-only — reset the lazy cache between suites. */
|
|
37
|
+
export declare function resetServerConfig(): void;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=server-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;iBA0FtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAsB9C;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-specific configuration for brapi-mcp-server. Covers
|
|
3
|
+
* default connection details, HTTP client behavior (timeouts, retries,
|
|
4
|
+
* concurrency), async-search polling, dataset lifecycle, and reference-data
|
|
5
|
+
* cache tuning. Lazy-parsed via `parseEnvConfig` so env-var names appear in
|
|
6
|
+
* validation errors.
|
|
7
|
+
*
|
|
8
|
+
* @module config/server-config
|
|
9
|
+
*/
|
|
10
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
11
|
+
import { parseEnvConfig } from '@cyanheads/mcp-ts-core/config';
|
|
12
|
+
const ServerConfigSchema = z.object({
|
|
13
|
+
defaultBaseUrl: z
|
|
14
|
+
.string()
|
|
15
|
+
.url()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe('Default BrAPI v2 base URL if no connection is opened via brapi_connect.'),
|
|
18
|
+
defaultUsername: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Default SGN-family username for session-token auth.'),
|
|
22
|
+
defaultPassword: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Default SGN-family password for session-token auth.'),
|
|
26
|
+
defaultOauthClientId: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Default OAuth2 client ID (e.g. CGIAR-family servers).'),
|
|
30
|
+
defaultOauthClientSecret: z.string().optional().describe('Default OAuth2 client secret.'),
|
|
31
|
+
defaultApiKey: z.string().optional().describe('Default static API key.'),
|
|
32
|
+
defaultApiKeyHeader: z
|
|
33
|
+
.string()
|
|
34
|
+
.default('Authorization')
|
|
35
|
+
.describe('Header name to carry the static API key.'),
|
|
36
|
+
datasetTtlSeconds: z.coerce
|
|
37
|
+
.number()
|
|
38
|
+
.int()
|
|
39
|
+
.positive()
|
|
40
|
+
.default(86_400)
|
|
41
|
+
.describe('TTL for datasets held in DatasetStore (seconds).'),
|
|
42
|
+
datasetStoreDir: z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe('Filesystem path for DatasetStore payloads when filesystem storage is active.'),
|
|
46
|
+
loadLimit: z.coerce
|
|
47
|
+
.number()
|
|
48
|
+
.int()
|
|
49
|
+
.positive()
|
|
50
|
+
.default(200)
|
|
51
|
+
.describe('Default row cap returned in-context before spilling to DatasetStore.'),
|
|
52
|
+
maxConcurrentRequests: z.coerce
|
|
53
|
+
.number()
|
|
54
|
+
.int()
|
|
55
|
+
.positive()
|
|
56
|
+
.default(4)
|
|
57
|
+
.describe('Per-connection concurrency cap for parallel upstream fan-out.'),
|
|
58
|
+
retryMaxAttempts: z.coerce
|
|
59
|
+
.number()
|
|
60
|
+
.int()
|
|
61
|
+
.min(0)
|
|
62
|
+
.default(3)
|
|
63
|
+
.describe('Max retries on 429/5xx before surfacing.'),
|
|
64
|
+
retryBaseDelayMs: z.coerce
|
|
65
|
+
.number()
|
|
66
|
+
.int()
|
|
67
|
+
.positive()
|
|
68
|
+
.default(500)
|
|
69
|
+
.describe('Base delay for exponential backoff in retry.'),
|
|
70
|
+
referenceCacheTtlSeconds: z.coerce
|
|
71
|
+
.number()
|
|
72
|
+
.int()
|
|
73
|
+
.positive()
|
|
74
|
+
.default(3_600)
|
|
75
|
+
.describe('TTL for ReferenceDataCache entries (programs, trials, locations, crops).'),
|
|
76
|
+
requestTimeoutMs: z.coerce
|
|
77
|
+
.number()
|
|
78
|
+
.int()
|
|
79
|
+
.positive()
|
|
80
|
+
.default(30_000)
|
|
81
|
+
.describe('Per-request HTTP timeout.'),
|
|
82
|
+
searchPollTimeoutMs: z.coerce
|
|
83
|
+
.number()
|
|
84
|
+
.int()
|
|
85
|
+
.positive()
|
|
86
|
+
.default(60_000)
|
|
87
|
+
.describe('Total wait budget for async /search/{noun}/{id} polling.'),
|
|
88
|
+
searchPollIntervalMs: z.coerce
|
|
89
|
+
.number()
|
|
90
|
+
.int()
|
|
91
|
+
.positive()
|
|
92
|
+
.default(1_000)
|
|
93
|
+
.describe('Poll interval between async-search status checks.'),
|
|
94
|
+
allowPrivateIps: z
|
|
95
|
+
.enum(['true', 'false'])
|
|
96
|
+
.default('false')
|
|
97
|
+
.transform((v) => v === 'true')
|
|
98
|
+
.describe('Allow connecting to RFC 1918 / loopback targets. Dev-only.'),
|
|
99
|
+
});
|
|
100
|
+
let _config;
|
|
101
|
+
export function getServerConfig() {
|
|
102
|
+
_config ??= parseEnvConfig(ServerConfigSchema, {
|
|
103
|
+
defaultBaseUrl: 'BRAPI_DEFAULT_BASE_URL',
|
|
104
|
+
defaultUsername: 'BRAPI_DEFAULT_USERNAME',
|
|
105
|
+
defaultPassword: 'BRAPI_DEFAULT_PASSWORD',
|
|
106
|
+
defaultOauthClientId: 'BRAPI_DEFAULT_OAUTH_CLIENT_ID',
|
|
107
|
+
defaultOauthClientSecret: 'BRAPI_DEFAULT_OAUTH_CLIENT_SECRET',
|
|
108
|
+
defaultApiKey: 'BRAPI_DEFAULT_API_KEY',
|
|
109
|
+
defaultApiKeyHeader: 'BRAPI_DEFAULT_API_KEY_HEADER',
|
|
110
|
+
datasetTtlSeconds: 'BRAPI_DATASET_TTL_SECONDS',
|
|
111
|
+
datasetStoreDir: 'BRAPI_DATASET_STORE_DIR',
|
|
112
|
+
loadLimit: 'BRAPI_LOAD_LIMIT',
|
|
113
|
+
maxConcurrentRequests: 'BRAPI_MAX_CONCURRENT_REQUESTS',
|
|
114
|
+
retryMaxAttempts: 'BRAPI_RETRY_MAX_ATTEMPTS',
|
|
115
|
+
retryBaseDelayMs: 'BRAPI_RETRY_BASE_DELAY_MS',
|
|
116
|
+
referenceCacheTtlSeconds: 'BRAPI_REFERENCE_CACHE_TTL_SECONDS',
|
|
117
|
+
requestTimeoutMs: 'BRAPI_REQUEST_TIMEOUT_MS',
|
|
118
|
+
searchPollTimeoutMs: 'BRAPI_SEARCH_POLL_TIMEOUT_MS',
|
|
119
|
+
searchPollIntervalMs: 'BRAPI_SEARCH_POLL_INTERVAL_MS',
|
|
120
|
+
allowPrivateIps: 'BRAPI_ALLOW_PRIVATE_IPS',
|
|
121
|
+
});
|
|
122
|
+
return _config;
|
|
123
|
+
}
|
|
124
|
+
/** Test-only — reset the lazy cache between suites. */
|
|
125
|
+
export function resetServerConfig() {
|
|
126
|
+
_config = undefined;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=server-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview brapi-mcp-server MCP server entry point. Registers the MCP
|
|
4
|
+
* surface (tools/resources/prompts) and initializes domain services in
|
|
5
|
+
* `setup()` before the transport starts.
|
|
6
|
+
*
|
|
7
|
+
* @module index
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview brapi-mcp-server MCP server entry point. Registers the MCP
|
|
4
|
+
* surface (tools/resources/prompts) and initializes domain services in
|
|
5
|
+
* `setup()` before the transport starts.
|
|
6
|
+
*
|
|
7
|
+
* @module index
|
|
8
|
+
*/
|
|
9
|
+
import { createApp } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
import { getServerConfig } from './config/server-config.js';
|
|
11
|
+
import { initBrapiClient } from './services/brapi-client/index.js';
|
|
12
|
+
import { initCapabilityRegistry } from './services/capability-registry/index.js';
|
|
13
|
+
import { initDatasetStore } from './services/dataset-store/index.js';
|
|
14
|
+
import { initOntologyResolver } from './services/ontology-resolver/index.js';
|
|
15
|
+
import { initReferenceDataCache } from './services/reference-data-cache/index.js';
|
|
16
|
+
import { initServerRegistry } from './services/server-registry/index.js';
|
|
17
|
+
import { brapiEdaStudy } from './mcp-server/prompts/definitions/brapi-eda-study.prompt.js';
|
|
18
|
+
import { brapiMetaAnalysis } from './mcp-server/prompts/definitions/brapi-meta-analysis.prompt.js';
|
|
19
|
+
import { brapiCallsResource } from './mcp-server/resources/definitions/brapi-calls.resource.js';
|
|
20
|
+
import { brapiDatasetResource } from './mcp-server/resources/definitions/brapi-dataset.resource.js';
|
|
21
|
+
import { brapiFiltersResource } from './mcp-server/resources/definitions/brapi-filters.resource.js';
|
|
22
|
+
import { brapiGermplasmResource } from './mcp-server/resources/definitions/brapi-germplasm.resource.js';
|
|
23
|
+
import { brapiServerInfoResource } from './mcp-server/resources/definitions/brapi-server-info.resource.js';
|
|
24
|
+
import { brapiStudyResource } from './mcp-server/resources/definitions/brapi-study.resource.js';
|
|
25
|
+
import { brapiConnect } from './mcp-server/tools/definitions/brapi-connect.tool.js';
|
|
26
|
+
import { brapiDescribeFilters } from './mcp-server/tools/definitions/brapi-describe-filters.tool.js';
|
|
27
|
+
import { brapiFindGenotypeCalls } from './mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js';
|
|
28
|
+
import { brapiFindGermplasm } from './mcp-server/tools/definitions/brapi-find-germplasm.tool.js';
|
|
29
|
+
import { brapiFindImages } from './mcp-server/tools/definitions/brapi-find-images.tool.js';
|
|
30
|
+
import { brapiFindLocations } from './mcp-server/tools/definitions/brapi-find-locations.tool.js';
|
|
31
|
+
import { brapiFindObservations } from './mcp-server/tools/definitions/brapi-find-observations.tool.js';
|
|
32
|
+
import { brapiFindStudies } from './mcp-server/tools/definitions/brapi-find-studies.tool.js';
|
|
33
|
+
import { brapiFindVariables } from './mcp-server/tools/definitions/brapi-find-variables.tool.js';
|
|
34
|
+
import { brapiFindVariants } from './mcp-server/tools/definitions/brapi-find-variants.tool.js';
|
|
35
|
+
import { brapiGetGermplasm } from './mcp-server/tools/definitions/brapi-get-germplasm.tool.js';
|
|
36
|
+
import { brapiGetImage } from './mcp-server/tools/definitions/brapi-get-image.tool.js';
|
|
37
|
+
import { brapiGetStudy } from './mcp-server/tools/definitions/brapi-get-study.tool.js';
|
|
38
|
+
import { brapiManageDataset } from './mcp-server/tools/definitions/brapi-manage-dataset.tool.js';
|
|
39
|
+
import { brapiRawGet } from './mcp-server/tools/definitions/brapi-raw-get.tool.js';
|
|
40
|
+
import { brapiRawSearch } from './mcp-server/tools/definitions/brapi-raw-search.tool.js';
|
|
41
|
+
import { brapiServerInfo } from './mcp-server/tools/definitions/brapi-server-info.tool.js';
|
|
42
|
+
import { brapiSubmitObservations } from './mcp-server/tools/definitions/brapi-submit-observations.tool.js';
|
|
43
|
+
import { brapiWalkPedigree } from './mcp-server/tools/definitions/brapi-walk-pedigree.tool.js';
|
|
44
|
+
await createApp({
|
|
45
|
+
tools: [
|
|
46
|
+
brapiConnect,
|
|
47
|
+
brapiServerInfo,
|
|
48
|
+
brapiDescribeFilters,
|
|
49
|
+
brapiFindStudies,
|
|
50
|
+
brapiGetStudy,
|
|
51
|
+
brapiFindGermplasm,
|
|
52
|
+
brapiGetGermplasm,
|
|
53
|
+
brapiWalkPedigree,
|
|
54
|
+
brapiFindVariables,
|
|
55
|
+
brapiFindObservations,
|
|
56
|
+
brapiFindImages,
|
|
57
|
+
brapiGetImage,
|
|
58
|
+
brapiFindLocations,
|
|
59
|
+
brapiFindVariants,
|
|
60
|
+
brapiFindGenotypeCalls,
|
|
61
|
+
brapiManageDataset,
|
|
62
|
+
brapiSubmitObservations,
|
|
63
|
+
brapiRawGet,
|
|
64
|
+
brapiRawSearch,
|
|
65
|
+
],
|
|
66
|
+
resources: [
|
|
67
|
+
brapiServerInfoResource,
|
|
68
|
+
brapiCallsResource,
|
|
69
|
+
brapiStudyResource,
|
|
70
|
+
brapiGermplasmResource,
|
|
71
|
+
brapiDatasetResource,
|
|
72
|
+
brapiFiltersResource,
|
|
73
|
+
],
|
|
74
|
+
prompts: [brapiEdaStudy, brapiMetaAnalysis],
|
|
75
|
+
setup() {
|
|
76
|
+
const serverConfig = getServerConfig();
|
|
77
|
+
initBrapiClient(serverConfig);
|
|
78
|
+
initCapabilityRegistry(serverConfig);
|
|
79
|
+
initReferenceDataCache(serverConfig);
|
|
80
|
+
initDatasetStore(serverConfig);
|
|
81
|
+
initServerRegistry(serverConfig);
|
|
82
|
+
initOntologyResolver();
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_eda_study` — exploratory-data-analysis playbook for a
|
|
3
|
+
* single BrAPI study. Walks the agent through structure, variables, coverage,
|
|
4
|
+
* outliers, and missing-data checks using the curated `brapi_*` tool surface.
|
|
5
|
+
* Pure prompt template: no Context, no auth, no side effects.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/prompts/definitions/brapi-eda-study.prompt
|
|
8
|
+
*/
|
|
9
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
export declare const brapiEdaStudy: import("@cyanheads/mcp-ts-core").PromptDefinition<z.ZodObject<{
|
|
11
|
+
studyDbId: z.ZodString;
|
|
12
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
//# sourceMappingURL=brapi-eda-study.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-eda-study.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/brapi-eda-study.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,eAAO,MAAM,aAAa;;;kBAoExB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_eda_study` — exploratory-data-analysis playbook for a
|
|
3
|
+
* single BrAPI study. Walks the agent through structure, variables, coverage,
|
|
4
|
+
* outliers, and missing-data checks using the curated `brapi_*` tool surface.
|
|
5
|
+
* Pure prompt template: no Context, no auth, no side effects.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/prompts/definitions/brapi-eda-study.prompt
|
|
8
|
+
*/
|
|
9
|
+
import { prompt, z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
export const brapiEdaStudy = prompt('brapi_eda_study', {
|
|
11
|
+
description: 'Run an exploratory-data-analysis pass over a single BrAPI study — structure, variables, coverage, outliers, missing data — using the curated brapi_* tools.',
|
|
12
|
+
args: z.object({
|
|
13
|
+
studyDbId: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.describe('Target studyDbId. Locate via brapi_find_studies if unknown.'),
|
|
17
|
+
alias: z
|
|
18
|
+
.string()
|
|
19
|
+
.regex(/^[a-zA-Z0-9_-]+$/)
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Connection alias registered via brapi_connect. Omit to use the default connection.'),
|
|
22
|
+
}),
|
|
23
|
+
generate: (args) => {
|
|
24
|
+
const aliasArg = args.alias ? `, alias: "${args.alias}"` : '';
|
|
25
|
+
const text = [
|
|
26
|
+
`You are running an exploratory data analysis (EDA) on BrAPI study \`${args.studyDbId}\`. Work through the steps below and produce a written report at the end. Use the curated \`brapi_*\` tools — do not hand-roll HTTP. If a step requires a capability the server does not advertise, note the gap and continue.`,
|
|
27
|
+
'',
|
|
28
|
+
'## Step 1 — Orient',
|
|
29
|
+
`1. Call \`brapi_get_study\` with \`studyDbId: "${args.studyDbId}"${aliasArg}\` to pull the study record, resolved program/trial/location, and companion counts (\`observationCount\`, \`observationUnitCount\`, \`variableCount\`).`,
|
|
30
|
+
'2. Note the season(s), crop, and active state. Capture the three companion counts — they bound everything that follows.',
|
|
31
|
+
'',
|
|
32
|
+
'## Step 2 — Variables',
|
|
33
|
+
`1. Call \`brapi_find_variables\` with \`studies: ["${args.studyDbId}"]${aliasArg}\` to enumerate the observation variables measured in this study.`,
|
|
34
|
+
'2. For each variable record the trait name, trait class, scale data type (numerical / categorical / date / text), and unit/scale name.',
|
|
35
|
+
'3. Group variables by trait class and by scale data type — the breakdown drives which downstream checks make sense (numerical → outlier checks; categorical → distribution checks).',
|
|
36
|
+
'',
|
|
37
|
+
'## Step 3 — Observation coverage',
|
|
38
|
+
`1. Call \`brapi_find_observations\` with \`studies: ["${args.studyDbId}"]${aliasArg}\` and a \`loadLimit\` large enough to materialize the full study in one shot if \`observationCount\` from Step 1 fits, otherwise spill to a dataset and read it back via \`brapi_manage_dataset\` (mode: \`load\`).`,
|
|
39
|
+
'2. From the response `distributions`, capture: observations per variable, observations per germplasm, observations per observation level (plot / plant / field), and observations per season.',
|
|
40
|
+
'3. Compute coverage = `observationCount` ÷ (`observationUnitCount` × `variableCount`). Anything materially below 1.0 implies missing measurements.',
|
|
41
|
+
'',
|
|
42
|
+
'## Step 4 — Missing data',
|
|
43
|
+
'1. From the rows pulled in Step 3, count observations with `value == null`, `value == ""`, or values matching the unknown sentinel from the variable\'s scale (e.g. `.`, `NA`, `999`).',
|
|
44
|
+
'2. Cross-tab missing-rate by variable and by germplasm. Surface the top-3 worst offenders on each axis.',
|
|
45
|
+
'',
|
|
46
|
+
'## Step 5 — Outliers (numerical variables only)',
|
|
47
|
+
'1. For each numerical variable, parse `value` as a number (skip non-numeric).',
|
|
48
|
+
'2. Compute median and IQR. Flag values outside [Q1 − 1.5·IQR, Q3 + 1.5·IQR].',
|
|
49
|
+
"3. Cross-reference outliers with the scale's declared min/max if present — values outside the scale range are data-entry errors, values inside but outside IQR are biological outliers worth a second look.",
|
|
50
|
+
'',
|
|
51
|
+
'## Step 6 — Pedigree context (optional)',
|
|
52
|
+
`1. Pick the top-5 germplasm by observation count from Step 3. Call \`brapi_walk_pedigree\` with \`germplasmDbIds: [...]\`, \`direction: "ancestors"\`, \`maxDepth: 2${aliasArg}\` to surface immediate parentage.`,
|
|
53
|
+
'2. Note any common ancestors — they may explain trait covariance.',
|
|
54
|
+
'',
|
|
55
|
+
'## Report',
|
|
56
|
+
'Produce a markdown report with the following sections:',
|
|
57
|
+
'1. **Study summary** — name, crop, seasons, location, program, observation/unit/variable counts.',
|
|
58
|
+
'2. **Variables** — table grouped by trait class with scale type and unit.',
|
|
59
|
+
'3. **Coverage** — overall coverage ratio plus the per-variable and per-germplasm distributions.',
|
|
60
|
+
'4. **Missing data** — top-3 worst variables and germplasm by missing rate.',
|
|
61
|
+
'5. **Outliers** — per-variable outlier list (DbId, value, reason: out-of-range vs IQR).',
|
|
62
|
+
'6. **Pedigree notes** — common ancestors among top-observed germplasm.',
|
|
63
|
+
'7. **Recommended next steps** — concrete follow-ups (e.g. "re-measure variable X on germplasm Y", "expand pedigree walk to depth 4 on accession Z").',
|
|
64
|
+
'',
|
|
65
|
+
'Be honest about gaps — if the server lacks `/ontologies` and trait classes are sparse, say so. If `observationCount` is zero, stop after Step 1 and report that the study has no recorded observations yet.',
|
|
66
|
+
].join('\n');
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
role: 'user',
|
|
70
|
+
content: { type: 'text', text },
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=brapi-eda-study.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-eda-study.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/brapi-eda-study.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,iBAAiB,EAAE;IACrD,WAAW,EACT,6JAA6J;IAC/J,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,KAAK,CAAC,kBAAkB,CAAC;aACzB,QAAQ,EAAE;aACV,QAAQ,CACP,oFAAoF,CACrF;KACJ,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG;YACX,uEAAuE,IAAI,CAAC,SAAS,gOAAgO;YACrT,EAAE;YACF,oBAAoB;YACpB,kDAAkD,IAAI,CAAC,SAAS,IAAI,QAAQ,yJAAyJ;YACrO,yHAAyH;YACzH,EAAE;YACF,uBAAuB;YACvB,sDAAsD,IAAI,CAAC,SAAS,KAAK,QAAQ,mEAAmE;YACpJ,wIAAwI;YACxI,qLAAqL;YACrL,EAAE;YACF,kCAAkC;YAClC,yDAAyD,IAAI,CAAC,SAAS,KAAK,QAAQ,sNAAsN;YAC1S,+LAA+L;YAC/L,oJAAoJ;YACpJ,EAAE;YACF,0BAA0B;YAC1B,wLAAwL;YACxL,yGAAyG;YACzG,EAAE;YACF,iDAAiD;YACjD,+EAA+E;YAC/E,8EAA8E;YAC9E,6MAA6M;YAC7M,EAAE;YACF,yCAAyC;YACzC,uKAAuK,QAAQ,oCAAoC;YACnN,mEAAmE;YACnE,EAAE;YACF,WAAW;YACX,wDAAwD;YACxD,kGAAkG;YAClG,2EAA2E;YAC3E,iGAAiG;YACjG,4EAA4E;YAC5E,yFAAyF;YACzF,wEAAwE;YACxE,sJAAsJ;YACtJ,EAAE;YACF,6MAA6M;SAC9M,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;aAChC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_meta_analysis` — cross-study meta-analysis playbook.
|
|
3
|
+
* Given a germplasm set and a target trait, walks the agent through ontology
|
|
4
|
+
* resolution, study discovery, observation pull, harmonization, and
|
|
5
|
+
* across-study summarization using the curated `brapi_*` tool surface. Pure
|
|
6
|
+
* prompt template: no Context, no auth, no side effects.
|
|
7
|
+
*
|
|
8
|
+
* @module mcp-server/prompts/definitions/brapi-meta-analysis.prompt
|
|
9
|
+
*/
|
|
10
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
11
|
+
export declare const brapiMetaAnalysis: import("@cyanheads/mcp-ts-core").PromptDefinition<z.ZodObject<{
|
|
12
|
+
germplasmDbIds: z.ZodString;
|
|
13
|
+
traitName: z.ZodString;
|
|
14
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
//# sourceMappingURL=brapi-meta-analysis.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-meta-analysis.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAU,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,eAAO,MAAM,iBAAiB;;;;kBA0G5B,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi_meta_analysis` — cross-study meta-analysis playbook.
|
|
3
|
+
* Given a germplasm set and a target trait, walks the agent through ontology
|
|
4
|
+
* resolution, study discovery, observation pull, harmonization, and
|
|
5
|
+
* across-study summarization using the curated `brapi_*` tool surface. Pure
|
|
6
|
+
* prompt template: no Context, no auth, no side effects.
|
|
7
|
+
*
|
|
8
|
+
* @module mcp-server/prompts/definitions/brapi-meta-analysis.prompt
|
|
9
|
+
*/
|
|
10
|
+
import { prompt, z } from '@cyanheads/mcp-ts-core';
|
|
11
|
+
export const brapiMetaAnalysis = prompt('brapi_meta_analysis', {
|
|
12
|
+
description: 'Cross-study meta-analysis playbook for a germplasm × trait combination — resolve trait, find studies, pull observations, harmonize scales, summarize across studies.',
|
|
13
|
+
args: z.object({
|
|
14
|
+
germplasmDbIds: z
|
|
15
|
+
.string()
|
|
16
|
+
.min(1)
|
|
17
|
+
.describe('Comma-separated germplasmDbIds (e.g. "germplasm-1,germplasm-2"). The meta-analysis will collect every observation of the target trait on these germplasm across all reachable studies.'),
|
|
18
|
+
traitName: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.describe('Target trait name or free-text query — e.g. "dry matter content", "Plant height". The agent will resolve it to one or more observation variables via brapi_find_variables.'),
|
|
22
|
+
alias: z
|
|
23
|
+
.string()
|
|
24
|
+
.regex(/^[a-zA-Z0-9_-]+$/)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Connection alias registered via brapi_connect. Omit to use the default connection. For multi-server meta-analyses, run this prompt once per registered alias and merge.'),
|
|
27
|
+
}),
|
|
28
|
+
generate: (args) => {
|
|
29
|
+
const aliasArg = args.alias ? `, alias: "${args.alias}"` : '';
|
|
30
|
+
const ids = args.germplasmDbIds
|
|
31
|
+
.split(',')
|
|
32
|
+
.map((id) => id.trim())
|
|
33
|
+
.filter((id) => id.length > 0);
|
|
34
|
+
const idsLiteral = JSON.stringify(ids);
|
|
35
|
+
const text = [
|
|
36
|
+
`You are running a cross-study meta-analysis on the **${args.traitName}** trait across ${ids.length} germplasm: ${ids.map((id) => `\`${id}\``).join(', ')}. Use the curated \`brapi_*\` tools throughout. Reproducibility matters — record every dataset handle and query you generate.`,
|
|
37
|
+
'',
|
|
38
|
+
'## Step 1 — Resolve the trait to one or more observation variables',
|
|
39
|
+
`1. Call \`brapi_find_variables\` with \`text: "${args.traitName}"${aliasArg}\` to score candidates via the OntologyResolver.`,
|
|
40
|
+
'2. Inspect `ontologyCandidates`. If exactly one candidate has an unambiguous PUI / trait name match, use it. If multiple variables represent the same biological trait (e.g. "Dry Matter %" measured by gravimetric vs NIR methods), keep all of them and note the method differences — you will harmonize later.',
|
|
41
|
+
'3. Record the resulting `observationVariableDbId[]` and the scale `dataType` and `scaleName` for each. Numeric scales can be averaged across studies; categorical scales need a mapping table before pooling.',
|
|
42
|
+
'',
|
|
43
|
+
'## Step 2 — Discover studies that measured the trait on the target germplasm',
|
|
44
|
+
`1. Call \`brapi_find_observations\` with \`germplasm: ${idsLiteral}\` and \`variables: [<resolved variable DbIds from Step 1>]\`${aliasArg}, \`loadLimit: 200\`.`,
|
|
45
|
+
'2. From `distributions.studyName`, capture the distinct studies returning observations. If `hasMore` is true and a `dataset` handle is returned, page through with `brapi_manage_dataset` (mode: `load`) to materialize the full set.',
|
|
46
|
+
'3. For each study, call `brapi_get_study` to capture program, location, season, and trial context — these are the moderators in the meta-analysis.',
|
|
47
|
+
'',
|
|
48
|
+
'## Step 3 — Build the per-observation table',
|
|
49
|
+
'For each observation row, capture:',
|
|
50
|
+
'',
|
|
51
|
+
'| Column | Source |',
|
|
52
|
+
'|:-------|:-------|',
|
|
53
|
+
'| `germplasmDbId` / `germplasmName` | observation row |',
|
|
54
|
+
'| `studyDbId` / `studyName` | observation row + Step 2 |',
|
|
55
|
+
'| `season` | observation row |',
|
|
56
|
+
'| `locationDbId` / `locationName` | study record from Step 2 |',
|
|
57
|
+
'| `programDbId` / `programName` | study record from Step 2 |',
|
|
58
|
+
'| `observationVariableDbId` / `observationVariableName` | observation row |',
|
|
59
|
+
'| `methodName`, `scaleName`, `dataType` | variable record from Step 1 |',
|
|
60
|
+
'| `value` (raw) | observation row |',
|
|
61
|
+
'| `value_num` (parsed) | parse `value` as number for numeric scales |',
|
|
62
|
+
'| `observationTimeStamp` | observation row |',
|
|
63
|
+
'',
|
|
64
|
+
'## Step 4 — Harmonize',
|
|
65
|
+
'1. **Numeric scales** — confirm all observations use the same unit. If multiple scales appear (e.g. percent vs decimal fraction), normalize to a single canonical unit and document the conversion factor.',
|
|
66
|
+
"2. **Categorical scales** — build an explicit mapping table from each scale's category values to a shared ordinal or nominal scheme. Drop observations that cannot be mapped and report the count.",
|
|
67
|
+
'3. **Method differences** — note whether different `methodName` values are pooled together. If methods are biologically distinct (e.g. visual vs instrumented), keep them as separate strata in the summary, not merged.',
|
|
68
|
+
'',
|
|
69
|
+
'## Step 5 — Per-germplasm × per-study summary',
|
|
70
|
+
'Compute a wide table indexed by `germplasmDbId × studyDbId`:',
|
|
71
|
+
'',
|
|
72
|
+
'- Numeric variables: `n`, `mean`, `sd`, `min`, `max`, `cv = sd / mean`.',
|
|
73
|
+
'- Categorical variables: mode, modal-frequency, count-per-category.',
|
|
74
|
+
'',
|
|
75
|
+
'Flag cells where `n < 3` (insufficient replication) and cells with `cv > 0.30` (high within-study variability).',
|
|
76
|
+
'',
|
|
77
|
+
'## Step 6 — Across-study meta-summary',
|
|
78
|
+
'For each germplasm, summarize across studies:',
|
|
79
|
+
'',
|
|
80
|
+
"- **Numeric:** unweighted across-study mean, between-study variance (Cochran's Q proxy), grand min and max, study count.",
|
|
81
|
+
'- **Categorical:** dominant category and the share of studies in which that category was modal.',
|
|
82
|
+
'',
|
|
83
|
+
'Identify germplasm with high between-study variance (`Q proxy / mean^2 > 0.05`) — those are the candidates for genotype × environment interaction follow-up.',
|
|
84
|
+
'',
|
|
85
|
+
'## Step 7 — Pedigree side-quest',
|
|
86
|
+
`Optional: call \`brapi_walk_pedigree\` with \`germplasmDbIds: ${idsLiteral}\`, \`direction: "ancestors"\`, \`maxDepth: 2${aliasArg}\` to surface common parents. If the meta-analysis germplasm share a parent and exhibit similar trait values, that supports a heritability story; if they diverge, environment likely dominates.`,
|
|
87
|
+
'',
|
|
88
|
+
'## Report',
|
|
89
|
+
'Produce a markdown report with the following sections:',
|
|
90
|
+
'1. **Inputs** — verbatim trait name + germplasm IDs as supplied.',
|
|
91
|
+
'2. **Variable resolution** — the variable(s) selected and why; any ambiguity left unresolved.',
|
|
92
|
+
'3. **Studies** — table of contributing studies with program/location/season.',
|
|
93
|
+
'4. **Harmonization log** — every unit conversion, scale mapping, and method-stratification decision.',
|
|
94
|
+
'5. **Per-germplasm × per-study table** — Step 5 output.',
|
|
95
|
+
'6. **Across-study summary** — Step 6 output, sorted by between-study variance descending.',
|
|
96
|
+
'7. **Pedigree notes** — Step 7 if you ran it.',
|
|
97
|
+
'8. **Caveats** — missing data rates, dropped observations, sample-size warnings, capability gaps from the server (e.g. ontology endpoint missing).',
|
|
98
|
+
'',
|
|
99
|
+
'Reproducibility is non-negotiable: cite the dataset handle returned by every `find_*` call so a future agent can re-run with the same upstream snapshot.',
|
|
100
|
+
].join('\n');
|
|
101
|
+
return [
|
|
102
|
+
{
|
|
103
|
+
role: 'user',
|
|
104
|
+
content: { type: 'text', text },
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=brapi-meta-analysis.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-meta-analysis.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/brapi-meta-analysis.prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi://calls` — capability profile (raw `/calls` data) for
|
|
3
|
+
* the default connection. Useful for clients that want the full descriptor
|
|
4
|
+
* map without the orientation-envelope wrapping.
|
|
5
|
+
*
|
|
6
|
+
* @module mcp-server/resources/definitions/brapi-calls.resource
|
|
7
|
+
*/
|
|
8
|
+
export declare const brapiCallsResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<Readonly<{
|
|
9
|
+
[k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
|
|
10
|
+
}>, import("zod/v4/core").$strip>, undefined, undefined>;
|
|
11
|
+
//# sourceMappingURL=brapi-calls.resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-calls.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/brapi-calls.resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH,eAAO,MAAM,kBAAkB;;wDAkB7B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi://calls` — capability profile (raw `/calls` data) for
|
|
3
|
+
* the default connection. Useful for clients that want the full descriptor
|
|
4
|
+
* map without the orientation-envelope wrapping.
|
|
5
|
+
*
|
|
6
|
+
* @module mcp-server/resources/definitions/brapi-calls.resource
|
|
7
|
+
*/
|
|
8
|
+
import { resource } from '@cyanheads/mcp-ts-core';
|
|
9
|
+
import { getCapabilityRegistry } from '../../../services/capability-registry/index.js';
|
|
10
|
+
import { DEFAULT_ALIAS, getServerRegistry } from '../../../services/server-registry/index.js';
|
|
11
|
+
async function loadCallsProfile(ctx) {
|
|
12
|
+
const registry = getServerRegistry();
|
|
13
|
+
const capabilities = getCapabilityRegistry();
|
|
14
|
+
const connection = await registry.get(ctx, DEFAULT_ALIAS);
|
|
15
|
+
const lookup = {};
|
|
16
|
+
if (connection.resolvedAuth)
|
|
17
|
+
lookup.auth = connection.resolvedAuth;
|
|
18
|
+
const profile = await capabilities.profile(connection.baseUrl, ctx, lookup);
|
|
19
|
+
return {
|
|
20
|
+
alias: connection.alias,
|
|
21
|
+
baseUrl: connection.baseUrl,
|
|
22
|
+
server: profile.server,
|
|
23
|
+
crops: profile.crops,
|
|
24
|
+
supported: profile.supported,
|
|
25
|
+
fetchedAt: profile.fetchedAt,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export const brapiCallsResource = resource('brapi://calls', {
|
|
29
|
+
name: 'brapi-calls',
|
|
30
|
+
title: 'BrAPI capability profile',
|
|
31
|
+
description: 'Capability profile for the default BrAPI connection — supported services, their HTTP methods, declared versions, and crops list. Mirrors what /serverinfo + /calls returned at the last load.',
|
|
32
|
+
mimeType: 'application/json',
|
|
33
|
+
handler(_params, ctx) {
|
|
34
|
+
return loadCallsProfile(ctx);
|
|
35
|
+
},
|
|
36
|
+
list: () => ({
|
|
37
|
+
resources: [
|
|
38
|
+
{
|
|
39
|
+
uri: 'brapi://calls',
|
|
40
|
+
name: 'BrAPI capability profile',
|
|
41
|
+
mimeType: 'application/json',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=brapi-calls.resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-calls.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/brapi-calls.resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAEvF,KAAK,UAAU,gBAAgB,CAAC,GAAY;IAC1C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,qBAAqB,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,MAAM,GAA8C,EAAE,CAAC;IAC7D,IAAI,UAAU,CAAC,YAAY;QAAE,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5E,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,EAAE;IAC1D,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,+LAA+L;IACjM,QAAQ,EAAE,kBAAkB;IAC5B,OAAO,CAAC,OAAO,EAAE,GAAG;QAClB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACX,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,eAAe;gBACpB,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview `brapi://dataset/{datasetId}` — metadata + provenance for a
|
|
3
|
+
* persisted dataset (rows omitted; use `brapi_manage_dataset` mode `load` to
|
|
4
|
+
* page through rows). Dataset IDs are unbounded and tenant-scoped — clients
|
|
5
|
+
* obtain them from a `find_*` tool's spillover handle, then read this URI.
|
|
6
|
+
*
|
|
7
|
+
* @module mcp-server/resources/definitions/brapi-dataset.resource
|
|
8
|
+
*/
|
|
9
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
10
|
+
export declare const brapiDatasetResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{
|
|
11
|
+
datasetId: z.ZodString;
|
|
12
|
+
}, z.core.$strip>, undefined, undefined>;
|
|
13
|
+
//# sourceMappingURL=brapi-dataset.resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brapi-dataset.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/brapi-dataset.resource.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,oBAAoB;;wCAe/B,CAAC"}
|