提交摘要MCP
基于Python的模型上下文协议(MCP)服务器,用于检查本地Git存储库并生成最新工作的人性化摘要。公开了两个工具:
get_recent_commits(limit: int = 5)-列出最近的提交(哈希、作者、ISO日期、一线消息)。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": "", "summary": "" }. - 哈希值无效:返回
{ "error": { "message": "...", "hint": "..." } }. - 模型误差:转换为相同的JSON错误形状,并提示如何确保Ollama正在运行并且模型标记在本地存在。
验收标准检查表
- 通过启动服务器
uv run commit-summary-mcp注册这两个工具(可通过任何MCP客户端发现)。 - 召唤
get_recent_commits(3)生成三个如上所述格式的提交对象。 - 召唤
summarize_diff("")返回一个JSON对象,其中包含一个短哈希值和一个自然语言摘要(没有原始差异块)。 - 传递一个空的、缺失的或无效的哈希值会返回结构化的JSON错误,并给出有用的提示。
手动测试提示
- 启动Ollama:
ollama serve并确保ollama pull gpt-oss:20b已运行。 - 跑
uv run commit-summary-mcp(或python -m commit_summary_server)在git仓库中。 - 从另一个终端,使用MCP测试客户端(例如
npx @modelcontextprotocol/cli在交互模式下)调用工具。 - 从管道传输哈希
get_recent_commits进入summarize_diff以验证汇总器路径。
暴露服务器的URL连接器
如果你需要一个公共HTTPS URL(例如用于ChatGPT的URL连接器),请运行HTTP/SSE变体并将其放置在隧道/反向代理后面:
- 在本地启动SSE服务器:
# Optional overrides:
# set COMMIT_SUMMARY_HTTP_HOST=0.0.0.0
# set COMMIT_SUMMARY_HTTP_PORT=8787
uv run commit-summary-mcp-sse- 启动一个转发到本地端口的HTTPS隧道。示例:
- Cloudflare隧道: cloudflared tunnel --url http://localhost:8787 - 吸烟: ngrok http 8787
- 取隧道打印的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;摘要将提及省略信息的时间。
