Java Inspector
Decompiles Hibernate classes from Maven dependencies into readable Java source, allowing AI agents to analyze Hibernate internals.
Decompiles Spring framework classes (e.g., JpaRepository, ObservationRegistry) into readable Java source code, enabling AI agents to inspect internal implementations of Spring dependencies.
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., "@Java InspectorShow me the source of ObservationRegistry"
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.
Java Inspector
Java Inspector is an MCP server that gives AI agents fast, read-only access to code and metadata inside Maven dependencies, local JARs, executable JARs, WARs, and the JDK.
The server starts accepting MCP calls immediately. Maven dependency scanning continues in the background, while an interactive query can promote the JAR it needs to a foreground queue and return without waiting for the complete project index.
Requirements
Node.js 16 or newer
Java 17 or newer (
javaandjavap); required by bundled Vineflower 1.11.2Maven for Maven project discovery and dependency resolution
Vineflower 1.11.2 is bundled in lib/.
Related MCP server: MCP Java Decompiler Server
Install and configure
npm install -g @mustafagoksever/java-inspector{
"mcpServers": {
"java-inspector": {
"command": "java-inspector",
"args": ["start"]
}
}
}For local development:
npm ci
npm run build
node dist/cli.js startStartup discovery
After the MCP transport connects, Java Inspector performs non-blocking discovery:
If
cwd/pom.xmlexists, that Maven project is used.Otherwise directories are searched breadth-first.
Every
pom.xmlat the first matching depth is selected.Deeper POMs are not independently scanned.
Maven classpaths are resolved and their JARs enter the background light-scan queue.
Directories such as .git, node_modules, .gradle, target, build, and out are excluded from POM discovery.
Local, non-Maven JARs are not scanned at startup. They are found and indexed only when a tool call supplies a path, directory, or filename prefix.
Tools
Tool | Purpose |
| Start, refresh, or poll the non-blocking Maven scan. |
| Find an artifact by path, filename, prefix, substring, or Maven coordinates without opening it. |
| Inspect manifest, Maven metadata, packages, classes, resources, and nested artifacts. |
| Search the live partial index and foreground-scan relevant JARs on a miss. |
| Search methods, fields, annotations, references, or string constants without mass decompilation. |
| Find direct or transitive implementations/subtypes from lazy deep indexes. |
| Return source, API, hierarchy, bytecode, or all views for a class. |
| Run a filtered Maven dependency tree for a selected artifact. |
| Search resource paths or bounded text content. |
| Read an exact text resource with line pagination. |
Every tool supports text, json, and toon output where applicable.
Artifact selectors
Class, JAR, and resource tools share the same selection model:
jarPath: exact absolute JAR path; fastest and unambiguous.jarDirectory+jarNamePrefix: useful for Maven-free projects withlib/directories.workspacePath+jarNamePrefix: search the Maven classpath and workspace.workspacePath: use the live partial index and bounded lazy fallback.coordinates:groupId:artifactId[:version[:classifier]].
When no selector is supplied, tools use the server's current working directory. If Maven classpath resolution is still running, searches return complete: false instead of reporting a definitive miss. Per-JAR scan failures are returned in errors; an unreadable exact jarPath fails the tool call.
If multiple JARs or classes match, the server returns candidates instead of silently choosing one.
Inspect a class from a local JAR
{
"className": "com.vendor.Client",
"jarPath": "C:\\project\\lib\\vendor-client-2.1.jar",
"view": "source"
}Find an exception message
{
"query": "Connection refused",
"kind": "string",
"workspacePath": "C:\\project",
"mode": "balanced"
}Find implementations
{
"className": "com.vendor.Transport",
"workspacePath": "C:\\project",
"transitive": true
}Inspect a JDK class
{
"className": "java.util.ArrayList",
"view": "all"
}JDK source is read from src.zip when available. API and bytecode views use javap.
Foreground and background scheduling
All JAR reads pass through a shared coordinator:
Up to eight JAR reads run concurrently.
Background scanning may occupy at most six slots.
Two slots remain available for interactive foreground work.
A foreground request promotes a queued background JAR.
Concurrent requests for the same JAR share one Promise and one cache write.
Light scans time out after 30 seconds; deep scans time out after 60 seconds.
The background scan builds a light index from ZIP entries. More expensive class-file metadata is generated only when search_code or find_implementations needs it.
Context-wide deep searches are intentionally bounded. A partial response includes complete, scannedJarCount, and remainingJarCount. Calling the tool again continues using the already cached deep indexes.
Class inspection
inspect_class supports:
source: local*-sources.jar, embedded.java, or Vineflower decompilation.api: fields, methods, constructors, modifiers, superclass, and interfaces viajavap.hierarchy: resolved superclass chain.bytecode:javap -c -l -p -soutput.all: all available views.
Source responses support methodName, paramTypes, offset, and limit.
The decompiler executable cannot be overridden by a tool argument. Java Inspector uses the bundled Vineflower JAR or the operator-controlled DECOMPILER_PATH environment variable.
JAR layouts
Light indexing understands:
Ordinary and shaded JARs
Multi-release entries under
META-INF/versions/Spring Boot classes under
BOOT-INF/classesWAR classes under
WEB-INF/classesJMOD class paths under
classes/Nested artifact metadata under
BOOT-INF/lib,WEB-INF/lib, andlibMaven
pom.properties, manifests, source JARs, and text resources
Nested JAR contents are extracted and scanned only when explicitly needed.
Cache
Cache data is stored under:
~/.cache/java-inspector/<context>_<hash>/Important entries include:
classpath.json
class-index.jsonl
scan-state.json
jar-indexes-v3/
results-v3/
server-<pid>.logPer-JAR caches use resolved path, size, and modification time as their fingerprint. Nested artifacts additionally use their parent fingerprint and ZIP entry identity. JSONL project indexes remain append-only and crash-safe, with cross-process locks protecting writes.
Environment variables
Variable | Purpose |
| Enables additional development logging. |
| Locates |
| Locates Maven. |
| Overrides the Maven executable. |
| Overrides the local Maven repository path. |
| Overrides the bundled Vineflower JAR. |
Maven command resolution order is MAVEN_CMD, mvnd, MAVEN_HOME/bin/mvn, then mvn from PATH.
Development
npm run build
npm test
npm run devThe project is ES modules and emits JavaScript, declarations, and source maps to dist/.
License
Apache-2.0
Available Tools
10 toolsexplain_dependencyB
Run a filtered Maven dependency tree and explain why an artifact is present.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format. | text |
| jarPath | No | ||
| coordinates | No | ||
| workspacePath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral transparency. It does not disclose whether the operation is read-only, whether it requires Maven or network access, how filtering works, or what kind of explanation is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler, but it is under-specified rather than ideally concise. It front-loads the core action but sacrifices essential operational details needed for correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and only 25% schema coverage, the description is too sparse to fully support invocation. It lacks parameter selection guidance, prerequisites, output expectations, and any behavioral caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, but the description does not compensate by explaining how workspacePath, coordinates, and jarPath relate. An agent is left unsure whether to provide coordinates, a jar path, or both, and the 'toon' format value is unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Run') and resource ('filtered Maven dependency tree') and clearly explains the tool's purpose: to explain why an artifact is present. This distinguishes it from sibling search/inspection tools like find_jar or search_class.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'explain why an artifact is present' implies this tool is for dependency-resolution questions, but it never explicitly states when to use it over alternatives or when not to use it. No sibling tool or exclusion condition is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_implementationsB
Find direct or transitive implementations/subtypes using lazy deep class metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | balanced | |
| limit | No | ||
| format | No | Output format. | text |
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| className | Yes | ||
| transitive | No | ||
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It hints at behavior with 'lazy deep class metadata' but does not explain what that means in practice: filesystem access, Maven resolution, mode tradeoffs, or whether results are complete. This is too thin for a tool with no annotation safety or behavior metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and front-loads the core action and object. The only weakness is the vague 'lazy deep class metadata' phrase, which could be clearer, but overall it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 10-parameter tool with no annotations and no output schema, yet the description only covers the core purpose. It omits how selectors like jarPath, coordinates, or workspacePath interact, what mode/limit/format mean, and what an agent should expect when invoking it. The description alone is not enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, leaving mode, limit, className, and transitive undocumented. The description partially compensates by clarifying that the tool finds direct or transitive implementations/subtypes, which implicitly documents the transitive and className parameters. However, it adds nothing for mode, limit, or selector choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' and a clear resource: implementations/subtypes, with direct or transitive scoping. This sets it apart from siblings like inspect_class or search_class, though the phrase 'lazy deep class metadata' is jargon that adds little clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you need implementations or subtypes of a class. However, it gives no explicit when-not guidance, alternatives, or conditions for choosing this over sibling tools like inspect_class or search_class.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_jarA
Find JAR paths by exact path, filename, prefix, substring, or Maven coordinates without opening the JAR.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| match | No | prefix | |
| format | No | Output format. | text |
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description must carry behavioral weight. It does disclose the key non-inspecting behavior ('without opening the JAR') and implies a read-only search operation. However, it does not describe whether the search is indexed vs. on-demand, how results are ordered, or what happens when multiple criteria are combined, leaving meaningful behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, information-dense sentence that front-loads the main action and scope. Every phrase adds value, and there is no filler or repetition of schema details. This is an appropriately concise definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple search tool but does not fully cover the decision space of 8 parameters and no output schema. It does not explain when to use jarPath vs. jarDirectory vs. workspacePath, nor what the returned paths look like. Schema descriptions fill some gaps, but the description leaves several practical questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already documents most parameters. The description adds a useful semantic layer by mapping high-level matching modes (exact path, filename, prefix, substring, Maven coordinates) to the available parameters, but it does not clarify parameter interplay or the meaning of 'limit' and 'match' beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find'), a clear resource ('JAR paths'), and enumerates the search criteria (exact path, filename, prefix, substring, Maven coordinates). The phrase 'without opening the JAR' distinguishes it from inspect_jar and similar inspection tools, so an agent can tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear sense of when to use the tool: whenever JAR paths need to be located by various matchers and the JAR's contents do not need to be opened. It does not explicitly name alternative tools or state exclusions, but the context is clear enough for most selection scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_classB
Resolve and inspect a class from Maven, a local JAR, or the JDK. Views: source, API, hierarchy, bytecode, or all.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | source | |
| limit | No | ||
| format | No | Output format. | text |
| offset | No | ||
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| useCache | No | ||
| className | Yes | ||
| methodName | No | ||
| paramTypes | No | ||
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden of disclosing behavioral traits. It reveals that resolution can span Maven, local JARs, or the JDK, which implies potential network downloads, directory scanning, and cache writes (useCache exists in the schema), but none of these side effects are stated. The description also fails to say what happens on ambiguous resolution or what each view returns, leaving the tool's operational profile largely undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with zero waste. The core purpose is front-loaded before the view enumeration, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no annotations and no output schema, this description is too thin to be complete. It doesn't explain what each view produces, how the three resolution sources map to specific parameters, or how the tool differs from sibling tools like search_class and inspect_jar, and it cannot rely on annotations or an output schema to fill those gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 46% (6 of 13 parameters described), so the description must compensate. It does add meaning by enumerating the five values of the view selector and by aligning the phrase 'Maven, a local JAR, or the JDK' with the resolution-related parameters, which is helpful context. However, limit, offset, useCache, methodName, and paramTypes receive no added meaning from either the schema or the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb pair, 'Resolve and inspect,' and a clear resource, 'a class,' then scopes it to three concrete sources: Maven, a local JAR, or the JDK. The view list (source, API, hierarchy, bytecode, all) adds functional detail that helps separate this from sibling tools like inspect_jar or scan_project at a high level. It stops short of a 5 because it never names a sibling it is not, leaving some differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for inspecting a concrete class from a known source, which hints at when to use it rather than search_class or find_implementations. However, there is no explicit when-to-use guidance, no exclusions, and no mention of the alternative sibling tools, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_jarB
Inspect one JAR: manifest, Maven coordinates, layout, packages, classes, resources, and nested JAR metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| format | No | Output format. | text |
| offset | No | ||
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The word 'Inspect' implies a read-only operation and the listed metadata areas give useful context, but the description does not mention whether matching multiple JARs fails or picks one, how output is returned, or any performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no filler. It front-loads the resource and verb, then efficiently enumerates the inspected contents without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's scope well, but lacks usage guidance, selector hierarchy, and return-format expectations. With no output schema and no annotations, a more complete description would help an agent decide when to invoke this versus sibling tools and how to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no meaning beyond the input schema for any of the nine parameters. Schema description coverage is 67%, so the schema handles most parameters, but the description does not compensate for the remaining parameters (limit, query, offset) or explain the relationships between the multiple selection methods such as jarPath, coordinates, jarDirectory, jarNamePrefix, and workspacePath.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('one JAR') and the verb ('Inspect'), and enumerates the main inspection areas: manifest, Maven coordinates, layout, packages, classes, resources, and nested JAR metadata. It is specific enough to distinguish this from broad project scanning or class-level inspection, though it does not explicitly name sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus siblings such as find_jar, search_class, inspect_class, or read_resource. 'Inspect one JAR' implies a use case, but there are no alternative routes, exclusions, or conditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_resourceB
Read an exact text resource with safe line pagination. Binary resources are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| format | No | Output format. | text |
| offset | No | ||
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| resourcePath | Yes | ||
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add valuable information: safe line pagination and rejection of binary resources. However, it omits other behavioral details like whether the operation is read-only, potential error cases, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core purpose and includes two key constraints. No wasted words; highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters including multiple JAR selector options, but the description gives no context on how these selectors interact or when to use each. It does not explain the relationship between resourcePath and the JAR selection parameters, nor does it mention the output structure. An agent would be under-informed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for most parameters (8 out of 9), so baseline is 3. The tool description itself adds no extra parameter meaning beyond the concept of 'exact resource' and pagination, which are already partially implied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read'), the resource type ('exact text resource'), and a key behavioral constraint ('safe line pagination'). It is specific enough to distinguish from search-oriented siblings like search_resources, though it does not explicitly compare with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as search_resources or inspect_jar. The context of when to use the various JAR selector parameters is not addressed, leaving the agent without clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_projectA
Start, refresh, or poll the non-blocking Maven dependency scan. Startup automatically calls this for the highest-level pom.xml files.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format. | text |
| forceRefresh | No | ||
| workspacePath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry behavioral transparency. It discloses that the scan is non-blocking and supports start/refresh/poll operations, but it does not explain side effects, required permissions, or how results are returned. The provided detail is helpful but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary action is front-loaded, and the automatic-startup note adds useful context without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and low parameter coverage, the description should clarify return values or response handling. It does not, leaving the agent uncertain about what the poll operation returns or how to interpret results. However, the non-blocking nature and startup behavior give some orientation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'format' has a description). The tool description does not explain workspacePath or forceRefresh semantics at all, nor does it mention them. Since coverage is low, the description should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Start, refresh, or poll') and names the exact resource ('non-blocking Maven dependency scan'). This clearly distinguishes it from sibling tools like find_jar or search_class, which all target different artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that startup automatically invokes this for highest-level pom.xml files, implying normal usage context. It does not explicitly state when to avoid using it or mention alternatives, but the context is sufficient for an agent to infer the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_classB
Search the live partial index, then foreground-scan only relevant JARs without waiting for background scan completion.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | balanced | |
| limit | No | ||
| query | Yes | ||
| format | No | Output format. | text |
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| includeJdk | No | ||
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and at least reveals the two-phase execution and non-blocking intent ('live partial index', 'foreground-scan only relevant JARs'). It does not disclose output behavior, freshness limits of the partial index, or any side effects, but for a search operation this is a reasonable partial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; every phrase ('live partial index', 'foreground-scan only relevant JARs') adds distinct information. It is concise while still conveying the defining behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 10 parameters, no annotations, and no output schema, the description gives only the search mechanism and omits return format, supported class-matching behavior, and when the various JAR selectors are appropriate. An agent would still need to infer a lot of call context from parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the schema documents most selectors; the description adds some conceptual context with 'relevant JARs' but does not explain any specific parameter. The critical 'query' parameter lacks a schema description and the tool description does not fill that gap, leaving semantics partially inferred from the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and object: search a live partial index and foreground-scan relevant JARs, which distinguishes it from a plain scan or code search. It relies on the tool name 'search_class' to make the object explicit, and it does not directly contrast with siblings, but the mechanism is concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without waiting for background scan completion' implies a fast-path use case, but the description never states when to choose this over scan_project, find_jar, or search_code, nor does it list exclusion conditions. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeC
Find method/field declarations, annotations, references, and real string constants from lazy class-file metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| mode | No | balanced | |
| limit | No | ||
| query | Yes | ||
| format | No | Output format. | text |
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds a useful nuance ('lazy class-file metadata', 'real string constants'), but it does not state whether the tool is read-only, how it resolves JARs, what mode does, how results are returned, or how limits apply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with no redundancy or filler. It front-loads the core purpose and avoids repeating information already available in annotations or the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters, multiple sibling tools, and no output schema or annotations, the one-sentence description is not enough for an agent to reliably select and invoke this tool. Missing pieces include selector prioritization, mode semantics, output format expectations, and practical differences from sibling search tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the semantic intent behind the kind enum by naming methods, fields, annotations, references, and strings. Since schema coverage is 60%, the schema already documents several parameters; the description adds some meaning but does not explain the required query/kind relationship or the behavior of mode, limit, and format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Find') and a distinct resource scope: method/field declarations, annotations, references, and string constants in class-file metadata. It does not explicitly differentiate itself from siblings like search_class or inspect_jar, but the focus on multiple code-search entity kinds is reasonably distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as search_class, find_implementations, or inspect_jar. It also does not explain which JAR-selector parameter is preferred or what conditions would make one selector better than another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_resourcesB
Search resource paths or bounded text resource content in selected JARs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| format | No | Output format. | text |
| jarPath | No | Absolute path to an exact JAR. Fastest selector. | |
| pathQuery | No | ||
| coordinates | No | groupId:artifactId[:version[:classifier]]. | |
| contentQuery | No | ||
| jarDirectory | No | Absolute directory to search for a JAR on demand. | |
| jarNamePrefix | No | JAR basename prefix. | |
| workspacePath | No | Absolute Java workspace path. Maven is optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions 'bounded text resource content' hinting at some size limit but does not explain what 'bounded' means, how results are returned, or any side effects. The tool is a search operation but there is no disclosure about performance implications, caching, or exact matching semantics. The description adds minimal behavioral context beyond the action verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loading the core action and scope. It is concise and avoids repetition of schema field names. However, it could briefly mention selector options to aid orientation without becoming verbose. Overall it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters, no output schema, and no annotations. The description is too thin to convey how to select JARs (via multiple selector options) or how search semantics work. It leaves the agent guessing about required relationships between parameters, result formats beyond 'text' vs 'json' vs 'toon', and the meaning of 'bounded content'. For a complex search tool with many optional selectors, this is insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, so the schema already documents several parameters (jarPath, coordinates, jarDirectory, jarNamePrefix, workspacePath, format). The description does not add much beyond restating that it searches resource paths/content. It does not clarify how pathQuery and contentQuery interact or default behaviors. With 67% coverage the baseline is 3; the description provides marginal added meaning but not enough to raise above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search resource paths or bounded text resource content in selected JARs.' It clearly distinguishes this from siblings like search_class and search_code by focusing on resource paths and content within JARs. The phrase 'in selected JARs' adds scope, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While the description indicates it searches resources in JARs, it does not mention exclusions or conditions that would route to siblings like read_resource or inspect_jar. The schema hints at selector options but the description offers no strategic direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v3.0.0- Removed
analyze_class - Removed
decompile_class - Added
explain_dependency - Added
find_implementations - Added
find_jar - Removed
get_inheritance_tree - Added
inspect_class - Added
inspect_jar - Added
read_resource - Removed
scan_dependencies - Added
scan_project - Changed
search_class12 fields changed- added
Input schema / properties / coordinatesAdded value: +{ + "description": "groupId:artifactId[:version[:classifier]].", + "type": "string" +} - changed
Input schema / properties / format / descriptionPrevious value: -"Output format. Default is text (human-readable). Use json for structured machine-readable data. Use toon for Token-Oriented Object Notation — a compact, LLM-friendly format that reduces tokens by ~40% compared to JSON while preserving structure (https://github.com/toon-format/toon)."New value: +"Output format." - added
Input schema / properties / includeJdkAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / jarDirectoryAdded value: +{ + "description": "Absolute directory to search for a JAR on demand.", + "type": "string" +} - added
Input schema / properties / jarNamePrefixAdded value: +{ + "description": "JAR basename prefix.", + "type": "string" +} - added
Input schema / properties / jarPathAdded value: +{ + "description": "Absolute path to an exact JAR. Fastest selector.", + "type": "string" +} - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of results to return" - added
Input schema / properties / modeAdded value: +{ + "default": "balanced", + "enum": [ + "fast", + "balanced" + ], + "type": "string" +} - removed
Input schema / properties / projectPathRemoved value: -{ - "description": "Maven project root directory path", - "type": "string" -} - removed
Input schema / properties / query / descriptionRemoved value: -"Search query (partial class name, e.g. \"ObservationRegistry\", \"JpaRepository\", or \"QueryBizOrderDO\")" - added
Input schema / properties / workspacePathAdded value: +{ + "description": "Absolute Java workspace path. Maven is optional.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "query", - "projectPath" -]New value: +[ + "query" +]
- Added
search_code - Added
search_resources
5 tool updates
v2.3.2- First observed
analyze_class - First observed
decompile_class - First observed
get_inheritance_tree - First observed
scan_dependencies - First observed
search_class
TDQS
Each tool targets a distinct resource and action: project scanning, JAR discovery, JAR inspection, class search, code search, implementation lookup, class inspection, dependency explanation, resource search, and resource reading. No two tools have overlapping purposes; even search_class and search_code differ clearly by scope (indexed classes vs. code constructs).
All tool names follow a consistent verb_noun pattern with descriptive verbs (scan, find, inspect, search, explain, read). The pattern is uniform across the set, making it easy to predict tool behavior from the name alone.
The 10 tools are well-scoped for a Java inspector/analyzer server, covering project-level scanning, artifact lookup, detailed inspection, and search operations. Each tool serves a distinct purpose without redundancy, and the count is ideal for the domain.
The tool surface covers the full read/analyze lifecycle: scan, find, inspect, search, explain, and read. Minor gaps exist such as no explicit 'list_jar_contents' top-level tool or dependency listing shortcut, but these are accessible via inspect_jar and explain_dependency, so agents can work around them.
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
Ship better Java with your coding agent.
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
61Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI tools to analyze Java dependencies by scanning Maven projects, decompiling JAR files, and extracting detailed class information including methods, fields, and inheritance relationships. Solves the problem of AI hallucinations when generating code that calls external dependencies by providing accurate class structures through decompilation.32742Apache 2.0
- AlicenseAqualityFmaintenanceDecompiles Java .class files, packages, and JARs into readable source code, enabling AI assistants to inspect Java bytecode.34220ISC
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to look up Java class definitions and list dependencies from Maven projects by analyzing local JAR files via the Model Context Protocol.204MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI to analyze Java classes from Maven project dependencies, with support for decompilation strategies and configurable groupId mappings.135MIT
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/mustafagoksever/java-inspector'
If you have feedback or need assistance with the MCP directory API, please join our Discord server