Skip to main content
Glama
MrOrz

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: Git Polite

Установка

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

Available Tools

1 tool
commit_stagedA

Commit staged changes with a specific message, appending "(aider)" to the committer name.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe commit message.
cwdNoOptional: The working directory for the git command (defaults to the workspace root).

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the committer name is modified, which is a behavioral side effect. However, without annotations, the description carries the full burden. It could be more explicit about the exact impact (e.g., 'the commit author will be altered'), but the provided detail is adequate for a simple operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is front-loaded and contains no wasted words. Every word earns its place, efficiently conveying the core behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple git commit tool with no output schema, the description covers the main action and a notable side effect. However, it omits details like success confirmation or error behavior. Given low complexity, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description does not add meaning beyond the schema. Both parameters (message and cwd) are already described in the schema, so the description adds no extra context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool commits staged changes with a message, and specifies a unique behavioral tweak (appending '(aider)' to committer name). The verb and resource are explicit, and with no sibling tools, differentiation is not needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, such as other git commands. Since there are no siblings, the guidance is less critical, but still absent; no prerequisites or limitations are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.0.0
    • First observedcommit_staged

TDQS

A3.6/5.0
Disambiguation5/5

With only one tool, there is no ambiguity. The tool 'commit_staged' has a clear and distinct purpose.

Naming Consistency5/5

The single tool follows a consistent verb_noun pattern ('commit_staged'), so naming is trivially consistent.

Tool Count2/5

The server has only one tool, which feels thin for a git commit aider. A typical scope would include staging, status, and other related operations.

Completeness2/5

The tool surface is severely incomplete. It only offers commit_staged, missing essential operations like staging, status, branching, or commit management, which will likely cause agent failures.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with local Git repositories for operations like status, commits, branching, and diffs, plus GitHub API integration for managing pull requests when authenticated.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to intelligently organize Git changes into clean, focused commits with autopilot mode or surgical line-by-line staging precision. Supports partial staging of untracked files and handles large diffs with smart truncation.
    5
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables AI-powered code editing and development tasks through natural language conversations with Claude, using Aider's capabilities for improving code, adding features, fixing bugs, refactoring, and checking status.
    5
    1
    -

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