@cyanheads/brapi-mcp-server 0.7.13 → 0.8.1
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/AGENTS.md +39 -29
- package/CLAUDE.md +39 -29
- package/Dockerfile +93 -54
- package/README.md +210 -241
- package/changelog/0.8.x/0.8.0.md +48 -0
- package/changelog/0.8.x/0.8.1.md +38 -0
- package/dist/config/alias-credentials.d.ts +28 -7
- package/dist/config/alias-credentials.d.ts.map +1 -1
- package/dist/config/alias-credentials.js +91 -24
- package/dist/config/alias-credentials.js.map +1 -1
- package/dist/config/builtin-aliases.d.ts +11 -6
- package/dist/config/builtin-aliases.d.ts.map +1 -1
- package/dist/config/builtin-aliases.js +23 -37
- package/dist/config/builtin-aliases.js.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js +1 -1
- package/dist/mcp-server/resources/definitions/brapi-server-info.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/brapi-variable.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/brapi-variable.resource.js +2 -10
- package/dist/mcp-server/resources/definitions/brapi-variable.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/brapi-build-phenotype-matrix.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts +46 -0
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.js +65 -15
- package/dist/mcp-server/tools/definitions/brapi-connect.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js +1 -3
- package/dist/mcp-server/tools/definitions/brapi-dataframe-describe.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js +4 -10
- package/dist/mcp-server/tools/definitions/brapi-dataframe-export.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/brapi-dataframe-query.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js +8 -7
- package/dist/mcp-server/tools/definitions/brapi-describe-filters.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-export-genotype-matrix.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-export-genotype-matrix.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/brapi-export-genotype-matrix.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/brapi-find-genotype-calls.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.js +1 -5
- package/dist/mcp-server/tools/definitions/brapi-germplasm-performance.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js +2 -10
- package/dist/mcp-server/tools/definitions/brapi-get-germplasm.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-image.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js +2 -10
- package/dist/mcp-server/tools/definitions/brapi-get-study.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js +0 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-get.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js +1 -5
- package/dist/mcp-server/tools/definitions/brapi-raw-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts +12 -0
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/brapi-server-info.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js +55 -10
- package/dist/mcp-server/tools/definitions/brapi-submit-observations.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +123 -65
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/find-helpers.d.ts +11 -5
- package/dist/mcp-server/tools/shared/find-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/find-helpers.js +24 -16
- package/dist/mcp-server/tools/shared/find-helpers.js.map +1 -1
- package/dist/mcp-server/tools/shared/orientation-envelope.d.ts +26 -0
- package/dist/mcp-server/tools/shared/orientation-envelope.d.ts.map +1 -1
- package/dist/mcp-server/tools/shared/orientation-envelope.js +75 -6
- package/dist/mcp-server/tools/shared/orientation-envelope.js.map +1 -1
- package/dist/services/brapi-client/brapi-client.d.ts.map +1 -1
- package/dist/services/brapi-client/brapi-client.js +29 -26
- package/dist/services/brapi-client/brapi-client.js.map +1 -1
- package/dist/services/capability-registry/capability-registry.d.ts +8 -1
- package/dist/services/capability-registry/capability-registry.d.ts.map +1 -1
- package/dist/services/capability-registry/capability-registry.js +37 -6
- package/dist/services/capability-registry/capability-registry.js.map +1 -1
- package/dist/services/reference-data-cache/reference-data-cache.d.ts.map +1 -1
- package/dist/services/reference-data-cache/reference-data-cache.js +9 -4
- package/dist/services/reference-data-cache/reference-data-cache.js.map +1 -1
- package/dist/services/server-registry/server-registry.d.ts +17 -3
- package/dist/services/server-registry/server-registry.d.ts.map +1 -1
- package/dist/services/server-registry/server-registry.js +30 -7
- package/dist/services/server-registry/server-registry.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +11 -10
- package/server.json +11 -13
|
@@ -22,17 +22,31 @@ export declare class ServerRegistry {
|
|
|
22
22
|
private readonly tokenFetcher;
|
|
23
23
|
constructor(serverConfig: ServerConfig, tokenFetcher?: TokenFetcher);
|
|
24
24
|
/**
|
|
25
|
-
* Register a connection under an alias
|
|
26
|
-
* ready-to-use header (performing token exchange for `sgn` / `oauth2`) and
|
|
27
|
-
* persists the result in `ctx.state`.
|
|
25
|
+
* Register a connection under an alias: {@link resolve} then {@link save}.
|
|
28
26
|
*/
|
|
29
27
|
register(ctx: Context, input: RegisterInput): Promise<RegisteredServer>;
|
|
28
|
+
/**
|
|
29
|
+
* Validate the alias and base URL and resolve the auth mode to a
|
|
30
|
+
* ready-to-use header (performing token exchange for `sgn` / `oauth2`),
|
|
31
|
+
* without persisting anything — callers that must verify the connection
|
|
32
|
+
* first save it only once it works, so a failure leaves any previous
|
|
33
|
+
* registration under the alias intact.
|
|
34
|
+
*/
|
|
35
|
+
resolve(ctx: Context, input: RegisterInput): Promise<RegisteredServer>;
|
|
36
|
+
/** Persist a resolved connection under its alias, replacing any previous one. */
|
|
37
|
+
save(ctx: Context, registered: RegisteredServer): Promise<void>;
|
|
30
38
|
/** Fetch a registered connection or throw `NotFound`. */
|
|
31
39
|
get(ctx: Context, alias?: string): Promise<RegisteredServer>;
|
|
32
40
|
/** Non-throwing variant of `get`. */
|
|
33
41
|
getOptional(ctx: Context, alias?: string): Promise<RegisteredServer | null>;
|
|
34
42
|
list(ctx: Context): Promise<RegisteredServer[]>;
|
|
35
43
|
unregister(ctx: Context, alias?: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* True when session isolation is on but this request carries no session ID
|
|
46
|
+
* to scope on, so its connections land in the tenant-wide namespace that
|
|
47
|
+
* every other session-less caller in the tenant reads and overwrites.
|
|
48
|
+
*/
|
|
49
|
+
isolationFallsBackToShared(ctx: Context): boolean;
|
|
36
50
|
/**
|
|
37
51
|
* Resolve the state-key prefix for the current ctx. Under
|
|
38
52
|
* `BRAPI_SESSION_ISOLATION=true` (default) and a present `ctx.sessionId`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-registry.d.ts","sourceRoot":"","sources":["../../../src/services/server-registry/server-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAQtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E,eAAO,MAAM,aAAa,YAAY,CAAC;AAKvC,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,YACmB,YAAY,EAAE,YAAY,EAC1B,YAAY,GAAE,YAAkC,EAC/D;IAEJ
|
|
1
|
+
{"version":3,"file":"server-registry.d.ts","sourceRoot":"","sources":["../../../src/services/server-registry/server-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAQtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E,eAAO,MAAM,aAAa,YAAY,CAAC;AAKvC,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,YACmB,YAAY,EAAE,YAAY,EAC1B,YAAY,GAAE,YAAkC,EAC/D;IAEJ;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI5E;IAED;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe3E;IAED,iFAAiF;IAC3E,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE;IAED,yDAAyD;IACnD,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAShF;IAED,qCAAqC;IACrC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAsB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAEzF;IAEK,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAcpD;IAEK,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;IAED;;;;OAIG;IACH,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEhD;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,OAAO;YAID,WAAW;YA0BX,gBAAgB;YAoChB,mBAAmB;CAuClC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,KACtD,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA8FD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAEnE;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -21,11 +21,21 @@ export class ServerRegistry {
|
|
|
21
21
|
this.tokenFetcher = tokenFetcher;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Register a connection under an alias
|
|
25
|
-
* ready-to-use header (performing token exchange for `sgn` / `oauth2`) and
|
|
26
|
-
* persists the result in `ctx.state`.
|
|
24
|
+
* Register a connection under an alias: {@link resolve} then {@link save}.
|
|
27
25
|
*/
|
|
28
26
|
async register(ctx, input) {
|
|
27
|
+
const registered = await this.resolve(ctx, input);
|
|
28
|
+
await this.save(ctx, registered);
|
|
29
|
+
return registered;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate the alias and base URL and resolve the auth mode to a
|
|
33
|
+
* ready-to-use header (performing token exchange for `sgn` / `oauth2`),
|
|
34
|
+
* without persisting anything — callers that must verify the connection
|
|
35
|
+
* first save it only once it works, so a failure leaves any previous
|
|
36
|
+
* registration under the alias intact.
|
|
37
|
+
*/
|
|
38
|
+
async resolve(ctx, input) {
|
|
29
39
|
const alias = input.alias?.trim() || DEFAULT_ALIAS;
|
|
30
40
|
validateAlias(alias);
|
|
31
41
|
validateBaseUrl(input.baseUrl);
|
|
@@ -39,9 +49,12 @@ export class ServerRegistry {
|
|
|
39
49
|
const resolvedAuth = await this.resolveAuth(auth, registered.baseUrl, ctx);
|
|
40
50
|
if (resolvedAuth)
|
|
41
51
|
registered.resolvedAuth = resolvedAuth;
|
|
42
|
-
await ctx.state.set(this.connKey(ctx, alias), registered);
|
|
43
52
|
return registered;
|
|
44
53
|
}
|
|
54
|
+
/** Persist a resolved connection under its alias, replacing any previous one. */
|
|
55
|
+
async save(ctx, registered) {
|
|
56
|
+
await ctx.state.set(this.connKey(ctx, registered.alias), registered);
|
|
57
|
+
}
|
|
45
58
|
/** Fetch a registered connection or throw `NotFound`. */
|
|
46
59
|
async get(ctx, alias = DEFAULT_ALIAS) {
|
|
47
60
|
const entry = await ctx.state.get(this.connKey(ctx, alias));
|
|
@@ -74,6 +87,14 @@ export class ServerRegistry {
|
|
|
74
87
|
async unregister(ctx, alias = DEFAULT_ALIAS) {
|
|
75
88
|
await ctx.state.delete(this.connKey(ctx, alias));
|
|
76
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* True when session isolation is on but this request carries no session ID
|
|
92
|
+
* to scope on, so its connections land in the tenant-wide namespace that
|
|
93
|
+
* every other session-less caller in the tenant reads and overwrites.
|
|
94
|
+
*/
|
|
95
|
+
isolationFallsBackToShared(ctx) {
|
|
96
|
+
return this.serverConfig.sessionIsolation === true && !ctx.sessionId;
|
|
97
|
+
}
|
|
77
98
|
/**
|
|
78
99
|
* Resolve the state-key prefix for the current ctx. Under
|
|
79
100
|
* `BRAPI_SESSION_ISOLATION=true` (default) and a present `ctx.sessionId`
|
|
@@ -128,7 +149,6 @@ export class ServerRegistry {
|
|
|
128
149
|
tokenUrl,
|
|
129
150
|
payloadKeys: Object.keys(payload),
|
|
130
151
|
reason: 'auth_no_access_token',
|
|
131
|
-
...ctx.recoveryFor('auth_no_access_token'),
|
|
132
152
|
});
|
|
133
153
|
}
|
|
134
154
|
const resolved = {
|
|
@@ -155,7 +175,6 @@ export class ServerRegistry {
|
|
|
155
175
|
tokenUrl,
|
|
156
176
|
payloadKeys: Object.keys(payload),
|
|
157
177
|
reason: 'auth_no_access_token',
|
|
158
|
-
...ctx.recoveryFor('auth_no_access_token'),
|
|
159
178
|
});
|
|
160
179
|
}
|
|
161
180
|
const tokenType = typeof payload.token_type === 'string' && payload.token_type.trim()
|
|
@@ -194,7 +213,6 @@ const defaultTokenFetcher = async (url, body, ctx, options) => {
|
|
|
194
213
|
throw forbidden(`Token exchange failed at ${url}. Verify credentials and that the server exposes /token.`, {
|
|
195
214
|
tokenUrl: url,
|
|
196
215
|
reason: 'auth_token_exchange_failed',
|
|
197
|
-
...ctx.recoveryFor('auth_token_exchange_failed'),
|
|
198
216
|
}, { cause: err });
|
|
199
217
|
}
|
|
200
218
|
const text = await response.text();
|
|
@@ -226,6 +244,11 @@ function validateBaseUrl(baseUrl) {
|
|
|
226
244
|
baseUrl,
|
|
227
245
|
});
|
|
228
246
|
}
|
|
247
|
+
// Userinfo is never sent upstream as auth, but a stored baseUrl is echoed and
|
|
248
|
+
// logged, so it is refused rather than kept. The URL is not echoed back.
|
|
249
|
+
if (parsed.username || parsed.password) {
|
|
250
|
+
throw validationError('Invalid baseUrl: credentials in the URL (user:password@host) are not supported. Pass them in `auth`, or configure them server-side for the alias.');
|
|
251
|
+
}
|
|
229
252
|
}
|
|
230
253
|
function normalizeBaseUrl(baseUrl) {
|
|
231
254
|
return baseUrl.replace(/\/+$/, '');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-registry.js","sourceRoot":"","sources":["../../../src/services/server-registry/server-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKhE,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAQ/C,MAAM,OAAO,cAAc;IAEN,YAAY;IACZ,YAAY;IAF/B,YACmB,YAA0B,EAC1B,YAAY,GAAiB,mBAAmB;4BADhD,YAAY;4BACZ,YAAY;IAC5B,CAAC;IAEJ
|
|
1
|
+
{"version":3,"file":"server-registry.js","sourceRoot":"","sources":["../../../src/services/server-registry/server-registry.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/brapi-mcp-server",
|
|
3
3
|
"mcpName": "io.github.cyanheads/brapi-mcp-server",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"description": "A collaborative BrAPI v2.1 workspace for multi-agent research via MCP. Search studies, germplasm, genotypes, & more - across Breedbase, T3, Sweetpotatobase, & any BrAPI v2-compliant server.",
|
|
6
6
|
"author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
|
|
7
7
|
"type": "module",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"files": [
|
|
14
14
|
"changelog/",
|
|
15
15
|
"dist/",
|
|
16
|
+
"!dist/*.mcpb",
|
|
16
17
|
"README.md",
|
|
17
18
|
"LICENSE",
|
|
18
19
|
"CLAUDE.md",
|
|
@@ -88,24 +89,24 @@
|
|
|
88
89
|
"node": ">=24.0.0",
|
|
89
90
|
"bun": ">=1.4.0"
|
|
90
91
|
},
|
|
91
|
-
"packageManager": "bun@1.4.
|
|
92
|
+
"packageManager": "bun@1.4.2",
|
|
92
93
|
"publishConfig": {
|
|
93
94
|
"access": "public"
|
|
94
95
|
},
|
|
95
96
|
"dependencies": {
|
|
96
|
-
"@cyanheads/mcp-ts-core": "^0.13.
|
|
97
|
-
"@duckdb/node-api": "^1.5.
|
|
97
|
+
"@cyanheads/mcp-ts-core": "^0.13.11",
|
|
98
|
+
"@duckdb/node-api": "^1.5.6-r.1",
|
|
98
99
|
"pino-pretty": "^13.1.3",
|
|
99
100
|
"zod": "^4.6.5"
|
|
100
101
|
},
|
|
101
102
|
"devDependencies": {
|
|
102
|
-
"@biomejs/biome": "^2.5.
|
|
103
|
-
"@socketsecurity/bun-security-scanner": "^1.1.
|
|
104
|
-
"@types/node": "^26.
|
|
103
|
+
"@biomejs/biome": "^2.5.15",
|
|
104
|
+
"@socketsecurity/bun-security-scanner": "^1.1.3",
|
|
105
|
+
"@types/node": "^26.6.3",
|
|
105
106
|
"depcheck": "^1.4.7",
|
|
106
|
-
"ignore": "^7.0.
|
|
107
|
-
"tsc-alias": "^1.9.
|
|
107
|
+
"ignore": "^7.0.11",
|
|
108
|
+
"tsc-alias": "^1.9.7",
|
|
108
109
|
"typescript": "^7.0.2",
|
|
109
|
-
"vitest": "^5.0.
|
|
110
|
+
"vitest": "^5.0.3"
|
|
110
111
|
}
|
|
111
112
|
}
|
package/server.json
CHANGED
|
@@ -6,18 +6,14 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/brapi-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.8.1",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
14
|
"identifier": "@cyanheads/brapi-mcp-server",
|
|
15
|
-
"runtimeHint": "
|
|
16
|
-
"version": "0.
|
|
17
|
-
"packageArguments": [
|
|
18
|
-
{ "type": "positional", "value": "run" },
|
|
19
|
-
{ "type": "positional", "value": "start:stdio" }
|
|
20
|
-
],
|
|
15
|
+
"runtimeHint": "npx",
|
|
16
|
+
"version": "0.8.1",
|
|
21
17
|
"environmentVariables": [
|
|
22
18
|
{
|
|
23
19
|
"name": "BRAPI_DEFAULT_BASE_URL",
|
|
@@ -55,13 +51,15 @@
|
|
|
55
51
|
"registryType": "npm",
|
|
56
52
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
57
53
|
"identifier": "@cyanheads/brapi-mcp-server",
|
|
58
|
-
"runtimeHint": "
|
|
59
|
-
"version": "0.
|
|
60
|
-
"packageArguments": [
|
|
61
|
-
{ "type": "positional", "value": "run" },
|
|
62
|
-
{ "type": "positional", "value": "start:http" }
|
|
63
|
-
],
|
|
54
|
+
"runtimeHint": "npx",
|
|
55
|
+
"version": "0.8.1",
|
|
64
56
|
"environmentVariables": [
|
|
57
|
+
{
|
|
58
|
+
"name": "MCP_TRANSPORT_TYPE",
|
|
59
|
+
"description": "Selects the HTTP transport.",
|
|
60
|
+
"format": "string",
|
|
61
|
+
"value": "http"
|
|
62
|
+
},
|
|
65
63
|
{
|
|
66
64
|
"name": "BRAPI_DEFAULT_BASE_URL",
|
|
67
65
|
"description": "Default BrAPI v2 base URL. Optional — connections can be opened at runtime via the brapi_connect tool instead.",
|