loopctl-mcp-server 2.47.0 → 2.48.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 (2) hide show
  1. package/index.js +33 -0
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -477,6 +477,21 @@ async function channelRecent({ project_id, since, limit }) {
477
477
  return toContent(result);
478
478
  }
479
479
 
480
+ async function channelDelete({ post_id }) {
481
+ // Repo Coordination Bus (Epic 39, US-39.7): HARD-delete a coordination post in
482
+ // the caller's tenant — the redact path for a leaked/regretted post, before its
483
+ // 30-day TTL. Agent-role, tenant-scoped: any agent in the tenant may delete any
484
+ // post in that tenant; a foreign or nonexistent id returns a 404 (no cross-tenant
485
+ // existence oracle).
486
+ const result = await apiCall(
487
+ "DELETE",
488
+ `/api/v1/channel/posts/${post_id}`,
489
+ null,
490
+ process.env.LOOPCTL_AGENT_KEY,
491
+ );
492
+ return toContent(result);
493
+ }
494
+
480
495
  async function deleteProject({ project_id }) {
481
496
  const result = await apiCall(
482
497
  "DELETE",
@@ -2303,6 +2318,21 @@ const TOOLS = [
2303
2318
  required: ["project_id"],
2304
2319
  },
2305
2320
  },
2321
+ {
2322
+ name: "channel_delete",
2323
+ description:
2324
+ "Delete a post from a repo coordination channel (Epic 39 Repo Coordination Bus) on the agent key — the redact path (US-39.7). Use this to immediately remove a leaked or regretted post (e.g. one that slipped a secret past the denylist) before its 30-day TTL. Agent-role, tenant-scoped: any agent in your tenant may delete any post in that tenant, enabling cleanup by whoever notices the leak. A post that does not exist in your tenant (including one in another tenant) returns a 404 — no cross-tenant existence oracle. The deletion is hard (the row is gone) but audited.",
2325
+ inputSchema: {
2326
+ type: "object",
2327
+ properties: {
2328
+ post_id: {
2329
+ type: "string",
2330
+ description: "UUID of the channel post to delete (must be in your tenant).",
2331
+ },
2332
+ },
2333
+ required: ["post_id"],
2334
+ },
2335
+ },
2306
2336
  {
2307
2337
  name: "delete_project",
2308
2338
  description:
@@ -5119,6 +5149,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
5119
5149
  case "channel_recent":
5120
5150
  return await channelRecent(args);
5121
5151
 
5152
+ case "channel_delete":
5153
+ return await channelDelete(args);
5154
+
5122
5155
  case "delete_project":
5123
5156
  return await deleteProject(args);
5124
5157
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopctl-mcp-server",
3
- "version": "2.47.0",
3
+ "version": "2.48.0",
4
4
  "description": "MCP server for loopctl — structural trust for AI development loops",
5
5
  "type": "module",
6
6
  "main": "index.js",