git-commit-aider MCP Server

by MrOrz
Integrations
  • Allows committing staged changes to a Git repository with AI attribution by automatically appending '(aider)' to the committer's name, enabling tracking of AI contributions in codebases.

git-commit-aider MCP-сервер

Делайте коммиты git от имени ИИ, чтобы вы могли отслеживать вклад ИИ в вашу кодовую базу.

Это MCP-сервер на основе TypeScript, который предоставляет инструмент для фиксации подготовленных изменений в репозитории Git с добавлением «(aider)» к имени коммиттера.

Функции

Этот сервер MCP предоставляет только один инструмент:

commit_staged — зафиксировать подготовленные изменения с определенным сообщением.

  • Принимает message (строка, обязательно) в качестве сообщения фиксации.
  • Принимает cwd (строка, необязательно) для указания рабочего каталога для команды git.
  • Автоматически добавляет «(aider)» к имени коммиттера.
  • Считывает имя и адрес электронной почты коммиттера из переменных среды ( GIT_COMMITTER_NAME , GIT_COMMITTER_EMAIL ), если они заданы, в противном случае возвращается к git config user.name и git config user.email .

Установив этот инструмент в редакторе кода, вы можете дать ИИ команду, например:

Зафиксируйте изменения для меня

Обычно это происходит после того, как ИИ вносит некоторые изменения в вашу кодовую базу, поэтому зачастую ИИ может предоставить хорошее сообщение о коммите из контекста.

Установка

Чтобы использовать этот сервер, добавьте его конфигурацию в файл настроек MCP.

{ "mcpServers": { "git-commit-aider": { "command": "npx", "args": ["mcp-git-commit-aider"] } } }

Информация о коммиттере извлекается из:

  1. Переменные окружения GIT_COMMITTER_NAME и GIT_COMMITTER_EMAIL , которые соответствуют соглашениям git .
  2. Вывод команд git config user.name и git config user.email .

Альтернатива: изменить автора после фиксации

Если вы не хотите использовать этот сервер MCP, вы также можете использовать команду git непосредственно в своем терминале.

Сначала можно выполнить обычный коммит, а затем использовать следующую команду git, чтобы изменить автора последнего коммита:

git commit --amend --author="$(git config user.name) (aider) <$(git config user.email)>"

Это изменит автора последнего коммита на ваше имя с добавлением «(aider)».

Чтобы упростить процесс, вы можете настроить псевдоним Git. Выполните следующую команду в терминале:

git config --global alias.aimend '!git commit --amend --author="$(git config user.name) (aider) <$(git config user.email)>"'

После настройки вы можете использовать псевдоним, выполнив:

git aimend

Расчет вклада ИИ

Коммиты с «(aider)» можно просмотреть с помощью команды aider --stats , которая покажет вклад ИИ в вашу кодовую базу.

В качестве альтернативы вы можете использовать следующий скрипт для расчета вклада ИИ в вашу кодовую базу, измеряемого в строках кода (добавленных, удаленных и общих изменений).

#!/bin/bash # Script to calculate line changes (added, deleted, total) by AI and human authors # between two commits. # Output is in JSON format. # # This logic is extracted and altered from git-quick-stats.sh, MIT license. # --- Configuration --- # You may change the config to match your repository's convention. # String to identify AI-generated commits in author names AI_MATCHER="(aider)" # Define patterns for files/paths to be excluded from the calculation. # These will be converted to git pathspecs like ":(exclude)*package-lock.json" IGNORE_PATTERNS=( "*package-lock.json" "*.lock" ) # --- Helper Functions --- function print_usage() { echo "Usage: $0 <REVISION_RANGE>" echo " <REVISION_RANGE>: The revision range to analyze (e.g., HEAD~5..HEAD, my-branch, commit_sha)." echo " Refer to 'git help log' or 'git help revisions' for more range options." echo "Example: $0 HEAD~5..HEAD" echo "Example: $0 origin..HEAD" echo "Example: $0 my-feature-branch" echo "Example: $0 abcdef1..fedcba2" } # --- Argument Parsing --- if [ "$#" -ne 1 ]; then echo "Error: Incorrect number of arguments. Please provide a single revision range." print_usage exit 1 fi REVISION_RANGE="$1" # --- Main Logic --- # Construct pathspec arguments for git log pathspec_args=() for pattern in "${IGNORE_PATTERNS[@]}"; do pathspec_args+=(":(exclude)$pattern") done git_log_output=$(git log "$REVISION_RANGE" --numstat --pretty="format:AuthorName:%an" -- "${pathspec_args[@]}") # DEBUG: Uncomment to check the calculation for each commit. # echo "$git_log_output" # Process the log output with awk result_json=$(echo "$git_log_output" | awk -v ai_matcher="$AI_MATCHER" ' BEGIN { ai_added = 0 ai_deleted = 0 human_added = 0 human_deleted = 0 current_author = "" is_ai_author = 0 } /^AuthorName:/ { # Extract author name current_author = substr($0, length("AuthorName:") + 1) if (index(current_author, ai_matcher) > 0) { is_ai_author = 1 } else { is_ai_author = 0 } next } # Skip empty lines between commit blocks or lines that are not numstat NF == 0 || !($1 ~ /^[0-9]+$/ && $2 ~ /^[0-9]+$/) { next } # Process numstat line: <added> <deleted> <file> { added_lines = $1 deleted_lines = $2 # Skip binary files where numstat shows "-" for lines if (added_lines == "-" || deleted_lines == "-") { next } # Aggregate stats per author and file for details array file_name = $3 # Robust key using File Separator character \034 key = current_author "\034" file_name file_author_added[key] += added_lines file_author_deleted[key] += deleted_lines if (is_ai_author) { ai_added += added_lines ai_deleted += deleted_lines } else { human_added += added_lines human_deleted += deleted_lines } } END { ai_total_changed = ai_added + ai_deleted human_total_changed = human_added + human_deleted overall_total_changed = ai_total_changed + human_total_changed ai_percentage = 0.00 if (overall_total_changed > 0) { ai_percentage = (ai_total_changed / overall_total_changed) * 100 } printf "{\n" printf " \"ai_percentage\": %.2f,\n", ai_percentage printf " \"ai_changes\": {\"added\": %d, \"deleted\": %d, \"total\": %d},\n", ai_added, ai_deleted, ai_total_changed printf " \"human_changes\": {\"added\": %d, \"deleted\": %d, \"total\": %d},\n", human_added, human_deleted, human_total_changed # Details array printf " \"details\": [\n" first_detail = 1 # Iterate over one of the arrays, keys should be consistent for (key in file_author_added) { if (!first_detail) { printf ",\n" } first_detail = 0 # Split key "author\034fileName" into key_parts array # key_parts[1] will be author, key_parts[2] will be fileName split(key, key_parts, "\034") author = key_parts[1] fileName = key_parts[2] # Escape double quotes for JSON compatibility gsub(/"/, "\\\"", author) gsub(/"/, "\\\"", fileName) detail_added = file_author_added[key] + 0 # Ensure numeric detail_deleted = file_author_deleted[key] + 0 # Ensure numeric detail_total = detail_added + detail_deleted printf " {\n" printf " \"fileName\": \"%s\",\n", fileName printf " \"author\": \"%s\", \"isAI\": %s,\n", author, (index(author, ai_matcher) > 0 ? "true" : "false") printf " \"added\": %d, \"deleted\": %d, \"total\": %d\n", detail_added, detail_deleted, detail_total printf " }" } printf "\n ]\n" printf "}\n" } ') # --- Output --- echo "$result_json"

Пример использования:

# Assume the script is saved as `calculate_ai_contribution.sh` and is executable (chmod +x calculate_ai_contribution.sh) # Example 1: Analyze the last 5 commits ./calculate_ai_contribution.sh HEAD~5..HEAD # Example 2: Analyze commits between a specific commit and HEAD ./calculate_ai_contribution.sh 90a5fcd4..HEAD # Example 3: Analyze all commits on a feature branch not yet in main ./calculate_ai_contribution.sh main..my-feature-branch # Example 4: Analyze commits between two tags ./calculate_ai_contribution.sh v1.0..v1.1 # Example output (will vary based on your repository and range): # { # "ai_percentage": 48.53, # "ai_changes": { "added": 100, "deleted": 32, "total": 132 }, # "human_changes": { "added": 103, "deleted": 37, "total": 140 }, # "details": [ # { # "fileName": "src/featureA.js", # "author": "Developer One (aider)", "isAI": true, # "added": 60, "deleted": 10, "total": 70 # }, # { # "fileName": "src/featureB.js", # "author": "Developer One (aider)", "isAI": true, # "added": 40, "deleted": 22, "total": 62 # }, # { # "fileName": "src/utils.js", # "author": "Developer Two", "isAI": false, # "added": 80, "deleted": 15, "total": 95 # }, # { # "fileName": "README.md", # "author": "Developer Two", "isAI": false, # "added": 23, "deleted": 22, "total": 45 # } # ] # }

Описание выходных полей

Вывод JSON содержит следующие поля:

  • ai_percentage : (Число) Процент от общего числа измененных строк (сумма добавленных и удаленных строк), которые были внесены авторами ИИ (идентифицируются AI_MATCHER ).
  • ai_changes : (Объект) Объект, детализирующий агрегированные изменения строк ( added строки, deleted и их total ), внесенные авторами ИИ.
  • human_changes : (Объект) Объект, описывающий агрегированные изменения строк ( added , deleted строки и их total ), внесенные авторами-людьми.
  • details : (Массив объектов) Предоставляет подробную разбивку изменений. Каждый объект в массиве представляет вклад конкретного author в конкретный fileName , включая added строки, deleted и total изменения для этого файла этим автором.

You must be authenticated.

A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Создает коммиты git от имени ИИ, добавляя «(aider)» к имени коммитера, что позволяет отслеживать вклад ИИ в вашу кодовую базу.

  1. Функции
    1. Установка
      1. Альтернатива: изменить автора после фиксации
    2. Расчет вклада ИИ
      1. Описание выходных полей

    Related MCP Servers

    • A
      security
      F
      license
      A
      quality
      The Git MCP Server allows AI assistants to perform enhanced Git operations via the Model Context Protocol, supporting core Git functions, branch and tag management, GitHub integration, and more.
      Last updated -
      21
      55
      4
      TypeScript
    • A
      security
      A
      license
      A
      quality
      Enables AI assistants to interact with GitHub through the PyGithub library, providing tools for managing issues, repositories, pull requests, and other GitHub operations with intelligent parameter handling and error management.
      Last updated -
      19
      Python
      MIT License
    • A
      security
      F
      license
      A
      quality
      An MCP server that enables AI assistants to manage GitHub Actions workflows by providing tools for listing, viewing, triggering, canceling, and rerunning workflows through the GitHub API.
      Last updated -
      9
      28
      TypeScript
      • Linux
      • Apple
    • A
      security
      A
      license
      A
      quality
      Enables AI models to access GitHub repository contents as context, with features to fetch entire repositories, specific file contents, and repository structures for use in AI interactions.
      Last updated -
      3
      2
      JavaScript
      MIT License
      • Linux
      • Apple

    View all related MCP servers

    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/MrOrz/mcp-git-commit-aider'

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