UNPKG

@therealchristhomas/gitlab-mcp-server

Version:
45 lines (44 loc) 1.72 kB
import { gitlabGet, gitlabPost, encodeProjectId, buildSearchParams } from "../utils/gitlab-client.js"; import { GitLabRepositorySchema, GitLabSearchResponseSchema, GitLabForkSchema } from "../types/index.js"; export async function searchProjects(query, page = 1, perPage = 20) { if (!query?.trim()) { throw new Error("Search query 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 params = buildSearchParams({ search: query, page: page.toString(), per_page: perPage.toString() }); const projects = await gitlabGet("/projects", params); return GitLabSearchResponseSchema.parse({ count: projects.length, // GitLab doesn't always provide total in headers items: projects }); } export async function createRepository(options) { if (!options?.name?.trim()) { throw new Error("Repository name is required"); } const repository = await gitlabPost("/projects", { name: options.name, description: options.description, visibility: options.visibility, initialize_with_readme: options.initialize_with_readme }); return GitLabRepositorySchema.parse(repository); } export async function forkProject(projectId, namespace) { if (!projectId?.trim()) { throw new Error("Project ID is required"); } const endpoint = `/projects/${encodeProjectId(projectId)}/fork`; const body = namespace ? { namespace } : undefined; const fork = await gitlabPost(endpoint, body); return GitLabForkSchema.parse(fork); }