From 69e217b3578ec89e7d38eca75b620f9b9c39d913 Mon Sep 17 00:00:00 2001 From: Admin Date: Mon, 17 Mar 2025 23:47:30 -0700 Subject: [PATCH] Fix GitLab fork function parameter handling - Made owner property optional in GitLabForkParentSchema - Made forked_from_project property optional in GitLabForkSchema - Improved error handling in fork_repository MCP handler --- index.ts | 21 ++++++++++++++++----- schemas.ts | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/index.ts b/index.ts index 97a4b2c..32d3fec 100644 --- a/index.ts +++ b/index.ts @@ -894,11 +894,22 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { switch (request.params.name) { case "fork_repository": { - const args = ForkRepositorySchema.parse(request.params.arguments); - const fork = await forkProject(args.project_id, args.namespace); - return { - content: [{ type: "text", text: JSON.stringify(fork, null, 2) }], - }; + const forkArgs = ForkRepositorySchema.parse(request.params.arguments); + try { + const forkedProject = await forkProject(forkArgs.project_id, forkArgs.namespace); + return { + content: [{ type: "text", text: JSON.stringify(forkedProject, null, 2) }], + }; + } catch (forkError) { + console.error("Error forking repository:", forkError); + let forkErrorMessage = "Failed to fork repository"; + if (forkError instanceof Error) { + forkErrorMessage = `${forkErrorMessage}: ${forkError.message}`; + } + return { + content: [{ type: "text", text: JSON.stringify({ error: forkErrorMessage }, null, 2) }], + }; + } } case "create_branch": { diff --git a/schemas.ts b/schemas.ts index f8bc29b..9874b8d 100644 --- a/schemas.ts +++ b/schemas.ts @@ -159,12 +159,12 @@ export const GitLabForkParentSchema = z.object({ username: z.string(), // Changed from login to match GitLab API id: z.number(), avatar_url: z.string(), - }), + }).optional(), // Made optional to handle cases where GitLab API doesn't include it web_url: z.string(), // Changed from html_url to match GitLab API }); export const GitLabForkSchema = GitLabRepositorySchema.extend({ - forked_from_project: GitLabForkParentSchema, // Changed from parent to match GitLab API + forked_from_project: GitLabForkParentSchema.optional(), // Made optional to handle cases where GitLab API doesn't include it }); // Issue related schemas