UNPKG

@cyanheads/git-mcp-server

Version:

An MCP (Model Context Protocol) server enabling LLMs and AI agents to interact with Git repositories. Provides tools for comprehensive Git operations including clone, commit, branch, diff, log, status, push, pull, merge, rebase, worktree, tag management,

73 lines 3.12 kB
/** * @fileoverview Handles registration and error handling for the git_clean tool. * @module src/mcp-server/tools/gitClean/registration */ import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js"; import { gitCleanLogic, GitCleanInputSchema, GitCleanOutputSchema, } from "./logic.js"; const TOOL_NAME = "git_clean"; const TOOL_DESCRIPTION = "Removes untracked files from the working directory. Supports dry runs, removing directories, and removing ignored files. CRITICAL: Requires explicit `force: true` parameter for safety as this is a destructive operation. Returns results as a JSON object."; /** * Registers the git_clean tool with the MCP server instance. * @param server The MCP server instance. * @param getWorkingDirectory Function to get the session's working directory. * @param getSessionId Function to get the session ID from context. */ export const registerGitCleanTool = async (server, getWorkingDirectory, getSessionId) => { const operation = "registerGitCleanTool"; const context = requestContextService.createRequestContext({ operation }); server.registerTool(TOOL_NAME, { title: "Git Clean", description: TOOL_DESCRIPTION, inputSchema: GitCleanInputSchema.shape, outputSchema: GitCleanOutputSchema.shape, annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, // Running clean again does nothing if already clean openWorldHint: false, }, }, async (params, callContext) => { const handlerContext = requestContextService.createRequestContext({ toolName: TOOL_NAME, parentContext: callContext, }); try { const sessionId = getSessionId(handlerContext); const result = await gitCleanLogic(params, { ...handlerContext, getWorkingDirectory: () => getWorkingDirectory(sessionId), }); return { structuredContent: result, content: [ { type: "text", text: `Success: ${JSON.stringify(result, null, 2)}`, }, ], }; } catch (error) { logger.error(`Error in ${TOOL_NAME} handler`, { error, ...handlerContext, }); const mcpError = ErrorHandler.handleError(error, { operation: `tool:${TOOL_NAME}`, context: handlerContext, input: params, }); return { isError: true, content: [{ type: "text", text: `Error: ${mcpError.message}` }], structuredContent: { code: mcpError.code, message: mcpError.message, details: mcpError.details, }, }; } }); logger.info(`Tool '${TOOL_NAME}' registered successfully.`, context); }; //# sourceMappingURL=registration.js.map