Skip to main content
Glama
mustafagoksever

Java Inspector

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 (java and javap); required by bundled Vineflower 1.11.2

  • Maven 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 start

Startup discovery

After the MCP transport connects, Java Inspector performs non-blocking discovery:

  1. If cwd/pom.xml exists, that Maven project is used.

  2. Otherwise directories are searched breadth-first.

  3. Every pom.xml at the first matching depth is selected.

  4. Deeper POMs are not independently scanned.

  5. 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

scan_project

Start, refresh, or poll the non-blocking Maven scan.

find_jar

Find an artifact by path, filename, prefix, substring, or Maven coordinates without opening it.

inspect_jar

Inspect manifest, Maven metadata, packages, classes, resources, and nested artifacts.

search_class

Search the live partial index and foreground-scan relevant JARs on a miss.

search_code

Search methods, fields, annotations, references, or string constants without mass decompilation.

find_implementations

Find direct or transitive implementations/subtypes from lazy deep indexes.

inspect_class

Return source, API, hierarchy, bytecode, or all views for a class.

explain_dependency

Run a filtered Maven dependency tree for a selected artifact.

search_resources

Search resource paths or bounded text content.

read_resource

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 with lib/ 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 via javap.

  • hierarchy: resolved superclass chain.

  • bytecode: javap -c -l -p -s output.

  • 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/classes

  • WAR classes under WEB-INF/classes

  • JMOD class paths under classes/

  • Nested artifact metadata under BOOT-INF/lib, WEB-INF/lib, and lib

  • Maven 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>.log

Per-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

NODE_ENV

Enables additional development logging.

JAVA_HOME

Locates java, javap, and JDK src.zip.

MAVEN_HOME

Locates Maven.

MAVEN_CMD

Overrides the Maven executable.

MAVEN_REPO

Overrides the local Maven repository path.

DECOMPILER_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 dev

The project is ES modules and emits JavaScript, declarations, and source maps to dist/.

License

Apache-2.0

Available Tools

10 tools
explain_dependencyB

Run a filtered Maven dependency tree and explain why an artifact is present.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format.text
jarPathNo
coordinatesNo
workspacePathYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNobalanced
limitNo
formatNoOutput format.text
jarPathNoAbsolute path to an exact JAR. Fastest selector.
classNameYes
transitiveNo
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
matchNoprefix
formatNoOutput format.text
jarPathNoAbsolute path to an exact JAR. Fastest selector.
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNosource
limitNo
formatNoOutput format.text
offsetNo
jarPathNoAbsolute path to an exact JAR. Fastest selector.
useCacheNo
classNameYes
methodNameNo
paramTypesNo
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
formatNoOutput format.text
offsetNo
jarPathNoAbsolute path to an exact JAR. Fastest selector.
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
formatNoOutput format.text
offsetNo
jarPathNoAbsolute path to an exact JAR. Fastest selector.
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
resourcePathYes
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format.text
forceRefreshNo
workspacePathYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNobalanced
limitNo
queryYes
formatNoOutput format.text
jarPathNoAbsolute path to an exact JAR. Fastest selector.
includeJdkNo
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
modeNobalanced
limitNo
queryYes
formatNoOutput format.text
jarPathNoAbsolute path to an exact JAR. Fastest selector.
coordinatesNogroupId:artifactId[:version[:classifier]].
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
formatNoOutput format.text
jarPathNoAbsolute path to an exact JAR. Fastest selector.
pathQueryNo
coordinatesNogroupId:artifactId[:version[:classifier]].
contentQueryNo
jarDirectoryNoAbsolute directory to search for a JAR on demand.
jarNamePrefixNoJAR basename prefix.
workspacePathNoAbsolute Java workspace path. Maven is optional.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 14 tool updatesv3.0.0
    • Removedanalyze_class
    • Removeddecompile_class
    • Addedexplain_dependency
    • Addedfind_implementations
    • Addedfind_jar
    • Removedget_inheritance_tree
    • Addedinspect_class
    • Addedinspect_jar
    • Addedread_resource
    • Removedscan_dependencies
    • Addedscan_project
    • Changedsearch_class12 fields changed
      • addedInput schema / properties / coordinates
        Added value: +{
        +  "description": "groupId:artifactId[:version[:classifier]].",
        +  "type": "string"
        +}
      • changedInput schema / properties / format / description
        Previous 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."
      • addedInput schema / properties / includeJdk
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • addedInput schema / properties / jarDirectory
        Added value: +{
        +  "description": "Absolute directory to search for a JAR on demand.",
        +  "type": "string"
        +}
      • addedInput schema / properties / jarNamePrefix
        Added value: +{
        +  "description": "JAR basename prefix.",
        +  "type": "string"
        +}
      • addedInput schema / properties / jarPath
        Added value: +{
        +  "description": "Absolute path to an exact JAR. Fastest selector.",
        +  "type": "string"
        +}
      • removedInput schema / properties / limit / description
        Removed value: -"Maximum number of results to return"
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "balanced",
        +  "enum": [
        +    "fast",
        +    "balanced"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / projectPath
        Removed value: -{
        -  "description": "Maven project root directory path",
        -  "type": "string"
        -}
      • removedInput schema / properties / query / description
        Removed value: -"Search query (partial class name, e.g. \"ObservationRegistry\", \"JpaRepository\", or \"QueryBizOrderDO\")"
      • addedInput schema / properties / workspacePath
        Added value: +{
        +  "description": "Absolute Java workspace path. Maven is optional.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query",
        -  "projectPath"
        -]New value: +[
        +  "query"
        +]
    • Addedsearch_code
    • Addedsearch_resources
  2. 5 tool updatesv2.3.2
    • First observedanalyze_class
    • First observeddecompile_class
    • First observedget_inheritance_tree
    • First observedscan_dependencies
    • First observedsearch_class

TDQS

A3.6/5.0
Disambiguation5/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessResponsive

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

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables 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.
    3
    27
    42
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to look up Java class definitions and list dependencies from Maven projects by analyzing local JAR files via the Model Context Protocol.
    20
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI to analyze Java classes from Maven project dependencies, with support for decompilation strategies and configurable groupId mappings.
    13
    5
    MIT

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/mustafagoksever/java-inspector'

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