Java代码审查MCP服务器
MCP(模型上下文协议)服务器,充当 高级软件开发工程师 拥有超过15年的自动化代码审查经验。专为 JDK 17/21 具有完整Spring Boot支持和JBCT方法合规性检查的项目。与集成 开源代码, 克劳德代码,以及 克劳德桌面版.
特性
代码审查能力
- 单文件审核 --使用可配置的审阅级别分析单个Java文件
- Git差异评论 --审查未提交的更改、阶段性更改或任何git ref范围
- 完整项目评审 --项目范围的分析,包括一次调用中的依赖性和架构检查
- JBCT合规性 --37规则Java后端编码技术方法验证
- 弹簧靴合规性 --涵盖春季常见陷阱的6条规则
- 文件结果缓存 --在重复的项目运行中跳过未更改的文件(按mtime键控)
静态分析(纯Python)
- 代码样式检查(行长、缩进)
- 设计模式验证
- 安全漏洞检测(硬编码凭据、SQL注入、敏感日志)
- 性能优化建议
JDK 17+功能检测
- 不可变DTO的记录
- 受控继承的密封类
- 图案匹配(
instanceof) - 切换表达式
- 文本块
var关键字用法
Java 21功能检测
- 虚拟线程(
Thread.ofVirtual()) - 结构化并发(
StructuredTaskScope) - 字符串模板
多模块Maven/Gradle支持
- 步行全部
pom.xml和build.gradle项目树中的文件 - 聚合模块之间的依赖关系
- 检测跨模块版本冲突
审查级别
full--所有检查(默认)quick--仅严重和重大严重程度;跳过样式、JDK建议、JBCT样式/命名security--仅限安全检查;没有JBCT,没有JDK建议
增强报告
- 目录(当报告有≥3节时)
- 带有表情符号严重程度指示器的摘要仪表板
- 前5个最有问题的文件
- 按严重程度和文件分组的问题
- 架构报告的层依赖矩阵
体系结构分析
- 包结构验证(域/适配器/用例层)
- 循环依赖检测
- 导入流验证(域不得导入适配器)
- 自动包含在
review_java_project--无需单独通话
______________________________________________________________________
需求
- Python 3.10+
- Git(用于Git diff评论)
______________________________________________________________________
安装
# Clone or download this repository
cd java-code-review-mcp
# Create virtual environment
python -m venv .venv
# Activate (Linux/Mac)
source .venv/bin/activate
# Activate (Windows)
.venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt或者使用紫外线:
uv venv
uv add "mcp[cli]" fastmcp javalang rich pyyaml______________________________________________________________________
配置
编辑 config/code_review_config.md (或通过以下方式加载的YAML文件 load_custom_config)自定义:
编码风格和阈值
max_line_length: 120
indent_size: 4
use_spaces: true
max_method_length: 30
max_class_length: 500
max_parameters: 5安全检查
security:
check_hardcoded_secrets: true
check_sql_injection: true
check_logging_sensitive: trueJDK 17+功能建议
jdk17_features:
recommend_records: true
recommend_sealed_classes: true
recommend_switch_expressions: true
recommend_text_blocks: true
recommend_var_keyword: true
recommend_pattern_matching: trueJava 21功能推荐
jdk21_features:
recommend_virtual_threads: true
recommend_structured_concurrency: true
recommend_string_templates: true弹簧靴分析
弹簧分析 默认情况下禁用 以避免非Spring项目的误报。
spring_enabled: true # Enable Spring Boot rule checks
spring_rules:
transactional: true # SPRING-TX-01
field_injection: true # SPRING-DI-01
circular_autowired: true # SPRING-DI-02
missing_stereotype: true # SPRING-STEREO-01
rest_return_types: true # SPRING-REST-01
value_fallback: true # SPRING-CONFIG-01JBCT配置文件设置
jbct_profile: basic # disabled | basic | full
jbct_rules:
return_types: true # RET-01 to RET-05
exceptions: true # EX-01, EX-02
value_objects: true # VO-01, VO-02
lambda_rules: true # LAM-01, LAM-02, LAM-03, NEST-01
patterns: true # PAT-01, PAT-02, SEQ-01
architecture: true # MIX-01
naming: true # NAM-01, NAM-02, ACR-01
zones: true # ZONE-01, ZONE-02, ZONE-03
style: true # STY-01 to STY-06
logging: true # LOG-01, LOG-02
static_imports: true # STATIC-01
utilities: true # UTIL-01, UTIL-02
sealed_types: true # SEAL-01
usecase: true # UC-01配置文件级别:
disabled--无JBCT检查basic--核心12条规则(返回类型、异常、值对象、lambdas、模式、架构、命名、区域)full--所有37条JBCT规则
包装图案
jbct_packages:
domain_patterns:
- "**.domain.**"
- "**.usecase.**"
adapter_patterns:
- "**.adapter.**"
- "**.io.**"区域动词
zone2_verbs:
- validate
- process
- handle
- execute
zone3_verbs:
- get
- fetch
- parse
- load______________________________________________________________________
运行服务器
# With Python
python src/server.py
# With uv
uv run python src/server.py服务器使用 JAVA_REVIEW_CONFIG 用于定位自定义配置文件的环境变量:
JAVA_REVIEW_CONFIG=/path/to/config.yaml python src/server.py______________________________________________________________________
MCP工具参考
工具摘要
| 工具 | 关键参数 | 说明 |
|---|---|---|
review_java_file | file_path, output_format, review_level | 查看单个Java文件 |
review_java_git_diff | repo_path, output_format, review_level, ref, staged | 查看git diff(未提交、暂存或任何引用) |
review_java_project | project_path, output_format, review_level, include_deps, use_cache | 包括架构在内的全面项目审查 |
analyze_java_static | file_path, tools | 单个文件的低级静态分析 |
analyze_java_dependencies | project_path, build_tool | Maven/Gradle多模块依赖性分析 |
analyze_java_architecture | project_path, output_format | 使用层矩阵进行架构验证 |
analyze_spring_compliance | file_path, output_format | Spring Boot/Spring Framework规则检查 |
review_jbct_compliance | file_path, output_format, profile | JBCT方法合规性(文件或目录) |
get_review_checklist | checklist_type | 检索审查清单 |
get_current_config | -- | 显示活动配置 |
get_jbct_config | -- | 显示JBCT特定配置 |
load_custom_config | config_path | 加载YAML或Markdown配置文件 |
______________________________________________________________________
review_java_file
查看单个Java文件以了解样式、安全性、设计和JDK现代化问题。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
file_path | string | 必填 | 路径 .java 文件 |
output_format | 字符串 | "markdown" | markdown, json, sarif,或 both |
review_level | 字符串 | "full" | full, quick,或 security |
______________________________________________________________________
review_java_git_diff
从git查看Java更改。默认情况下,审核未记录的更改(git diff).
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
repo_path | 字符串 | "." | git存储库根路径 |
output_format | 字符串 | "markdown" | markdown, json, sarif,或 both |
review_level | 字符串 | "full" | full, quick,或 security |
ref | 字符串 | "" | 与git ref进行比较(例如。 HEAD~1, main,提交SHA)。相互排斥 staged. |
staged | 布尔值 | false | 何时 true,仅审查阶段性更改(git diff --cached) |
______________________________________________________________________
review_java_project
查看整个Java项目。自动包括架构分析和(可选)依赖性分析。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
project_path | string | 必需 | Java项目根目录的路径 |
output_format | 字符串 | "markdown" | markdown, json, sarif,或 both |
review_level | 字符串 | "full" | full, quick,或 security |
include_deps | 布尔值 | true | 分析Maven/Gradle依赖关系 |
use_cache | 布尔值 | true | 缓存每个文件的结果(按路径+mtime键控);重新运行时跳过未更改的文件 |
______________________________________________________________________
analyze_java_static
对单个Java文件运行低级静态分析。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
file_path | string | 必填 | 路径 .java 文件 |
tools | 字符串 | "all" | 要运行哪些检查 |
______________________________________________________________________
analyze_java_dependencies
分析Maven或Gradle依赖关系。支持多模块项目——遍历所有项目的完整项目树 pom.xml / build.gradle 文件并检测跨模块版本冲突。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
project_path | string | 必需 | Java项目根目录的路径 |
build_tool | 字符串 | "auto" | auto, maven,或 gradle |
______________________________________________________________________
analyze_java_architecture
验证项目架构:包结构、循环依赖检测和导入流(域不得导入适配器)。还生成层依赖矩阵。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
project_path | string | 必需 | Java项目目录的路径 |
output_format | 字符串 | "markdown" | markdown, json,或 sarif |
注:review_java_project自动调用它——你只需要analyze_java_architecture直接用于架构分析。
______________________________________________________________________
analyze_spring_compliance
检查Java文件或项目目录中的Spring Boot/Spring Framework问题。需要 spring_enabled: true 在配置中,规则将被触发。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
file_path | string | 必填 | 路径 .java 文件或项目目录 |
output_format | 字符串 | "markdown" | markdown, json,或 sarif |
______________________________________________________________________
review_jbct_compliance
检查Java文件或目录是否符合JBCT方法。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
file_path | string | 必填 | 路径 .java 文件或项目目录 |
output_format | 字符串 | "markdown" | markdown, json,或 sarif |
profile | 字符串 | "basic" | basic (12条核心规则)或 full (共37条规则) |
______________________________________________________________________
get_review_checklist
检索代码审查清单。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
checklist_type | 字符串 | "full" | full 或 quick |
______________________________________________________________________
load_custom_config
在运行时加载YAML或Markdown配置文件。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
config_path | string | 必填 | 路径 .yaml, .yml,或 .md 配置文件 |
______________________________________________________________________
输出格式
报告可以在以下位置生成:
| 格式 | 描述 |
|---|---|
markdown | 人类可读(默认) |
json | CI/CD管道的机器可读性 |
sarif | GitHub代码扫描、Azure DevOps等行业标准。 |
both | Markdown+JSON组合 |
______________________________________________________________________
审查级别
| 级别 | 检查什么 |
|---|---|
full | 一切——风格、设计、安全性、JDK建议、JBCT(所有严重性) |
quick | 仅限于关键和重大严重性问题;跳过样式规则、JDK建议和JBCT样式/命名规则 |
security | 仅安全类别(HardcodedCredentials, SQLInjection);没有JBCT,没有JDK建议 |
______________________________________________________________________
MCP资源
服务器公开了三个可通过MCP资源URI访问的只读资源:
| URI | 描述 |
|---|---|
checklist://full | JSON格式的完整代码审查清单 |
checklist://quick | JSON格式的快速检查表 |
config://current | 活动配置为JSON |
______________________________________________________________________
整合
开源代码
添加到您的项目 opencode.json:
{
"mcp": {
"java-code-review": {
"type": "local",
"command": ["python", "path/to/java-code-review-mcp/src/server.py"],
"enabled": true
}
}
}示例提示:
Review the Java file src/main/java/com/example/MyService.java
Check this file for JBCT compliance: src/main/java/com/example/MyService.java
Do a full code review of this project
Run JBCT compliance check on the src/main/java directory
Analyze Spring Boot issues in this project
Show me the current code review configuration______________________________________________________________________
克劳德代码
添加 ~/.claude/claude_desktop_config.json (或通过 claude mcp add):
{
"mcpServers": {
"java-code-review": {
"command": "python",
"args": ["path/to/java-code-review-mcp/src/server.py"]
}
}
}示例提示:
Review this Java file for issues
Review my uncommitted Java changes
Run a quick review of the project (critical issues only)
Check for Spring Boot problems in src/main/java
Run JBCT compliance check on this directory
What JBCT rules are enabled?
Show the current config______________________________________________________________________
克劳德桌面版
添加 %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"java-code-review": {
"command": "python",
"args": ["path/to/java-code-review-mcp/src/server.py"]
}
}
}______________________________________________________________________
JBCT方法
服务器包括 Java后端编码技术 合规性检查——一种编写可预测、可测试的Java后端代码的方法。特别适用于人工智能辅助开发。
什么是JBCT?
JBCT提供了以下机械规则:
- 返回类型:每个方法返回以下之一
T,Option,Result,或Promise - 错误处理:使用
Cause随着Result/Promise,没有例外 - 值对象:工厂方法返回
Result - Lambda规则:lambdas中没有复杂的逻辑
- 建筑:域包中没有I/O
- 命名:工厂和验证的一致惯例
JBCT规则(共37条)
退货类型(5条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-RET-01 | 错误 | 业务方法必须使用T、Option、Result或Promise |
| JBCT-RET-02 | 错误 | 没有嵌套包装(Promise>, Option>) |
| JBCT-RET-03 | 错误 | 从不返回null--使用 Option |
| JBCT-RET-04 | 警告 | 使用 Unit 而不是 Void |
| JBCT-RET-05 | 警告 | 避免总是连续的结果(直接返回T) |
例外情况(2条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-EX-01 | 错误 | 无业务异常——使用带结果/承诺的原因 |
| JBCT-EX-02 | 错误 | 不使用 orElseThrow() --使用结果/选项 |
值对象(2条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-VO-01 | 警告 | 值对象应返回出厂 Result |
| JBCT-VO-02 | 警告 | 不要绕过工厂——使用工厂方法 |
Lambda(4条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-LAM-01 | 警告 | lambdas中没有复杂的逻辑(if、switch、try-catch) |
| JBCT-LAM-02 | 警告 | lambdas中没有括号——方法摘要 |
| JBCT-LAM-03 | 警告 | lambdas中没有三元函数——使用 filter() 或提取物 |
| JBCT-NEST-01 | 警告 | lambda中没有嵌套的一元运算 |
模式(3条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-PAT-01 | 警告 | 使用函数迭代而不是原始循环 |
| JBCT-PAT-02 | 警告 | 测序仪内无叉连接 |
| JBCT-SEQ-01 | 警告 | 链条长度限制(2-5步) |
架构(1条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-MIX-01 | 错误 | 域包中没有I/O操作 |
命名(3条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-NAM-01 | 警告 | 工厂方法: TypeName.typeName() |
| JBCT-NAM-02 | 警告 | 使用 Valid 前缀,不是 Validated |
| JBCT-ACR-01 | 警告 | 首字母缩略词应使用PascalCase |
区域(3条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-ZONE-01 | 警告 | 步骤界面使用区域2动词 |
| JBCT-ZONE-02 | 警告 | 叶子函数使用区域3动词 |
| JBCT-ZONE-03 | 警告 | 测序仪链中无区域混合 |
风格(6条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-STY-01 | 警告 | 首选流畅失败: cause.result() |
| JBCT-STY-02 | 警告 | 首选构造函数引用: X::new |
| JBCT-STY-03 | 警告 | 代码中没有完全限定的类名 |
| JBCT-STY-04 | 警告 | 实用类模式:密封接口 |
| JBCT-STY-05 | 警告 | 方法引用比lambda更可取 |
| JBCT-STY-06 | 警告 | 导入顺序:java→ javax→ 实用主义→ 第三方的→ 项目 |
日志记录(2条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-LOG-01 | 警告 | 无条件记录 |
| JBCT-LOG-02 | 警告 | 没有记录器作为方法参数 |
其他规则(5条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| JBCT-STATIC-01 | 警告 | Pragmatica更喜欢静态导入 |
| JBCT-UTIL-01 | 警告 | 使用Pragmatic解析实用程序 |
| JBCT-UTIL-02 | 警告 | 使用 Verify.Is 谓词 |
| JBCT-SEAL-01 | 警告 | 错误接口应密封 |
| JBCT-UC-01 | 警告 | 用例工厂返回lambdas |
______________________________________________________________________
弹簧靴支架
这 analyze_spring_compliance 工具(和 spring_enabled config标志)添加Spring特定的检查。启用 spring_enabled: true 在您的配置中。
春季规则(6条规则)
| 规则 | 严重性 | 描述 |
|---|---|---|
| 春季-TX-01 | 主要 | @Transactional 在非公共方法上——Spring代理无法拦截它 |
| SPRING-DI-01 | 主要 | @Autowired 现场注入——首选构造函数注入 |
| SPRING-DI-02 | major | 类似乎注入了自己——可能是循环依赖 |
| 春夏01 | 轻微 | 缺失 @Service/@Repository/@Component 论服务型班级 |
| 春红01 | 小调 | @RestController 方法返回原始类型,而不是 ResponseEntity |
| 春季音乐会-01 | 小调 | @Value 硬编码回退掩码缺少配置属性 |
快速开始
# config/code_review_config.md (or your YAML config)
spring_enabled: true然后在你的AI助手中:
Analyze Spring Boot issues in src/main/java/com/example/______________________________________________________________________
体系结构分析
这 analyze_java_architecture 工具(以及自动架构步骤) review_java_project)执行:
- 包装结构验证 --检查域、适配器和用例层
- 循环依赖检测 --查找包之间的循环导入并显示循环路径
- 导入流验证 --确保域包不导入适配器包
- 层依赖关系矩阵 --呈现一个层×层表,显示允许/违反的依赖关系
用法
直接调用仅架构分析:
Analyze the architecture of this Java project
Check for circular dependencies in the codebase或者将其作为完整项目审查的一部分自动获取:
Do a full code review of this Java project______________________________________________________________________
CI/CD:SARIF输出
GitHub操作
name: Java Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run JBCT Check
run: |
python -c "
from src.tools.code_review import review_jbct_project
from src.tools.report_generator import generate_report
from src.config.loader import load_config, get_config
import asyncio
load_config()
config = get_config()
config['jbct_profile'] = 'basic'
result = asyncio.run(review_jbct_project('src/main/java', config))
print(generate_report(result, 'sarif'))
" > results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifAzure DevOps
在您的管道中配置SARIF结果以进行安全扫描集成。
______________________________________________________________________
测试
该项目包括一个测试套件,包含6个模块的61个测试。
运行测试
# Quick summary
python -m pytest tests/ -q
# Verbose with test names
python -m pytest tests/ -v
# Single module
python -m pytest tests/test_spring_analyzer.py -v测试模块
| 模块 | 覆盖范围 |
|---|---|
test_static_analysis.py | 静态分析规则、JDK 17/21建议、安全检查 |
test_jbct_analyzer.py | 所有37条JBCT规则 |
test_dependency_analyzer.py | Maven/Gradle多模块解析,版本冲突检测 |
test_git_diff_parser.py | Git差异解析、引用和暂存模式 |
test_spring_analyzer.py | 全部6条春季规则 |
test_code_review.py | 端到端编排(review_file、review_project、缓存) |
测试夹具在 tests/fixtures/ (例如。, SecurityIssues.java, JbctViolations.java, SpringIssues.java).
______________________________________________________________________
许可证
MIT许可证
