UNPKG

@therealchristhomas/gitlab-mcp-server

Version:
60 lines (59 loc) 2.32 kB
import { z } from "zod"; import { gitlabGet, gitlabPost, gitlabPut, gitlabDelete, encodeProjectId, buildSearchParams } from "../utils/gitlab-client.js"; import { GitLabMilestoneSchema } from "../types/index.js"; export async function listMilestones(projectId, state, page = 1, perPage = 20) { if (!projectId?.trim()) { throw new Error("Project ID is required"); } if (page < 1) { throw new Error("Page number must be 1 or greater"); } if (perPage < 1 || perPage > 100) { throw new Error("Per page must be between 1 and 100"); } const endpoint = `/projects/${encodeProjectId(projectId)}/milestones`; const params = buildSearchParams({ ...(state && { state }), page: page.toString(), per_page: perPage.toString() }); const milestones = await gitlabGet(endpoint, params); return z.array(GitLabMilestoneSchema).parse(milestones); } export async function createMilestone(projectId, title, description, dueDate, startDate) { if (!projectId?.trim()) { throw new Error("Project ID is required"); } if (!title?.trim()) { throw new Error("Milestone title is required"); } const endpoint = `/projects/${encodeProjectId(projectId)}/milestones`; const milestone = await gitlabPost(endpoint, { title, description, due_date: dueDate, start_date: startDate }); return GitLabMilestoneSchema.parse(milestone); } export async function updateMilestone(projectId, milestoneId, options) { if (!projectId?.trim()) { throw new Error("Project ID is required"); } if (!milestoneId || milestoneId < 1) { throw new Error("Valid milestone ID is required"); } const endpoint = `/projects/${encodeProjectId(projectId)}/milestones/${milestoneId}`; const milestone = await gitlabPut(endpoint, options); return GitLabMilestoneSchema.parse(milestone); } export async function deleteMilestone(projectId, milestoneId) { if (!projectId?.trim()) { throw new Error("Project ID is required"); } if (!milestoneId || milestoneId < 1) { throw new Error("Valid milestone ID is required"); } const endpoint = `/projects/${encodeProjectId(projectId)}/milestones/${milestoneId}`; await gitlabDelete(endpoint); }