@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.1 kB
JavaScript
/**
* @fileoverview Handles registration and error handling for the git_push tool.
* @module src/mcp-server/tools/gitPush/registration
*/
import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js";
import { pushGitChanges, GitPushOutputSchema, GitPushBaseSchema, } from "./logic.js";
const TOOL_NAME = "git_push";
const TOOL_DESCRIPTION = "Updates remote refs using local refs, sending objects necessary to complete the given refs. Supports pushing specific branches, tags, forcing, setting upstream, and deleting remote branches. Returns the push result as a JSON object.";
/**
* Registers the git_push 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 registerGitPushTool = async (server, getWorkingDirectory, getSessionId) => {
const operation = "registerGitPushTool";
const context = requestContextService.createRequestContext({ operation });
server.registerTool(TOOL_NAME, {
title: "Git Push",
description: TOOL_DESCRIPTION,
inputSchema: GitPushBaseSchema.shape,
outputSchema: GitPushOutputSchema.shape,
annotations: {
readOnlyHint: false,
destructiveHint: true, // Can alter remote 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 pushGitChanges(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