feat(mcp_server_git): Add support for configurable GIT_DIFF_CONTEXT_LINES
- Introduced `GIT_DIFF_CONTEXT_LINES` environment variable to customize the number of context lines shown in git diff output. - Updated `git_diff_unstaged`, `git_diff_staged`, and `git_diff` functions to utilize the new context line setting. - Enhanced README.md to document the new environment variable and its implications.
This commit is contained in:
parent
e8f0b15f41
commit
1ac3c1da59
2 changed files with 25 additions and 4 deletions
|
|
@ -6,6 +6,12 @@ A Model Context Protocol server for Git repository interaction and automation. T
|
||||||
|
|
||||||
Please note that mcp-server-git is currently in early development. The functionality and available tools are subject to change and expansion as we continue to develop and improve the server.
|
Please note that mcp-server-git is currently in early development. The functionality and available tools are subject to change and expansion as we continue to develop and improve the server.
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
- `GIT_DIFF_CONTEXT_LINES`: Number of context lines to show in git diff output (default: 3). Increasing this value shows more surrounding code in diffs.
|
||||||
|
|
||||||
|
> **⚠️ Warning:** Large context line values will consume more tokens and may reduce response relevance. Set this value carefully to balance context needs with token limits.
|
||||||
|
|
||||||
### Tools
|
### Tools
|
||||||
|
|
||||||
1. `git_status`
|
1. `git_status`
|
||||||
|
|
@ -119,7 +125,10 @@ Add this to your `claude_desktop_config.json`:
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"git": {
|
"git": {
|
||||||
"command": "uvx",
|
"command": "uvx",
|
||||||
"args": ["mcp-server-git", "--repository", "path/to/git/repo"]
|
"args": ["mcp-server-git", "--repository", "path/to/git/repo"],
|
||||||
|
"env": {
|
||||||
|
"GIT_DIFF_CONTEXT_LINES": "10"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import os
|
||||||
from typing import Sequence
|
from typing import Sequence
|
||||||
from mcp.server import Server
|
from mcp.server import Server
|
||||||
from mcp.server.session import ServerSession
|
from mcp.server.session import ServerSession
|
||||||
|
|
@ -73,17 +74,28 @@ class GitTools(str, Enum):
|
||||||
SHOW = "git_show"
|
SHOW = "git_show"
|
||||||
INIT = "git_init"
|
INIT = "git_init"
|
||||||
|
|
||||||
|
# Default number of context lines if not specified in environment
|
||||||
|
DEFAULT_CONTEXT_LINES = 3
|
||||||
|
|
||||||
|
def get_context_lines() -> str:
|
||||||
|
"""Get the number of context lines from environment variable or use default"""
|
||||||
|
try:
|
||||||
|
context_lines = int(os.environ.get('GIT_DIFF_CONTEXT_LINES', DEFAULT_CONTEXT_LINES))
|
||||||
|
return f"--unified={context_lines}"
|
||||||
|
except ValueError:
|
||||||
|
return f"--unified={DEFAULT_CONTEXT_LINES}"
|
||||||
|
|
||||||
def git_status(repo: git.Repo) -> str:
|
def git_status(repo: git.Repo) -> str:
|
||||||
return repo.git.status()
|
return repo.git.status()
|
||||||
|
|
||||||
def git_diff_unstaged(repo: git.Repo) -> str:
|
def git_diff_unstaged(repo: git.Repo) -> str:
|
||||||
return repo.git.diff()
|
return repo.git.diff(get_context_lines())
|
||||||
|
|
||||||
def git_diff_staged(repo: git.Repo) -> str:
|
def git_diff_staged(repo: git.Repo) -> str:
|
||||||
return repo.git.diff("--cached")
|
return repo.git.diff(get_context_lines(), "--cached")
|
||||||
|
|
||||||
def git_diff(repo: git.Repo, target: str) -> str:
|
def git_diff(repo: git.Repo, target: str) -> str:
|
||||||
return repo.git.diff(target)
|
return repo.git.diff(get_context_lines(), target)
|
||||||
|
|
||||||
def git_commit(repo: git.Repo, message: str) -> str:
|
def git_commit(repo: git.Repo, message: str) -> str:
|
||||||
commit = repo.index.commit(message)
|
commit = repo.index.commit(message)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue