提交消息生成器

一个FastMCP服务器,通过结合git差异和Cursor代理聊天记录生成FreeIPA风格的提交消息。

  • by jayg2309
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 jayg2309/PR-Message-MCP

使用说明

公关信息mcp

FastMCP服务器通过组合以下内容生成FreeIPA风格的PR提交消息:

  • 分段git差异(或分支差异作为回退)
  • 相关Cursor代理聊天记录
  • FreeIPA提交消息约定

服务器作为Cursor通过stdio传输启动的子进程运行。确实如此 不 调用任何外部LLM——它收集上下文并将其作为结构化文本返回,以便Cursor自己的LLM可以合成最终的提交消息。


需求

  • Python 3.10+
  • uv (推荐)或 pip
  • git 关于PATH
  • 光标 集成开发环境

设置

步骤1——安装Python依赖项

选项A--uv(推荐)

cd pr-message-mcp
uv sync

选项B-pip

pip install mcp

步骤2——安装Cursor配置

从您的 工作区根目录 (您在Cursor中打开的目录):

bash pr-message-mcp/install.sh

这会将两个文件复制到您的工作区 .cursor/ 目录:

  • .cursor/mcp.json --使用Cursor注册MCP服务器
  • .cursor/rules/pr.mdc --定义 /pr 命令

如果 .cursor/mcp.json 已存在(例如,您配置了其他MCP服务器), 该脚本将打印您需要手动合并的块,而不是覆盖 您现有的配置。

步骤3--重新启动游标

光标读取 mcp.json 在启动时。重新启动以启动新服务器。

步骤4——验证

打开光标聊天并键入:

/pr

代理将解析您的git仓库、作者信息和转录目录 然后调用MCP工具并编写FreeIPA风格的提交消息。


用法

基本--生成提交消息

暂存您的更改,然后键入 /pr 在光标聊天中:

git add <files>
# open Cursor chat
/pr

带有问题URL

/pr https://pagure.io/freeipa/issue/1234

问题URL被添加为 Fixes: 拖车自动。

覆盖基础分支

/pr base_branch=main

默认的基本分支是 master (FreeIPA公约)。


运作原理

/pr command
    │
    ▼
pr.mdc rule (Cursor agent rule)
    │  resolves: repo_path, transcripts_dir, author_name, author_email
    │
    ▼
generate_pr_message MCP tool (server.py)
    │
    ├─ git diff --cached  (staged diff)
    │   └─ fallback: git diff <base_branch>...HEAD
    │
    ├─ git log --oneline <base_branch>..HEAD
    │
    └─ Cursor agent-transcripts/
        └─ scored by relevance to changed files → top summaries included
    │
    ▼
Structured context returned to Cursor's LLM
    │
    ▼
FreeIPA-style commit message

工具

generate_pr_message

主要工具。收集所有上下文,并将其结构化返回给法学硕士 合成一条提交消息。

参数 类型 必填 说明
repo_path str 是 git存储库根的绝对路径
transcripts_dir str 是 游标代理转录目录的绝对路径
issue_url str 否 Pagure/GitHub/GitLab问题URL Fixes: 或 Related: 拖车
author_name str 否 名称 Signed-off-by 拖车
author_email str 否 电子邮件 Signed-off-by 拖车
base_branch str 否 分支到diff(默认值: "master")

差异的回退逻辑:

  1. 尝试 git diff --cached (阶段性变化)
  2. 如果为空,则返回 git diff {base_branch}...HEAD (所有分支机构提交)
  3. 如果仍然为空,则返回一个错误,要求您进行更改或创建特征分支

list_recent_chats

列出最近的Cursor代理聊天记录,以便您可以验证服务器是否看到它们。

参数 类型 必填 说明
transcripts_dir str 是 代理转录目录的路径
limit int 否 返回的最大聊天次数(默认值:10)

返回一个JSON数组: [{"id": "uuid", "first_query": "...", "modified": "ISO-timestamp"}]

get_staged_diff

返回原始数据 git diff --cached 输出(或分支差异回退)以供检查。

参数 类型 必填 说明
repo_path str 是 git存储库根的绝对路径
base_branch str 否 回退差异的分支(默认值: "master")

转录相关性是如何工作的

当 generate_pr_message 运行时,它会对每个Cursor聊天记录进行评分 diff中更改的文件:

信号 分数
在转录中找到完整文件路径 每条路径+10.0
在转录中找到文件名(基名) 每条路径+5.0
在转录中找到类名或函数名 每个名称+2.0
在过去24小时内修改(仅限决胜局) +0.5

成绩单评分如下 1.0 完全排除在外——纯粹的近因不是 足够包括一份成绩单。包括前5个相关成绩单, 每个摘要最多500个字符(总共5000个字符)。

子代理转录文件(in subagents/ 子目录)被跳过 家长成绩单已经捕捉到了更高层次的意图。


MCP检验员测试

您可以使用交互方式测试服务器 MCP检查员:

cd pr-message-mcp
npx -y @modelcontextprotocol/inspector python3 server.py

这将打开一个浏览器UI,您可以在其中使用示例输入调用每个工具。

示例输入 generate_pr_message

{
  "repo_path": "/path/to/your/git/repo",
  "transcripts_dir": "/home/<you>/.cursor/projects/<workspace-slug>/agent-transcripts",
  "issue_url": "https://pagure.io/freeipa/issue/9999",
  "author_name": "Your Name",
  "author_email": "you@example.com",
  "base_branch": "master"
}

示例输入 list_recent_chats

{
  "transcripts_dir": "/home/<you>/.cursor/projects/<workspace-slug>/agent-transcripts",
  "limit": 5
}

示例输入 get_staged_diff

{
  "repo_path": "/path/to/your/git/repo"
}

这 agent-transcripts 目录通常位于:

~/.cursor/projects/<workspace-slug>/agent-transcripts/

哪里 <workspace-slug> 是工作区路径的简化版本 (例如。 home-jdev-myproject).


故障排除

服务器未出现在游标MCP工具中

  • 编辑后重新启动游标 mcp.json
  • 检查一下 python3 位于游标使用的路径上
  • 手动运行服务器以检查导入错误: python3 pr-message-mcp/server.py

“不是git仓库”错误

  • 确保 repo_path 指向git存储库(或子目录)的根目录 git可以通过搜索父目录找到repo)

未返回成绩单上下文

  • 验证 transcripts_dir 存在: ls ~/.cursor/projects/<slug>/agent-transcripts/
  • 如果目录丢失,该工具将继续运行,而不使用转录本——只使用diff

git命令失败

  • 确保 git 已安装并位于PATH上
  • 对于分支差异回退,请确保 base_branch 存在(例如。 master 或 main)

缺失 Signed-off-by 在输出

  • 确保您的git身份已配置:
    git config --global user.name "Your Name"
    git config --global user.email "you@example.com"
    

mcp.json 已与其他服务器一起存在

  • 打开 .cursor/mcp.json 并手动添加 pr-message 进入 mcpServers 对象:
    "pr-message": {
      "command": "python3",
      "args": ["pr-message-mcp/server.py"]
    }