@sashido/mcp-server 0.0.0-stage → 0.2.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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -2
  3. package/dist/access.d.ts +47 -0
  4. package/dist/access.d.ts.map +1 -0
  5. package/dist/access.js +156 -0
  6. package/dist/access.js.map +1 -0
  7. package/dist/advice/format.d.ts +22 -0
  8. package/dist/advice/format.d.ts.map +1 -0
  9. package/dist/advice/format.js +70 -0
  10. package/dist/advice/format.js.map +1 -0
  11. package/dist/advice/schemaChecks.d.ts +17 -0
  12. package/dist/advice/schemaChecks.d.ts.map +1 -0
  13. package/dist/advice/schemaChecks.js +64 -0
  14. package/dist/advice/schemaChecks.js.map +1 -0
  15. package/dist/audit.d.ts +32 -0
  16. package/dist/audit.d.ts.map +1 -0
  17. package/dist/audit.js +41 -0
  18. package/dist/audit.js.map +1 -0
  19. package/dist/auth.d.ts +17 -0
  20. package/dist/auth.d.ts.map +1 -0
  21. package/dist/auth.js +72 -0
  22. package/dist/auth.js.map +1 -0
  23. package/dist/bin/login.d.ts +3 -0
  24. package/dist/bin/login.d.ts.map +1 -0
  25. package/dist/bin/login.js +16 -0
  26. package/dist/bin/login.js.map +1 -0
  27. package/dist/bin/mcp-server.d.ts +3 -0
  28. package/dist/bin/mcp-server.d.ts.map +1 -0
  29. package/dist/bin/mcp-server.js +27 -0
  30. package/dist/bin/mcp-server.js.map +1 -0
  31. package/dist/client/parse.d.ts +219 -0
  32. package/dist/client/parse.d.ts.map +1 -0
  33. package/dist/client/parse.js +414 -0
  34. package/dist/client/parse.js.map +1 -0
  35. package/dist/client/sashido.d.ts +213 -0
  36. package/dist/client/sashido.d.ts.map +1 -0
  37. package/dist/client/sashido.js +289 -0
  38. package/dist/client/sashido.js.map +1 -0
  39. package/dist/config.d.ts +27 -0
  40. package/dist/config.d.ts.map +1 -0
  41. package/dist/config.js +70 -0
  42. package/dist/config.js.map +1 -0
  43. package/dist/context.d.ts +33 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +132 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/index.d.ts +10 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +8 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/server.d.ts +13 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +60 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/session/redis-client.d.ts +23 -0
  56. package/dist/session/redis-client.d.ts.map +1 -0
  57. package/dist/session/redis-client.js +136 -0
  58. package/dist/session/redis-client.js.map +1 -0
  59. package/dist/session/session-manager.d.ts +6 -0
  60. package/dist/session/session-manager.d.ts.map +1 -0
  61. package/dist/session/session-manager.js +68 -0
  62. package/dist/session/session-manager.js.map +1 -0
  63. package/dist/session/sse-pubsub.d.ts +23 -0
  64. package/dist/session/sse-pubsub.d.ts.map +1 -0
  65. package/dist/session/sse-pubsub.js +121 -0
  66. package/dist/session/sse-pubsub.js.map +1 -0
  67. package/dist/session/types.d.ts +43 -0
  68. package/dist/session/types.d.ts.map +1 -0
  69. package/dist/session/types.js +2 -0
  70. package/dist/session/types.js.map +1 -0
  71. package/dist/tools/advisor/index.d.ts +3 -0
  72. package/dist/tools/advisor/index.d.ts.map +1 -0
  73. package/dist/tools/advisor/index.js +149 -0
  74. package/dist/tools/advisor/index.js.map +1 -0
  75. package/dist/tools/apps/index.d.ts +3 -0
  76. package/dist/tools/apps/index.d.ts.map +1 -0
  77. package/dist/tools/apps/index.js +113 -0
  78. package/dist/tools/apps/index.js.map +1 -0
  79. package/dist/tools/audit/index.d.ts +6 -0
  80. package/dist/tools/audit/index.d.ts.map +1 -0
  81. package/dist/tools/audit/index.js +69 -0
  82. package/dist/tools/audit/index.js.map +1 -0
  83. package/dist/tools/builds/index.d.ts +3 -0
  84. package/dist/tools/builds/index.d.ts.map +1 -0
  85. package/dist/tools/builds/index.js +85 -0
  86. package/dist/tools/builds/index.js.map +1 -0
  87. package/dist/tools/classes/index.d.ts +3 -0
  88. package/dist/tools/classes/index.d.ts.map +1 -0
  89. package/dist/tools/classes/index.js +223 -0
  90. package/dist/tools/classes/index.js.map +1 -0
  91. package/dist/tools/cloud-functions/index.d.ts +3 -0
  92. package/dist/tools/cloud-functions/index.d.ts.map +1 -0
  93. package/dist/tools/cloud-functions/index.js +154 -0
  94. package/dist/tools/cloud-functions/index.js.map +1 -0
  95. package/dist/tools/deployments/index.d.ts +3 -0
  96. package/dist/tools/deployments/index.d.ts.map +1 -0
  97. package/dist/tools/deployments/index.js +124 -0
  98. package/dist/tools/deployments/index.js.map +1 -0
  99. package/dist/tools/engines/index.d.ts +3 -0
  100. package/dist/tools/engines/index.d.ts.map +1 -0
  101. package/dist/tools/engines/index.js +68 -0
  102. package/dist/tools/engines/index.js.map +1 -0
  103. package/dist/tools/env/index.d.ts +3 -0
  104. package/dist/tools/env/index.d.ts.map +1 -0
  105. package/dist/tools/env/index.js +116 -0
  106. package/dist/tools/env/index.js.map +1 -0
  107. package/dist/tools/files/index.d.ts +3 -0
  108. package/dist/tools/files/index.d.ts.map +1 -0
  109. package/dist/tools/files/index.js +132 -0
  110. package/dist/tools/files/index.js.map +1 -0
  111. package/dist/tools/health/index.d.ts +3 -0
  112. package/dist/tools/health/index.d.ts.map +1 -0
  113. package/dist/tools/health/index.js +47 -0
  114. package/dist/tools/health/index.js.map +1 -0
  115. package/dist/tools/infrastructure/deployments.d.ts +23 -0
  116. package/dist/tools/infrastructure/deployments.d.ts.map +1 -0
  117. package/dist/tools/infrastructure/deployments.js +76 -0
  118. package/dist/tools/infrastructure/deployments.js.map +1 -0
  119. package/dist/tools/infrastructure/index.d.ts +9 -0
  120. package/dist/tools/infrastructure/index.d.ts.map +1 -0
  121. package/dist/tools/infrastructure/index.js +164 -0
  122. package/dist/tools/infrastructure/index.js.map +1 -0
  123. package/dist/tools/jobs/index.d.ts +3 -0
  124. package/dist/tools/jobs/index.d.ts.map +1 -0
  125. package/dist/tools/jobs/index.js +338 -0
  126. package/dist/tools/jobs/index.js.map +1 -0
  127. package/dist/tools/logs/index.d.ts +3 -0
  128. package/dist/tools/logs/index.d.ts.map +1 -0
  129. package/dist/tools/logs/index.js +133 -0
  130. package/dist/tools/logs/index.js.map +1 -0
  131. package/dist/tools/objects/index.d.ts +3 -0
  132. package/dist/tools/objects/index.d.ts.map +1 -0
  133. package/dist/tools/objects/index.js +185 -0
  134. package/dist/tools/objects/index.js.map +1 -0
  135. package/dist/tools/push/index.d.ts +3 -0
  136. package/dist/tools/push/index.d.ts.map +1 -0
  137. package/dist/tools/push/index.js +434 -0
  138. package/dist/tools/push/index.js.map +1 -0
  139. package/dist/tools/types/index.d.ts +3 -0
  140. package/dist/tools/types/index.d.ts.map +1 -0
  141. package/dist/tools/types/index.js +45 -0
  142. package/dist/tools/types/index.js.map +1 -0
  143. package/dist/tools/webhooks/index.d.ts +3 -0
  144. package/dist/tools/webhooks/index.d.ts.map +1 -0
  145. package/dist/tools/webhooks/index.js +443 -0
  146. package/dist/tools/webhooks/index.js.map +1 -0
  147. package/dist/transports/http.d.ts +4 -0
  148. package/dist/transports/http.d.ts.map +1 -0
  149. package/dist/transports/http.js +241 -0
  150. package/dist/transports/http.js.map +1 -0
  151. package/dist/transports/stdio.d.ts +7 -0
  152. package/dist/transports/stdio.d.ts.map +1 -0
  153. package/dist/transports/stdio.js +29 -0
  154. package/dist/transports/stdio.js.map +1 -0
  155. package/dist/typegen/dart.d.ts +3 -0
  156. package/dist/typegen/dart.d.ts.map +1 -0
  157. package/dist/typegen/dart.js +84 -0
  158. package/dist/typegen/dart.js.map +1 -0
  159. package/dist/typegen/kotlin.d.ts +3 -0
  160. package/dist/typegen/kotlin.d.ts.map +1 -0
  161. package/dist/typegen/kotlin.js +84 -0
  162. package/dist/typegen/kotlin.js.map +1 -0
  163. package/dist/typegen/model.d.ts +37 -0
  164. package/dist/typegen/model.d.ts.map +1 -0
  165. package/dist/typegen/model.js +82 -0
  166. package/dist/typegen/model.js.map +1 -0
  167. package/dist/typegen/swift.d.ts +3 -0
  168. package/dist/typegen/swift.d.ts.map +1 -0
  169. package/dist/typegen/swift.js +105 -0
  170. package/dist/typegen/swift.js.map +1 -0
  171. package/dist/typegen/typescript.d.ts +3 -0
  172. package/dist/typegen/typescript.d.ts.map +1 -0
  173. package/dist/typegen/typescript.js +73 -0
  174. package/dist/typegen/typescript.js.map +1 -0
  175. package/dist/upgrade/rules.d.ts +27 -0
  176. package/dist/upgrade/rules.d.ts.map +1 -0
  177. package/dist/upgrade/rules.js +133 -0
  178. package/dist/upgrade/rules.js.map +1 -0
  179. package/dist/upgrade/scan.d.ts +18 -0
  180. package/dist/upgrade/scan.d.ts.map +1 -0
  181. package/dist/upgrade/scan.js +38 -0
  182. package/dist/upgrade/scan.js.map +1 -0
  183. package/dist/upgrade/versions.d.ts +8 -0
  184. package/dist/upgrade/versions.d.ts.map +1 -0
  185. package/dist/upgrade/versions.js +25 -0
  186. package/dist/upgrade/versions.js.map +1 -0
  187. package/dist/version.d.ts +3 -0
  188. package/dist/version.d.ts.map +1 -0
  189. package/dist/version.js +3 -0
  190. package/dist/version.js.map +1 -0
  191. package/package.json +67 -4
@@ -0,0 +1,149 @@
1
+ import { z } from "zod";
2
+ import { schemaChecks } from "../../advice/schemaChecks.js";
3
+ import { formatChecks, formatUpgrade } from "../../advice/format.js";
4
+ import { byRule, rulesFor, scanFile } from "../../upgrade/scan.js";
5
+ import { majorsCrossed } from "../../upgrade/rules.js";
6
+ import { compareVersions, hasAppChecks, isOutdated, versionParts } from "../../upgrade/versions.js";
7
+ import { versionLabel } from "../infrastructure/index.js";
8
+ const text = (t) => ({ content: [{ type: "text", text: t }] });
9
+ const CODE_FILE = /\.(m?js|cjs|ts)$/;
10
+ const MAX_FILES = 80;
11
+ const DAY_MS = 24 * 60 * 60 * 1000;
12
+ async function appVersion(ctx, appObjectId) {
13
+ const app = (await ctx.sashido().listApps()).find((a) => a.objectId === appObjectId);
14
+ if (!app) {
15
+ throw new Error(`App ${appObjectId} not found.`);
16
+ }
17
+ return { name: app.name, version: app.parseServerVersion };
18
+ }
19
+ /** Scans the app's cloud code files with the rules: findings, files read and not */
20
+ async function scanCloudCode(parse, rules) {
21
+ const files = (await parse.listCloudCodeFiles()).cloudFiles
22
+ .map((f) => f.path)
23
+ .filter((path) => CODE_FILE.test(path) && path.indexOf("node_modules/") === -1);
24
+ const findings = [];
25
+ const skipped = files.slice(MAX_FILES);
26
+ let scanned = 0;
27
+ for (const path of files.slice(0, MAX_FILES)) {
28
+ try {
29
+ findings.push(...scanFile(path, await parse.readCloudCodeFile(path), rules));
30
+ scanned++;
31
+ }
32
+ catch {
33
+ skipped.push(path);
34
+ }
35
+ }
36
+ return { findings, scanned, skipped };
37
+ }
38
+ // a part of the advice that can't be done (e.g. a scope the token lacks)
39
+ // is said, not fatal
40
+ async function part(lines, title, work) {
41
+ try {
42
+ lines.push(`${title}:`, ...(await work()), "");
43
+ }
44
+ catch (e) {
45
+ lines.push(`${title}: skipped (${e instanceof Error ? e.message : "failed"}).`, "");
46
+ }
47
+ }
48
+ export function registerAdvisorTools(server, ctx) {
49
+ server.tool("get_app_advice", "Check an app for what to fix: security (class-level permissions, client push, class creation, social logins), users and sessions, the database (Parse Server 6.5.11+ runs its own checks; older versions get the schema checks), its Parse Server version, health, recent errors and failed jobs. Each problem comes with what to do.", {
50
+ appObjectId: z.string().describe("The application object ID"),
51
+ }, async (args) => {
52
+ const { name, version } = await appVersion(ctx, args.appObjectId);
53
+ const parse = ctx.parse(args.appObjectId);
54
+ const lines = [`Advice for ${name} (Parse Server ${versionLabel(version)})`, ""];
55
+ if (isOutdated(version)) {
56
+ // what is offered now, not what is announced
57
+ const versions = await ctx.sashido().listParseServerVersions().catch(() => []);
58
+ const newest = [...versions].sort((a, b) => compareVersions(b.imageTag, a.imageTag))[0];
59
+ lines.push(`⚠️ Parse Server ${versionLabel(version)} is an older major version${newest ? `; ${versionLabel(newest.imageTag)} is available` : ""}, with security fixes and a current Node.js. plan_parse_server_upgrade shows what the cloud code needs.`, "");
60
+ }
61
+ await part(lines, "Security and data", async () => {
62
+ if (hasAppChecks(version)) {
63
+ const report = await parse.getAppChecks();
64
+ const checks = [];
65
+ report.groups.forEach((g) => g.checks.forEach((c) => checks.push({ ...c, group: g.name })));
66
+ return formatChecks(checks);
67
+ }
68
+ const checks = schemaChecks(await parse.listClasses());
69
+ return [
70
+ ...formatChecks(checks),
71
+ "(Parse Server 6.5.11+ also checks client push, class creation, social logins, users and sessions, and the database.)",
72
+ ];
73
+ });
74
+ // code written for an older major than the app runs (e.g. 2.x code on 6)
75
+ const major = versionParts(version)[0];
76
+ if (major > 0) {
77
+ await part(lines, "Cloud code", async () => {
78
+ const rules = rulesFor(0, major).filter((r) => r.severity === "breaks");
79
+ const { findings, scanned } = await scanCloudCode(parse, rules);
80
+ if (!findings.length) {
81
+ return [`✓ ${scanned} file${scanned === 1 ? "" : "s"} read: nothing that stopped working by Parse Server ${major}.`];
82
+ }
83
+ const out = [];
84
+ for (const g of byRule(findings)) {
85
+ out.push(`❗ ${g.rule.title}: stopped working in Parse Server ${g.rule.major}; this app runs ${versionLabel(version)}.`, ` What to do: ${g.rule.fix}`);
86
+ out.push(...g.places.slice(0, 6).map((p) => ` ${p.file}:${p.line} ${p.text}`));
87
+ if (g.places.length > 6) {
88
+ out.push(` … and ${g.places.length - 6} more`);
89
+ }
90
+ }
91
+ return out;
92
+ });
93
+ }
94
+ await part(lines, "Running", async () => {
95
+ const out = [];
96
+ const health = await parse.checkHealth().catch((e) => ({ status: `unreachable: ${e.message}` }));
97
+ out.push(health.status === "ok" ? "✓ The app server answers its health check." : `❗ Health check: ${health.status}.`);
98
+ if (ctx.access.scopes.indexOf("logs:read") !== -1) {
99
+ const errors = await parse.getLogs({ level: "error", limit: 100 });
100
+ const recent = errors.filter((e) => Date.now() - Date.parse(e.timestamp) < DAY_MS);
101
+ out.push(recent.length
102
+ ? `⚠️ ${recent.length} error${recent.length === 1 ? "" : "s"} in the last 24 hours: get_error_logs shows them.`
103
+ : "✓ No errors in the cloud code logs in the last 24 hours.");
104
+ }
105
+ const runs = await parse.getJobStatus(20).catch(() => []);
106
+ const failed = runs.filter((r) => r.status === "failed");
107
+ if (failed.length) {
108
+ out.push(`⚠️ ${failed.length} of the last ${runs.length} job runs failed: ${[...new Set(failed.map((r) => r.jobName))].join(", ")} (get_job_status).`);
109
+ }
110
+ else if (runs.length) {
111
+ out.push(`✓ The last ${runs.length} job runs didn't fail.`);
112
+ }
113
+ return out;
114
+ });
115
+ return text(lines.join("\n").trim());
116
+ });
117
+ server.tool("plan_parse_server_upgrade", "Plan an app's move to a newer Parse Server version (e.g. to 6 or 8): which of its cloud code breaks, where (file and line), how to change it, with sources from Parse Server's migration guides; what SashiDo handles; and the steps, with a way back. Reads the cloud code, changes nothing.", {
118
+ appObjectId: z.string().describe("The application object ID"),
119
+ imageTag: z.string().optional().describe("The target version's imageTag (list_parse_server_versions); default: the newest"),
120
+ }, async (args) => {
121
+ const { name, version } = await appVersion(ctx, args.appObjectId);
122
+ const versions = await ctx.sashido().listParseServerVersions();
123
+ const newest = [...versions].sort((a, b) => compareVersions(b.imageTag, a.imageTag))[0];
124
+ const target = args.imageTag ? versions.find((v) => v.imageTag === args.imageTag) : newest;
125
+ if (!target) {
126
+ return text(`❌ ${args.imageTag} isn't a version apps can use: list_parse_server_versions shows them.`);
127
+ }
128
+ if (version && compareVersions(target.imageTag, version) <= 0) {
129
+ return text(`${name} already runs Parse Server ${versionLabel(version)}, not older than ${versionLabel(target.imageTag)}.`);
130
+ }
131
+ const from = versionParts(version)[0];
132
+ const to = versionParts(target.imageTag)[0];
133
+ const rules = rulesFor(from, to);
134
+ const { findings, scanned, skipped } = await scanCloudCode(ctx.parse(args.appObjectId), rules);
135
+ return text(formatUpgrade({
136
+ app: name,
137
+ from: versionLabel(version),
138
+ to: versionLabel(target.imageTag),
139
+ toTag: target.imageTag,
140
+ majors: majorsCrossed(from, to),
141
+ rules,
142
+ findings,
143
+ filesScanned: scanned,
144
+ filesSkipped: skipped,
145
+ rollback: version && versions.some((v) => v.imageTag === version) ? version : null,
146
+ }));
147
+ });
148
+ }
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/advisor/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolContext, ToolServer } from "../../context.js";
2
+ export declare function registerAppTools(server: ToolServer, ctx: ToolContext): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/apps/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI3D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA4I3E"}
@@ -0,0 +1,113 @@
1
+ import { z } from "zod";
2
+ import { SashidoClient } from "../../client/sashido.js";
3
+ export function registerAppTools(server, ctx) {
4
+ const getAuthFromRequest = (_args, _extra) => ctx.token;
5
+ // List Apps
6
+ server.tool("list_apps", "List all applications owned by the authenticated user", {}, async (args, extra) => {
7
+ const auth = getAuthFromRequest(args, extra);
8
+ const client = new SashidoClient(auth);
9
+ const apps = await client.listApps();
10
+ return {
11
+ content: [
12
+ {
13
+ type: "text",
14
+ text: JSON.stringify(apps, null, 2),
15
+ },
16
+ ],
17
+ };
18
+ });
19
+ // Get App (by objectId from list_apps)
20
+ server.tool("get_app", "Get detailed information about a specific application by its objectId", {
21
+ appObjectId: z.string().describe("The application object ID"),
22
+ }, async (args, extra) => {
23
+ const auth = getAuthFromRequest(args, extra);
24
+ const client = new SashidoClient(auth);
25
+ // Get all apps and find the one with matching objectId
26
+ const apps = await client.listApps();
27
+ const app = apps.find((a) => a.objectId === args.appObjectId);
28
+ if (!app) {
29
+ return {
30
+ content: [
31
+ {
32
+ type: "text",
33
+ text: `App with objectId ${args.appObjectId} not found`,
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: JSON.stringify(app, null, 2),
43
+ },
44
+ ],
45
+ };
46
+ });
47
+ // Create App
48
+ server.tool("create_app", "Create a new Parse Server application", {
49
+ name: z.string().describe("Application name"),
50
+ region: z
51
+ .string()
52
+ .describe('Region: "eu" (Europe, 1-eu), "us" (North America, 2-us), "jp" (Japan, 1-jp) or "au" (Australia, 1-au)'),
53
+ parseServerVersion: z
54
+ .string()
55
+ .optional()
56
+ .describe("The version's imageTag from list_parse_server_versions; default: the one marked as default for new apps"),
57
+ }, async (args, extra) => {
58
+ const auth = getAuthFromRequest(args, extra);
59
+ const client = new SashidoClient(auth);
60
+ // Region mapping: short code -> full format expected by API
61
+ const regionMap = {
62
+ eu: "1-eu",
63
+ us: "2-us",
64
+ jp: "1-jp",
65
+ au: "1-au",
66
+ };
67
+ // Normalize region: "eu" -> "1-eu", "1-eu" -> "1-eu"
68
+ let region = args.region;
69
+ const shortCode = region.toLowerCase();
70
+ if (regionMap[shortCode]) {
71
+ region = regionMap[shortCode];
72
+ }
73
+ // Validate region format
74
+ const validRegions = Object.values(regionMap);
75
+ if (!validRegions.includes(region)) {
76
+ return {
77
+ content: [
78
+ {
79
+ type: "text",
80
+ text: `Invalid region "${args.region}". Valid regions are: ${Object.keys(regionMap).join(", ")} (or ${validRegions.join(", ")})`,
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ try {
86
+ const app = await client.createApp({
87
+ name: args.name,
88
+ region,
89
+ parseServerVersion: args.parseServerVersion,
90
+ });
91
+ return {
92
+ content: [
93
+ {
94
+ type: "text",
95
+ text: `✅ App created successfully!\n\n${JSON.stringify(app, null, 2)}`,
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ catch (error) {
101
+ const message = error instanceof Error ? error.message : "Unknown error";
102
+ return {
103
+ content: [
104
+ {
105
+ type: "text",
106
+ text: `❌ Failed to create app: ${message}\n\nRequest details:\n- Name: ${args.name}\n- Region: ${region}\n- Parse Server Version: ${args.parseServerVersion || "default"}`,
107
+ },
108
+ ],
109
+ };
110
+ }
111
+ });
112
+ }
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/apps/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ToolContext, ToolServer } from "../../context.js";
2
+ import { Activity } from "../../client/sashido.js";
3
+ /** One line: when, what, app, result, who, through what, message */
4
+ export declare function describeActivity(a: Activity, appName: string | null): string;
5
+ export declare function registerAuditTools(server: ToolServer, ctx: ToolContext): void;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/audit/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAwBnD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAqB5E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAiC7E"}
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ const text = (t) => ({ content: [{ type: "text", text: t }] });
3
+ function describeActor(a) {
4
+ const actor = a.actor;
5
+ if (!actor) {
6
+ return "";
7
+ }
8
+ if (actor.kind === "access_token") {
9
+ return `token "${actor.tokenName || actor.tokenId}"`;
10
+ }
11
+ return actor.kind === "platform" ? "SashiDo" : "dashboard session";
12
+ }
13
+ function describeVia(a) {
14
+ const via = a.via;
15
+ if (!via || !via.client) {
16
+ return "";
17
+ }
18
+ const details = [via.mcpClient, via.mcpTool ? `tool ${via.mcpTool}` : ""].filter(Boolean).join(", ");
19
+ return `via ${via.client}${details ? ` (${details})` : ""}`;
20
+ }
21
+ /** One line: when, what, app, result, who, through what, message */
22
+ export function describeActivity(a, appName) {
23
+ const result = a.result
24
+ ? a.result.status === "ok"
25
+ ? "ok"
26
+ : `${a.result.status}${a.result.code ? ` ${a.result.code}` : ""}${a.result.message ? `: ${a.result.message}` : ""}`
27
+ : "";
28
+ const params = (a.data && a.data.params) || {};
29
+ const count = a.type === "data_read_summary" ? `${params["count"]} reads of ${params["className"]}` : "";
30
+ return [
31
+ a.createdAt.replace("T", " ").slice(0, 19),
32
+ a.type,
33
+ appName,
34
+ result,
35
+ describeActor(a),
36
+ describeVia(a),
37
+ count,
38
+ a.source === "client" ? "(reported by the client)" : "",
39
+ a.data && a.data.message ? `- ${a.data.message}` : "",
40
+ ]
41
+ .filter(Boolean)
42
+ .join(" ");
43
+ }
44
+ export function registerAuditTools(server, ctx) {
45
+ server.tool("get_audit_log", "The account's activity, newest first: who did what, to which app, through what (dashboard, API token, this MCP server and its tool), and how it ended. Use it to find out what happened, e.g. who changed an app or what an AI client did.", {
46
+ type: z
47
+ .string()
48
+ .optional()
49
+ .describe("Only this kind, e.g. deploy, set_env, set_engine, parse_proxy_write, read_users, access_refused"),
50
+ app: z.string().optional().describe("Only this app: its name or objectId"),
51
+ page: z.number().int().min(1).optional().describe("Page of 50 (default 1)"),
52
+ }, async (args) => {
53
+ const appId = args.app ? await ctx.resolveApp(args.app) : null;
54
+ const activities = await ctx.sashido().listActivities({ type: args.type, page: args.page });
55
+ const shown = appId ? activities.filter((a) => a.app && a.app.objectId === appId) : activities;
56
+ if (!shown.length) {
57
+ return text(`No activity${args.type ? ` of type ${args.type}` : ""}${args.app ? ` for ${args.app}` : ""} on this page.`);
58
+ }
59
+ const lines = await Promise.all(shown.map(async (a) => describeActivity(a, a.app ? await ctx.appName(a.app.objectId) : null)));
60
+ return text([
61
+ `Activity, newest first (page ${args.page || 1}${appId ? `, filtered from ${activities.length}` : ""}):`,
62
+ ...lines,
63
+ activities.length === 50 ? `\nMore: page ${(args.page || 1) + 1}.` : "",
64
+ ]
65
+ .filter(Boolean)
66
+ .join("\n"));
67
+ });
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/audit/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolContext, ToolServer } from "../../context.js";
2
+ export declare function registerBuildTools(server: ToolServer, ctx: ToolContext): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/builds/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA8G7E"}
@@ -0,0 +1,85 @@
1
+ import { z } from "zod";
2
+ import { SashidoClient } from "../../client/sashido.js";
3
+ export function registerBuildTools(server, ctx) {
4
+ const getAuthFromRequest = (_args, _extra) => ctx.token;
5
+ // List Builds
6
+ server.tool("list_builds", "List build history for an application", {
7
+ appObjectId: z.string().describe("The application object ID"),
8
+ limit: z
9
+ .number()
10
+ .optional()
11
+ .describe("Maximum number of builds to return (default: 30)"),
12
+ }, async (args, extra) => {
13
+ const auth = getAuthFromRequest(args, extra);
14
+ const client = new SashidoClient(auth);
15
+ const builds = await client.listBuilds(args.appObjectId, args.limit);
16
+ return {
17
+ content: [
18
+ {
19
+ type: "text",
20
+ text: JSON.stringify(builds, null, 2),
21
+ },
22
+ ],
23
+ };
24
+ });
25
+ // Build log
26
+ server.tool("get_build_log", "Get the log of a build, e.g. to find out why it failed. Returns the last lines, where errors show up, and whether the build is finished. Take buildId from list_builds.", {
27
+ appObjectId: z.string().describe("The application object ID"),
28
+ buildId: z.string().describe("The build's objectId, from list_builds"),
29
+ lines: z
30
+ .number()
31
+ .int()
32
+ .min(1)
33
+ .max(1000)
34
+ .optional()
35
+ .describe("How many of the last lines to return (default 300)"),
36
+ }, async (args) => {
37
+ const log = await ctx.sashido().getBuildLog(args.appObjectId, args.buildId, args.lines);
38
+ const header = [
39
+ `Build #${log.number ?? "?"} (${log.buildId}): ${log.phase ?? "unknown phase"}`,
40
+ log.finished ? "finished" : "still running",
41
+ log.truncated ? "showing the last lines only" : "",
42
+ ]
43
+ .filter(Boolean)
44
+ .join(" · ");
45
+ return {
46
+ content: [{ type: "text", text: `${header}\n\n${log.text || "(empty log)"}` }],
47
+ };
48
+ });
49
+ // Trigger Build
50
+ server.tool("trigger_build", "Trigger a new build for an application", {
51
+ appObjectId: z.string().describe("The application object ID"),
52
+ region: z.string().optional().describe("Target region (optional)"),
53
+ }, async (args, extra) => {
54
+ const auth = getAuthFromRequest(args, extra);
55
+ const client = new SashidoClient(auth);
56
+ await client.triggerBuild(args.appObjectId, args.region);
57
+ return {
58
+ content: [
59
+ {
60
+ type: "text",
61
+ text: `Build triggered successfully for app ${args.appObjectId}`,
62
+ },
63
+ ],
64
+ };
65
+ });
66
+ // Cancel Build
67
+ server.tool("cancel_build", "Cancel a running build", {
68
+ appObjectId: z.string().describe("The application object ID"),
69
+ buildName: z.string().describe("The name of the build to cancel"),
70
+ region: z.string().optional().describe("Target region (optional)"),
71
+ }, async (args, extra) => {
72
+ const auth = getAuthFromRequest(args, extra);
73
+ const client = new SashidoClient(auth);
74
+ await client.cancelBuild(args.appObjectId, args.buildName, args.region);
75
+ return {
76
+ content: [
77
+ {
78
+ type: "text",
79
+ text: `Build ${args.buildName} cancelled successfully`,
80
+ },
81
+ ],
82
+ };
83
+ });
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/builds/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolContext, ToolServer } from '../../context.js';
2
+ export declare function registerClassTools(server: ToolServer, ctx: ToolContext): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/classes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAoS7E"}