@continuumdao/continuum-node-sdk 1.3.0 → 1.3.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.
@@ -1,3 +1,3 @@
1
- export { registerContinuumTools, createContinuumMcpServer, registerNodeTools, registerGroupTools, registerKeyGenTools, registerKeygenTools, registerManagementSignerTools, registerManagementKeyTools, registerAddressBookTools, registerTokenRegistryTools, registerChainRegistryTools, registerMpcTools, registerVpnTools, camelToSnake, sdkResultToCallToolResult, wrapSdk, } from './register.js';
1
+ export { registerContinuumTools, createContinuumMcpServer, registerNodeTools, registerGroupTools, registerKeyGenTools, registerKeygenTools, registerManagementSignerTools, registerManagementKeyTools, registerAddressBookTools, registerTokenRegistryTools, registerChainRegistryTools, registerMpcTools, registerVpnTools, registerTaTools, registerTaResources, camelToSnake, sdkResultToCallToolResult, wrapSdk, } from './register.js';
2
2
  export { DefiProtocolContext, registerDefiDiscoveryTools, registerAllDefiProtocolTools, markProtocolLoaded, type CreateContinuumMcpServerOptions, } from './defi/index.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,OAAO,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,+BAA+B,GACpC,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,OAAO,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,+BAA+B,GACpC,MAAM,iBAAiB,CAAC"}
package/dist/mcp/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { registerContinuumTools, createContinuumMcpServer, registerNodeTools, registerGroupTools, registerKeyGenTools, registerKeygenTools, registerManagementSignerTools, registerManagementKeyTools, registerAddressBookTools, registerTokenRegistryTools, registerChainRegistryTools, registerMpcTools, registerVpnTools, camelToSnake, sdkResultToCallToolResult, wrapSdk, } from './register.js';
1
+ export { registerContinuumTools, createContinuumMcpServer, registerNodeTools, registerGroupTools, registerKeyGenTools, registerKeygenTools, registerManagementSignerTools, registerManagementKeyTools, registerAddressBookTools, registerTokenRegistryTools, registerChainRegistryTools, registerMpcTools, registerVpnTools, registerTaTools, registerTaResources, camelToSnake, sdkResultToCallToolResult, wrapSdk, } from './register.js';
2
2
  export { DefiProtocolContext, registerDefiDiscoveryTools, registerAllDefiProtocolTools, markProtocolLoaded, } from './defi/index.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EACzB,OAAO,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,GAElB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,OAAO,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,GAElB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /** Resolved path to a markdown file under dist/mcp/resources (copied at build time). */
3
+ export declare function resolveMcpResourcePath(relativePath: string): string;
4
+ export declare function registerMcpMarkdownResource(server: McpServer, name: string, relativePath: string, description: string): void;
5
+ //# sourceMappingURL=mcp-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-resources.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAOvE,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GACjB,IAAI,CAoBN"}
@@ -0,0 +1,25 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const mcpModuleDir = path.dirname(fileURLToPath(import.meta.url));
5
+ /** Resolved path to a markdown file under dist/mcp/resources (copied at build time). */
6
+ export function resolveMcpResourcePath(relativePath) {
7
+ return path.join(mcpModuleDir, 'resources', relativePath);
8
+ }
9
+ export function registerMcpMarkdownResource(server, name, relativePath, description) {
10
+ const uri = `docs://${relativePath}`;
11
+ server.registerResource(name, uri, { description, mimeType: 'text/markdown' }, async () => {
12
+ const filePath = resolveMcpResourcePath(relativePath);
13
+ const text = await fs.readFile(filePath, 'utf8');
14
+ return {
15
+ contents: [
16
+ {
17
+ uri,
18
+ mimeType: 'text/markdown',
19
+ text,
20
+ },
21
+ ],
22
+ };
23
+ });
24
+ }
25
+ //# sourceMappingURL=mcp-resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-resources.js","sourceRoot":"","sources":["../../src/mcp/mcp-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,IAAI,EAAE,EAAC,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,wFAAwF;AACxF,MAAM,UAAU,sBAAsB,CAAC,YAAoB;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,MAAiB,EACjB,IAAY,EACZ,YAAoB,EACpB,WAAmB;IAEnB,MAAM,GAAG,GAAG,UAAU,YAAY,EAAE,CAAC;IACrC,MAAM,CAAC,gBAAgB,CACtB,IAAI,EACJ,GAAG,EACH,EAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAC,EACxC,KAAK,IAAI,EAAE;QACV,MAAM,QAAQ,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACN,QAAQ,EAAE;gBACT;oBACC,GAAG;oBACH,QAAQ,EAAE,eAAe;oBACzB,IAAI;iBACJ;aACD;SACD,CAAC;IACH,CAAC,CACD,CAAC;AACH,CAAC"}
@@ -13,6 +13,7 @@ export { registerTokenRegistryTools } from './registry/tokens.js';
13
13
  export { registerChainRegistryTools } from './registry/networks.js';
14
14
  export { registerMpcTools } from './mpc.js';
15
15
  export { registerVpnTools } from './vpn.js';
16
+ export { registerTaTools, registerTaResources } from './ta/register.js';
16
17
  export { registerAgentMcpServerTools } from './agent-mcp-servers.js';
17
18
  export { registerAgentCronJobTools } from './agent-cron-jobs.js';
18
19
  export { registerAgentWebhookTools } from './agent-webhooks.js';
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAClE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACN,mBAAmB,EACnB,KAAK,+BAA+B,EACpC,MAAM,mBAAmB,CAAC;AAqB3B,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,mBAAmB,GAC/B,IAAI,CAoBN;AAED,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,+BAAoC,GAC3C,SAAS,CA8HX;AAED,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACN,6BAA6B,EAC7B,0BAA0B,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,yBAAyB,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAClE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACN,mBAAmB,EACnB,KAAK,+BAA+B,EACpC,MAAM,mBAAmB,CAAC;AAqB3B,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,mBAAmB,GAC/B,IAAI,CAqBN;AAED,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,+BAAoC,GAC3C,SAAS,CA+GX;AAED,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,MAAM,aAAa,CAAC;AACrE,OAAO,EAAC,4BAA4B,EAAC,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACN,6BAA6B,EAC7B,0BAA0B,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,wBAAwB,EAAC,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,0BAA0B,EAAC,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,yBAAyB,EAAC,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAC,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,uBAAuB,EAAC,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC"}
@@ -6,19 +6,19 @@ import { registerGroupTools } from './group.js';
6
6
  import { registerKeyGenTools } from './keygen.js';
7
7
  import { registerKeyGenMessagingTools } from './keygen-messaging.js';
8
8
  import { registerManagementSignerTools } from './management-signer.js';
9
+ import { registerMcpMarkdownResource } from './mcp-resources.js';
9
10
  import { registerNodeTools } from './node.js';
10
11
  import { registerAddressBookTools } from './registry/address-book.js';
11
12
  import { registerChainRegistryTools } from './registry/networks.js';
12
13
  import { registerTokenRegistryTools } from './registry/tokens.js';
13
14
  import { registerMpcTools } from './mpc.js';
15
+ import { registerTaResources, registerTaTools } from './ta/register.js';
14
16
  import { registerVpnTools } from './vpn.js';
15
17
  import { registerAgentMcpServerTools } from './agent-mcp-servers.js';
16
18
  import { registerAgentEnvironmentVariableTools } from './agent-environment-variables.js';
17
19
  import { registerAgentCronJobTools } from './agent-cron-jobs.js';
18
20
  import { registerAgentWebhookTools } from './agent-webhooks.js';
19
21
  import { registerAgentSkillTools } from './agent-skills.js';
20
- import { promises as fs } from 'node:fs';
21
- import path from 'node:path';
22
22
  export function registerContinuumTools(server, config, defiContext) {
23
23
  registerNodeTools(server, config);
24
24
  registerGroupTools(server, config);
@@ -30,6 +30,7 @@ export function registerContinuumTools(server, config, defiContext) {
30
30
  registerChainRegistryTools(server, config);
31
31
  registerMpcTools(server, config);
32
32
  registerVpnTools(server, config);
33
+ registerTaTools(server);
33
34
  registerAgentMcpServerTools(server, config);
34
35
  registerAgentEnvironmentVariableTools(server, config);
35
36
  registerAgentCronJobTools(server, config);
@@ -53,36 +54,21 @@ export function createContinuumMcpServer(config, options = {}) {
53
54
  },
54
55
  });
55
56
  registerContinuumTools(server, config, defiContext);
56
- function registerMarkdownResource(name, filename, description) {
57
- const uri = `docs://${filename}`;
58
- server.registerResource(name, uri, { description, mimeType: 'text/markdown' }, async () => {
59
- const filePath = path.join(process.cwd(), 'src/mcp/resources', filename);
60
- const text = await fs.readFile(filePath, 'utf8');
61
- return {
62
- contents: [
63
- {
64
- uri,
65
- mimeType: 'text/markdown',
66
- text,
67
- },
68
- ],
69
- };
70
- });
71
- }
72
- registerMarkdownResource('overview_docs', 'overview.md', 'High-level MCP host overview for this server.');
73
- registerMarkdownResource('group_docs', 'group.md', 'Group creation flow and validation rules.');
74
- registerMarkdownResource('sign_docs', 'sign.md', 'Modular signing flow and reusable signing tools.');
75
- registerMarkdownResource('management_signer_docs', 'management-signer.md', 'Management signer lifecycle, MCP tools, and local key requirements.');
76
- registerMarkdownResource('keygen_docs', 'keygen.md', 'Key generation request, acceptance, and result flow.');
77
- registerMarkdownResource('address_book_registry_docs', 'registry/address-book.md', 'Address book registry tools and workflows.');
78
- registerMarkdownResource('token_registry_docs', 'registry/tokens.md', 'Saved token registry tools and workflows.');
79
- registerMarkdownResource('chain_registry_docs', 'registry/networks.md', 'Chain registry tools and workflows.');
80
- registerMarkdownResource('mpc_docs', 'mpc.md', 'MPC multi-sign requests, Get Sig, Execute, and MPA workflows.');
81
- registerMarkdownResource('vpn_docs', 'vpn.md', 'Admin VPN and peer egress: enable/disable, client configs, sharing, revoke.');
82
- registerMarkdownResource('agent_mcp_servers_docs', 'agent-mcp-servers.md', 'Agent MCP server catalog: list, add, and remove node MCP integrations.');
83
- registerMarkdownResource('agent_cron_jobs_docs', 'agent-cron-jobs.md', 'Agent cron jobs: scheduled agent tasks, run history, and lifecycle.');
84
- registerMarkdownResource('agent_webhooks_docs', 'agent-webhooks.md', 'Agent inbound webhooks: list, add, activate, and test HTTP hook jobs.');
85
- registerMarkdownResource('agent_skills_docs', 'agent-skills.md', 'Agent skills: local markdown/txt guidance files and initialLoad behavior.');
57
+ registerMcpMarkdownResource(server, 'overview_docs', 'overview.md', 'High-level MCP host overview for this server.');
58
+ registerMcpMarkdownResource(server, 'group_docs', 'group.md', 'Group creation flow and validation rules.');
59
+ registerMcpMarkdownResource(server, 'sign_docs', 'sign.md', 'Modular signing flow and reusable signing tools.');
60
+ registerMcpMarkdownResource(server, 'management_signer_docs', 'management-signer.md', 'Management signer lifecycle, MCP tools, and local key requirements.');
61
+ registerMcpMarkdownResource(server, 'keygen_docs', 'keygen.md', 'Key generation request, acceptance, and result flow.');
62
+ registerMcpMarkdownResource(server, 'address_book_registry_docs', 'registry/address-book.md', 'Address book registry tools and workflows.');
63
+ registerMcpMarkdownResource(server, 'token_registry_docs', 'registry/tokens.md', 'Saved token registry tools and workflows.');
64
+ registerMcpMarkdownResource(server, 'chain_registry_docs', 'registry/networks.md', 'Chain registry tools and workflows.');
65
+ registerMcpMarkdownResource(server, 'mpc_docs', 'mpc.md', 'MPC multi-sign requests, Get Sig, Execute, and MPA workflows.');
66
+ registerMcpMarkdownResource(server, 'vpn_docs', 'vpn.md', 'Admin VPN and peer egress: enable/disable, client configs, sharing, revoke.');
67
+ registerTaResources(server);
68
+ registerMcpMarkdownResource(server, 'agent_mcp_servers_docs', 'agent-mcp-servers.md', 'Agent MCP server catalog: list, add, and remove node MCP integrations.');
69
+ registerMcpMarkdownResource(server, 'agent_cron_jobs_docs', 'agent-cron-jobs.md', 'Agent cron jobs: scheduled agent tasks, run history, and lifecycle.');
70
+ registerMcpMarkdownResource(server, 'agent_webhooks_docs', 'agent-webhooks.md', 'Agent inbound webhooks: list, add, activate, and test HTTP hook jobs.');
71
+ registerMcpMarkdownResource(server, 'agent_skills_docs', 'agent-skills.md', 'Agent skills: local markdown/txt guidance files and initialLoad behavior.');
86
72
  server.server.oninitialized = () => {
87
73
  void server.server.sendToolListChanged().catch(error => {
88
74
  console.error('Failed to send tools/list_changed notification:', error);
@@ -100,6 +86,7 @@ export { registerTokenRegistryTools } from './registry/tokens.js';
100
86
  export { registerChainRegistryTools } from './registry/networks.js';
101
87
  export { registerMpcTools } from './mpc.js';
102
88
  export { registerVpnTools } from './vpn.js';
89
+ export { registerTaTools, registerTaResources } from './ta/register.js';
103
90
  export { registerAgentMcpServerTools } from './agent-mcp-servers.js';
104
91
  export { registerAgentCronJobTools } from './agent-cron-jobs.js';
105
92
  export { registerAgentWebhookTools } from './agent-webhooks.js';
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ # Agent cron jobs
2
+
3
+ Scheduled agent tasks stored under `agent_llm_config/cron/jobs.json`. Each job gets a fixed **conversationId**; every run appends to that thread.
4
+
5
+ ## MCP tools
6
+
7
+ ### Read (GET)
8
+
9
+ - `list_cron_jobs` — summaries only (no message body)
10
+ - `get_cron_job` — full job by **id** or **name** (includes message)
11
+ - `list_cron_job_runs` — recent run history for **jobId** (optional **limit**, default 50)
12
+
13
+ ### Write (management-signed POST, preferred Ed25519 signer)
14
+
15
+ - `add_cron_job` — create job (**name**, **message**, **schedule**; optional **enabled**, **deleteAfterRun**)
16
+ - `update_cron_job` — update schedule/message/metadata only (not **enabled**)
17
+ - `activate_cron_job` / `deactivate_cron_job` — enable or disable without deleting
18
+ - `remove_cron_job` — delete job; optional **deleteConversation** (default false)
19
+ - `run_cron_job` — manual async trigger (works when deactivated)
20
+
21
+ ## Schedule kinds
22
+
23
+ | kind | fields | behavior |
24
+ |------|--------|----------|
25
+ | `cron` | `expr` (5-field), optional `tz` (default UTC) | clock-anchored cron |
26
+ | `every` | `everyMs` | fixed interval from activation |
27
+ | `at` | `at` (RFC3339) | one-shot; defaults **deleteAfterRun: true** |
28
+
29
+ **`add_cron_job` schedule shorthands** (coerced automatically):
30
+
31
+ - `"every 5 minutes"`, `"5m"`, `"5 minutes"` → `{ "kind": "every", "everyMs": 300000 }`
32
+ - `"*/5 * * * *"` (5-field cron string) → `{ "kind": "cron", "expr": "...", "tz": "UTC" }`
33
+ - `300000` (number) → `{ "kind": "every", "everyMs": 300000 }`
34
+
35
+ Prefer structured objects when possible; use shorthands only when simpler for the caller.
36
+
37
+ ## Suggested workflow
38
+
39
+ 1. **`list_cron_jobs`** — inspect schedules, enabled state, last/next run.
40
+ 2. **`get_cron_job`** — read the instruction message before editing.
41
+ 3. **`add_cron_job`** or **`update_cron_job`** — set or change the agent prompt and schedule.
42
+ 4. **`activate_cron_job`** / **`deactivate_cron_job`** — pause or resume scheduling.
43
+ 5. **`run_cron_job`** — test immediately; then **`list_cron_job_runs`** for outcome.
44
+ 6. **`remove_cron_job`** when retiring a task.
45
+
46
+ ## Notes
47
+
48
+ - Scheduler can be disabled node-wide via `EnableAgentCron: false` or `MPC_AUTH_ENABLE_AGENT_CRON=0`; CRUD and manual runs still work.
49
+ - Cron runs use the full agent turn but fail if MCP elicitation would block on human input.
50
+ - Job **name**: lowercase `a-z`, digits, hyphen, underscore; max 64 chars.
@@ -0,0 +1,18 @@
1
+ # Agent MCP servers
2
+
3
+ Tools for optional MCP servers on the node. Catalog templates come from the bind-mounted mpc-config file **`agent_llm_config.defaults/MCP_servers.json`** (not from this SDK).
4
+
5
+ **To add a new catalog server:** edit that JSON in the mpc-config repo — see **`mpc-config/agent_llm_config.defaults/CATALOG.md`**. Use **Variables** for secrets (`apiKeyEnvVar` / `envVars` names only — never inline `apiKey`). The agent must not see Variable values.
6
+
7
+ ## Suggested workflow
8
+
9
+ 1. **`list_mcp_servers`** — active servers plus **`availableCatalog`** / **`addableTemplates`** from the repository file (entries not yet on this node).
10
+ 2. Activate a catalog row with **`add_mcp_server_from_catalog`** (management-signed), or **`add_mcp_server`** for a custom definition.
11
+ 3. Set **Variables** before **`initialLoad`: true** when `apiKeyEnvVar` / `envVars` are required.
12
+ 4. **`remove_mcp_server`** — user/catalog-activated servers only (not builtin **continuum**).
13
+
14
+ ## IDs and transports
15
+
16
+ - **id**: lowercase `a-z`, digits, hyphen, underscore; max 64 chars.
17
+ - **http**: requires **url**
18
+ - **stdio**: requires **command**; optional **args**, **envVars**, **useUserFolder**, **runtime**
@@ -0,0 +1,35 @@
1
+ # Agent skills
2
+
3
+ Markdown or plain-text guidance stored under `agent_llm_config/Skills/` (manifest `skills.json` plus one file per skill). Skills are local to this node and are not propagated between nodes.
4
+
5
+ ## MCP tools
6
+
7
+ ### Read (GET)
8
+
9
+ - `list_skills` — skill names only (no content)
10
+ - `get_skill` — full skill by **name** (content, **initialLoad**, **format**)
11
+
12
+ ### Write (management-signed POST, preferred Ed25519 signer)
13
+
14
+ - `add_skill` — upsert skill (**name**, **content**, **initialLoad**; optional **format** `md`|`txt`, default `md`)
15
+ - `remove_skill` — delete skill by **name**
16
+
17
+ ## initialLoad
18
+
19
+ | Value | Behavior |
20
+ |-------|----------|
21
+ | `true` | Content injected as a **system** message at chat startup |
22
+ | `false` | Agent may load the skill during the session via `agent_load_skill` |
23
+
24
+ ## Suggested workflow
25
+
26
+ 1. **`list_skills`** — see what is configured.
27
+ 2. **`get_skill`** — read existing content before editing.
28
+ 3. **`add_skill`** — create or update a skill file and manifest entry.
29
+ 4. **`remove_skill`** — retire a skill when no longer needed.
30
+
31
+ ## Validation
32
+
33
+ - **name**: lowercase `a-z`, digits, hyphen, underscore; max 64 chars
34
+ - **content**: required; max **512 KiB**
35
+ - **format**: `md` (default) or `txt`
@@ -0,0 +1,19 @@
1
+ # Agent inbound webhooks
2
+
3
+ Tools for **inbound HTTP webhooks** that trigger agent chat turns (`POST /hooks/inbound/{id}` on the hook listener port, default `127.0.0.1:18090`).
4
+
5
+ Active webhooks live in MongoDB (`LocalAgentWebhooks`). Repository catalog templates are in `agent_llm_config.defaults/hooks/webhooks.json` (bind-mounted from mpc-config).
6
+
7
+ **Secrets:** use **`add_environment_variable`** for `WEBHOOK_SECRET_*` and `TELEGRAM_BOT_TOKEN`. The agent must not see Variable values — only names and `*Configured` flags in listings.
8
+
9
+ ## Suggested workflow
10
+
11
+ 1. **`list_webhooks`** — `activeWebhooks` plus `availableCatalog` (templates not yet on the node).
12
+ 2. **`add_webhook_from_catalog`** or **`add_webhook`** (custom) — creates job + auto-generated secret env var name.
13
+ 4. **`add_environment_variable`** — set provider signing secret (Stripe `whsec_`, Slack signing secret, etc.) before enabling.
14
+ 5. **`activate_webhook`** — enable after secrets are configured.
15
+ 6. **`run_webhook`** — manual test trigger.
16
+
17
+ ## Types
18
+
19
+ `generic`, `github`, `gmail`, `proton`, `stripe`, `slack`, `telegram` — each verifies inbound auth differently. See mpc-config `docs/AGENT_HOOKS.md` for provider setup.
@@ -0,0 +1,70 @@
1
+ # Group Operations
2
+
3
+ This document explains how to create and manage MPC groups with this server.
4
+
5
+ ## Purpose
6
+
7
+ Groups define which node IDs can participate in key generation and signing.
8
+ A valid group must include your node and at least one peer. Group creation is unanimous: all requested nodes must accept before the group is formed. The originator is auto-agreed when creating the request and does not perform a separate accept step.
9
+
10
+ ## MCP tools
11
+
12
+ - `list_group_requests`
13
+ - List MPC group requests with an optional filter (`all`, `pending`, `success`, `failed`; default `all`).
14
+ - Returns `groupRequests` entries with request ID, group ID, key list, status, originator, and signatures.
15
+ - `list_group_results`
16
+ - List completed MPC group results.
17
+ - Returns `groups` with `groupId` and `nodeKeys`.
18
+ - `create_group_request`
19
+ - Create a new MPC group request for the given `nodeIds` (minimum 2).
20
+ - Signs and POSTs internally with Ed25519 management signing.
21
+ - Returns `groupRequestId`, `selectedSigningKey`, and `signingMessage`.
22
+ - `accept_group_request`
23
+ - Accept a pending MPC group request by `requestId`.
24
+ - Signs and POSTs internally with Ed25519 management signing.
25
+ - Returns `message`, `selectedSigningKey`, and `signingMessage`.
26
+
27
+ SDK-only helpers (`availableNodeIds`, `validGroupNodeSets`, `buildCreateGroupRequest`, `buildAcceptGroupRequest`) are **not** registered as MCP tools. Use `node_id` to read this node's ID and pass explicit `nodeIds` to `create_group_request`; the server validates them against configured nodes.
28
+
29
+ ## Create group flow
30
+
31
+ 1. Read this node's ID
32
+ - Call `node_id`.
33
+ 2. Ask the user which peer node IDs to include
34
+ - `nodeIds` must be 128-character hex node IDs from configured nodes.
35
+ 3. (Optional) set preferred signer
36
+ - Call `set_preferred_management_signer`.
37
+ 4. Submit group request
38
+ - Call `create_group_request` with `nodeIds`.
39
+ 5. Group peers accept
40
+ - Other members call `accept_group_request` with the pending `requestId`.
41
+ - All requested nodes must accept; otherwise group creation does not complete. The originator is already counted as agreed at creation time.
42
+ 6. Verify completion
43
+ - Use `list_group_results`, or filter `list_group_requests` with `success`.
44
+
45
+ ## Validation rules enforced
46
+
47
+ `create_group_request` validates before signing:
48
+
49
+ - `nodeIds` must contain at least 2 unique values (duplicates are normalized away).
50
+ - Every ID must be a configured node ID (including this node).
51
+ - This node's ID must be included in `nodeIds`.
52
+ - A group with the same node set must not already exist.
53
+
54
+ `accept_group_request` validates before signing:
55
+
56
+ - `requestId` must be a valid group request ID (`NewGroup` + 25 hex characters). A hex suffix without the prefix is accepted and normalized automatically.
57
+ - The request must exist and have status `pending`.
58
+
59
+ ## Signing behavior
60
+
61
+ `create_group_request` and `accept_group_request` sign and submit internally. Clients only pass business arguments (`nodeIds` or `requestId`). Do not use separate signing or build/sign/post tools.
62
+
63
+ Successful responses may include `selectedSigningKey` (the Ed25519 key used) and `signingMessage` (canonical JSON that was signed).
64
+
65
+ ## Notes for MCP clients
66
+
67
+ - Prompt users for concrete node-ID choices, not free text.
68
+ - Use `list_group_requests` with `filter: "pending"` to find requests awaiting acceptance.
69
+ - Treat tool responses as source of truth for IDs and status.
70
+ - Load `management-signer.md` if signing fails due to missing or unavailable local keys.
@@ -0,0 +1,175 @@
1
+ # Key Generation
2
+
3
+ This document covers MPC key generation request lifecycle in this server.
4
+
5
+ ## Purpose
6
+
7
+ After a group is formed, keygen creates one MPC keypair shared across group members. KeyGen creation itself is unanimous: all requested group members must accept the request. The originator auto-agrees when creating the request and does not need a separate accept step.
8
+ That key can later be used in signing workflows.
9
+
10
+ ## MCP tools
11
+
12
+ - `create_key_gen_request`
13
+ - Initiate a request to members of a group to generate a new MPC key pair.
14
+ - Input: `groupId`, `gate` (integer ≥ 2), `msgCheck`, `keyType`.
15
+ - Signs and POSTs internally with Ed25519 management signing.
16
+ - Returns `requestId`, `selectedSigningKey`, and `signingMessage`.
17
+ - `accept_key_gen_request`
18
+ - Accept a pending MPC key generation request.
19
+ - Input: `requestId` (KeyGen ID).
20
+ - Signs and POSTs internally.
21
+ - Returns `message`, `selectedSigningKey`, and `signingMessage`.
22
+ - `list_key_gen_requests`
23
+ - List MPC key generation requests with optional filter and pagination.
24
+ - Input: optional `filter`, `pagenum`, `pagesize`.
25
+ - Returns `localNodeId`, `requests`, and `agreementChecks` (whether this node must accept each request).
26
+ - `get_key_gen_request_by_id`
27
+ - Get a single MPC key generation request by ID.
28
+ - Input: `id` (KeyGen ID).
29
+ - Returns `request`, `localNodeId`, `isOriginatorLocal`, `agreementRequired`, and `note`.
30
+ - `fetch_key_gen_result`
31
+ - Get the MPC key generation result for a completed KeyGen (`GET /getKeyGenResultById`).
32
+ - Input: `id` (KeyGen ID).
33
+ - Returns the result payload (shape varies by key type and status). For **`secp256k1`**, the EVM executor/wallet address is **`ethereumaddress`** — use it as-is; do **not** derive an address from `pubkeyhex` or from `pubKey` on `get_preferred_key_gen`.
34
+ - `get_key_gen_parent_group_id`
35
+ - Get the parent group ID for a key generation request.
36
+ - Input: `id` (KeyGen ID).
37
+ - Returns `requestid` and `groupId`.
38
+ - `fetch_global_nonce_by_key_gen_id`
39
+ - Get the global nonce for a key generation request.
40
+ - Input: `id` (KeyGen ID).
41
+ - Returns `globalNonce`.
42
+ - `get_preferred_key_gen`
43
+ - Get the default multi-agree KeyGen for agent `POST /multiSignRequest` (`GET /getPreferredKeyGen`).
44
+ - Input: none.
45
+ - Returns `keyGenId`, `pubKey`, and `keyType` only (no EVM address). Empty strings when nothing is stored or the KeyGen is no longer valid. For executor address, chain with `fetch_key_gen_result` — see **EVM executor address** below.
46
+ - `post_preferred_key_gen`
47
+ - Store a multi-agree KeyGen request id as the agent default for composing multiSignRequest payloads (`POST /postPreferredKeyGen`).
48
+ - Input: `keyGenId` (KeyGen request ID).
49
+ - Signs and POSTs internally.
50
+ - Returns `message`, `selectedSigningKey`, and `signingMessage`.
51
+ - `send_key_gen_message`
52
+ - Send a top-level or reply message in a KeyGen channel (`POST /sendMessage`).
53
+ - Input: `keyGenId`, `body`, and either `title` (top-level) or `replyTo` (reply).
54
+ - **Orchestration sub-agents:** one reply with `replyTo` set to the top-level message id and `mpc-task-result v1` in the body (not `mpc-orchestrate-task`; no `@agent`). Include human-readable findings for the KeyGen group. **Orchestrator synthesis:** post a reply to the same top-level id when all tasks finish. Do not poll `list_key_gen_messages` for orchestration completion.
55
+ - Signs and POSTs internally.
56
+ - Returns `message`, `selectedSigningKey`, and `signingMessage`.
57
+ - `list_key_gen_messages`
58
+ - List KeyGen channel messages (`GET /listMessages`).
59
+ - Input: `keyGenId`; optional `unread`, `topLevel`, `fromTime`, `toTime`, `pagenum`, `pagesize`.
60
+ - Returns `{ list, total }`.
61
+ - `get_key_gen_message_by_id`
62
+ - Get one message (`GET /getMessageById`).
63
+ - Input: `keyGenId`, `messageId`.
64
+ - `get_key_gen_message_thread`
65
+ - Get a top-level message and nested replies (`GET /getMessageThread`).
66
+ - Input: `keyGenId`, `messageId` (top-level id).
67
+ - `mark_key_gen_message_read`
68
+ - Mark one message read for this node (`POST /markMessageRead`).
69
+ - Input: `keyGenId`, `messageId`; optional `signature` for the read receipt.
70
+ - Signs and POSTs internally.
71
+ - Returns `message` (`ok`), `selectedSigningKey`, and `signingMessage`.
72
+ - `multi_mark_key_gen_messages_read`
73
+ - Mark multiple messages read (`POST /multiMarkMessagesRead`).
74
+ - Input: `keyGenId`, `messageIds` (non-empty); optional `signature`.
75
+ - Signs and POSTs internally.
76
+ - Returns `marked`, `notFound`, `selectedSigningKey`, and `signingMessage`.
77
+ - Intended for external inbox poll scripts, not orchestration sub-agent return paths.
78
+ - `delete_key_gen_message`
79
+ - Soft-delete a message and its reply tree (`POST /deleteMessage`). Originator only.
80
+ - Input: `keyGenId`, `messageId`.
81
+ - Signs and POSTs internally.
82
+ - Returns `deleted`, `selectedSigningKey`, and `signingMessage`.
83
+ - `multi_delete_key_gen_messages`
84
+ - Batch soft-delete messages and reply trees (`POST /multiDeleteMessages`). Originator only per id.
85
+ - Input: `keyGenId`, `messageIds` (non-empty).
86
+ - Signs and POSTs internally.
87
+ - Returns `deleted`, `notFound`, `forbidden`, `selectedSigningKey`, and `signingMessage`.
88
+
89
+ SDK-only helpers (`buildCreateKeyGenRequest`, `buildAcceptKeyGenRequest`, `buildPostPreferredKeyGen`, `buildSendKeyGenMessage`, `buildMarkKeyGenMessageRead`, `buildMultiMarkKeyGenMessagesRead`, `buildDeleteKeyGenMessage`, `buildMultiDeleteKeyGenMessages`) are **not** registered as MCP tools.
90
+
91
+ ## Create keygen flow
92
+
93
+ 1. Ensure group exists and members agreed
94
+ - Validate via group tools (`list_group_results`) before keygen.
95
+ 2. (Optional) set preferred signer
96
+ - Call `set_preferred_management_signer`.
97
+ 3. Create request
98
+ - Call `create_key_gen_request` with:
99
+ - `groupId` — 64-character hex group ID
100
+ - `gate` — signing threshold: minimum number of group members that must participate to sign (CGGMP24/FROST)
101
+ - `msgCheck` — `multi-agree` or `tx-check`
102
+ - `keyType` — `ed25519` or `secp256k1`
103
+ 4. Peers accept
104
+ - Each non-originator group member calls `accept_key_gen_request` with the pending `requestId`.
105
+ - KeyGen is formed only when all requested members have agreed; originator agreement is automatic on request creation.
106
+ - Use `list_key_gen_requests` or `get_key_gen_request_by_id` to read `agreementRequired` / `isOriginatorLocal`.
107
+ 5. Track progress
108
+ - Poll `list_key_gen_requests` (optional filters below) or `get_key_gen_request_by_id`.
109
+ 6. Read result
110
+ - Call `fetch_key_gen_result` when the request has completed successfully.
111
+ - For `secp256k1`, read **`ethereumaddress`** from the result when you need the on-chain MPC wallet (executor).
112
+ - Optionally call `fetch_global_nonce_by_key_gen_id` or `get_key_gen_parent_group_id` for follow-up workflows.
113
+
114
+ ## EVM executor address (preferred KeyGen)
115
+
116
+ When the user asks for the **Ethereum address** of the **preferred** KeyGen (or “MPC wallet” / “executor” for EVM txs):
117
+
118
+ 1. `get_preferred_key_gen` → `keyGenId` (ignore `pubKey` for address answers).
119
+ 2. `fetch_key_gen_result` with `{ "id": "<keyGenId>" }` → **`ethereumaddress`**.
120
+
121
+ Do **not** (even when `fetch_key_gen_result` errors):
122
+
123
+ - Convert `pubKey` or `pubkeyhex` to an address (Keccak-256 in the model is wrong often; never “derive manually”).
124
+ - Explain how derivation works instead of fixing the lookup.
125
+ - Infer the address from past transaction `from` / swapper fields.
126
+
127
+ On **`fetch_key_gen_result` failure**, report the exact tool error, suggest **retry**, and point to the **node UI** KeyGen result page. A request can show **success** before this node returns a result object from `/getKeyGenResultById`.
128
+
129
+ `get_preferred_key_gen` intentionally omits `ethereumaddress` so the full result stays on `/getKeyGenResultById`.
130
+
131
+ ## Inputs that matter
132
+
133
+ - `groupId`: target group to generate a key for.
134
+ - `gate`: CGGMP24/FROST signing threshold (minimum nodes required to sign after KeyGen completes). Sent to the API as `threshold`. Gate does not change unanimous agreement requirements for group or keygen creation.
135
+ - `msgCheck`: downstream signing policy mode (`multi-agree` or `tx-check`).
136
+ - `keyType`: MPC key curve/type (`ed25519` or `secp256k1`).
137
+
138
+ ## List filters
139
+
140
+ `list_key_gen_requests` accepts optional `filter`:
141
+
142
+ - `all`
143
+ - `pending`
144
+ - `success`
145
+ - `failed`
146
+ - `agree`
147
+ - `originator`
148
+
149
+ Optional pagination: `pagenum` (non-negative integer), `pagesize` (positive integer).
150
+
151
+ ## Signing behavior
152
+
153
+ `create_key_gen_request` and `accept_key_gen_request` sign and submit internally. Pass business arguments only (`groupId`, `gate`, `msgCheck`, `keyType`, or `requestId`); do not orchestrate signing manually.
154
+
155
+ Successful responses may include `selectedSigningKey` (the Ed25519 key used) and `signingMessage` (canonical JSON that was signed).
156
+
157
+ ## Status expectations
158
+
159
+ Keygen requests can move through states such as:
160
+
161
+ - `pending`
162
+ - `agree`
163
+ - `success`
164
+ - `failed`
165
+
166
+ Exact transitions depend on group member participation and backend processing.
167
+
168
+ ## Client guidance
169
+
170
+ - For EVM executor address questions, use **EVM executor address** above (`get_preferred_key_gen` then `fetch_key_gen_result`).
171
+ - Show users the `requestId` immediately after creation (format: `KeyGen…`).
172
+ - Keep the request ID available for accept and query tools.
173
+ - Check `agreementChecks` or `agreementRequired` before prompting a user to accept.
174
+ - Prefer explicit polling over assumptions about completion timing.
175
+ - Load `management-signer.md` if signing fails due to missing or unavailable local keys.