jar-inspector-mcp
{"type": "text"}# jar-inspector-mcp
Un servidor MCP que permite a Claude Code leer dentro de archivos Java — clases, APIs, fuentes, recursos, bytecode — sin extraerlos.
El problema
Cuando Claude Code trabaja en un proyecto JVM y necesita saber qué hay dentro de un jar, recurre a herramientas de 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 bytecodeTodo eso termina en la ventana de contexto, la mayor parte es ruido, y algo de ello escribe archivos temporales en el árbol de trabajo.
La solución
Diez herramientas enfocadas que responden a las preguntas reales — "qué hay en este jar", "cuál es la API de esta clase", "dónde se establece esta cadena" — y devuelven solo eso.
Medido en jackson-databind-2.16.1.jar (779 clases, 4.1 MB extraídos):
En lugar de | jar-inspector | |||
| 79,674 caracteres |
| 2,632 caracteres | 97% menos |
| 36,008 caracteres |
| 18,061 caracteres | 50% menos |
| 303,105 caracteres |
| 21,409 caracteres | 93% menos |
Nada se escribe nunca en disco, y no se requiere JDK — el analizador de archivos de clase es Python puro. (jar_disassemble es la única excepción; recurre a javap.)
Instalación
Requiere uv y 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-mcpAñade --scope project para compartirlo con un repositorio a través de .mcp.json, o --scope user para habilitarlo en todas partes. Para configurarlo manualmente en su lugar:
// .mcp.json
{
"mcpServers": {
"jar-inspector": {
"command": "uvx",
"args": ["--from", "git+https://github.com/pgatzka/jar-inspector-mcp", "jar-inspector-mcp"]
}
}
}Verifica con claude mcp list, o /mcp dentro de Claude Code.
Otros clientes MCP: el servidor habla stdio, así que uvx --from … jar-inspector-mcp funciona como comando en cualquier lugar.
Herramientas
Herramienta | Respuestas |
| ¿Qué es este artefacto? Manifiesto, paquetes, número de clases, nivel de bytecode, si hay fuentes adjuntas |
| ¿Qué entradas contiene? Filtrado por glob y tipo, paginado |
| ¿Dónde vive |
| ¿Cuál es la API de esta clase? Declaración, anotaciones, campos, firmas de métodos |
| ¿Qué hace realmente? Fuente |
| ¿Qué hay en esta configuración? Una entrada de texto: MANIFEST, |
| ¿Dónde está esta cadena? Grep a través de entradas de texto y constantes de cadena compiladas |
| ¿Qué toca esta clase? Referencias internas vs externas |
| ¿A qué compila este método? Bytecode de un método vía |
| ¿Dónde está el jar? Busca en la salida de compilación, el repositorio Maven y la caché de Gradle |
Cada herramienta es de solo lectura y toma un argumento jar que acepta:
un archivo —
.jar,.war,.ear,.aar,.zip,.jmodun directorio de clases explotado —
target/classes,build/classes/java/mainun archivo anidado —
app.jar!BOOT-INF/lib/dep-1.0.jar(jars gordos de Spring Boot)
Cómo se ve la salida
jar_class_outline, textualmente (esta es la salida exacta que los tests verifican):
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)Las firmas genéricas, los nombres de parámetros (cuando se compila con -g), los varargs, las excepciones declaradas, los valores constantes, los records, los enums y los métodos default sobreviven. Los cuerpos de métodos, los métodos puente y los pools de constantes no.
Configuración
Variable de entorno | Efecto |
| Raíces separadas por rutas que el servidor puede leer. Sin establecer significa sin restricción |
| Directorios adicionales que |
| Ubicación del repositorio Maven, si no es |
jar_find busca, en orden: ./target, ./build/libs, ./libs, ./lib, el repositorio Maven, la caché de módulos de Gradle, la caché de Ivy y la caché de Coursier.
Para confinar el servidor a un árbol:
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-mcpIncitando a Claude a usarlo
El servidor incluye instructions de MCP que indican a los clientes que estas herramientas reemplazan a unzip, jar xf y javap. Si aún ves a Claude recurriendo al shell, añade una línea a tu CLAUDE.md del proyecto:
To inspect jars, use the jar-inspector MCP tools instead of unzip/jar/javap.Cómo funciona
Análisis de clases es un lector sin dependencias para el formato de archivo de clase: pool de constantes, flags de acceso,
Signature,MethodParameters,LocalVariableTable,Exceptions,Record,InnerClassesy los atributos de anotaciones en tiempo de ejecución. Los cuerpos de métodos se omiten a menos quejar_disassemblelos solicite.Archivos se leen a través de
zipfileen memoria. Los jars anidados se abren desde los bytes de la entrada externa, por lo que un jar gordo de Spring Boot no necesita descompresión.Fuentes se resuelven desde el propio archivo, luego desde el
-sources.jarhermano en el diseño de Maven, y luego desde el directorio hash vecino que usa la caché de Gradle.Salida siempre está limitada y siempre dice cuándo se truncó y cómo paginar.
Desarrollo
uv sync
uv run pytest # 49 testsLos tests compilan el Java en tests/java con javac y verifican contra bytecode real, por lo que los genéricos, los métodos puente y los records se ejercitan de verdad; se omiten cuando no hay JDK presente. El analizador se verifica además contra cada clase en cada jar distribuido con Maven y Gradle — 65,573 clases, sin fallos.
Licencia
MIT
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.
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…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/pgatzka/jar-inspector-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server