GitLab MCP Server

import { z } from 'zod'; // Basic GitLab types export const GitLabRepositorySchema = z.object({ id: z.number().or(z.string()), name: z.string(), description: z.string().nullable(), default_branch: z.string(), visibility: z.string().optional(), // Other fields optional for flexibility }).passthrough(); export const GitLabForkSchema = GitLabRepositorySchema; export const GitLabReferenceSchema = z.object({ name: z.string(), commit: z.object({ id: z.string(), short_id: z.string(), title: z.string(), }).passthrough(), }).passthrough(); export const GitLabContentSchema = z.object({ file_name: z.string(), file_path: z.string(), size: z.number(), encoding: z.string(), content: z.string(), content_sha256: z.string().optional(), ref: z.string().optional(), blob_id: z.string().optional(), commit_id: z.string().optional(), last_commit_id: z.string().optional(), }).passthrough().or(z.array(z.any())); export const GitLabCreateUpdateFileResponseSchema = z.object({ file_path: z.string(), branch: z.string(), }).passthrough(); export const GitLabSearchResponseSchema = z.object({ count: z.number(), items: z.array(GitLabRepositorySchema), }); export const GitLabTreeSchema = z.any(); export const GitLabCommitSchema = z.object({ id: z.string(), short_id: z.string(), title: z.string(), message: z.string(), }).passthrough(); export const GitLabIssueSchema = z.object({ id: z.number(), iid: z.number(), title: z.string(), description: z.string().nullable(), }).passthrough(); export const GitLabMergeRequestSchema = z.object({ id: z.number(), iid: z.number(), title: z.string(), description: z.string().nullable(), source_branch: z.string(), target_branch: z.string(), }).passthrough(); // Tool input schemas export const CreateOrUpdateFileSchema = z.object({ project_id: z.string(), file_path: z.string(), content: z.string(), commit_message: z.string(), branch: z.string(), previous_path: z.string().optional(), }); // FIXED: Corrected SearchRepositoriesSchema to match what searchProjects expects export const SearchRepositoriesSchema = z.object({ search: z.string(), page: z.number().optional().default(1), per_page: z.number().optional().default(20), }); export const CreateRepositoryOptionsSchema = z.object({ name: z.string(), description: z.string().optional(), visibility: z.enum(['private', 'internal', 'public']).optional(), initialize_with_readme: z.boolean().optional(), }); export const CreateRepositorySchema = CreateRepositoryOptionsSchema; export const GetFileContentsSchema = z.object({ project_id: z.string(), file_path: z.string(), ref: z.string().optional(), }); export const FileOperationSchema = z.object({ file_path: z.string(), content: z.string(), }); export const PushFilesSchema = z.object({ project_id: z.string(), branch: z.string(), commit_message: z.string(), files: z.array(z.object({ file_path: z.string(), content: z.string(), })), }); export const CreateIssueOptionsSchema = z.object({ title: z.string(), description: z.string().optional(), assignee_ids: z.array(z.number()).optional(), milestone_id: z.number().optional(), labels: z.array(z.string()).optional(), }); export const CreateIssueSchema = z.object({ project_id: z.string(), }).and(CreateIssueOptionsSchema); export const CreateMergeRequestOptionsSchema = z.object({ title: z.string(), description: z.string().optional(), source_branch: z.string(), target_branch: z.string(), draft: z.boolean().optional(), allow_collaboration: z.boolean().optional(), }); export const CreateMergeRequestSchema = z.object({ project_id: z.string(), }).and(CreateMergeRequestOptionsSchema); export const ForkRepositorySchema = z.object({ project_id: z.string(), namespace: z.string().optional(), }); export const CreateBranchOptionsSchema = z.object({ name: z.string(), ref: z.string().optional(), }); export const CreateBranchSchema = z.object({ project_id: z.string(), branch: z.string(), ref: z.string().optional(), }); // Utility types export const FileOperation = { path: z.string(), content: z.string(), }; export default { GitLabRepositorySchema, GitLabForkSchema, GitLabReferenceSchema, GitLabContentSchema, GitLabCreateUpdateFileResponseSchema, GitLabSearchResponseSchema, GitLabTreeSchema, GitLabCommitSchema, GitLabIssueSchema, GitLabMergeRequestSchema, CreateOrUpdateFileSchema, SearchRepositoriesSchema, CreateRepositorySchema, GetFileContentsSchema, FileOperationSchema, PushFilesSchema, CreateIssueSchema, CreateMergeRequestSchema, ForkRepositorySchema, CreateBranchSchema, };