loopctl-mcp-server 1.5.0 → 1.6.1

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 +35 -1
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -159,15 +159,26 @@ async function listProjects() {
159
159
  return toContent(result);
160
160
  }
161
161
 
162
- async function createProject({ name, slug, repo_url, description, tech_stack }) {
162
+ async function createProject({ name, slug, repo_url, description, tech_stack, mission }) {
163
163
  const body = { name, slug };
164
164
  if (repo_url) body.repo_url = repo_url;
165
165
  if (description) body.description = description;
166
166
  if (tech_stack) body.tech_stack = tech_stack;
167
+ if (mission) body.mission = mission;
167
168
  const result = await apiCall("POST", "/api/v1/projects", body, process.env.LOOPCTL_ORCH_KEY);
168
169
  return toContent(result);
169
170
  }
170
171
 
172
+ async function deleteProject({ project_id }) {
173
+ const result = await apiCall(
174
+ "DELETE",
175
+ `/api/v1/projects/${project_id}`,
176
+ null,
177
+ process.env.LOOPCTL_USER_KEY
178
+ );
179
+ return toContent(result);
180
+ }
181
+
171
182
  async function getProgress({ project_id, include_cost }) {
172
183
  const params = new URLSearchParams();
173
184
  if (include_cost) params.set("include_cost", "true");
@@ -637,10 +648,30 @@ const TOOLS = [
637
648
  repo_url: { type: "string", description: "GitHub repo URL." },
638
649
  description: { type: "string", description: "Project description." },
639
650
  tech_stack: { type: "string", description: "Tech stack summary." },
651
+ mission: {
652
+ type: "string",
653
+ description:
654
+ "Optional project mission/goal statement that cascades into story context. Surfaces in get_story responses as project_mission so agents see the why without a second fetch. Max 2000 chars.",
655
+ },
640
656
  },
641
657
  required: ["name", "slug"],
642
658
  },
643
659
  },
660
+ {
661
+ name: "delete_project",
662
+ description:
663
+ "Delete a project and all of its dependent resources (epics, stories, audit entries scoped to it). REQUIRES LOOPCTL_USER_KEY to be set in the MCP server env (user role — orchestrator role is NOT sufficient for this destructive operation). The deletion is irreversible.",
664
+ inputSchema: {
665
+ type: "object",
666
+ properties: {
667
+ project_id: {
668
+ type: "string",
669
+ description: "The UUID of the project to delete.",
670
+ },
671
+ },
672
+ required: ["project_id"],
673
+ },
674
+ },
644
675
  {
645
676
  name: "get_progress",
646
677
  description: "Get progress summary for a project, including story counts by status. Pass include_cost=true to include cost data when available.",
@@ -1630,6 +1661,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1630
1661
  case "create_project":
1631
1662
  return await createProject(args);
1632
1663
 
1664
+ case "delete_project":
1665
+ return await deleteProject(args);
1666
+
1633
1667
  case "get_progress":
1634
1668
  return await getProgress(args);
1635
1669
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "loopctl-mcp-server",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "MCP server for loopctl — structural trust for AI development loops",
5
5
  "type": "module",
6
6
  "main": "index.js",