@mgsoftwarebv/mg-dashboard-mcp 7.4.15 → 7.4.16

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 (2) hide show
  1. package/dist/index.js +153 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5785,8 +5785,7 @@ pgTable(
5785
5785
  ),
5786
5786
  index("idx_agent_memory_repo").on(table.gitRepository),
5787
5787
  index("idx_agent_memory_user").on(table.userId),
5788
- index("idx_agent_memory_kind").on(table.kind),
5789
- index("idx_agent_memory_category").on(table.category)
5788
+ index("idx_agent_memory_kind").on(table.kind)
5790
5789
  ]
5791
5790
  );
5792
5791
  var agentWorldAgent = pgTable(
@@ -13458,6 +13457,42 @@ var TOOLS = [
13458
13457
  required: ["slug", "detail"]
13459
13458
  }
13460
13459
  },
13460
+ {
13461
+ name: "wiki-review-queue",
13462
+ description: "List the knowledge-wiki review queue without the Dashboard UI: open flags first (they jump the queue), then needs-work pages, oldest drafts, and proposed insights. Each item includes slug, status, folder, and updated date. Read a candidate with get-wiki-page, then finish it with wiki-review (action=review for durable pages, action=accept for wiki/insights/*). Folder-filtered to the API key owner's wiki areas.",
13463
+ inputSchema: {
13464
+ type: "object",
13465
+ properties: {
13466
+ limit: {
13467
+ type: "number",
13468
+ description: "Max items per bucket (flags, needs-work, drafts, proposed insights). 1-100, default 50."
13469
+ }
13470
+ }
13471
+ }
13472
+ },
13473
+ {
13474
+ name: "wiki-review",
13475
+ description: "Finish a knowledge-wiki queue item without the Dashboard UI. Same write as wiki-graph: updates page status, resolves open flags on that slug, and closes a linked review-ticket when promoting. action=review \u2192 status reviewed on a durable page (not wiki/insights/*). action=accept \u2192 status accepted on a wiki/insights/* proposal. Read the page with get-wiki-page first. Does not edit page body \u2014 only status/frontmatter. Does not resolve Refront pipeline tickets on behalf of operators.",
13476
+ inputSchema: {
13477
+ type: "object",
13478
+ properties: {
13479
+ slug: {
13480
+ type: "string",
13481
+ description: "Page slug from wiki-review-queue or get-wiki-page, e.g. 'wiki/engineering/team-memory' or 'wiki/insights/2026-08-14-example'."
13482
+ },
13483
+ action: {
13484
+ type: "string",
13485
+ enum: ["accept", "review"],
13486
+ description: "review = mark a durable page reviewed; accept = accept an insight proposal."
13487
+ },
13488
+ note: {
13489
+ type: "string",
13490
+ description: "Optional note appended under ## Review notes (max 2000 chars)."
13491
+ }
13492
+ },
13493
+ required: ["slug", "action"]
13494
+ }
13495
+ },
13461
13496
  // ----- Cursor Remote (Agent Control) -----
13462
13497
  {
13463
13498
  name: "cursor-remote-list",
@@ -14311,6 +14346,122 @@ Archived sources (${archiveOnly.length}):
14311
14346
  ]
14312
14347
  };
14313
14348
  }
14349
+ case "wiki-review-queue": {
14350
+ let formatItems2 = function(items) {
14351
+ if (items.length === 0) return "(none)";
14352
+ return items.map(
14353
+ (item, index19) => `${index19 + 1}. [${item.status} \xB7 ${item.folder} \xB7 updated ${item.updated ?? "unknown"}] ${item.title}
14354
+ slug: ${item.slug}`
14355
+ ).join("\n");
14356
+ };
14357
+ var formatItems = formatItems2;
14358
+ const limit = typeof a.limit === "number" ? a.limit : void 0;
14359
+ const res = await fetch(`${dashboardBaseUrl}/api/wiki/review-queue`, {
14360
+ method: "POST",
14361
+ headers: {
14362
+ "content-type": "application/json",
14363
+ authorization: `Bearer ${apiKey}`
14364
+ },
14365
+ body: JSON.stringify({ limit })
14366
+ });
14367
+ if (!res.ok) {
14368
+ const detail = await res.text().catch(() => "");
14369
+ return {
14370
+ content: [
14371
+ {
14372
+ type: "text",
14373
+ text: `Error: wiki review queue failed (${res.status}). ${detail.slice(0, 300)}`
14374
+ }
14375
+ ]
14376
+ };
14377
+ }
14378
+ const data = await res.json();
14379
+ const countLine = Object.entries(data.counts).sort(([left], [right]) => left.localeCompare(right)).map(([status, count]) => `${status} ${count}`).join(" \xB7 ");
14380
+ const flagLines = data.flags.length === 0 ? "(none)" : data.flags.map((flag, index19) => {
14381
+ const detail = flag.detail.replace(/\s+/g, " ").slice(0, 240);
14382
+ return `${index19 + 1}. [${flag.kind} \xB7 ${flag.folder}${flag.status ? ` \xB7 page ${flag.status}` : ""}] ${flag.title}
14383
+ slug: ${flag.slug}
14384
+ ${detail}`;
14385
+ }).join("\n");
14386
+ return {
14387
+ content: [
14388
+ {
14389
+ type: "text",
14390
+ text: `Wiki review queue${countLine ? ` (${countLine})` : ""}.
14391
+ Open flags jump the queue. Read a slug with get-wiki-page, then wiki-review action=review (durable page) or action=accept (insight).
14392
+
14393
+ Flags (${data.flags.length})
14394
+ ${flagLines}
14395
+
14396
+ Needs-work (${data.needsWork.length})
14397
+ ${formatItems2(data.needsWork)}
14398
+
14399
+ Drafts (${data.drafts.length})
14400
+ ${formatItems2(data.drafts)}
14401
+
14402
+ Proposed insights (${data.proposedInsights.length})
14403
+ ${formatItems2(data.proposedInsights)}`
14404
+ }
14405
+ ]
14406
+ };
14407
+ }
14408
+ case "wiki-review": {
14409
+ const slug = typeof a.slug === "string" ? a.slug.trim() : "";
14410
+ const action = typeof a.action === "string" ? a.action.trim() : "";
14411
+ if (!slug || action !== "accept" && action !== "review") {
14412
+ return {
14413
+ content: [
14414
+ {
14415
+ type: "text",
14416
+ text: 'Error: slug and action ("accept" or "review") are required'
14417
+ }
14418
+ ]
14419
+ };
14420
+ }
14421
+ const note = typeof a.note === "string" ? a.note.trim() : "";
14422
+ const res = await fetch(`${dashboardBaseUrl}/api/wiki/review`, {
14423
+ method: "POST",
14424
+ headers: {
14425
+ "content-type": "application/json",
14426
+ authorization: `Bearer ${apiKey}`
14427
+ },
14428
+ body: JSON.stringify({
14429
+ slug,
14430
+ action,
14431
+ ...note ? { note } : {}
14432
+ })
14433
+ });
14434
+ if (!res.ok) {
14435
+ const errDetail = await res.text().catch(() => "");
14436
+ return {
14437
+ content: [
14438
+ {
14439
+ type: "text",
14440
+ text: `Error: wiki review failed (${res.status}). ${errDetail.slice(0, 300)}`
14441
+ }
14442
+ ]
14443
+ };
14444
+ }
14445
+ const data = await res.json();
14446
+ if (!data.found || !data.result) {
14447
+ return {
14448
+ content: [
14449
+ {
14450
+ type: "text",
14451
+ text: `No wiki page found for slug "${slug}" (or it is outside this API key's wiki areas). Check the slug via wiki-review-queue or get-wiki-page.`
14452
+ }
14453
+ ]
14454
+ };
14455
+ }
14456
+ return {
14457
+ content: [
14458
+ {
14459
+ type: "text",
14460
+ text: `Set ${data.result.slug} to ${data.result.status}. Open flags on this slug are resolved.` + (action === "accept" ? " Insight is accepted \u2014 executor/distiller can act on it; do not resolve Refront pipeline tickets for Sidney/Jordan." : " Durable page is reviewed.")
14461
+ }
14462
+ ]
14463
+ };
14464
+ }
14314
14465
  // ----- Cursor Remote (Agent Control) -----
14315
14466
  case "cursor-remote-list": {
14316
14467
  const onlineOnly = a.onlineOnly === true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mgsoftwarebv/mg-dashboard-mcp",
3
- "version": "7.4.15",
3
+ "version": "7.4.16",
4
4
  "description": "MCP Server for MG Dashboard - SSH, SFTP, Docker, domains, DNS, and environment config tools for Cursor",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",