内容
# 代码审查代理 MCP
> AI 代码审查代理,不会粉饰真相。如果你的代码有问题,它会直接指出。毫不留情。
[](https://pypi.org/project/code-review-agent-mcp/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](https://github.com/astral-sh/ruff)
一个由 AI 驱动的 MCP(模型上下文协议)服务器,它像经验丰富的维护者审查严肃项目中的补丁一样审查你的代码:技术性,直接,不带外交色彩。
## 它做什么
- **AI 代码审查** — 审查代码片段,文件,git 差异和提交
- 返回具有严重性标签的发现:`严重`,`主要`,`次要`,`建议`,`清洁`
- 为每个发现引用特定的行号
- 解释为什么某些东西是坏的,然后说明如何修复它
- 以明确的结论结束:"可以直接提交。" 或 "在修复之前不要合并。"
- **没有虚假的赞扬。没有犹豫。没有道歉。没有填充内容。**
## 为什么
大多数 AI 代码审查器都经过训练以保持礼貌。他们在批评之前加上“做得好但是……”,他们犹豫是否要提出建议,他们用“这可能会成为一个问题”来缓和发现。
这不是严肃的代码审查。在真正的项目中(Linux 内核,PostgreSQL,Redis,SQLite),维护者直接审查补丁。他们发现问题并明确指出。他们不是为了让作者感觉良好而存在 — 他们是为了让代码变得更好。
这个 MCP 继承了这一传统。个性是产品。
## 反 RLHF 工程
LLM 经过 RLHF 训练以保持礼貌。这个 AI 代理通过三层来对抗这一点:
1. **系统** — 12 个核心原则(代码而非编码者,结论优先,严重性标签,行引用,无虚假赞扬,无犹豫,无道歉,无填充,第二人称,无人口统计学参考,无拒绝,无幻觉错误)
2. **后处理器** — 从 LLM 输出中删除 40 多个禁止短语(犹豫,缓和,道歉,填充)
3. **验证器** — 检查输出是否有严重性标签,行引用和结论;将模糊的问题陈述标记为幻觉信号
## 工具
| 工具 | 描述 |
|------|-------------|
| `review_code` | 审查代码片段 |
| `review_file` | 从磁盘审查文件(沙盒) |
| `review_diff` | 审查 git 差异 |
| `review_commit` | 审查 git 提交 (`git show <ref>`) |
| `list_severities` | 列出严重性标签及其定义 |
## 严厉程度
| 级别 | 行为 |
|-------|----------|
| `gentle` | 稍微缓和语言。仍然报告所有发现。 |
| `standard` | 默认直接审查。直接,技术性,无外交。 |
| `brutal` | 没有缓和。“这是错误的。” 而不是“应该更改。” |
| `kernel-maintainer` | 最大程度的直接。简短的句子。命令式语气。 |
## 安装
```bash
pip install code-review-agent-mcp
```
或使用 uv:
```bash
uv pip install code-review-agent-mcp
```
## 配置
### Claude Desktop
添加到 `claude_desktop_config.json`:
```json
{
"mcpServers": {
"code-review-agent": {
"command": "python",
"args": ["-m", "blunt_codereview.server"]
}
}
}
```
或如果通过 pip 安装:
```json
{
"mcpServers": {
"code-review-agent": {
"command": "blunt-codereview-mcp"
}
}
}
```
### Cursor
添加到 `.cursor/mcp.json`:
```json
{
"mcpServers": {
"code-review-agent": {
"command": "python",
"args": ["-m", "blunt_codereview.server"]
}
}
}
```
## 使用示例
### 审查代码片段
```
用户:为我审查这段代码
def get_user(username):
import sqlite3
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
return cursor.fetchone()
```
MCP 响应:
```
## 代码审查:片段
### 发现
**严重** `snippet:7` — SQL 注入
查询使用 f 字符串和用户输入,允许 SQL 注入。使用参数化查询:`cursor.execute("SELECT * FROM users WHERE username = ?", (username,))`。
### 结论
在修复严重问题之前不要合并。
```
### 审查文件
```
用户:审查 src/auth.py
MCP 调用 review_file,文件路径为 "src/auth.py"
返回带有行引用的直接审查。
```
### 审查提交
```
用户:审查上一次提交
MCP 调用 review_commit,提交引用为 "HEAD"
返回差异的直接审查。
```
## 严重性标签
| 标签 | 何时使用 |
|-------|-------------|
| **严重** | 安全漏洞,数据丢失,死锁,RCE,任何发布时损坏的问题 |
| **主要** | 逻辑错误,竞争条件,资源泄漏,损坏的边缘情况,错误的抽象 |
| **次要** | 样式,命名,缺少测试,多余代码,脆弱的假设 |
| **建议** | 美观,格式,注释措辞 |
| **清洁** | 明确说明某部分代码正常。防止捏造错误偏见。 |
## 安全
该 MCP 服务器实施安全沙盒:
- **文件访问** 默认情况下被限制在当前工作目录内
- **敏感路径** (`.ssh`,`.aws`,`.env`,`/etc/passwd` 等)被拒绝
- **git 引用** 针对严格的字符白名单进行验证,以防止选项注入
- **子进程调用** 使用 `shell=False` 并禁用全局 git 配置
参见 [SECURITY.md](SECURITY.md) 以获取完整的安全威胁模型。
## 开发
```bash
# 以开发模式安装
pip install -e ".[dev]"
# 运行测试
pytest
# 运行测试并覆盖
pytest --cov=blunt_codereview
```
## 基准测试片段
`benchmarks/` 目录包含 5 个回归测试片段,用于验证审查器:
1. **SQL 注入** — 期望严重,行引用,“在修复之前不要合并”
2. **可变默认值** — 期望主要
3. **干净的代码** (二分查找)— 期望清洁,“可以直接提交” (反幻觉测试)
4. **吞噬异常** — 期望主要
5. **越界错误** — 期望主要
干净的代码基准测试是最重要的 — 它可以防止幻觉。如果审查器在正确的代码中捏造错误,则反 RLHF 系统就会被破坏。
## 许可证
MIT
## 致谢
该项目继承了内核维护者代码审查的传统 — 一种由许多高级工程师在许多项目中实践的方法论(Linux 内核,PostgreSQL,Redis,SQLite 等)。我们引用的是传统,而不是任何单一的实践者。