Skip to main content
Glama
pgatzka

jar-inspector-mcp

by pgatzka

jar-inspector-mcp

一个 MCP 服务器,让 Claude Code 能够深入 Java 归档——类、API、源码、资源、字节码——而无需解压它们。

问题

当 Claude Code 处理 JVM 项目并需要知道 jar 内部有什么时,它会退回到 shell 工具:

unzip -l target/lib/jackson-databind-2.16.1.jar     # 780 lines of entry listing
unzip -o app.jar -d /tmp/x && cat /tmp/x/…/Foo.java # a whole file to answer one question
javap -p -c -cp app.jar com.acme.Foo                # 300 KB of bytecode

所有这些都会进入上下文窗口,其中大部分是噪音,有些还会在工作树中写入临时文件。

解决方案

十个聚焦的工具,回答实际问题——“这个 jar 里有什么”、“这个类的 API 是什么”、“这个字符串在哪里设置”——并且只返回这些内容。

jackson-databind-2.16.1.jar(779 个类,解压后 4.1 MB)上测量:

替代方案

jar-inspector

unzip -l <jar>

79,674 字符

jar_overview

2,632 字符

减少 97%

javap <class>

36,008 字符

jar_class_outline

18,061 字符

减少 50%

javap -p -c <class>

303,105 字符

jar_class_outline

21,409 字符

减少 93%

永远不会写入磁盘,并且不需要 JDK——类文件解析器是纯 Python 的。(jar_disassemble 是唯一的例外;它会调用 javap。)

安装

需要 uv 和 Python 3.10+。

# from GitHub, nothing to clone
claude mcp add jar-inspector -- uvx --from git+https://github.com/pgatzka/jar-inspector-mcp jar-inspector-mcp

# or from a local clone
git clone https://github.com/pgatzka/jar-inspector-mcp && cd jar-inspector-mcp
claude mcp add jar-inspector -- uv run --directory "$PWD" jar-inspector-mcp

添加 --scope project 以通过 .mcp.json 与仓库共享,或使用 --scope user 在所有地方启用。要手动配置:

// .mcp.json
{
  "mcpServers": {
    "jar-inspector": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/pgatzka/jar-inspector-mcp", "jar-inspector-mcp"]
    }
  }
}

使用 claude mcp list 或 Claude Code 中的 /mcp 进行验证。

其他 MCP 客户端:服务器使用 stdio,因此 uvx --from … jar-inspector-mcp 可以作为命令在任何地方使用。

工具

工具

回答的问题

jar_overview

这个工件是什么?清单、包、类数量、字节码级别、是否附加了源码

jar_list

里面有哪些条目?按 glob 和类型过滤,分页

jar_find_class

HttpClient 在哪里?简单名称、FQCN 或 glob → 类名

jar_class_outline

这个类的 API 是什么?声明、注解、字段、方法签名

jar_read_source

它实际做什么?附加的 .java/.kt 源码,按行窗口

jar_read_entry

这个配置里有什么?一个文本条目:MANIFEST、META-INF/services/…、XML

jar_search

这个字符串在哪里?在文本条目和编译后的字符串常量中搜索

jar_class_dependencies

这个类接触了什么?内部与外部引用

jar_disassemble

这个方法编译成什么?通过 javap 获取一个方法的字节码

jar_find

jar 在哪里?搜索构建输出、Maven 仓库和 Gradle 缓存

每个工具都是只读的,并接受一个 jar 参数,可以是:

  • 归档文件——.jar.war.ear.aar.zip.jmod

  • 解压后的类目录——target/classesbuild/classes/java/main

  • 嵌套归档——app.jar!BOOT-INF/lib/dep-1.0.jar(Spring Boot fat jars)

输出示例

jar_class_outline,逐字(这是测试断言的确切输出):

com.acme.demo.UserService  [class, Java 21, UserService.java]
// source is attached -- jar_read_source(jar, 'com.acme.demo.UserService') shows it

@Deprecated
@Marker(enabled=true, code='z', tags={"alpha", "beta"})
public class UserService implements Repository<String, Integer>

  // fields (2)
  public static final String CACHE_KEY = "user.cache"
  protected volatile boolean dirty

  // constructors (1)
  public UserService(Map<Integer, String> users)

  // methods (5)
  public long count()
  public List<String> findAll()
  public Optional<String> findById(Integer id) throws IllegalStateException
  public <R extends Comparable<R>> List<R> mapAll(Function<String, R> fn)
  public void rename(int id, String newName, String... aliases)

  // nested (1)
  UserService.Builder

  // 4 more member(s) hidden (visibility below 'protected', synthetic or bridge)

泛型签名、参数名称(使用 -g 编译时)、可变参数、声明的异常、常量值、记录、枚举和 default 方法都会保留。方法体、桥接方法和常量池不会。

配置

环境变量

效果

JAR_INSPECTOR_ALLOW

服务器可以读取的路径分隔根目录。未设置表示无限制

JAR_INSPECTOR_SEARCH_PATH

jar_find 首先扫描的额外目录

MAVEN_REPO_LOCAL

Maven 仓库位置,如果不是 ~/.m2/repository

jar_find 按顺序搜索:./target./build/libs./libs./lib、Maven 仓库、Gradle 模块缓存、Ivy 缓存和 Coursier 缓存。

要将服务器限制在一个树中:

claude mcp add jar-inspector --env JAR_INSPECTOR_ALLOW="$HOME/work:$HOME/.m2" \
  -- uvx --from git+https://github.com/pgatzka/jar-inspector-mcp jar-inspector-mcp

引导 Claude 使用它

服务器附带 MCP instructions,告诉客户端这些工具替代 unzipjar xfjavap。如果你仍然看到 Claude 使用 shell,请在项目的 CLAUDE.md 中添加一行:

To inspect jars, use the jar-inspector MCP tools instead of unzip/jar/javap.

工作原理

  • 类解析是一个无依赖的类文件格式读取器:常量池、访问标志、SignatureMethodParametersLocalVariableTableExceptionsRecordInnerClasses 和运行时注解属性。除非 jar_disassemble 要求,否则跳过方法体。

  • 归档通过内存中的 zipfile 读取。嵌套 jar 从外部条目的字节中打开,因此 Spring Boot fat jar 无需解包。

  • 源码从归档本身解析,然后从 Maven 布局中的同级 -sources.jar 解析,然后从 Gradle 缓存使用的相邻哈希目录解析。

  • 输出始终有上限,并且始终说明何时被截断以及如何分页。

开发

uv sync
uv run pytest          # 49 tests

测试使用 javac 编译 tests/java 中的 Java,并针对真实字节码进行断言,因此泛型、桥接方法和记录都得到真实测试;当没有 JDK 时它们会跳过。解析器还针对 Maven 和 Gradle 附带的每个 jar 中的每个类进行了额外检查——65,573 个类,无失败。

许可证

MIT

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Augments MCP Server - A comprehensive framework documentation provider for Claude Code

  • An MCP server that gives your AI access to the source code and docs of all public github repos

  • A MCP server built for developers enabling Git based project management with project and personal…

View all MCP Connectors

Latest Blog Posts

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/pgatzka/jar-inspector-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server