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,
};