Git提交摘要服务

一个基于Python的Git提交摘要服务,通过分析本地Git仓库的提交记录和差异,生成易于理解的摘要,帮助开发者快速了解项目变更。

  • by Riomari1
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Riomari1/commit-summary-mcp

使用说明

提交摘要MCP

基于Python的模型上下文协议(MCP)服务器,用于检查本地Git存储库并生成最新工作的人性化摘要。公开了两个工具:

  1. get_recent_commits(limit: int = 5) -列出最近的提交(哈希、作者、ISO日期、一线消息)。
  2. summarize_diff(commit_hash: str) -获取给定提交的差异,清理输出,将其发送到文本模型,并返回一个简洁的摘要,重点关注意图、动机和风险。

需求

  • Python 3.11+
  • PATH上的Git CLI
  • Ollama 0.12+本地跑步(ollama serve)
  • 这 gpt-oss:20b 模型已拉动并准备装载(ollama pull gpt-oss:20b)

安装

# Recommended: create a virtual environment or use uv
uv sync  # or: python -m venv .venv && .venv\Scripts\activate && pip install -e .

这将安装 commit-summary-mcp 中定义的控制台入口点 pyproject.toml.

运行服务器

# From the root of the git repository you want to summarize
uv run commit-summary-mcp

# or explicitly point at another repo
COMMIT_SUMMARY_REPO=C:\path\to\repo uv run commit-summary-mcp

该过程保持与STDIN/STDOUT的连接,因此MCP兼容的客户端(例如,Claude Desktop、Cursor、, npx @modelcontextprotocol/cli)可以将其作为stdio服务器启动。

环境变量

变量 描述
COMMIT_SUMMARY_MODEL 可选。覆盖默认值 gpt-oss:20b Ollama模型标签。
COMMIT_SUMMARY_OLLAMA_HOST 可选。Ollama服务器的HTTP基本URL(回退到 OLLAMA_HOST 或 http://127.0.0.1:11434).
COMMIT_SUMMARY_REPO 可选。要检查的仓库的绝对路径。默认为第一个 .git 从当前工作目录向上找到的目录。
COMMIT_SUMMARY_HTTP_HOST 可选。运行SSE/HTTP服务器时要绑定的主机名(默认为FastMCP的 127.0.0.1).
COMMIT_SUMMARY_HTTP_PORT 可选。SSE/HTTP服务器的端口(默认为FastMCP的 8000).
COMMIT_SUMMARY_SSE_PATH 可选。SSE路径的覆盖(默认为 /sse).

工具合同

get_recent_commits

  • 参数: limit (int,可选,默认为5,上限为20)。
  • 退货:JSON对象数组 hash, author, date, message.
  • 故障模式:如果Git日志失败(例如,不是仓库),则引发工具错误。

summarize_diff

  • 参数: commit_hash (字符串,必填)。
  • 退货:JSON对象 { "commit": "<short hash>", "summary": "<1-3 paragraphs>" }.
  • 哈希值无效:返回 { "error": { "message": "...", "hint": "..." } }.
  • 模型误差:转换为相同的JSON错误形状,并提示如何确保Ollama正在运行并且模型标记在本地存在。

验收标准检查表

  • 通过启动服务器 uv run commit-summary-mcp 注册这两个工具(可通过任何MCP客户端发现)。
  • 召唤 get_recent_commits(3) 生成三个如上所述格式的提交对象。
  • 召唤 summarize_diff("<hash>") 返回一个JSON对象,其中包含一个短哈希值和一个自然语言摘要(没有原始差异块)。
  • 传递一个空的、缺失的或无效的哈希值会返回结构化的JSON错误,并给出有用的提示。

手动测试提示

  1. 启动Ollama: ollama serve 并确保 ollama pull gpt-oss:20b 已运行。
  2. 跑 uv run commit-summary-mcp (或 python -m commit_summary_server)在git仓库中。
  3. 从另一个终端,使用MCP测试客户端(例如 npx @modelcontextprotocol/cli 在交互模式下)调用工具。
  4. 从管道传输哈希 get_recent_commits 进入 summarize_diff 以验证汇总器路径。

暴露服务器的URL连接器

如果你需要一个公共HTTPS URL(例如用于ChatGPT的URL连接器),请运行HTTP/SSE变体并将其放置在隧道/反向代理后面:

  1. 在本地启动SSE服务器:
    # Optional overrides:
    #   set COMMIT_SUMMARY_HTTP_HOST=0.0.0.0
    #   set COMMIT_SUMMARY_HTTP_PORT=8787
    uv run commit-summary-mcp-sse
    
  2. 启动一个转发到本地端口的HTTPS隧道。示例:
    • Cloudflare隧道: cloudflared tunnel --url http://localhost:8787
    • 吸烟: ngrok http 8787
  3. 取隧道打印的HTTPS URL(例如。, https://mcp-demo.ngrok.app)并附加SSE路径(默认 /sse).在MCP客户端的“URL连接器”表单中输入该URL。

隧道终止TLS并将所有SSE/MCP流量转发到本地FastMCP服务器,因此连接器现在满足“公共HTTPS+SSE”要求,而无需更改代码。

故障排除

  • 未找到git仓库:在仓库或集合中启动服务器 COMMIT_SUMMARY_REPO.
  • 模型误差:确保 ollama serve 正在运行,目标模型被拉取,以及 COMMIT_SUMMARY_MODEL/COMMIT_SUMMARY_OLLAMA_HOST 指向正确的值(它们也可以回退到 OLLAMA_HOST).
  • 二进制重提交:diff清洁器会自动丢弃二进制斑点并截断非常大的diff;摘要将提及省略信息的时间。