萨邦系统mcp
为自动化内部代码审查/静态分析而创建 基于Spring AI的MCP服务器是。\ stdio 以模式工作,LLM代理可以直接调用Bitbucket PR/GitLab MR查询和评论,以及运行SPARROW分析。
核心功能
- Bitbucket PR查询(
bitbucket-pr-get) - Bitbucket PR撰写一般评论(
bitbucket-pr-comment-post) - Bitbucket PR行撰写评论(
bitbucket-pr-line-comment-post) - GitLab MR查询(
gitlab-mr-get) - GitLab MR撰写一般评论(
gitlab-mr-comment-post) - GitLab MR行评论(
gitlab-mr-line-comment-post) - 提交SPARROW分析作业(
sparrow-analyze) - 查看SPARROW分析作业状态(
sparrow-analyze-status)
技术堆栈
- Java 21
- 弹簧靴4.0.2
- Spring AI MCP服务器启动器(
org.springframework.ai:spring-ai-starter-mcp-server) - Gradle
项目结构
src/main/java/com/mcp_server/sabang
├── tool/ # MCP 툴 엔트리포인트 (@McpTool)
├── service/ # 비즈니스 로직
├── bitbucket/ # Bitbucket URL 파싱/API 클라이언트/검증
├── gitlab/ # GitLab URL 파싱/API 클라이언트/검증
├── dto/ # 요청/응답 스키마
├── model/ # SPARROW Job 상태 모델
└── exception/ # 도메인 예외动作方式
- 服务器
application.yaml在spring.ai.mcp.server.stdio: true设置为。 - 也就是说,不是HTTP服务器。 MCP客户端进程直接附加到stdio。是。
- GitLab/Bitbucket API是Java
HttpClient直接调用。 - SPARROW分析作为单独的进程运行外部客户端(用户)脚本,并在内存中管理作业状态。
构建和运行
1)本地构建
./gradlew clean build2)运行MCP服务器
java -jar build/libs/sabang-0.0.1-SNAPSHOT.jarMCP客户端连接示例
下面是 stdio 基于的MCP服务器注册示例(每个客户端的密钥名称可能不同)。
{
"mcpServers": {
"sabang": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/sabang-system-mcp/build/libs/sabang-0.0.1-SNAPSHOT.jar"
]
}
}
}工具规格摘要
比特桶
bitbucket-pr-get
- 输入:
prUrl,pat - 输出:PR元数据+更改文件列表+提交列表
bitbucket-pr-comment-post
- 输入:
prUrl,pat,body - 输出:创建的
commentId,webUrl
bitbucket-pr-line-comment-post
- 输入:
prUrl,pat,body,path,line,lineType lineType:ADDED | REMOVED | CONTEXT
GitLab
gitlab-mr-get
- 输入:
mrUrl,pat - 输出:MR元数据+更改文件列表+版本(sha)列表
gitlab-mr-comment-post
- 输入:
mrUrl,pat,body - 输出:创建的
noteId,webUrl
gitlab-mr-line-comment-post
- 输入:
mrUrl,pat,body,path,line,lineType lineType:ADDED | REMOVED
麻雀
sparrow-analyze
- 输入:
- serverUrl - clientPath - passwordPath - projectId - username - changedFiles (绝对路径数组)
- 输出:
jobId,projectId,status(PENDING)
sparrow-analyze-status
- 输入:
jobId,waitSeconds(1~30 권장) - 输出:状态(
PENDING/RUNNING/SUCCEEDED/FAILED),exitCode,output,error,时间戳
URL格式规则
- Bitbucket PR URL示例\
https://bitbucket.example.com/projects/PROJ/repos/my-repo/pull-requests/123
- GitLab MR URL示例\
https://gitlab.example.com/group/project/-/merge_requests/123
如果URL解析失败 InvalidPrUrlException, InvalidMrUrlException发生。
操作/安全注意事项
- PAT作为工具输入传递。 最小权限令牌必须使用。
- SPARROW执行路径(
clientPath,passwordPath)必须具有服务器进程权限。 - SPARROW作业状态基于当前内存,在重新启动时会丢失。
测试
./gradlew test