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.
- package/index.js +35 -1
- 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
|
|