UNPKG

@nvhien20vn/git-mcp-server

Version:
48 lines (47 loc) 2.74 kB
// Import utils from barrel (ErrorHandler from ../utils/internal/errorHandler.js) import { ErrorHandler } from '../../../utils/index.js'; // Import utils from barrel (logger from ../utils/internal/logger.js) import { logger } from '../../../utils/index.js'; // Import utils from barrel (requestContextService from ../utils/internal/requestContext.js) import { requestContextService } from '../../../utils/index.js'; import { GitCloneInputSchema, gitCloneLogic } from './logic.js'; import { BaseErrorCode } from '../../../types-global/errors.js'; // Keep direct import for types-global const TOOL_NAME = 'git_clone'; const TOOL_DESCRIPTION = 'Clones a Git repository from a given URL into a specified absolute directory path. Supports cloning specific branches and setting clone depth.'; /** * Registers the git_clone tool with the MCP server. * * @param {McpServer} server - The McpServer instance to register the tool with. * @returns {Promise<void>} * @throws {Error} If registration fails. */ export const registerGitCloneTool = async (server) => { const operation = 'registerGitCloneTool'; const context = requestContextService.createRequestContext({ operation }); await ErrorHandler.tryCatch(async () => { server.tool(TOOL_NAME, TOOL_DESCRIPTION, GitCloneInputSchema.shape, // Provide the Zod schema shape async (validatedArgs, callContext) => { const toolOperation = 'tool:git_clone'; const requestContext = requestContextService.createRequestContext({ operation: toolOperation, parentContext: callContext }); logger.info(`Executing tool: ${TOOL_NAME}`, requestContext); return await ErrorHandler.tryCatch(async () => { // Call the core logic function const cloneResult = await gitCloneLogic(validatedArgs, requestContext); // Format the result as a JSON string within TextContent const resultContent = { type: 'text', text: JSON.stringify(cloneResult, null, 2), // Pretty-print JSON contentType: 'application/json', }; logger.info(`Tool ${TOOL_NAME} executed successfully, returning JSON`, requestContext); return { content: [resultContent] }; }, { operation: toolOperation, context: requestContext, input: validatedArgs, // Log sanitized input errorCode: BaseErrorCode.INTERNAL_ERROR, // Default if unexpected error occurs }); }); logger.info(`Tool registered: ${TOOL_NAME}`, context); }, { operation, context, critical: true }); // Mark registration as critical };