Token导航 LogoToken导航TokenDH.com
Opengrok Aosp MCP logo
开发工具stdio官方级别未说明来源级核验

Opengrok Aosp MCP

MCP Server

为AOSP开发设计的智能代码导航和分析工具,提供18种代码搜索和分析功能,适用于AOSP开发者进行代码理解和调试。

工具数

18

提示词数

0

GitHub Stars

1

资源数

0
代码搜索代码分析Python开发工具

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

BarryHsia

提供方

BarryHsia

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run python test_connection.py

详细介绍

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查找资源和 RROresource_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/basef/b
  • 代码片段限制 5 行
  • 24 小时缓存
  • 默认返回 10 条结果

快速开始

1. 安装

git clone  opengrok-aosp-mcp
cd opengrok-aosp-mcp
./install.sh

2. 配置

编辑 config.json

{
  "opengrok": {
    "base_url": "http://localhost:8080",
    "token": null
  }
}

3. 测试

# 测试连接
uv run python test_connection.py

# 测试所有工具
uv run python test_all.py

4. 配置 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 (可选): 起始行,默认 1
  • end_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

致谢

目录标签

目录标签

代码搜索代码分析Python开发工具本地部署AOSP开发智能导航

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

token

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

18

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiotoken部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP