@continuumdao/continuum-node-sdk 1.2.12 → 1.2.14
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/dist/api/node-read.d.ts +1 -1
- package/dist/api/node-read.d.ts.map +1 -1
- package/dist/api/node-read.js +24 -1
- package/dist/api/node-read.js.map +1 -1
- package/dist/core/agent/environment-variables.d.ts +11 -1
- package/dist/core/agent/environment-variables.d.ts.map +1 -1
- package/dist/core/agent/environment-variables.js +89 -5
- package/dist/core/agent/environment-variables.js.map +1 -1
- package/dist/core/agent/mcp-servers-catalog.d.ts.map +1 -1
- package/dist/core/agent/mcp-servers-catalog.js +22 -6
- package/dist/core/agent/mcp-servers-catalog.js.map +1 -1
- package/dist/core/agent/mcp-servers.d.ts +8 -4
- package/dist/core/agent/mcp-servers.d.ts.map +1 -1
- package/dist/core/agent/mcp-servers.js +138 -32
- package/dist/core/agent/mcp-servers.js.map +1 -1
- package/dist/core/agent/webhooks-catalog.d.ts +10 -0
- package/dist/core/agent/webhooks-catalog.d.ts.map +1 -0
- package/dist/core/agent/webhooks-catalog.js +19 -0
- package/dist/core/agent/webhooks-catalog.js.map +1 -0
- package/dist/core/agent/webhooks.d.ts +101 -0
- package/dist/core/agent/webhooks.d.ts.map +1 -0
- package/dist/core/agent/webhooks.js +359 -0
- package/dist/core/agent/webhooks.js.map +1 -0
- package/dist/core/keygen-id.d.ts.map +1 -1
- package/dist/core/keygen-id.js +8 -2
- package/dist/core/keygen-id.js.map +1 -1
- package/dist/core/keygen.d.ts.map +1 -1
- package/dist/core/keygen.js +31 -4
- package/dist/core/keygen.js.map +1 -1
- package/dist/core/mpc/join-multisign-request.d.ts +6 -0
- package/dist/core/mpc/join-multisign-request.d.ts.map +1 -0
- package/dist/core/mpc/join-multisign-request.js +19 -0
- package/dist/core/mpc/join-multisign-request.js.map +1 -0
- package/dist/core/mpc/schemas.d.ts +6 -0
- package/dist/core/mpc/schemas.d.ts.map +1 -1
- package/dist/core/mpc/schemas.js +20 -0
- package/dist/core/mpc/schemas.js.map +1 -1
- package/dist/core/mpc/sign-request-utils.d.ts.map +1 -1
- package/dist/core/mpc/sign-request-utils.js +7 -2
- package/dist/core/mpc/sign-request-utils.js.map +1 -1
- package/dist/core/registry/registry-lookup.d.ts +2 -0
- package/dist/core/registry/registry-lookup.d.ts.map +1 -1
- package/dist/core/registry/registry-lookup.js +5 -0
- package/dist/core/registry/registry-lookup.js.map +1 -1
- package/dist/evm/forge-broadcast.d.ts +8 -0
- package/dist/evm/forge-broadcast.d.ts.map +1 -1
- package/dist/evm/forge-broadcast.js +5 -5
- package/dist/evm/forge-broadcast.js.map +1 -1
- package/dist/evm/join-multisign.d.ts +15 -0
- package/dist/evm/join-multisign.d.ts.map +1 -0
- package/dist/evm/join-multisign.js +376 -0
- package/dist/evm/join-multisign.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-environment-variables.d.ts +4 -0
- package/dist/mcp/agent-environment-variables.d.ts.map +1 -0
- package/dist/mcp/agent-environment-variables.js +44 -0
- package/dist/mcp/agent-environment-variables.js.map +1 -0
- package/dist/mcp/agent-mcp-servers.d.ts.map +1 -1
- package/dist/mcp/agent-mcp-servers.js +9 -9
- package/dist/mcp/agent-mcp-servers.js.map +1 -1
- package/dist/mcp/agent-webhooks.d.ts +4 -0
- package/dist/mcp/agent-webhooks.d.ts.map +1 -0
- package/dist/mcp/agent-webhooks.js +87 -0
- package/dist/mcp/agent-webhooks.js.map +1 -0
- package/dist/mcp/defi/aave-v4-input.d.ts +17 -0
- package/dist/mcp/defi/aave-v4-input.d.ts.map +1 -0
- package/dist/mcp/defi/aave-v4-input.js +363 -0
- package/dist/mcp/defi/aave-v4-input.js.map +1 -0
- package/dist/mcp/defi/catalog-adapter.d.ts +2 -14
- package/dist/mcp/defi/catalog-adapter.d.ts.map +1 -1
- package/dist/mcp/defi/catalog-adapter.js +2 -51
- package/dist/mcp/defi/catalog-adapter.js.map +1 -1
- package/dist/mcp/defi/curve-quote-input.d.ts +9 -0
- package/dist/mcp/defi/curve-quote-input.d.ts.map +1 -0
- package/dist/mcp/defi/curve-quote-input.js +64 -0
- package/dist/mcp/defi/curve-quote-input.js.map +1 -0
- package/dist/mcp/defi/discovery.d.ts.map +1 -1
- package/dist/mcp/defi/discovery.js +20 -10
- package/dist/mcp/defi/discovery.js.map +1 -1
- package/dist/mcp/defi/handler.d.ts +0 -8
- package/dist/mcp/defi/handler.d.ts.map +1 -1
- package/dist/mcp/defi/handler.js +95 -4
- package/dist/mcp/defi/handler.js.map +1 -1
- package/dist/mcp/defi/input-adapter.d.ts +1 -0
- package/dist/mcp/defi/input-adapter.d.ts.map +1 -1
- package/dist/mcp/defi/input-adapter.js +69 -38
- package/dist/mcp/defi/input-adapter.js.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.d.ts.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.js +59 -8
- package/dist/mcp/defi/register-protocol-tools.js.map +1 -1
- package/dist/mcp/defi/tool-schemas.d.ts +19 -0
- package/dist/mcp/defi/tool-schemas.d.ts.map +1 -0
- package/dist/mcp/defi/tool-schemas.js +65 -0
- package/dist/mcp/defi/tool-schemas.js.map +1 -0
- package/dist/mcp/defi/uniswap-api-key.d.ts +3 -1
- package/dist/mcp/defi/uniswap-api-key.d.ts.map +1 -1
- package/dist/mcp/defi/uniswap-api-key.js +11 -2
- package/dist/mcp/defi/uniswap-api-key.js.map +1 -1
- package/dist/mcp/defi/uniswap-liquidity-input.d.ts +11 -0
- package/dist/mcp/defi/uniswap-liquidity-input.d.ts.map +1 -0
- package/dist/mcp/defi/uniswap-liquidity-input.js +179 -0
- package/dist/mcp/defi/uniswap-liquidity-input.js.map +1 -0
- package/dist/mcp/defi/uniswap-liquidity-registry.d.ts +31 -0
- package/dist/mcp/defi/uniswap-liquidity-registry.d.ts.map +1 -0
- package/dist/mcp/defi/uniswap-liquidity-registry.js +296 -0
- package/dist/mcp/defi/uniswap-liquidity-registry.js.map +1 -0
- package/dist/mcp/defi/uniswap-quote-input.d.ts +10 -0
- package/dist/mcp/defi/uniswap-quote-input.d.ts.map +1 -0
- package/dist/mcp/defi/uniswap-quote-input.js +96 -0
- package/dist/mcp/defi/uniswap-quote-input.js.map +1 -0
- package/dist/mcp/keygen.d.ts.map +1 -1
- package/dist/mcp/keygen.js +4 -4
- package/dist/mcp/keygen.js.map +1 -1
- package/dist/mcp/mpc.d.ts.map +1 -1
- package/dist/mcp/mpc.js +7 -1
- package/dist/mcp/mpc.js.map +1 -1
- package/dist/mcp/register.d.ts +1 -0
- package/dist/mcp/register.d.ts.map +1 -1
- package/dist/mcp/register.js +6 -0
- package/dist/mcp/register.js.map +1 -1
- package/dist/mcp/tool-utils.d.ts +7 -0
- package/dist/mcp/tool-utils.d.ts.map +1 -1
- package/dist/mcp/tool-utils.js +7 -0
- package/dist/mcp/tool-utils.js.map +1 -1
- package/dist/schemas/extended.d.ts +366 -40
- package/dist/schemas/extended.d.ts.map +1 -1
- package/dist/schemas/extended.js +202 -28
- package/dist/schemas/extended.js.map +1 -1
- package/package.json +3 -3
package/dist/api/node-read.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** GET
|
|
1
|
+
/** GET, JWT-protected DELETE, and POST /agent/* with optional Bearer JWT (browser HTTPS / loopback). */
|
|
2
2
|
export type NodeReadAuth = {
|
|
3
3
|
bearerOnGet: boolean;
|
|
4
4
|
jwt: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-read.d.ts","sourceRoot":"","sources":["../../src/api/node-read.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"node-read.d.ts","sourceRoot":"","sources":["../../src/api/node-read.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACnB,CAAC;AAyBF,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,IAAI,EAAE,YAAY,GAChB,OAAO,CAAC,QAAQ,CAAC,CAOnB"}
|
package/dist/api/node-read.js
CHANGED
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
const READ_JWT_METHODS = new Set(['GET', 'DELETE']);
|
|
2
|
+
function requestPathname(url) {
|
|
3
|
+
try {
|
|
4
|
+
return new URL(url).pathname;
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
try {
|
|
8
|
+
return new URL(url, 'http://localhost').pathname;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return '';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/** Management POSTs use signatures only; agent POSTs on browser HTTPS / loopback need the read JWT too. */
|
|
16
|
+
function readJwtBearerRequired(method, url) {
|
|
17
|
+
const m = method.toUpperCase();
|
|
18
|
+
if (READ_JWT_METHODS.has(m))
|
|
19
|
+
return true;
|
|
20
|
+
if (m !== 'POST')
|
|
21
|
+
return false;
|
|
22
|
+
const path = requestPathname(url);
|
|
23
|
+
return path === '/agent' || path.startsWith('/agent/');
|
|
24
|
+
}
|
|
2
25
|
export function nodeFetchWithReadAuth(url, init, auth) {
|
|
3
26
|
const method = (init?.method ?? 'GET').toUpperCase();
|
|
4
27
|
const headers = new Headers(init?.headers);
|
|
5
|
-
if (auth.bearerOnGet &&
|
|
28
|
+
if (auth.bearerOnGet && auth.jwt?.trim() && readJwtBearerRequired(method, url)) {
|
|
6
29
|
headers.set('Authorization', `Bearer ${auth.jwt.trim()}`);
|
|
7
30
|
}
|
|
8
31
|
return fetch(url, { ...init, headers });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-read.js","sourceRoot":"","sources":["../../src/api/node-read.ts"],"names":[],"mappings":"AAMA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpD,MAAM,UAAU,qBAAqB,CACpC,GAAW,EACX,IAA6B,EAC7B,IAAkB;IAElB,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,WAAW,IAAI,
|
|
1
|
+
{"version":3,"file":"node-read.js","sourceRoot":"","sources":["../../src/api/node-read.ts"],"names":[],"mappings":"AAMA,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEpD,SAAS,eAAe,CAAC,GAAW;IACnC,IAAI,CAAC;QACJ,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,CAAC;YACJ,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;AACF,CAAC;AAED,2GAA2G;AAC3G,SAAS,qBAAqB,CAAC,MAAc,EAAE,GAAW;IACzD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC/B,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,GAAW,EACX,IAA6B,EAC7B,IAAkB;IAElB,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,EAAE,EAAC,GAAG,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import type { NodeSdkConfig } from '../../config/schema.js';
|
|
2
|
-
import { AgentEnvironmentVariableSchema, GetEnvironmentVariableQuerySchema } from '../../schemas/extended.js';
|
|
2
|
+
import { AddEnvironmentVariableInputSchema, AgentEnvironmentVariableSchema, AgentEnvironmentVariableUpsertResultSchema, GetEnvironmentVariableQuerySchema, type ManagementSigningMethod } from '../../schemas/extended.js';
|
|
3
3
|
import type { SdkResult } from '../result.js';
|
|
4
|
+
import { toSelectedSigningKey, type BuiltManagementPostRequest } from '../management-signer.js';
|
|
4
5
|
import { z } from 'zod';
|
|
5
6
|
export type AgentEnvironmentVariable = z.infer<typeof AgentEnvironmentVariableSchema>;
|
|
7
|
+
export declare function normalizeAgentEnvironmentVariableName(raw: string): string;
|
|
8
|
+
export declare function validateAgentEnvironmentVariableName(name: string): string | null;
|
|
6
9
|
/** GET /getEnvironmentVariable — one agent env var stored on this node. */
|
|
7
10
|
export declare function getEnvironmentVariable(config: NodeSdkConfig, query: z.infer<typeof GetEnvironmentVariableQuerySchema>): Promise<SdkResult<AgentEnvironmentVariable>>;
|
|
8
11
|
/** GET /listEnvironmentVariables — all agent env vars stored on this node. */
|
|
9
12
|
export declare function listEnvironmentVariables(config: NodeSdkConfig): Promise<SdkResult<{
|
|
10
13
|
variables: AgentEnvironmentVariable[];
|
|
11
14
|
}>>;
|
|
15
|
+
export declare function buildAddEnvironmentVariable(config: NodeSdkConfig, input: z.infer<typeof AddEnvironmentVariableInputSchema>, signing?: ManagementSigningMethod): Promise<SdkResult<BuiltManagementPostRequest>>;
|
|
16
|
+
/** POST /addEnvironmentVariable — upsert one agent Variable (MCP output omits value). */
|
|
17
|
+
export declare function addEnvironmentVariable(config: NodeSdkConfig, input: z.infer<typeof AddEnvironmentVariableInputSchema>, signing?: ManagementSigningMethod): Promise<SdkResult<{
|
|
18
|
+
variable: z.infer<typeof AgentEnvironmentVariableUpsertResultSchema>;
|
|
19
|
+
selectedSigningKey?: ReturnType<typeof toSelectedSigningKey>;
|
|
20
|
+
signingMessage: string;
|
|
21
|
+
}>>;
|
|
12
22
|
//# sourceMappingURL=environment-variables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../../src/core/agent/environment-variables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../../src/core/agent/environment-variables.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAEN,iCAAiC,EACjC,8BAA8B,EAC9B,0CAA0C,EAC1C,iCAAiC,EAGjC,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAGN,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,8BAA8B,CACrC,CAAC;AAIF,wBAAgB,qCAAqC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhF;AAmCD,2EAA2E;AAC3E,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,GACtD,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,CA4B9C;AAED,8EAA8E;AAC9E,wBAAsB,wBAAwB,CAC7C,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,SAAS,CAAC;IAAC,SAAS,EAAE,wBAAwB,EAAE,CAAA;CAAC,CAAC,CAAC,CAgC7D;AAED,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,EACxD,OAAO,GAAE,uBAAoD,GAC3D,OAAO,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAqBhD;AAED,yFAAyF;AACzF,wBAAsB,sBAAsB,CAC3C,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,EACxD,OAAO,GAAE,uBAAoD,GAC3D,OAAO,CACT,SAAS,CAAC;IACT,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,0CAA0C,CAAC,CAAC;IACrE,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;IAC7D,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC,CACF,CAsCA"}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
import { buildManagementQueryPath, managementGet, } from '../../api/management-api.js';
|
|
2
|
-
import { AGENT_ENVIRONMENT_API_PATHS, AgentEnvironmentVariableSchema, GetEnvironmentVariableQuerySchema, ListEnvironmentVariablesDataSchema, } from '../../schemas/extended.js';
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { buildManagementQueryPath, managementGet, managementPost, } from '../../api/management-api.js';
|
|
2
|
+
import { AGENT_ENVIRONMENT_API_PATHS, AddEnvironmentVariableInputSchema, AgentEnvironmentVariableSchema, AgentEnvironmentVariableUpsertResultSchema, GetEnvironmentVariableQuerySchema, ListEnvironmentVariablesDataSchema, DEFAULT_MANAGEMENT_SIGNING, } from '../../schemas/extended.js';
|
|
3
|
+
import { buildManagementPostRequest, managementSign, toSelectedSigningKey, } from '../management-signer.js';
|
|
4
|
+
const ENVIRONMENT_VARIABLE_NAME_RE = /^[A-Z][A-Z0-9_]*$/;
|
|
5
|
+
export function normalizeAgentEnvironmentVariableName(raw) {
|
|
6
|
+
return raw.trim().toUpperCase();
|
|
7
|
+
}
|
|
8
|
+
export function validateAgentEnvironmentVariableName(name) {
|
|
9
|
+
const normalized = normalizeAgentEnvironmentVariableName(name);
|
|
10
|
+
if (!normalized) {
|
|
11
|
+
return 'Environment variable name is required.';
|
|
12
|
+
}
|
|
13
|
+
if (normalized.length > 128) {
|
|
14
|
+
return 'Environment variable name must be at most 128 characters.';
|
|
15
|
+
}
|
|
16
|
+
if (!ENVIRONMENT_VARIABLE_NAME_RE.test(normalized)) {
|
|
17
|
+
return 'Environment variable name must start with A-Z and contain only A-Z, 0-9, and underscore.';
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
5
20
|
}
|
|
6
21
|
function normalizeEnvironmentVariableRow(raw) {
|
|
7
22
|
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
@@ -12,6 +27,19 @@ function normalizeEnvironmentVariableRow(raw) {
|
|
|
12
27
|
name: String(row.name ?? row.Name ?? '').trim(),
|
|
13
28
|
value: String(row.value ?? row.Value ?? ''),
|
|
14
29
|
updatedAt: String(row.updatedAt ?? row.UpdatedAt ?? '').trim() || undefined,
|
|
30
|
+
sensitive: Boolean(row.sensitive ?? row.Sensitive),
|
|
31
|
+
});
|
|
32
|
+
return parsed.success ? parsed.data : null;
|
|
33
|
+
}
|
|
34
|
+
function toUpsertResult(row, fallbackName) {
|
|
35
|
+
const name = row?.name ?? fallbackName;
|
|
36
|
+
if (!name) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const parsed = AgentEnvironmentVariableUpsertResultSchema.safeParse({
|
|
40
|
+
name,
|
|
41
|
+
updatedAt: row?.updatedAt,
|
|
42
|
+
sensitive: row?.sensitive,
|
|
15
43
|
});
|
|
16
44
|
return parsed.success ? parsed.data : null;
|
|
17
45
|
}
|
|
@@ -21,7 +49,11 @@ export async function getEnvironmentVariable(config, query) {
|
|
|
21
49
|
if (!parsedQuery.success) {
|
|
22
50
|
return { ok: false, reason: 'Invalid environment variable name.' };
|
|
23
51
|
}
|
|
24
|
-
const
|
|
52
|
+
const nameErr = validateAgentEnvironmentVariableName(parsedQuery.data.name);
|
|
53
|
+
if (nameErr) {
|
|
54
|
+
return { ok: false, reason: nameErr };
|
|
55
|
+
}
|
|
56
|
+
const name = normalizeAgentEnvironmentVariableName(parsedQuery.data.name);
|
|
25
57
|
const path = buildManagementQueryPath(AGENT_ENVIRONMENT_API_PATHS.get, {
|
|
26
58
|
name,
|
|
27
59
|
});
|
|
@@ -66,4 +98,56 @@ export async function listEnvironmentVariables(config) {
|
|
|
66
98
|
}
|
|
67
99
|
return { ok: true, data: parsed.data };
|
|
68
100
|
}
|
|
101
|
+
export async function buildAddEnvironmentVariable(config, input, signing = DEFAULT_MANAGEMENT_SIGNING) {
|
|
102
|
+
const parsed = AddEnvironmentVariableInputSchema.safeParse(input);
|
|
103
|
+
if (!parsed.success) {
|
|
104
|
+
return { ok: false, reason: 'Invalid add environment variable input.' };
|
|
105
|
+
}
|
|
106
|
+
const nameErr = validateAgentEnvironmentVariableName(parsed.data.name);
|
|
107
|
+
if (nameErr) {
|
|
108
|
+
return { ok: false, reason: nameErr };
|
|
109
|
+
}
|
|
110
|
+
const name = normalizeAgentEnvironmentVariableName(parsed.data.name);
|
|
111
|
+
return buildManagementPostRequest(config, {
|
|
112
|
+
path: AGENT_ENVIRONMENT_API_PATHS.add,
|
|
113
|
+
buildRequestFields: () => ({
|
|
114
|
+
name,
|
|
115
|
+
value: parsed.data.value,
|
|
116
|
+
}),
|
|
117
|
+
}, signing);
|
|
118
|
+
}
|
|
119
|
+
/** POST /addEnvironmentVariable — upsert one agent Variable (MCP output omits value). */
|
|
120
|
+
export async function addEnvironmentVariable(config, input, signing = DEFAULT_MANAGEMENT_SIGNING) {
|
|
121
|
+
const built = await buildAddEnvironmentVariable(config, input, signing);
|
|
122
|
+
if (!built.ok) {
|
|
123
|
+
return built;
|
|
124
|
+
}
|
|
125
|
+
const signed = await managementSign(config, signing, built.data.unsignedBody);
|
|
126
|
+
if (!signed.ok) {
|
|
127
|
+
return signed;
|
|
128
|
+
}
|
|
129
|
+
const posted = await managementPost(config, built.data.path, signed.data);
|
|
130
|
+
if (!posted.ok) {
|
|
131
|
+
return posted;
|
|
132
|
+
}
|
|
133
|
+
const row = normalizeEnvironmentVariableRow(posted.data);
|
|
134
|
+
const name = normalizeAgentEnvironmentVariableName(AddEnvironmentVariableInputSchema.parse(input).name);
|
|
135
|
+
const variable = toUpsertResult(row, name);
|
|
136
|
+
if (!variable) {
|
|
137
|
+
return {
|
|
138
|
+
ok: false,
|
|
139
|
+
reason: 'Add environment variable response failed validation.',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
ok: true,
|
|
144
|
+
data: {
|
|
145
|
+
variable,
|
|
146
|
+
selectedSigningKey: built.data.selectedSigningKey
|
|
147
|
+
? toSelectedSigningKey(built.data.selectedSigningKey)
|
|
148
|
+
: undefined,
|
|
149
|
+
signingMessage: built.data.canonicalJson,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
69
153
|
//# sourceMappingURL=environment-variables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../../src/core/agent/environment-variables.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,wBAAwB,EACxB,aAAa,
|
|
1
|
+
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../../src/core/agent/environment-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers-catalog.d.ts","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,iBAAiB,EA+
|
|
1
|
+
{"version":3,"file":"mcp-servers-catalog.d.ts","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAEjE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,iBAAiB,EA+G3D,CAAC"}
|
|
@@ -51,10 +51,15 @@ export const BUNDLED_MCP_SERVER_TEMPLATES = [
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
id: 'etherscan',
|
|
54
|
-
displayName: 'Etherscan',
|
|
55
|
-
transport: '
|
|
56
|
-
|
|
54
|
+
displayName: 'Etherscan (API v2)',
|
|
55
|
+
transport: 'stdio',
|
|
56
|
+
command: 'npx',
|
|
57
|
+
args: ['-y', 'mcp-etherscan-server'],
|
|
57
58
|
apiKeyEnvVar: 'ETHERSCAN_API_KEY',
|
|
59
|
+
envVars: ['ETHERSCAN_API_KEY'],
|
|
60
|
+
runtime: {
|
|
61
|
+
requireCommands: ['npx'],
|
|
62
|
+
},
|
|
58
63
|
initialLoad: false,
|
|
59
64
|
},
|
|
60
65
|
{
|
|
@@ -86,9 +91,20 @@ export const BUNDLED_MCP_SERVER_TEMPLATES = [
|
|
|
86
91
|
id: 'binance',
|
|
87
92
|
displayName: 'Binance (public market data)',
|
|
88
93
|
transport: 'stdio',
|
|
89
|
-
command: '
|
|
90
|
-
args: [
|
|
91
|
-
|
|
94
|
+
command: 'uv',
|
|
95
|
+
args: [
|
|
96
|
+
'run',
|
|
97
|
+
'--with',
|
|
98
|
+
'fastmcp>=0.1.0',
|
|
99
|
+
'--with',
|
|
100
|
+
'httpx>=0.27.0',
|
|
101
|
+
'--with',
|
|
102
|
+
'pydantic>=2.0.0',
|
|
103
|
+
'https://raw.githubusercontent.com/danishashko/binance-mcp-server/main/binance_mcp.py',
|
|
104
|
+
],
|
|
105
|
+
runtime: {
|
|
106
|
+
requireCommands: ['uv'],
|
|
107
|
+
},
|
|
92
108
|
initialLoad: false,
|
|
93
109
|
},
|
|
94
110
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers-catalog.js","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers-catalog.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAiC;IACzE;QACC,EAAE,EAAE,YAAY;QAChB,WAAW,EAAE,mBAAmB;QAChC,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,cAAc;QAClB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACL,KAAK;YACL,QAAQ;YACR,yDAAyD;YACzD,SAAS;YACT,KAAK;YACL,sEAAsE;SACtE;QACD,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,IAAI,CAAC;SACvB;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,iCAAiC,CAAC;QAC/C,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;SAC9D;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,WAAW;QACf,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-servers-catalog.js","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers-catalog.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAiC;IACzE;QACC,EAAE,EAAE,YAAY;QAChB,WAAW,EAAE,mBAAmB;QAChC,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACrC,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,cAAc;QAClB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACL,KAAK;YACL,QAAQ;YACR,yDAAyD;YACzD,SAAS;YACT,KAAK;YACL,sEAAsE;SACtE;QACD,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,IAAI,CAAC;SACvB;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,iCAAiC,CAAC;QAC/C,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;SAC9D;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,WAAW;QACf,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC;QACpC,YAAY,EAAE,mBAAmB;QACjC,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,KAAK,CAAC;SACxB;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,MAAM;QACV,WAAW,EAAE,gBAAgB;QAC7B,SAAS,EAAE,MAAM;QACjB,GAAG,EAAE,6BAA6B;QAClC,YAAY,EAAE,cAAc;QAC5B,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,WAAW;QACf,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,MAAM;QACjB,GAAG,EAAE,mCAAmC;QACxC,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,eAAe;QACnB,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE,MAAM;QACjB,GAAG,EAAE,uCAAuC;QAC5C,YAAY,EAAE,mBAAmB;QACjC,YAAY,EAAE,kBAAkB;QAChC,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE;YACL,KAAK;YACL,QAAQ;YACR,gBAAgB;YAChB,QAAQ;YACR,eAAe;YACf,QAAQ;YACR,iBAAiB;YACjB,sFAAsF;SACtF;QACD,OAAO,EAAE;YACR,eAAe,EAAE,CAAC,IAAI,CAAC;SACvB;QACD,WAAW,EAAE,KAAK;KAClB;IACD;QACC,EAAE,EAAE,GAAG;QACP,WAAW,EAAE,aAAa;QAC1B,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,qCAAqC,CAAC;QACnD,OAAO,EAAE;YACR,iBAAiB;YACjB,oBAAoB;YACpB,sBAAsB;YACtB,uBAAuB;SACvB;QACD,WAAW,EAAE,KAAK;KAClB;CACQ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NodeSdkConfig } from '../../config/schema.js';
|
|
2
|
-
import { AgentMcpServerRowSchema, GetMcpServerQuerySchema,
|
|
2
|
+
import { AgentMcpServerRowSchema, GetMcpServerQuerySchema, ListMcpServersDataSchema, RemoveMcpServerInputSchema, type AddMcpServerFromCatalogInput, type AddMcpServerInput, type ManagementSigningMethod } from '../../schemas/extended.js';
|
|
3
3
|
import type { SdkResult } from '../result.js';
|
|
4
4
|
import { toSelectedSigningKey, type BuiltManagementPostRequest } from '../management-signer.js';
|
|
5
5
|
import { z } from 'zod';
|
|
@@ -7,10 +7,8 @@ export type AgentMcpServerRow = z.infer<typeof AgentMcpServerRowSchema>;
|
|
|
7
7
|
export type ListMcpServersData = z.infer<typeof ListMcpServersDataSchema>;
|
|
8
8
|
export declare function normalizeAgentMcpServerId(raw: string): string;
|
|
9
9
|
export declare function validateAgentMcpServerId(id: string): string | null;
|
|
10
|
-
/** GET /listMcpServers —
|
|
10
|
+
/** GET /listMcpServers — active servers plus availableCatalog from mpc-config agent_llm_config.defaults/MCP_servers.json. */
|
|
11
11
|
export declare function listMcpServers(config: NodeSdkConfig): Promise<SdkResult<ListMcpServersData>>;
|
|
12
|
-
/** Bundled optional MCP catalog from mpc-config (for suggesting add_mcp_server). */
|
|
13
|
-
export declare function listBundledMcpServerTemplates(): SdkResult<z.infer<typeof ListBundledMcpServerTemplatesDataSchema>>;
|
|
14
12
|
/** GET /getMcpServer?id= */
|
|
15
13
|
export declare function getMcpServer(config: NodeSdkConfig, query: z.infer<typeof GetMcpServerQuerySchema>): Promise<SdkResult<AgentMcpServerRow>>;
|
|
16
14
|
export declare function buildAddMcpServer(config: NodeSdkConfig, input: AddMcpServerInput, signing?: ManagementSigningMethod): Promise<SdkResult<BuiltManagementPostRequest>>;
|
|
@@ -19,6 +17,12 @@ export declare function addMcpServer(config: NodeSdkConfig, input: AddMcpServerI
|
|
|
19
17
|
selectedSigningKey?: ReturnType<typeof toSelectedSigningKey>;
|
|
20
18
|
signingMessage: string;
|
|
21
19
|
}>>;
|
|
20
|
+
export declare function buildAddMcpServerFromCatalog(config: NodeSdkConfig, input: AddMcpServerFromCatalogInput, signing?: ManagementSigningMethod): Promise<SdkResult<BuiltManagementPostRequest>>;
|
|
21
|
+
export declare function addMcpServerFromCatalog(config: NodeSdkConfig, input: AddMcpServerFromCatalogInput, signing?: ManagementSigningMethod): Promise<SdkResult<{
|
|
22
|
+
server: AgentMcpServerRow;
|
|
23
|
+
selectedSigningKey?: ReturnType<typeof toSelectedSigningKey>;
|
|
24
|
+
signingMessage: string;
|
|
25
|
+
}>>;
|
|
22
26
|
export declare function buildRemoveMcpServer(config: NodeSdkConfig, input: z.infer<typeof RemoveMcpServerInputSchema>, signing?: ManagementSigningMethod): Promise<SdkResult<BuiltManagementPostRequest>>;
|
|
23
27
|
export declare function removeMcpServer(config: NodeSdkConfig, input: z.infer<typeof RemoveMcpServerInputSchema>, signing?: ManagementSigningMethod): Promise<SdkResult<{
|
|
24
28
|
message: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-servers.d.ts","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAM1D,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-servers.d.ts","sourceRoot":"","sources":["../../../src/core/agent/mcp-servers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { buildManagementQueryPath, managementGet, managementPost, } from '../../api/management-api.js';
|
|
2
|
-
import { AGENT_MCP_API_PATHS, AddMcpServerInputSchema, AgentMcpServerRowSchema, GetMcpServerQuerySchema,
|
|
2
|
+
import { AGENT_MCP_API_PATHS, AddMcpServerFromCatalogInputSchema, AddMcpServerInputSchema, AgentMcpRuntimeSpecSchema, AgentMcpServerRowSchema, GetMcpServerQuerySchema, ListMcpServersDataSchema, RemoveMcpServerInputSchema, DEFAULT_MANAGEMENT_SIGNING, } from '../../schemas/extended.js';
|
|
3
3
|
import { buildManagementPostRequest, managementSign, toSelectedSigningKey, } from '../management-signer.js';
|
|
4
|
-
import { BUNDLED_MCP_SERVER_TEMPLATES } from './mcp-servers-catalog.js';
|
|
5
4
|
const MCP_SERVER_ID_RE = /^[a-z][a-z0-9_-]*$/;
|
|
6
5
|
export function normalizeAgentMcpServerId(raw) {
|
|
7
6
|
return raw
|
|
@@ -46,10 +45,19 @@ function parseMcpServerRow(raw) {
|
|
|
46
45
|
? argsRaw.map(a => String(a).trim()).filter(Boolean)
|
|
47
46
|
: undefined;
|
|
48
47
|
const sourceRaw = String(o.source ?? o.Source ?? 'user').trim().toLowerCase();
|
|
48
|
+
const source = sourceRaw === 'default'
|
|
49
|
+
? 'default'
|
|
50
|
+
: sourceRaw === 'catalog'
|
|
51
|
+
? 'catalog'
|
|
52
|
+
: 'user';
|
|
49
53
|
const envVarsRaw = o.envVars ?? o.EnvVars;
|
|
50
54
|
const envVars = Array.isArray(envVarsRaw)
|
|
51
55
|
? envVarsRaw.map((v) => String(v).trim()).filter(Boolean)
|
|
52
56
|
: undefined;
|
|
57
|
+
const runtimeRaw = o.runtime ?? o.Runtime;
|
|
58
|
+
const runtimeParsed = AgentMcpRuntimeSpecSchema.safeParse(runtimeRaw);
|
|
59
|
+
const runtime = runtimeParsed.success ? runtimeParsed.data : undefined;
|
|
60
|
+
const setupUrlRaw = String(o.setupUrl ?? o.SetupUrl ?? '').trim();
|
|
53
61
|
const parsed = AgentMcpServerRowSchema.safeParse({
|
|
54
62
|
id,
|
|
55
63
|
displayName: String(o.displayName ?? o.DisplayName ?? id).trim(),
|
|
@@ -59,13 +67,17 @@ function parseMcpServerRow(raw) {
|
|
|
59
67
|
args: args?.length ? args : undefined,
|
|
60
68
|
envVars: envVars?.length ? envVars : undefined,
|
|
61
69
|
useUserFolder: Boolean(o.useUserFolder ?? o.UseUserFolder),
|
|
70
|
+
runtime,
|
|
71
|
+
setupUrl: setupUrlRaw || undefined,
|
|
62
72
|
apiKeyEnvVar: String(o.apiKeyEnvVar ?? o.APIKeyEnvVar ?? '').trim() || undefined,
|
|
63
73
|
apiKeyHeader: String(o.apiKeyHeader ?? o.APIKeyHeader ?? '').trim() || undefined,
|
|
64
74
|
apiKeyPresent: Boolean(o.apiKeyPresent ?? o.APIKeyPresent),
|
|
65
75
|
apiKeyMasked: String(o.apiKeyMasked ?? o.APIKeyMasked ?? '').trim() || undefined,
|
|
66
76
|
envConfigured: Boolean(o.envConfigured ?? o.EnvConfigured),
|
|
67
77
|
initialLoad: Boolean(o.initialLoad ?? o.InitialLoad),
|
|
68
|
-
|
|
78
|
+
aiReady: Boolean(o.aiReady ?? o.AiReady),
|
|
79
|
+
builtin: Boolean(o.builtin ?? o.Builtin),
|
|
80
|
+
source,
|
|
69
81
|
removable: Boolean(o.removable ?? o.Removable),
|
|
70
82
|
updatedAt: String(o.updatedAt ?? o.UpdatedAt ?? '').trim() || undefined,
|
|
71
83
|
});
|
|
@@ -84,30 +96,68 @@ function parseMcpServerRows(raw) {
|
|
|
84
96
|
}
|
|
85
97
|
return out;
|
|
86
98
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
99
|
+
/** Map GET /listMcpServers availableCatalog rows to add_mcp_server-shaped templates. */
|
|
100
|
+
function catalogRowsToAddableTemplates(rows) {
|
|
101
|
+
const out = [];
|
|
102
|
+
for (const row of rows) {
|
|
103
|
+
if (row.transport === 'http') {
|
|
104
|
+
if (!row.url?.trim()) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
out.push({
|
|
108
|
+
id: row.id,
|
|
109
|
+
displayName: row.displayName,
|
|
110
|
+
transport: 'http',
|
|
111
|
+
url: row.url,
|
|
112
|
+
apiKeyEnvVar: row.apiKeyEnvVar,
|
|
113
|
+
apiKeyHeader: row.apiKeyHeader,
|
|
114
|
+
initialLoad: row.initialLoad,
|
|
115
|
+
aiReady: row.aiReady,
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (!row.command?.trim()) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
out.push({
|
|
123
|
+
id: row.id,
|
|
124
|
+
displayName: row.displayName,
|
|
125
|
+
transport: 'stdio',
|
|
126
|
+
command: row.command,
|
|
127
|
+
args: row.args,
|
|
128
|
+
apiKeyEnvVar: row.apiKeyEnvVar,
|
|
129
|
+
envVars: row.envVars,
|
|
130
|
+
useUserFolder: row.useUserFolder,
|
|
131
|
+
runtime: row.runtime,
|
|
132
|
+
initialLoad: row.initialLoad,
|
|
133
|
+
aiReady: row.aiReady,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return out;
|
|
90
137
|
}
|
|
91
|
-
/** POST /addMcpServer body. Prefer apiKeyEnvVar / envVars (Variables);
|
|
138
|
+
/** POST /addMcpServer body. Prefer apiKeyEnvVar / envVars (Variables); never inline apiKey — agent must not see secret values. */
|
|
92
139
|
function buildAddMcpServerBodyFields(input) {
|
|
93
140
|
const id = normalizeAgentMcpServerId(input.id);
|
|
94
141
|
const body = {
|
|
95
142
|
id,
|
|
96
143
|
displayName: input.displayName.trim(),
|
|
144
|
+
transport: input.transport,
|
|
97
145
|
initialLoad: input.initialLoad ?? false,
|
|
98
146
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
147
|
+
if (input.aiReady) {
|
|
148
|
+
body.aiReady = true;
|
|
149
|
+
}
|
|
150
|
+
if (input.transport === 'stdio') {
|
|
151
|
+
body.command = input.command.trim();
|
|
105
152
|
if (input.args?.length) {
|
|
106
153
|
body.args = input.args.map(a => a.trim()).filter(Boolean);
|
|
107
154
|
}
|
|
108
155
|
if (input.envVars?.length) {
|
|
109
156
|
body.envVars = input.envVars.map(v => v.trim()).filter(Boolean);
|
|
110
157
|
}
|
|
158
|
+
if (input.apiKeyEnvVar?.trim()) {
|
|
159
|
+
body.apiKeyEnvVar = input.apiKeyEnvVar.trim();
|
|
160
|
+
}
|
|
111
161
|
if (input.useUserFolder) {
|
|
112
162
|
body.useUserFolder = true;
|
|
113
163
|
}
|
|
@@ -116,9 +166,7 @@ function buildAddMcpServerBodyFields(input) {
|
|
|
116
166
|
}
|
|
117
167
|
}
|
|
118
168
|
else {
|
|
119
|
-
|
|
120
|
-
body.url = input.url.trim();
|
|
121
|
-
}
|
|
169
|
+
body.url = input.url.trim();
|
|
122
170
|
if (input.apiKeyEnvVar?.trim()) {
|
|
123
171
|
body.apiKeyEnvVar = input.apiKeyEnvVar.trim();
|
|
124
172
|
}
|
|
@@ -126,12 +174,9 @@ function buildAddMcpServerBodyFields(input) {
|
|
|
126
174
|
body.apiKeyHeader = input.apiKeyHeader.trim();
|
|
127
175
|
}
|
|
128
176
|
}
|
|
129
|
-
if (input.apiKey !== undefined && input.apiKey !== '') {
|
|
130
|
-
body.apiKey = input.apiKey;
|
|
131
|
-
}
|
|
132
177
|
return body;
|
|
133
178
|
}
|
|
134
|
-
/** GET /listMcpServers —
|
|
179
|
+
/** GET /listMcpServers — active servers plus availableCatalog from mpc-config agent_llm_config.defaults/MCP_servers.json. */
|
|
135
180
|
export async function listMcpServers(config) {
|
|
136
181
|
const result = await managementGet(config, AGENT_MCP_API_PATHS.list);
|
|
137
182
|
if (!result.ok) {
|
|
@@ -142,13 +187,21 @@ export async function listMcpServers(config) {
|
|
|
142
187
|
: {};
|
|
143
188
|
const defaultServers = parseMcpServerRows(data.defaultServers ?? data.DefaultServers);
|
|
144
189
|
const userServers = parseMcpServerRows(data.userServers ?? data.UserServers);
|
|
190
|
+
const activeServers = parseMcpServerRows(data.activeServers ?? data.ActiveServers);
|
|
191
|
+
const availableCatalog = parseMcpServerRows(data.availableCatalog ?? data.AvailableCatalog);
|
|
145
192
|
const servers = parseMcpServerRows(data.servers ?? data.Servers);
|
|
146
|
-
const merged =
|
|
193
|
+
const merged = activeServers.length > 0
|
|
194
|
+
? activeServers
|
|
195
|
+
: servers.length > 0
|
|
196
|
+
? servers
|
|
197
|
+
: [...defaultServers, ...userServers];
|
|
147
198
|
const payload = {
|
|
199
|
+
activeServers: activeServers.length > 0 ? activeServers : merged,
|
|
200
|
+
availableCatalog,
|
|
148
201
|
defaultServers,
|
|
149
202
|
userServers,
|
|
150
203
|
servers: merged,
|
|
151
|
-
addableTemplates:
|
|
204
|
+
addableTemplates: catalogRowsToAddableTemplates(availableCatalog),
|
|
152
205
|
};
|
|
153
206
|
const parsed = ListMcpServersDataSchema.safeParse(payload);
|
|
154
207
|
if (!parsed.success) {
|
|
@@ -156,16 +209,6 @@ export async function listMcpServers(config) {
|
|
|
156
209
|
}
|
|
157
210
|
return { ok: true, data: parsed.data };
|
|
158
211
|
}
|
|
159
|
-
/** Bundled optional MCP catalog from mpc-config (for suggesting add_mcp_server). */
|
|
160
|
-
export function listBundledMcpServerTemplates() {
|
|
161
|
-
const parsed = ListBundledMcpServerTemplatesDataSchema.safeParse({
|
|
162
|
-
templates: BUNDLED_MCP_SERVER_TEMPLATES.map(t => ({ ...t })),
|
|
163
|
-
});
|
|
164
|
-
if (!parsed.success) {
|
|
165
|
-
return { ok: false, reason: 'Bundled MCP template catalog failed validation.' };
|
|
166
|
-
}
|
|
167
|
-
return { ok: true, data: parsed.data };
|
|
168
|
-
}
|
|
169
212
|
/** GET /getMcpServer?id= */
|
|
170
213
|
export async function getMcpServer(config, query) {
|
|
171
214
|
const parsedQuery = GetMcpServerQuerySchema.safeParse(query);
|
|
@@ -197,6 +240,12 @@ export async function buildAddMcpServer(config, input, signing = DEFAULT_MANAGEM
|
|
|
197
240
|
if (idErr) {
|
|
198
241
|
return { ok: false, reason: idErr };
|
|
199
242
|
}
|
|
243
|
+
if (normalizeAgentMcpServerId(parsed.data.id) === 'continuum') {
|
|
244
|
+
return {
|
|
245
|
+
ok: false,
|
|
246
|
+
reason: 'id "continuum" is reserved for the builtin MCP server.',
|
|
247
|
+
};
|
|
248
|
+
}
|
|
200
249
|
return buildManagementPostRequest(config, {
|
|
201
250
|
path: AGENT_MCP_API_PATHS.add,
|
|
202
251
|
buildRequestFields: () => buildAddMcpServerBodyFields(parsed.data),
|
|
@@ -230,6 +279,63 @@ export async function addMcpServer(config, input, signing = DEFAULT_MANAGEMENT_S
|
|
|
230
279
|
},
|
|
231
280
|
};
|
|
232
281
|
}
|
|
282
|
+
export async function buildAddMcpServerFromCatalog(config, input, signing = DEFAULT_MANAGEMENT_SIGNING) {
|
|
283
|
+
const parsed = AddMcpServerFromCatalogInputSchema.safeParse(input);
|
|
284
|
+
if (!parsed.success) {
|
|
285
|
+
return { ok: false, reason: 'Invalid add MCP server from catalog input.' };
|
|
286
|
+
}
|
|
287
|
+
const idErr = validateAgentMcpServerId(parsed.data.id);
|
|
288
|
+
if (idErr) {
|
|
289
|
+
return { ok: false, reason: idErr };
|
|
290
|
+
}
|
|
291
|
+
if (normalizeAgentMcpServerId(parsed.data.id) === 'continuum') {
|
|
292
|
+
return {
|
|
293
|
+
ok: false,
|
|
294
|
+
reason: 'id "continuum" is reserved for the builtin MCP server.',
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
return buildManagementPostRequest(config, {
|
|
298
|
+
path: AGENT_MCP_API_PATHS.addFromCatalog,
|
|
299
|
+
buildRequestFields: () => ({
|
|
300
|
+
id: normalizeAgentMcpServerId(parsed.data.id),
|
|
301
|
+
...(parsed.data.initialLoad !== undefined
|
|
302
|
+
? { initialLoad: parsed.data.initialLoad }
|
|
303
|
+
: {}),
|
|
304
|
+
...(parsed.data.aiReady !== undefined ? { aiReady: parsed.data.aiReady } : {}),
|
|
305
|
+
}),
|
|
306
|
+
}, signing);
|
|
307
|
+
}
|
|
308
|
+
export async function addMcpServerFromCatalog(config, input, signing = DEFAULT_MANAGEMENT_SIGNING) {
|
|
309
|
+
const built = await buildAddMcpServerFromCatalog(config, input, signing);
|
|
310
|
+
if (!built.ok) {
|
|
311
|
+
return built;
|
|
312
|
+
}
|
|
313
|
+
const signed = await managementSign(config, signing, built.data.unsignedBody);
|
|
314
|
+
if (!signed.ok) {
|
|
315
|
+
return signed;
|
|
316
|
+
}
|
|
317
|
+
const posted = await managementPost(config, built.data.path, signed.data);
|
|
318
|
+
if (!posted.ok) {
|
|
319
|
+
return posted;
|
|
320
|
+
}
|
|
321
|
+
const row = parseMcpServerRow(posted.data);
|
|
322
|
+
if (!row) {
|
|
323
|
+
return {
|
|
324
|
+
ok: false,
|
|
325
|
+
reason: 'Add MCP server from catalog response failed validation.',
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
ok: true,
|
|
330
|
+
data: {
|
|
331
|
+
server: row,
|
|
332
|
+
selectedSigningKey: built.data.selectedSigningKey
|
|
333
|
+
? toSelectedSigningKey(built.data.selectedSigningKey)
|
|
334
|
+
: undefined,
|
|
335
|
+
signingMessage: built.data.canonicalJson,
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
}
|
|
233
339
|
export async function buildRemoveMcpServer(config, input, signing = DEFAULT_MANAGEMENT_SIGNING) {
|
|
234
340
|
const parsed = RemoveMcpServerInputSchema.safeParse(input);
|
|
235
341
|
if (!parsed.success) {
|