公关信息mcp
FastMCP服务器通过组合以下内容生成FreeIPA风格的PR提交消息:
- 分段git差异(或分支差异作为回退)
- 相关Cursor代理聊天记录
- FreeIPA提交消息约定
服务器作为Cursor通过stdio传输启动的子进程运行。确实如此 不 调用任何外部LLM——它收集上下文并将其作为结构化文本返回,以便Cursor自己的LLM可以合成最终的提交消息。
______________________________________________________________________
需求
______________________________________________________________________
设置
步骤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
# 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 ...HEAD
│
├─ git log --oneline ..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") |
差异的回退逻辑:
- 尝试
git diff --cached(阶段性变化) - 如果为空,则返回
git diff {base_branch}...HEAD(所有分支机构提交) - 如果仍然为空,则返回一个错误,要求您进行更改或创建特征分支
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//.cursor/projects//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//.cursor/projects//agent-transcripts",
"limit": 5
}示例输入 get_staged_diff
{
"repo_path": "/path/to/your/git/repo"
}这 agent-transcripts 目录通常位于:
~/.cursor/projects//agent-transcripts/哪里 ` 是工作区路径的简化版本 (例如。 home-jdev-myproject`).
______________________________________________________________________
故障排除
服务器未出现在游标MCP工具中
- 编辑后重新启动游标
mcp.json - 检查一下
python3位于游标使用的路径上 - 手动运行服务器以检查导入错误:
python3 pr-message-mcp/server.py
“不是git仓库”错误
- 确保
repo_path指向git存储库(或子目录)的根目录
git可以通过搜索父目录找到repo)
未返回成绩单上下文
- 验证
transcripts_dir存在:ls ~/.cursor/projects//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"]
}