UNPKG

@therealchristhomas/gitlab-mcp-server

Version:
56 lines (55 loc) 2.29 kB
import { z } from "zod"; import { gitlabGet, gitlabPost, gitlabPut, gitlabDelete, buildSearchParams } from "../utils/gitlab-client.js"; import { GitLabGroupMilestoneSchema } from "../types/index.js"; export async function listGroupMilestones(groupId, options = {}) { if (!groupId?.trim()) { throw new Error("Group ID is required"); } if (options.page !== undefined && options.page < 1) { throw new Error("Page number must be 1 or greater"); } if (options.per_page !== undefined && (options.per_page < 1 || options.per_page > 100)) { throw new Error("Per page must be between 1 and 100"); } const endpoint = `/groups/${encodeURIComponent(groupId)}/milestones`; const params = buildSearchParams(options); const milestones = await gitlabGet(endpoint, params); return z.array(GitLabGroupMilestoneSchema).parse(milestones); } export async function createGroupMilestone(groupId, title, description, dueDate, startDate) { if (!groupId?.trim()) { throw new Error("Group ID is required"); } if (!title?.trim()) { throw new Error("Milestone title is required"); } const endpoint = `/groups/${encodeURIComponent(groupId)}/milestones`; const milestone = await gitlabPost(endpoint, { title, description, due_date: dueDate, start_date: startDate }); return GitLabGroupMilestoneSchema.parse(milestone); } export async function updateGroupMilestone(groupId, milestoneId, options) { if (!groupId?.trim()) { throw new Error("Group ID is required"); } if (!milestoneId || milestoneId < 1) { throw new Error("Valid milestone ID is required"); } const endpoint = `/groups/${encodeURIComponent(groupId)}/milestones/${milestoneId}`; const milestone = await gitlabPut(endpoint, options); return GitLabGroupMilestoneSchema.parse(milestone); } export async function deleteGroupMilestone(groupId, milestoneId) { if (!groupId?.trim()) { throw new Error("Group ID is required"); } if (!milestoneId || milestoneId < 1) { throw new Error("Valid milestone ID is required"); } const endpoint = `/groups/${encodeURIComponent(groupId)}/milestones/${milestoneId}`; await gitlabDelete(endpoint); }