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.07 kB
/** * @fileoverview Handles registration and error handling for the git_pull tool. * @module src/mcp-server/tools/gitPull/registration */ import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js"; import { pullGitChanges, GitPullInputSchema, GitPullOutputSchema, } from "./logic.js"; const TOOL_NAME = "git_pull"; const TOOL_DESCRIPTION = "Fetches from and integrates with another repository or a local branch (e.g., 'git pull origin main'). Supports rebase and fast-forward only options. Returns the pull result as a JSON object."; /** * Registers the git_pull 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 registerGitPullTool = async (server, getWorkingDirectory, getSessionId) => { const operation = "registerGitPullTool"; const context = requestContextService.createRequestContext({ operation }); server.registerTool(TOOL_NAME, { title: "Git Pull", description: TOOL_DESCRIPTION, inputSchema: GitPullInputSchema.shape, outputSchema: GitPullOutputSchema.shape, annotations: { readOnlyHint: false, destructiveHint: true, // Can change local files and history idempotentHint: false, openWorldHint: true, // Interacts with remote repositories }, }, async (params, callContext) => { const handlerContext = requestContextService.createRequestContext({ toolName: TOOL_NAME, parentContext: callContext, }); try { const sessionId = getSessionId(handlerContext); const result = await pullGitChanges(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