Skip to main content
Glama
jolfr

Commit Helper MCP

by jolfr

generate_and_commit

Generate conventional commit messages and optionally execute commits in one step. Streamline Git workflows by combining message generation with repository operations using type, subject, and optional details like scope, body, and footer.

Instructions

Generate commit message and optionally execute commit in one step.

Combines message generation with git operations for streamlined workflow.

Args: type: Commit type (feat, fix, docs, etc.) subject: Commit subject/description repo_path: Path to git repository body: Optional detailed description scope: Optional scope of changes breaking: Whether this is a breaking change footer: Optional footer (e.g., issue references) stage_all: Whether to stage all changes (not implemented yet) sign_off: Whether to add sign-off to commit (default: True) preview_only: If True, only preview (default for safety)

Returns: Dict containing: - message: Generated commit message - is_valid: Whether message is valid - git_preview: Preview of git operation (if preview_only=True) - commit_result: Commit execution result (if preview_only=False)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyNo
breakingNo
footerNo
preview_onlyNo
repo_pathYes
scopeNo
sign_offNo
stage_allNo
subjectYes
typeYes

Implementation Reference

  • The primary handler function for the 'generate_and_commit' MCP tool. Decorated with @mcp.tool(), it generates a conventional commit message and performs git preview or commit execution.
    @mcp.tool() def generate_and_commit( type: str, subject: str, repo_path: str, body: Optional[str] = None, scope: Optional[str] = None, breaking: Optional[bool] = False, footer: Optional[str] = None, stage_all: bool = True, sign_off: bool = True, preview_only: bool = True, ) -> Dict[str, Any]: """ Generate commit message and optionally execute commit in one step. Combines message generation with git operations for streamlined workflow. Args: type: Commit type (feat, fix, docs, etc.) subject: Commit subject/description repo_path: Path to git repository body: Optional detailed description scope: Optional scope of changes breaking: Whether this is a breaking change footer: Optional footer (e.g., issue references) stage_all: Whether to stage all changes (not implemented yet) sign_off: Whether to add sign-off to commit (default: True) preview_only: If True, only preview (default for safety) Returns: Dict containing: - message: Generated commit message - is_valid: Whether message is valid - git_preview: Preview of git operation (if preview_only=True) - commit_result: Commit execution result (if preview_only=False) """ try: # Import message generation function from .message_tools import generate_commit_message # First generate the commit message message_result = generate_commit_message( type=type, subject=subject, body=body, scope=scope, breaking=breaking, footer=footer, ) if "error" in message_result: return { "error": f"Message generation failed: {message_result['error']}", "message": None, "is_valid": False, "preview_only": preview_only, } generated_message = message_result["message"] is_valid = message_result["is_valid"] if not is_valid: return { "error": "Generated message failed validation", "message": generated_message, "is_valid": False, "preview_only": preview_only, } # Now handle git operations using the provided repo_path if preview_only: # Get git preview using provided repository path git_preview = preview_git_commit(generated_message, repo_path) return { "message": generated_message, "is_valid": is_valid, "git_enabled": git_preview.get("git_enabled", False), "git_preview": git_preview, "preview_only": True, "repository_path": repo_path, } else: # Execute the commit using provided repository path commit_result = execute_git_commit( message=generated_message, repo_path=repo_path, sign_off=sign_off, force_execute=True, # Since user explicitly set preview_only=False ) return { "message": generated_message, "is_valid": is_valid, "git_enabled": commit_result.get("git_enabled", False), "commit_result": commit_result, "preview_only": False, "repository_path": repo_path, } except Exception as e: logger.error(f"Failed to generate and commit: {e}") return { "error": str(e), "message": None, "is_valid": False, "git_enabled": service.git_enabled, "preview_only": preview_only, }
  • Import of the generate_and_commit tool (among others) from git_tools.py into the main MCP server module, which registers it for use in the FastMCP server.
    # Git tools from .server.git_tools import ( get_git_implementation_info, get_enhanced_git_status, get_git_status, preview_git_commit, execute_git_commit, generate_and_commit, validate_commit_readiness, stage_files_and_commit, )
  • The __all__ export list includes generate_and_commit, making it available when importing from mcp_server.py.
    __all__ = [ "mcp", # Message tools "generate_commit_message", "create_commit_message", "validate_commit_message", "get_commit_types", # Git tools "get_git_implementation_info", "get_enhanced_git_status", "get_git_status", "preview_git_commit", "execute_git_commit", "generate_and_commit", "validate_commit_readiness", "stage_files_and_commit", # Workflow tools "get_commit_questions", "health_check", "refresh_configuration", "commit_workflow_step", # Enhanced tools "analyze_repository_health", "get_detailed_diff_analysis", "get_branch_analysis", "smart_commit_suggestion", "batch_commit_analysis", # Resources "get_config_resource", "get_schema_resource", "get_example_resource", ]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jolfr/commit-helper-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server