OpenGrok AOSP MCP Server
为 AOSP 开发设计的 MCP 服务器,通过 OpenGrok 提供智能代码导航和分析。
功能特性
18 个工具(完整实现)
基础搜索工具 (5)
| 工具 | 功能 | 参数 |
|---|---|---|
search_definitions | 查找符号定义 | symbol, project, path, file_type, limit |
search_references | 查找符号引用 | symbol, project, path, file_type, limit |
search_full | 全文搜索 | query, project, path, file_type, limit |
get_file_content | 获取文件内容 | path, start_line, end_line |
list_projects | 列出项目 | 无 |
AIDL + Binder 工具 (2)
| 工具 | 功能 | 参数 |
|---|---|---|
find_aidl_impl | 分析 AIDL 接口 | interface_name, limit |
trace_binder_chain | 追踪 Binder 调用链 | interface_name, method_name, limit |
System Service + JNI 工具 (3)
| 工具 | 功能 | 参数 |
|---|---|---|
analyze_system_service | 分析系统服务 | service_name, limit |
find_jni_bridge | 查找 JNI 桥接 | java_class, limit |
trace_permission | 追踪权限检查 | permission, limit |
Advanced AOSP 工具 (6)
| 工具 | 功能 | 参数 |
|---|---|---|
find_hal_interface | 查找 HAL 接口 | hal_name, hal_type, limit |
trace_broadcast | 追踪广播流程 | action, limit |
search_selinux_policy | 搜索 SELinux 策略 | query, limit |
find_resource_overlay | 查找资源和 RRO | resource_name, limit |
trace_init_service | 追踪 Init 服务 | service_name, limit |
analyze_build_module | 分析构建模块 | module_name, limit |
Intelligent 工具 (2)
| 工具 | 功能 | 参数 |
|---|---|---|
explain_code_flow | 智能代码流程解释 | symbol, limit |
find_similar_patterns | 查找相似代码模式 | pattern, file_type, limit |
Token 优化
- 路径缩写:
frameworks/base→f/b - 代码片段限制 5 行
- 24 小时缓存
- 默认返回 10 条结果
快速开始
1. 安装
git clone opengrok-aosp-mcp
cd opengrok-aosp-mcp
./install.sh2. 配置
编辑 config.json:
{
"opengrok": {
"base_url": "http://localhost:8080",
"token": null
}
}3. 测试
# 测试连接
uv run python test_connection.py
# 测试所有工具
uv run python test_all.py4. 配置 Kiro CLI
编辑 ~/.kiro/settings/mcp.json:
{
"mcpServers": {
"opengrok-aosp": {
"command": "uv",
"args": [
"--directory",
"/path/to/opengrok-aosp-mcp",
"run",
"python",
"server.py"
]
}
}
}5. 使用
kiro-cli chat
# 在 Kiro 中
/tools trust-all
# 测试工具
搜索 ActivityManagerService 的定义
查找 startActivity 的引用工具使用示例
1. search_definitions - 查找符号定义
用途:查找函数、类、方法的定义位置
参数:
symbol(必需): 符号名称,如 "ActivityManagerService"project(可选): 项目过滤path(可选): 路径过滤,如 "frameworks/base"file_type(可选): 文件类型,如 "java", "cpp"limit(可选): 最大结果数,默认 10
示例:
User: 查找 ActivityManagerService 的定义
Kiro: [调用 search_definitions("ActivityManagerService")]
User: 在 frameworks/base 中查找 PowerManager 的定义
Kiro: [调用 search_definitions("PowerManager", path="frameworks/base")]返回格式:
[
{
"path": "f/b/services/core/java/com/android/server/am/ActivityManagerService.java",
"line": 123,
"snippet": "public class ActivityManagerService extends IActivityManager.Stub",
"url": "http://localhost:8080/xref/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java#123"
}
]2. search_references - 查找符号引用
用途:查找符号在哪些地方被使用
参数:同 search_definitions
示例:
User: 查找 startActivity 在哪里被调用
Kiro: [调用 search_references("startActivity")]
User: 查找 PowerManager.WakeLock 的所有使用
Kiro: [调用 search_references("WakeLock", path="frameworks")]3. search_full - 全文搜索
用途:搜索包含特定文本的代码(支持正则表达式)
参数:
query(必需): 搜索文本或正则表达式- 其他参数同上
示例:
User: 搜索包含 "Binder transaction" 的代码
Kiro: [调用 search_full("Binder transaction")]
User: 搜索 TODO 注释
Kiro: [调用 search_full("TODO:")]4. get_file_content - 获取文件内容
用途:读取指定文件的内容(带行号)
参数:
path(必需): 文件路径start_line(可选): 起始行,默认 1end_line(可选): 结束行,默认 50
示例:
User: 查看 ActivityManagerService.java 的前 100 行
Kiro: [调用 get_file_content("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", start_line=1, end_line=100)]返回格式:
{
"path": "f/b/services/core/java/com/android/server/am/ActivityManagerService.java",
"start_line": 1,
"end_line": 100,
"total_lines": 5234,
"text": "1: package com.android.server.am;\n2: \n3: import android.app.ActivityManager;\n..."
}5. list_projects - 列出项目
用途:列出 OpenGrok 中所有可用的项目
参数:无
示例:
User: 列出所有项目
Kiro: [调用 list_projects()]6. find_aidl_impl - 分析 AIDL 接口
用途:分析 AIDL 接口的完整实现(接口定义、Stub、Proxy、服务注册)
参数:
interface_name(必需): AIDL 接口名,如 "IActivityManager"limit(可选): 每个类型的最大结果数,默认 10
示例:
User: 分析 IActivityManager 接口
Kiro: [调用 find_aidl_impl("IActivityManager")]
User: 查看 IWindowManager 的实现
Kiro: [调用 find_aidl_impl("IWindowManager")]返回格式:
{
"interface": {
"path": "f/b/core/java/android/app/IActivityManager.aidl",
"line": 1,
"snippet": "interface IActivityManager {",
"url": "http://localhost:8080/xref/..."
},
"stub": [
{
"path": "f/b/core/java/android/app/IActivityManager.java",
"line": 123,
"snippet": "public static abstract class Stub extends Binder",
"url": "http://localhost:8080/xref/..."
}
],
"proxy": [...],
"registration": [...]
}7. trace_binder_chain - 追踪 Binder 调用链
用途:追踪 Binder IPC 调用链,从 Java 接口到 Native 实现
参数:
interface_name(必需): 接口名,如 "IActivityManager"method_name(必需): 方法名,如 "startActivity"limit(可选): 每层的最大结果数,默认 10
示例:
User: 追踪 IActivityManager.startActivity 的调用链
Kiro: [调用 trace_binder_chain("IActivityManager", "startActivity")]
User: 查看 IWindowManager.addWindow 的实现路径
Kiro: [调用 trace_binder_chain("IWindowManager", "addWindow")]返回格式:
{
"java_interface": [...], // Java 接口定义
"java_impl": [...], // Java 实现(Stub)
"jni_bridge": [...], // JNI 桥接
"native_impl": [...] // Native 实现
}8. analyze_system_service - 分析系统服务
用途:分析系统服务的完整生命周期(启动、注册、客户端使用)
参数:
service_name(必需): 服务名,如 "activity", "power", "window"limit(可选): 每个类型的最大结果数,默认 10
示例:
User: 分析 ActivityManagerService
Kiro: [调用 analyze_system_service("activity")]
User: PowerManagerService 是如何启动的?
Kiro: [调用 analyze_system_service("power")]返回格式:
{
"service_class": [...], // 服务类定义
"registration": [...], // 服务注册
"startup": [...], // 启动逻辑
"client_usage": [...] // 客户端使用
}9. find_jni_bridge - 查找 JNI 桥接
用途:查找 Java 类的 Native 方法和 JNI 实现
参数:
java_class(必需): Java 类全名,如 "android.os.Process"limit(可选): 每个类型的最大结果数,默认 10
示例:
User: android.os.Process 的 JNI 实现在哪里?
Kiro: [调用 find_jni_bridge("android.os.Process")]
User: 查找 Binder 的 native 方法
Kiro: [调用 find_jni_bridge("android.os.Binder")]返回格式:
{
"java_native_methods": [...], // Java 中的 native 方法声明
"jni_registration": [...], // JNI 方法注册
"native_impl": [...] // Native 实现
}10. trace_permission - 追踪权限检查
用途:追踪权限的定义、检查点和强制执行
参数:
permission(必需): 权限全名,如 "android.permission.CAMERA"limit(可选): 每个类型的最大结果数,默认 10
示例:
User: CAMERA 权限在哪里检查?
Kiro: [调用 trace_permission("android.permission.CAMERA")]
User: 追踪 WRITE_EXTERNAL_STORAGE 权限
Kiro: [调用 trace_permission("android.permission.WRITE_EXTERNAL_STORAGE")]返回格式:
{
"permission_definition": [...], // 权限定义
"check_points": [...], // 检查点
"enforcement": [...] // 强制执行
}典型使用场景
场景 1:理解某个类的实现
User: ActivityManagerService 是如何实现的?
Kiro 会:
1. search_definitions("ActivityManagerService") - 找到定义
2. get_file_content(...) - 查看类的主要代码
3. search_references("ActivityManagerService") - 查看哪里使用了它场景 2:追踪方法调用链
User: startActivity 方法的调用链是什么?
Kiro 会:
1. search_definitions("startActivity") - 找到定义
2. search_references("startActivity") - 找到所有调用点
3. 逐层追踪调用关系场景 3:查找特定功能的实现
User: 权限检查是如何实现的?
Kiro 会:
1. search_full("checkPermission") - 全文搜索
2. search_definitions("checkPermission") - 找到具体实现
3. get_file_content(...) - 查看实现细节场景 4:分析 AIDL 接口
User: IActivityManager 接口是如何实现的?
Kiro 会:
1. find_aidl_impl("IActivityManager") - 分析接口、Stub、Proxy
2. 查看服务注册点
3. 理解 Binder 通信机制场景 5:追踪 Binder 调用链
User: startActivity 是如何通过 Binder 调用的?
Kiro 会:
1. trace_binder_chain("IActivityManager", "startActivity")
2. 展示 Java → JNI → Native 的完整调用路径
3. 帮助理解跨进程通信流程场景 6:分析系统服务
User: PowerManagerService 是如何工作的?
Kiro 会:
1. analyze_system_service("power")
2. 查看服务启动、注册和客户端使用
3. 理解系统服务架构场景 7:查找 JNI 实现
User: android.os.Process 的 native 方法在哪里实现?
Kiro 会:
1. find_jni_bridge("android.os.Process")
2. 展示 Java native 声明和 C++ 实现
3. 理解 Java-Native 交互场景 8:追踪权限检查
User: CAMERA 权限在哪里被检查?
Kiro 会:
1. trace_permission("android.permission.CAMERA")
2. 找到权限定义、检查点和强制执行
3. 理解权限机制项目结构
opengrok-aosp-mcp/
├── README.md # 本文件
├── config.json # 配置文件
├── server.py # MCP 服务器入口
├── install.sh # 安装脚本
├── test_all.py # 测试所有工具
├── test_connection.py # 测试 OpenGrok 连接
├── core/
│ ├── opengrok_client.py # OpenGrok API 客户端
│ ├── cache.py # 查询缓存
│ └── token_optimizer.py # Token 优化
└── tools/
└── basic.py # 5 个基础工具实现故障排查
OpenGrok 连接失败
# 测试连接
curl http://localhost:8080/api/v1/search?full=test&maxresults=1
# 检查 OpenGrok 是否运行
ps aux | grep opengrok搜索结果为空
- 确认 OpenGrok 已索引源码
- 检查搜索的符号是否存在
- 尝试使用
search_full进行全文搜索
认证错误 (401)
- 在
config.json中配置token - 或在 OpenGrok 中禁用认证
开发路线
- [x] Milestone 1: 基础框架 + 5 个基础工具
- [x] Milestone 2: AIDL + Binder 分析工具
- [x] Milestone 3: System Service + JNI 工具
- [x] Milestone 4-7: Advanced AOSP 工具(HAL、Broadcast、SELinux、Resource、Init、Build)
- [x] Milestone 8: 智能分析工具
🎉 项目已完成所有功能,共 18 个工具!
许可证
Apache 2.0
致谢
- 基于 opengrok-mcp
- 使用 FastMCP 框架
- 为 Kiro CLI 设计
