junobuild-mcp-server 1.0.0

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.
Files changed (86) hide show
  1. package/README.md +75 -0
  2. package/dist/cli.d.ts +4 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +37 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/constants.d.ts +24 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +6 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +33 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/schemas/changes.d.ts +41 -0
  15. package/dist/schemas/changes.d.ts.map +1 -0
  16. package/dist/schemas/changes.js +17 -0
  17. package/dist/schemas/changes.js.map +1 -0
  18. package/dist/schemas/common.d.ts +6 -0
  19. package/dist/schemas/common.d.ts.map +1 -0
  20. package/dist/schemas/common.js +6 -0
  21. package/dist/schemas/common.js.map +1 -0
  22. package/dist/schemas/config.d.ts +41 -0
  23. package/dist/schemas/config.d.ts.map +1 -0
  24. package/dist/schemas/config.js +16 -0
  25. package/dist/schemas/config.js.map +1 -0
  26. package/dist/schemas/emulator.d.ts +27 -0
  27. package/dist/schemas/emulator.d.ts.map +1 -0
  28. package/dist/schemas/emulator.js +13 -0
  29. package/dist/schemas/emulator.js.map +1 -0
  30. package/dist/schemas/functions.d.ts +72 -0
  31. package/dist/schemas/functions.d.ts.map +1 -0
  32. package/dist/schemas/functions.js +27 -0
  33. package/dist/schemas/functions.js.map +1 -0
  34. package/dist/schemas/hosting.d.ts +62 -0
  35. package/dist/schemas/hosting.d.ts.map +1 -0
  36. package/dist/schemas/hosting.js +22 -0
  37. package/dist/schemas/hosting.js.map +1 -0
  38. package/dist/schemas/identity.d.ts +42 -0
  39. package/dist/schemas/identity.d.ts.map +1 -0
  40. package/dist/schemas/identity.js +16 -0
  41. package/dist/schemas/identity.js.map +1 -0
  42. package/dist/schemas/modules.d.ts +63 -0
  43. package/dist/schemas/modules.d.ts.map +1 -0
  44. package/dist/schemas/modules.js +23 -0
  45. package/dist/schemas/modules.js.map +1 -0
  46. package/dist/schemas/snapshot.d.ts +86 -0
  47. package/dist/schemas/snapshot.d.ts.map +1 -0
  48. package/dist/schemas/snapshot.js +30 -0
  49. package/dist/schemas/snapshot.js.map +1 -0
  50. package/dist/tools/changes.d.ts +3 -0
  51. package/dist/tools/changes.d.ts.map +1 -0
  52. package/dist/tools/changes.js +64 -0
  53. package/dist/tools/changes.js.map +1 -0
  54. package/dist/tools/config.d.ts +3 -0
  55. package/dist/tools/config.d.ts.map +1 -0
  56. package/dist/tools/config.js +69 -0
  57. package/dist/tools/config.js.map +1 -0
  58. package/dist/tools/emulator.d.ts +3 -0
  59. package/dist/tools/emulator.d.ts.map +1 -0
  60. package/dist/tools/emulator.js +72 -0
  61. package/dist/tools/emulator.js.map +1 -0
  62. package/dist/tools/functions.d.ts +3 -0
  63. package/dist/tools/functions.d.ts.map +1 -0
  64. package/dist/tools/functions.js +96 -0
  65. package/dist/tools/functions.js.map +1 -0
  66. package/dist/tools/hosting.d.ts +3 -0
  67. package/dist/tools/hosting.d.ts.map +1 -0
  68. package/dist/tools/hosting.js +72 -0
  69. package/dist/tools/hosting.js.map +1 -0
  70. package/dist/tools/identity.d.ts +3 -0
  71. package/dist/tools/identity.d.ts.map +1 -0
  72. package/dist/tools/identity.js +71 -0
  73. package/dist/tools/identity.js.map +1 -0
  74. package/dist/tools/modules.d.ts +3 -0
  75. package/dist/tools/modules.d.ts.map +1 -0
  76. package/dist/tools/modules.js +77 -0
  77. package/dist/tools/modules.js.map +1 -0
  78. package/dist/tools/snapshot.d.ts +3 -0
  79. package/dist/tools/snapshot.d.ts.map +1 -0
  80. package/dist/tools/snapshot.js +104 -0
  81. package/dist/tools/snapshot.js.map +1 -0
  82. package/dist/types.d.ts +17 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +2 -0
  85. package/dist/types.js.map +1 -0
  86. package/package.json +63 -0
@@ -0,0 +1,96 @@
1
+ import { execCli, formatResponse } from "../cli.js";
2
+ import { functionsBuildSchema, functionsEjectSchema, functionsPublishSchema, functionsUpgradeSchema } from "../schemas/functions.js";
3
+ import { DEPLOY_TIMEOUT } from "../constants.js";
4
+ export function registerFunctionsTools(server) {
5
+ server.registerTool("juno_functions_build", {
6
+ title: "Juno Functions Build",
7
+ description: "Build your serverless functions. Supports Rust, TypeScript, and JavaScript. The CLI auto-detects the language if not specified. Use watch mode to rebuild on file changes.",
8
+ inputSchema: functionsBuildSchema.shape,
9
+ annotations: {
10
+ readOnlyHint: false,
11
+ destructiveHint: false,
12
+ idempotentHint: false,
13
+ openWorldHint: false
14
+ }
15
+ }, async (params) => {
16
+ const args = [];
17
+ if (params.lang)
18
+ args.push("-l", params.lang);
19
+ if (params.cargoPath)
20
+ args.push("--cargo-path", params.cargoPath);
21
+ if (params.sourcePath)
22
+ args.push("--source-path", params.sourcePath);
23
+ if (params.watch)
24
+ args.push("-w");
25
+ const result = await execCli("functions", ["build", ...args]);
26
+ return { content: [{ type: "text", text: formatResponse(result, "Functions Build") }] };
27
+ });
28
+ server.registerTool("juno_functions_eject", {
29
+ title: "Juno Functions Eject",
30
+ description: "Generate the required files to begin developing serverless functions in your project. Scaffolds boilerplate for Rust, TypeScript, or JavaScript functions. Alias: `juno functions init`.",
31
+ inputSchema: functionsEjectSchema.shape,
32
+ annotations: {
33
+ readOnlyHint: false,
34
+ destructiveHint: false,
35
+ idempotentHint: true,
36
+ openWorldHint: false
37
+ }
38
+ }, async (params) => {
39
+ const args = [];
40
+ if (params.lang)
41
+ args.push("-l", params.lang);
42
+ const result = await execCli("functions", ["eject", ...args]);
43
+ return { content: [{ type: "text", text: formatResponse(result, "Functions Eject") }] };
44
+ });
45
+ server.registerTool("juno_functions_publish", {
46
+ title: "Juno Functions Publish",
47
+ description: "Publish a new version of your serverless functions to the satellite. Optionally submit as a pending change without applying, or provide a custom WASM file path.",
48
+ inputSchema: functionsPublishSchema.shape,
49
+ annotations: {
50
+ readOnlyHint: false,
51
+ destructiveHint: false,
52
+ idempotentHint: false,
53
+ openWorldHint: true
54
+ }
55
+ }, async (params) => {
56
+ const flags = { mode: params.mode, profile: params.profile };
57
+ const args = [];
58
+ if (params.src)
59
+ args.push("-s", params.src);
60
+ if (params.noApply)
61
+ args.push("--no-apply");
62
+ if (params.keepStaged)
63
+ args.push("-k");
64
+ const result = await execCli("functions", ["publish", ...args], flags, DEPLOY_TIMEOUT);
65
+ return { content: [{ type: "text", text: formatResponse(result, "Functions Publish") }] };
66
+ });
67
+ server.registerTool("juno_functions_upgrade", {
68
+ title: "Juno Functions Upgrade",
69
+ description: "Upgrade your satellite's serverless functions. Can use a local WASM file, select from CDN releases, or use the default local build output. Optionally create a snapshot before upgrading.",
70
+ inputSchema: functionsUpgradeSchema.shape,
71
+ annotations: {
72
+ readOnlyHint: false,
73
+ destructiveHint: false,
74
+ idempotentHint: false,
75
+ openWorldHint: true
76
+ }
77
+ }, async (params) => {
78
+ const flags = { mode: params.mode, profile: params.profile };
79
+ const args = [];
80
+ if (params.src)
81
+ args.push("-s", params.src);
82
+ if (params.cdn)
83
+ args.push("--cdn");
84
+ if (params.cdnPath)
85
+ args.push("--cdn-path", params.cdnPath);
86
+ if (params.clearChunks)
87
+ args.push("--clear-chunks");
88
+ if (params.noSnapshot)
89
+ args.push("--no-snapshot");
90
+ if (params.reset)
91
+ args.push("-r");
92
+ const result = await execCli("functions", ["upgrade", ...args], flags, DEPLOY_TIMEOUT);
93
+ return { content: [{ type: "text", text: formatResponse(result, "Functions Upgrade") }] };
94
+ });
95
+ }
96
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/tools/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerHostingTools(server: McpServer): void;
3
+ //# sourceMappingURL=hosting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosting.d.ts","sourceRoot":"","sources":["../../src/tools/hosting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyE5D"}
@@ -0,0 +1,72 @@
1
+ import { execCli, formatResponse } from "../cli.js";
2
+ import { hostingDeploySchema, hostingClearSchema, hostingPruneSchema } from "../schemas/hosting.js";
3
+ import { DEPLOY_TIMEOUT } from "../constants.js";
4
+ export function registerHostingTools(server) {
5
+ server.registerTool("juno_hosting_deploy", {
6
+ title: "Juno Hosting Deploy",
7
+ description: "Deploy your app's frontend files to your satellite. Reads from the `source` directory defined in juno.config and uploads all assets. Supports batch parallelism, clearing before deploy, and pruning stale files after.",
8
+ inputSchema: hostingDeploySchema.shape,
9
+ annotations: {
10
+ readOnlyHint: false,
11
+ destructiveHint: false,
12
+ idempotentHint: false,
13
+ openWorldHint: true
14
+ }
15
+ }, async (params) => {
16
+ const flags = { mode: params.mode, profile: params.profile };
17
+ const args = [];
18
+ args.push("--batch", String(params.batch));
19
+ if (params.clear)
20
+ args.push("--clear");
21
+ if (params.prune)
22
+ args.push("--prune");
23
+ if (params.immediate)
24
+ args.push("-i");
25
+ if (params.keepStaged)
26
+ args.push("-k");
27
+ if (params.noApply)
28
+ args.push("--no-apply");
29
+ if (params.config)
30
+ args.push("--config");
31
+ const result = await execCli("hosting", ["deploy", ...args], flags, DEPLOY_TIMEOUT);
32
+ return { content: [{ type: "text", text: formatResponse(result, "Hosting Deploy") }] };
33
+ });
34
+ server.registerTool("juno_hosting_clear", {
35
+ title: "Juno Hosting Clear",
36
+ description: "Remove frontend files (JS, HTML, CSS, etc.) from your satellite. This does NOT remove user-uploaded files from custom collections — only the deployed app assets.",
37
+ inputSchema: hostingClearSchema.shape,
38
+ annotations: {
39
+ readOnlyHint: false,
40
+ destructiveHint: true,
41
+ idempotentHint: false,
42
+ openWorldHint: true
43
+ }
44
+ }, async (params) => {
45
+ const flags = { mode: params.mode, profile: params.profile };
46
+ const args = [];
47
+ if (params.fullPath)
48
+ args.push("-f", params.fullPath);
49
+ const result = await execCli("hosting", ["clear", ...args], flags);
50
+ return { content: [{ type: "text", text: formatResponse(result, "Hosting Clear") }] };
51
+ });
52
+ server.registerTool("juno_hosting_prune", {
53
+ title: "Juno Hosting Prune",
54
+ description: "Remove stale frontend files from your satellite that are no longer in your build output. Use --dry-run to preview which files would be deleted without actually deleting them.",
55
+ inputSchema: hostingPruneSchema.shape,
56
+ annotations: {
57
+ readOnlyHint: false,
58
+ destructiveHint: true,
59
+ idempotentHint: false,
60
+ openWorldHint: true
61
+ }
62
+ }, async (params) => {
63
+ const flags = { mode: params.mode, profile: params.profile };
64
+ const args = [];
65
+ args.push("--batch", String(params.batch));
66
+ if (params.dryRun)
67
+ args.push("--dry-run");
68
+ const result = await execCli("hosting", ["prune", ...args], flags);
69
+ return { content: [{ type: "text", text: formatResponse(result, "Hosting Prune") }] };
70
+ });
71
+ }
72
+ //# sourceMappingURL=hosting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosting.js","sourceRoot":"","sources":["../../src/tools/hosting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerIdentityTools(server: McpServer): void;
3
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoF7D"}
@@ -0,0 +1,71 @@
1
+ import { execCli, formatResponse } from "../cli.js";
2
+ import { whoamiSchema, versionSchema, openSatelliteSchema, runScriptSchema } from "../schemas/identity.js";
3
+ export function registerIdentityTools(server) {
4
+ server.registerTool("juno_whoami", {
5
+ title: "Juno Who Am I",
6
+ description: "Display your current profile, access key, and links to your satellite. Shows the authenticated identity and associated modules.",
7
+ inputSchema: whoamiSchema.shape,
8
+ annotations: {
9
+ readOnlyHint: true,
10
+ destructiveHint: false,
11
+ idempotentHint: true,
12
+ openWorldHint: false
13
+ }
14
+ }, async (params) => {
15
+ const flags = { mode: params.mode, profile: params.profile };
16
+ const args = [];
17
+ const result = await execCli("whoami", args, flags);
18
+ return { content: [{ type: "text", text: formatResponse(result, "Who Am I") }] };
19
+ });
20
+ server.registerTool("juno_version", {
21
+ title: "Juno Version",
22
+ description: "Show the current versions of the Juno CLI and emulator (if running). Use --version flag.",
23
+ inputSchema: versionSchema.shape,
24
+ annotations: {
25
+ readOnlyHint: true,
26
+ destructiveHint: false,
27
+ idempotentHint: true,
28
+ openWorldHint: false
29
+ }
30
+ }, async () => {
31
+ const result = await execCli("--version", []);
32
+ return { content: [{ type: "text", text: formatResponse(result, "Version") }] };
33
+ });
34
+ server.registerTool("juno_open", {
35
+ title: "Juno Open Satellite",
36
+ description: "Open your satellite in the browser or console. Useful for quickly viewing the deployed app or management console.",
37
+ inputSchema: openSatelliteSchema.shape,
38
+ annotations: {
39
+ readOnlyHint: true,
40
+ destructiveHint: false,
41
+ idempotentHint: true,
42
+ openWorldHint: true
43
+ }
44
+ }, async (params) => {
45
+ const flags = { mode: params.mode, profile: params.profile };
46
+ const args = [];
47
+ if (params.browser)
48
+ args.push("-b", params.browser);
49
+ if (params.console)
50
+ args.push("-c");
51
+ const result = await execCli("open", args, flags);
52
+ return { content: [{ type: "text", text: formatResponse(result, "Open") }] };
53
+ });
54
+ server.registerTool("juno_run", {
55
+ title: "Juno Run Script",
56
+ description: "Run a custom JavaScript or TypeScript script in the CLI context. The script has access to the authenticated Juno environment.",
57
+ inputSchema: runScriptSchema.shape,
58
+ annotations: {
59
+ readOnlyHint: false,
60
+ destructiveHint: false,
61
+ idempotentHint: false,
62
+ openWorldHint: true
63
+ }
64
+ }, async (params) => {
65
+ const flags = { mode: params.mode, profile: params.profile };
66
+ const args = ["-s", params.src];
67
+ const result = await execCli("run", args, flags);
68
+ return { content: [{ type: "text", text: formatResponse(result, "Run Script") }] };
69
+ });
70
+ }
71
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerModuleTools(server: McpServer): void;
3
+ //# sourceMappingURL=modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/tools/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuF3D"}
@@ -0,0 +1,77 @@
1
+ import { execCli, formatResponse } from "../cli.js";
2
+ import { moduleStartSchema, moduleStopSchema, moduleUpgradeSchema, moduleStatusSchema } from "../schemas/modules.js";
3
+ import { DEPLOY_TIMEOUT } from "../constants.js";
4
+ export function registerModuleTools(server) {
5
+ server.registerTool("juno_module_start", {
6
+ title: "Juno Module Start",
7
+ description: "Start a stopped module. Target can be satellite (s), mission-control (m), or orbiter (o). Starting a module makes it available for requests.",
8
+ inputSchema: moduleStartSchema.shape,
9
+ annotations: {
10
+ readOnlyHint: false,
11
+ destructiveHint: false,
12
+ idempotentHint: false,
13
+ openWorldHint: true
14
+ }
15
+ }, async (params) => {
16
+ const flags = { mode: params.mode, profile: params.profile };
17
+ const args = ["-t", params.target];
18
+ const result = await execCli("start", args, flags);
19
+ return { content: [{ type: "text", text: formatResponse(result, "Module Start") }] };
20
+ });
21
+ server.registerTool("juno_module_stop", {
22
+ title: "Juno Module Stop",
23
+ description: "Stop a running module. Target can be satellite (s), mission-control (m), or orbiter (o). Stopping a module makes it unavailable for requests.",
24
+ inputSchema: moduleStopSchema.shape,
25
+ annotations: {
26
+ readOnlyHint: false,
27
+ destructiveHint: true,
28
+ idempotentHint: false,
29
+ openWorldHint: true
30
+ }
31
+ }, async (params) => {
32
+ const flags = { mode: params.mode, profile: params.profile };
33
+ const args = ["-t", params.target];
34
+ const result = await execCli("stop", args, flags);
35
+ return { content: [{ type: "text", text: formatResponse(result, "Module Stop") }] };
36
+ });
37
+ server.registerTool("juno_module_upgrade", {
38
+ title: "Juno Module Upgrade",
39
+ description: "Upgrade a module to a new version. Target can be satellite (s), mission-control (m), or orbiter (o). Optionally provide a custom WASM file. A snapshot is created before upgrading unless --no-snapshot is set.",
40
+ inputSchema: moduleUpgradeSchema.shape,
41
+ annotations: {
42
+ readOnlyHint: false,
43
+ destructiveHint: false,
44
+ idempotentHint: false,
45
+ openWorldHint: true
46
+ }
47
+ }, async (params) => {
48
+ const flags = { mode: params.mode, profile: params.profile };
49
+ const args = ["-t", params.target];
50
+ if (params.src)
51
+ args.push("-s", params.src);
52
+ if (params.clearChunks)
53
+ args.push("--clear-chunks");
54
+ if (params.noSnapshot)
55
+ args.push("--no-snapshot");
56
+ if (params.reset)
57
+ args.push("-r");
58
+ const result = await execCli("upgrade", args, flags, DEPLOY_TIMEOUT);
59
+ return { content: [{ type: "text", text: formatResponse(result, "Module Upgrade") }] };
60
+ });
61
+ server.registerTool("juno_module_status", {
62
+ title: "Juno Module Status",
63
+ description: "Check the status of all modules (satellites, mission control, orbiter). Shows running state, cycles balance, memory usage, and version info.",
64
+ inputSchema: moduleStatusSchema.shape,
65
+ annotations: {
66
+ readOnlyHint: true,
67
+ destructiveHint: false,
68
+ idempotentHint: true,
69
+ openWorldHint: true
70
+ }
71
+ }, async (params) => {
72
+ const flags = { mode: params.mode, profile: params.profile };
73
+ const result = await execCli("status", [], flags);
74
+ return { content: [{ type: "text", text: formatResponse(result, "Module Status") }] };
75
+ });
76
+ }
77
+ //# sourceMappingURL=modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/tools/modules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSnapshotTools(server: McpServer): void;
3
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+H7D"}
@@ -0,0 +1,104 @@
1
+ import { execCli, formatResponse } from "../cli.js";
2
+ import { snapshotCreateSchema, snapshotDeleteSchema, snapshotListSchema, snapshotDownloadSchema, snapshotUploadSchema, snapshotRestoreSchema } from "../schemas/snapshot.js";
3
+ import { DEPLOY_TIMEOUT } from "../constants.js";
4
+ export function registerSnapshotTools(server) {
5
+ server.registerTool("juno_snapshot_create", {
6
+ title: "Juno Snapshot Create",
7
+ description: "Create a snapshot of your module's current state. Snapshots capture the full state and can be used for backup or migration. Target can be satellite (s), mission-control (m), or orbiter (o).",
8
+ inputSchema: snapshotCreateSchema.shape,
9
+ annotations: {
10
+ readOnlyHint: false,
11
+ destructiveHint: false,
12
+ idempotentHint: false,
13
+ openWorldHint: true
14
+ }
15
+ }, async (params) => {
16
+ const flags = { mode: params.mode, profile: params.profile };
17
+ const args = ["-t", params.target];
18
+ const result = await execCli("snapshot", ["create", ...args], flags, DEPLOY_TIMEOUT);
19
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot Create") }] };
20
+ });
21
+ server.registerTool("juno_snapshot_delete", {
22
+ title: "Juno Snapshot Delete",
23
+ description: "Delete an existing snapshot. This permanently removes the snapshot and cannot be undone.",
24
+ inputSchema: snapshotDeleteSchema.shape,
25
+ annotations: {
26
+ readOnlyHint: false,
27
+ destructiveHint: true,
28
+ idempotentHint: false,
29
+ openWorldHint: true
30
+ }
31
+ }, async (params) => {
32
+ const flags = { mode: params.mode, profile: params.profile };
33
+ const args = ["-t", params.target];
34
+ const result = await execCli("snapshot", ["delete", ...args], flags);
35
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot Delete") }] };
36
+ });
37
+ server.registerTool("juno_snapshot_list", {
38
+ title: "Juno Snapshot List",
39
+ description: "List all existing snapshots for a module type. Shows snapshot IDs, creation dates, and sizes. Target can be satellite (s), mission-control (m), or orbiter (o).",
40
+ inputSchema: snapshotListSchema.shape,
41
+ annotations: {
42
+ readOnlyHint: true,
43
+ destructiveHint: false,
44
+ idempotentHint: true,
45
+ openWorldHint: true
46
+ }
47
+ }, async (params) => {
48
+ const flags = { mode: params.mode, profile: params.profile };
49
+ const args = ["-t", params.target];
50
+ const result = await execCli("snapshot", ["list", ...args], flags);
51
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot List") }] };
52
+ });
53
+ server.registerTool("juno_snapshot_download", {
54
+ title: "Juno Snapshot Download",
55
+ description: "Download a snapshot to offline files on your local machine. Useful for backup or transferring state between environments.",
56
+ inputSchema: snapshotDownloadSchema.shape,
57
+ annotations: {
58
+ readOnlyHint: true,
59
+ destructiveHint: false,
60
+ idempotentHint: false,
61
+ openWorldHint: true
62
+ }
63
+ }, async (params) => {
64
+ const flags = { mode: params.mode, profile: params.profile };
65
+ const args = ["-t", params.target];
66
+ const result = await execCli("snapshot", ["download", ...args], flags, DEPLOY_TIMEOUT);
67
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot Download") }] };
68
+ });
69
+ server.registerTool("juno_snapshot_upload", {
70
+ title: "Juno Snapshot Upload",
71
+ description: "Upload a snapshot from offline files. Provide the directory path containing metadata.json and chunks, and the target module type.",
72
+ inputSchema: snapshotUploadSchema.shape,
73
+ annotations: {
74
+ readOnlyHint: false,
75
+ destructiveHint: false,
76
+ idempotentHint: false,
77
+ openWorldHint: true
78
+ }
79
+ }, async (params) => {
80
+ const flags = { mode: params.mode, profile: params.profile };
81
+ const args = ["--dir", params.dir, "-t", params.target];
82
+ if (params.targetId)
83
+ args.push("--target-id", params.targetId);
84
+ const result = await execCli("snapshot", ["upload", ...args], flags, DEPLOY_TIMEOUT);
85
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot Upload") }] };
86
+ });
87
+ server.registerTool("juno_snapshot_restore", {
88
+ title: "Juno Snapshot Restore",
89
+ description: "Restore a module to a previously created snapshot state. This will overwrite the current state with the snapshot data.",
90
+ inputSchema: snapshotRestoreSchema.shape,
91
+ annotations: {
92
+ readOnlyHint: false,
93
+ destructiveHint: true,
94
+ idempotentHint: false,
95
+ openWorldHint: true
96
+ }
97
+ }, async (params) => {
98
+ const flags = { mode: params.mode, profile: params.profile };
99
+ const args = ["-t", params.target];
100
+ const result = await execCli("snapshot", ["restore", ...args], flags, DEPLOY_TIMEOUT);
101
+ return { content: [{ type: "text", text: formatResponse(result, "Snapshot Restore") }] };
102
+ });
103
+ }
104
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/tools/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface CliResult {
2
+ stdout: string;
3
+ stderr: string;
4
+ exitCode: number;
5
+ }
6
+ export interface GlobalFlags {
7
+ mode?: string;
8
+ profile?: string;
9
+ }
10
+ export interface ToolResponse {
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ isError?: boolean;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "junobuild-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Juno (junobuild) - manage satellites, hosting, functions, snapshots and more",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "bin": {
15
+ "junobuild-mcp-server": "dist/index.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/nami2111/junobuild-mcp.git"
24
+ },
25
+ "bugs": {
26
+ "url": "https://github.com/nami2111/junobuild-mcp/issues"
27
+ },
28
+ "homepage": "https://github.com/nami2111/junobuild-mcp#readme",
29
+ "keywords": [
30
+ "mcp",
31
+ "model-context-protocol",
32
+ "juno",
33
+ "junobuild",
34
+ "serverless",
35
+ "internet-computer",
36
+ "satellite",
37
+ "hosting",
38
+ "deploy"
39
+ ],
40
+ "scripts": {
41
+ "start": "node dist/index.js",
42
+ "dev": "tsx watch src/index.ts",
43
+ "build": "tsc",
44
+ "clean": "rm -rf dist",
45
+ "prepublishOnly": "npm run build",
46
+ "changeset": "changeset",
47
+ "version": "changeset version",
48
+ "release": "changeset publish"
49
+ },
50
+ "engines": {
51
+ "node": ">=18"
52
+ },
53
+ "dependencies": {
54
+ "@modelcontextprotocol/sdk": "^1.6.1",
55
+ "zod": "^3.23.8"
56
+ },
57
+ "devDependencies": {
58
+ "@changesets/cli": "^2.27.12",
59
+ "@types/node": "^22.10.0",
60
+ "tsx": "^4.19.2",
61
+ "typescript": "^5.7.2"
62
+ }
63
+ }