OpenGrok AOSP MCP
Provides tools for searching code definitions, references, full text, analyzing AIDL interfaces, Binder calls, system services, JNI bridges, permissions, HAL interfaces, broadcasts, SELinux policies, resources, init services, and build modules within the Android Open Source Project (AOSP) codebase via OpenGrok.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenGrok AOSP MCPFind references to startActivity"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenGrok AOSP MCP Server
为 AOSP 开发设计的 MCP 服务器,通过 OpenGrok 提供智能代码导航和分析。
功能特性
18 个工具(完整实现)
基础搜索工具 (5)
工具 | 功能 | 参数 |
| 查找符号定义 | symbol, project, path, file_type, limit |
| 查找符号引用 | symbol, project, path, file_type, limit |
| 全文搜索 | query, project, path, file_type, limit |
| 获取文件内容 | path, start_line, end_line |
| 列出项目 | 无 |
AIDL + Binder 工具 (2)
工具 | 功能 | 参数 |
| 分析 AIDL 接口 | interface_name, limit |
| 追踪 Binder 调用链 | interface_name, method_name, limit |
System Service + JNI 工具 (3)
工具 | 功能 | 参数 |
| 分析系统服务 | service_name, limit |
| 查找 JNI 桥接 | java_class, limit |
| 追踪权限检查 | permission, limit |
Advanced AOSP 工具 (6)
工具 | 功能 | 参数 |
| 查找 HAL 接口 | hal_name, hal_type, limit |
| 追踪广播流程 | action, limit |
| 搜索 SELinux 策略 | query, limit |
| 查找资源和 RRO | resource_name, limit |
| 追踪 Init 服务 | service_name, limit |
| 分析构建模块 | module_name, limit |
Intelligent 工具 (2)
工具 | 功能 | 参数 |
| 智能代码流程解释 | symbol, limit |
| 查找相似代码模式 | pattern, file_type, limit |
Token 优化
路径缩写:
frameworks/base→f/b代码片段限制 5 行
24 小时缓存
默认返回 10 条结果
Related MCP server: vHal MCP Server
快速开始
1. 安装
git clone <repo-url> 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 中禁用认证
开发路线
Milestone 1: 基础框架 + 5 个基础工具
Milestone 2: AIDL + Binder 分析工具
Milestone 3: System Service + JNI 工具
Milestone 4-7: Advanced AOSP 工具(HAL、Broadcast、SELinux、Resource、Init、Build)
Milestone 8: 智能分析工具
🎉 项目已完成所有功能,共 18 个工具!
许可证
Apache 2.0
致谢
基于 opengrok-mcp
使用 FastMCP 框架
为 Kiro CLI 设计
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BarryHsia/opengrok-aosp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server