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.05 kB
/** * @fileoverview Handles registration and error handling for the git_checkout tool. * @module src/mcp-server/tools/gitCheckout/registration */ import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js"; import { checkoutGit, GitCheckoutInputSchema, GitCheckoutOutputSchema, } from "./logic.js"; const TOOL_NAME = "git_checkout"; const TOOL_DESCRIPTION = "Switches branches or restores working tree files. Can checkout branches, commits, tags, or specific file paths. Supports creating new branches and forcing checkout."; /** * Registers the git_checkout 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 registerGitCheckoutTool = async (server, getWorkingDirectory, getSessionId) => { const operation = "registerGitCheckoutTool"; const context = requestContextService.createRequestContext({ operation }); server.registerTool(TOOL_NAME, { title: "Git Checkout", description: TOOL_DESCRIPTION, inputSchema: GitCheckoutInputSchema.shape, outputSchema: GitCheckoutOutputSchema.shape, annotations: { readOnlyHint: false, destructiveHint: true, // Can discard local changes with --force idempotentHint: false, openWorldHint: false, }, }, async (params, callContext) => { const handlerContext = requestContextService.createRequestContext({ toolName: TOOL_NAME, parentContext: callContext, }); try { const sessionId = getSessionId(handlerContext); const result = await checkoutGit(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