Skip to main content
Glama

git-commit-aider MCP Server

by MrOrz

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 .

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

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

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

Related MCP server: GitLab MCP Server

Установка

Чтобы использовать этот сервер, добавьте его конфигурацию в файл настроек 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 изменения для этого файла этим автором.

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

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

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