@mgsoftwarebv/mg-dashboard-mcp 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -72,18 +72,6 @@ var TRIGGER_TOOLS = [
72
72
  required: ["project", "taskId"]
73
73
  }
74
74
  },
75
- {
76
- name: "trigger-cancel-run",
77
- description: "Cancel a running or queued Trigger.dev task run.",
78
- inputSchema: {
79
- type: "object",
80
- properties: {
81
- project: { type: "string", description: "Project slug from trigger-list" },
82
- runId: { type: "string", description: "Run ID to cancel (e.g. run_xxxxx)" }
83
- },
84
- required: ["project", "runId"]
85
- }
86
- },
87
75
  {
88
76
  name: "trigger-replay-run",
89
77
  description: "Replay a previously failed or completed run with the same payload. Returns the new run ID.",
@@ -103,7 +91,6 @@ var TRIGGER_TOOL_MODULE_MAP = {
103
91
  "trigger-runs": "ci_cd",
104
92
  "trigger-run-detail": "ci_cd",
105
93
  "trigger-test-task": "ci_cd",
106
- "trigger-cancel-run": "ci_cd",
107
94
  "trigger-replay-run": "ci_cd"
108
95
  };
109
96
  async function discoverInstance(projectSlug, conn, proxy, sshExec2) {
@@ -130,6 +117,23 @@ async function discoverInstance(projectSlug, conn, proxy, sshExec2) {
130
117
  }
131
118
  return { port, apiKey: apiKey2 };
132
119
  }
120
+ async function fetchRunLogs(runId, conn, proxy, sshExec2) {
121
+ const sql = `SELECT level, message, \\"isError\\", \\"createdAt\\" FROM \\"TaskEvent\\" WHERE \\"runId\\" = '${runId}' AND level IN ('INFO','WARN','ERROR','DEBUG','LOG','TRACE') ORDER BY \\"startTime\\" ASC LIMIT 200`;
122
+ const cmd = `docker exec "${PG_CONTAINER}" psql -U postgres -d main -t -A -c "${sql}" 2>/dev/null`;
123
+ const result = await sshExec2(conn, cmd, proxy);
124
+ const output = result.stdout.trim();
125
+ if (!output) return "";
126
+ return output.split("\n").map((line) => {
127
+ const parts = line.split("|");
128
+ const level = (parts[0] || "").padEnd(5);
129
+ const message = parts[1] || "";
130
+ const isError = parts[2] === "t";
131
+ const ts = parts[3] || "";
132
+ const time = ts ? ts.split(" ")[1]?.substring(0, 8) || "" : "";
133
+ const prefix = isError ? "!" : " ";
134
+ return `${prefix}${time} [${level}] ${message}`;
135
+ }).join("\n");
136
+ }
133
137
  async function triggerApi(conn, proxy, sshExec2, instance, method, path, body) {
134
138
  const parts = ["curl", "-s", "-g", "--max-time", "30"];
135
139
  if (method !== "GET") parts.push("-X", method);
@@ -245,14 +249,10 @@ ${rawJson.substring(0, 500)}` }] };
245
249
  const project = String(args2.project);
246
250
  const runId = String(args2.runId);
247
251
  const instance = await discoverInstance(project, conn, proxy, sshExec2);
248
- const rawJson = await triggerApi(
249
- conn,
250
- proxy,
251
- sshExec2,
252
- instance,
253
- "GET",
254
- `/api/v3/runs/${encodeURIComponent(runId)}`
255
- );
252
+ const [rawJson, logs] = await Promise.all([
253
+ triggerApi(conn, proxy, sshExec2, instance, "GET", `/api/v3/runs/${encodeURIComponent(runId)}`),
254
+ fetchRunLogs(runId, conn, proxy, sshExec2)
255
+ ]);
256
256
  let run;
257
257
  try {
258
258
  run = JSON.parse(rawJson);
@@ -260,7 +260,11 @@ ${rawJson.substring(0, 500)}` }] };
260
260
  return { content: [{ type: "text", text: `Invalid API response:
261
261
  ${rawJson.substring(0, 500)}` }] };
262
262
  }
263
- return { content: [{ type: "text", text: formatRunDetail(run) }] };
263
+ let text = formatRunDetail(run);
264
+ if (logs) {
265
+ text += "\n\n--- Logs ---\n" + logs;
266
+ }
267
+ return { content: [{ type: "text", text }] };
264
268
  }
265
269
  // -----------------------------------------------------------------
266
270
  case "trigger-test-task": {
@@ -322,7 +326,10 @@ ${triggerJson.substring(0, 500)}` }] };
322
326
  continue;
323
327
  }
324
328
  if (TERMINAL_STATUSES.has(run.status)) {
325
- return { content: [{ type: "text", text: formatRunDetail(run) }] };
329
+ let text = formatRunDetail(run);
330
+ const logs = await fetchRunLogs(runId, conn, proxy, sshExec2);
331
+ if (logs) text += "\n\n--- Logs ---\n" + logs;
332
+ return { content: [{ type: "text", text }] };
326
333
  }
327
334
  }
328
335
  return {
@@ -333,33 +340,6 @@ ${triggerJson.substring(0, 500)}` }] };
333
340
  };
334
341
  }
335
342
  // -----------------------------------------------------------------
336
- case "trigger-cancel-run": {
337
- const project = String(args2.project);
338
- const runId = String(args2.runId);
339
- const instance = await discoverInstance(project, conn, proxy, sshExec2);
340
- const rawJson = await triggerApi(
341
- conn,
342
- proxy,
343
- sshExec2,
344
- instance,
345
- "POST",
346
- `/api/v3/runs/${encodeURIComponent(runId)}/cancel`
347
- );
348
- let result;
349
- try {
350
- result = JSON.parse(rawJson);
351
- } catch {
352
- return { content: [{ type: "text", text: `Cancel response:
353
- ${rawJson.substring(0, 500)}` }] };
354
- }
355
- return {
356
- content: [{
357
- type: "text",
358
- text: `Run ${result.id || runId} canceled (status: ${result.status || "unknown"})`
359
- }]
360
- };
361
- }
362
- // -----------------------------------------------------------------
363
343
  case "trigger-replay-run": {
364
344
  const project = String(args2.project);
365
345
  const runId = String(args2.runId);
@@ -370,7 +350,7 @@ ${rawJson.substring(0, 500)}` }] };
370
350
  sshExec2,
371
351
  instance,
372
352
  "POST",
373
- `/api/v3/runs/${encodeURIComponent(runId)}/replay`
353
+ `/api/v1/runs/${encodeURIComponent(runId)}/replay`
374
354
  );
375
355
  let result;
376
356
  try {