# MCP Git Training Wheels
LLMs try to please, but as the context window gets larger and larger, errors
start to happen. In particular, current models have a tendency to just
`git add -a` the whole source tree, accidentally adding lots of random stuff
to their commits.
These issues become especially noticable when multiple agents are working on
a codebase in parallel, or if you're doing quick fixes while an agent is working.
And no current model has the ability to un-fuck a git history.
This MCP server gives the agent some training wheels for using git safely,. It
ensures that only a specific named set of files can be committed, and also
provides a convenient way to fixup earlier commits.
## Installation
### Using uv
```bash
uvx mcp-git-training-wheels
```
### From source
```bash
git clone https://github.com/lava/mcp-git-training-wheels
cd mcp-git-training-wheels
uv pip install -e .
```
## Usage
### Add the following
Depending on your agent of choice, run something like the following
```sh
claude mcp add git-commit -- uvx mcp-git-training-wheels
```
or drop the following JSON into `.mcp.json` or any other location of your
choice.
```json
{
"mcpServers": {
"gtw": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-git-training-wheels"
],
"env": {}
}
}
}
```
The specific command may change depending on your installation method.
### Available Tools
#### git_commit
Commits specified files with a message and saves the commit information for
later use.
**Parameters:**
- `files`: List of file paths to commit
- `message`: Commit message
**Example:**
```json
{
"tool": "git_commit",
"parameters": {
"files": ["src/main.py", "tests/test_main.py"],
"message": "Add main functionality and tests"
}
}
```
#### fixup_commit
Adds files to a previously created commit. If the commit is still HEAD, it
uses `git commit --amend`. Otherwise, it uses the `gitrevise` module to edit
the commit in history.
**Parameters:**
- `files`: List of file paths to add to the commit
**Example:**
```json
{
"tool": "fixup_commit",
"parameters": {
"files": ["src/utils.py"]
}
}
```
Raw data
{
"_id": null,
"home_page": null,
"name": "mcp-git-training-wheels",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "git, mcp, model-context-protocol",
"author": null,
"author_email": "Benno Evers <benno.martin.evers@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/a9/58/7454a7b41242197c1e7ac6b64b8e4706d329ea715844c13ac9876453aa03/mcp_git_training_wheels-0.1.2.tar.gz",
"platform": null,
"description": "# MCP Git Training Wheels\n\nLLMs try to please, but as the context window gets larger and larger, errors\nstart to happen. In particular, current models have a tendency to just\n`git add -a` the whole source tree, accidentally adding lots of random stuff\nto their commits.\n\nThese issues become especially noticable when multiple agents are working on\na codebase in parallel, or if you're doing quick fixes while an agent is working.\nAnd no current model has the ability to un-fuck a git history.\n\nThis MCP server gives the agent some training wheels for using git safely,. It\nensures that only a specific named set of files can be committed, and also\nprovides a convenient way to fixup earlier commits.\n\n## Installation\n\n### Using uv\n\n```bash\nuvx mcp-git-training-wheels\n```\n\n### From source\n\n```bash\ngit clone https://github.com/lava/mcp-git-training-wheels\ncd mcp-git-training-wheels\nuv pip install -e .\n```\n\n## Usage\n\n### Add the following\n\nDepending on your agent of choice, run something like the following\n\n```sh\nclaude mcp add git-commit -- uvx mcp-git-training-wheels\n```\n\nor drop the following JSON into `.mcp.json` or any other location of your\nchoice.\n\n```json\n{\n \"mcpServers\": {\n \"gtw\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\n \"mcp-git-training-wheels\"\n ],\n \"env\": {}\n }\n }\n}\n```\n\nThe specific command may change depending on your installation method.\n\n### Available Tools\n\n#### git_commit\n\nCommits specified files with a message and saves the commit information for\nlater use.\n\n**Parameters:**\n\n- `files`: List of file paths to commit\n- `message`: Commit message\n\n**Example:**\n\n```json\n{\n \"tool\": \"git_commit\",\n \"parameters\": {\n \"files\": [\"src/main.py\", \"tests/test_main.py\"],\n \"message\": \"Add main functionality and tests\"\n }\n}\n```\n\n#### fixup_commit\n\nAdds files to a previously created commit. If the commit is still HEAD, it\nuses `git commit --amend`. Otherwise, it uses the `gitrevise` module to edit\nthe commit in history.\n\n**Parameters:**\n\n- `files`: List of file paths to add to the commit\n\n**Example:**\n\n```json\n{\n \"tool\": \"fixup_commit\",\n \"parameters\": {\n \"files\": [\"src/utils.py\"]\n }\n}\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "MCP server providing a safer 'git commit' alternative",
"version": "0.1.2",
"project_urls": {
"Homepage": "https://github.com/lava/mcp-git-training-wheels",
"Issues": "https://github.com/lava/mcp-git-training-wheels/issues"
},
"split_keywords": [
"git",
" mcp",
" model-context-protocol"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2ba545f6fa839f6e2e9633e35fd7136ffaa43dbb8a60d35dcaa6ab2704530b12",
"md5": "0f7616ac61c5e4e863f1011bc65e1249",
"sha256": "31134d8ca58d1507d12f543736f589c51c7a8dffa230a655a424ef7f9547f52d"
},
"downloads": -1,
"filename": "mcp_git_training_wheels-0.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0f7616ac61c5e4e863f1011bc65e1249",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 5811,
"upload_time": "2025-07-26T19:34:42",
"upload_time_iso_8601": "2025-07-26T19:34:42.466314Z",
"url": "https://files.pythonhosted.org/packages/2b/a5/45f6fa839f6e2e9633e35fd7136ffaa43dbb8a60d35dcaa6ab2704530b12/mcp_git_training_wheels-0.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a9587454a7b41242197c1e7ac6b64b8e4706d329ea715844c13ac9876453aa03",
"md5": "5ead40653b5f55d4e4336de27865094b",
"sha256": "9e25fb668668fa066ff2a9efd37e1491a634f1de9d023e5ad2b3bb706c4225d5"
},
"downloads": -1,
"filename": "mcp_git_training_wheels-0.1.2.tar.gz",
"has_sig": false,
"md5_digest": "5ead40653b5f55d4e4336de27865094b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 5245,
"upload_time": "2025-07-26T19:34:44",
"upload_time_iso_8601": "2025-07-26T19:34:44.036977Z",
"url": "https://files.pythonhosted.org/packages/a9/58/7454a7b41242197c1e7ac6b64b8e4706d329ea715844c13ac9876453aa03/mcp_git_training_wheels-0.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-26 19:34:44",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lava",
"github_project": "mcp-git-training-wheels",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "mcp-git-training-wheels"
}