Skip to main content
Glama
pgatzka

jar-inspector-mcp

jar-inspector-mcp

Claude Code が Java アーカイブの内部を読み取れるようにする MCP サーバー — クラス、API、ソース、リソース、バイトコード — 展開せずに。

問題

Claude Code が JVM プロジェクトで作業していて、jar の中身を知る必要がある場合、シェルツールに頼ってしまいます:

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

そのすべてがコンテキストウィンドウに流れ込み、そのほとんどはノイズで、一部はワーキングツリーに一時ファイルを書き込みます。

Related MCP server: dejared-mcp

解決策

10 個の焦点を絞ったツールが実際の質問 — 「この jar には何が入っているか」「このクラスの API は何か」「この文字列はどこで設定されているか」— に答え、その情報だけを返します。

jackson-databind-2.16.1.jar (779 クラス、展開時 4.1 MB) で測定:

代わりに

jar-inspector

unzip -l <jar>

79,674 文字

jar_overview

2,632 文字

97% 削減

javap <class>

36,008 文字

jar_class_outline

18,061 文字

50% 削減

javap -p -c <class>

303,105 文字

jar_class_outline

21,409 文字

93% 削減

ディスクに書き込まれることは一切なく、JDK も不要です — クラスファイルパーサーは純粋な Python です。(jar_disassemble だけが例外で、javap を外部コマンドとして実行します。)

インストール

uv と Python 3.10+ が必要です。

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

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

--scope project を追加すると .mcp.json を通じてリポジトリと共有でき、--scope user を追加するとどこでも有効になります。代わりに手動で設定する場合:

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

claude mcp list、または Claude Code 内の /mcp で確認します。

他の MCP クライアント: このサーバーは stdio で通信するため、uvx --from … jar-inspector-mcp をコマンドとしてどこでも使用できます。

ツール

Tool

回答

jar_overview

このアーティファクトは何か? マニフェスト、パッケージ、クラス数、バイトコードレベル、ソースが添付されているか

jar_list

中にはどのエントリがあるか? グロブと種類でフィルタリング、ページング対応

jar_find_class

HttpClient はどこにあるか? 単純名、FQCN、またはグロブ → クラス名

jar_class_outline

このクラスの API は何か? 宣言、アノテーション、フィールド、メソッドシグネチャ

jar_read_source

実際には何をするか? 添付された .java/.kt ソースを行ウィンドウ単位で

jar_read_entry

この設定には何が入っているか? 1 つのテキストエントリ: MANIFEST、META-INF/services/…、XML

jar_search

この文字列はどこにあるか? テキストエントリとコンパイル済み文字列定数を横断して grep

jar_class_dependencies

このクラスは何に触れているか? 内部参照と外部参照

jar_disassemble

このメソッドは何にコンパイルされるか? javap による 1 つのメソッドのバイトコード

jar_find

jar はどこにあるか? ビルド出力、Maven リポジトリ、Gradle キャッシュを検索

すべてのツールは読み取り専用で、以下を受け付ける jar 引数を取ります:

  • アーカイブ — .jar、.war、.ear、.aar、.zip、.jmod

  • 展開済みクラスディレクトリ — target/classes、build/classes/java/main

  • ネストされたアーカイブ — app.jar!BOOT-INF/lib/dep-1.0.jar (Spring Boot のファット jar)

出力例

jar_class_outline の出力をそのまま示します (テストが検証する正確な出力です):

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

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

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

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

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

  // nested (1)
  UserService.Builder

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

ジェネリックシグネチャ、パラメータ名 (-g 付きでコンパイルされた場合)、可変長引数、宣言済み例外、定数値、レコード、enum、default メソッドはすべて保持されます。メソッド本体、ブリッジメソッド、定数プールは保持されません。

設定

環境変数

効果

JAR_INSPECTOR_ALLOW

サーバーが読み取り可能なパス区切り形式のルート。未設定の場合は制限なし

JAR_INSPECTOR_SEARCH_PATH

jar_find が最初にスキャンする追加ディレクトリ

MAVEN_REPO_LOCAL

Maven リポジトリの場所 (~/.m2/repository でない場合)

jar_find は次の順序で検索します: ./target、./build/libs、./libs、./lib、Maven リポジトリ、Gradle モジュールキャッシュ、Ivy キャッシュ、Coursier キャッシュ。

サーバーを 1 つのツリーに制限するには:

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

Claude に使うよう促す

このサーバーには MCP の instructions が同梱されており、これらのツールが unzip、jar xf、javap の代わりになることをクライアントに伝えます。それでも Claude がシェルを使おうとする場合は、プロジェクトの CLAUDE.md に 1 行追加してください:

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

仕組み

  • クラス解析は、クラスファイル形式に対する依存関係のないリーダーです: 定数プール、アクセスフラグ、Signature、MethodParameters、LocalVariableTable、Exceptions、Record、InnerClasses、実行時アノテーション属性。メソッド本体は jar_disassemble が要求しない限りスキップされます。

  • アーカイブは zipfile を通じてメモリ上で読み取られます。ネストされた jar は外側のエントリのバイトから開かれるため、Spring Boot のファット jar を展開する必要はありません。

  • ソースは、アーカイブ自体、次に Maven レイアウトの兄弟 -sources.jar、次に Gradle のキャッシュが使用する隣接するハッシュディレクトリから解決されます。

  • 出力は常に上限が設定され、切り詰められた場合とページング方法が必ず示されます。

開発

uv sync
uv run pytest          # 49 tests

テストは tests/java 内の Java を javac でコンパイルし、実際のバイトコードに対して検証するため、ジェネリクス、ブリッジメソッド、レコードが実際にテストされます。JDK がない場合はスキップされます。さらに、パーサーは Maven と Gradle に同梱されているすべての jar 内のすべてのクラスに対してチェックされています — 65,573 クラス、失敗なし。

ライセンス

MIT

Available Tools

10 tools
jar_class_dependenciesA
Read-only

List the classes a compiled class references, split into internal and external.

Useful for tracing what a class actually touches, and for spotting which dependency supplies a type, without decompiling anything.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. class_name: FQCN, simple name or glob. include_jdk: Include java.*/javax.*/jdk.* references. limit: Maximum references to list.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
limitNo
class_nameYes
include_jdkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds behavioral context by explaining that references are split into internal and external and that the tool supports jar paths, class directories, and nested jar notation. This goes beyond the annotations without contradicting them.

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 compact and well-structured: a one-sentence summary, a short 'useful for' framing, and a clean Args list. No filler or redundant content; every line contributes to selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity and the presence of an output schema, the description fully covers what the tool does, when to use it, and how to specify each parameter. Nothing essential is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It does so excellently: jar formats, class_name matching options, include_jdk scope, and limit meaning are all spelled out clearly, adding real value over the bare schema titles.

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 action and resource: 'List the classes a compiled class references, split into internal and external.' This clearly distinguishes it from sibling tools like jar_read_source or jar_disassemble by focusing on dependency references rather than source or bytecode.

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 clear use cases: tracing what a class touches and identifying which dependency supplies a type, with the note that it works 'without decompiling anything.' It does not explicitly name alternative sibling tools, but the context is strong enough for an agent to infer when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_class_outlineA
Read-only

Show a class's API: declaration, annotations, fields and method signatures.

This is the cheap alternative to decompiling or reading source. Signatures keep generics, parameter names (when compiled with -g), thrown exceptions and constant values; method bodies are not included.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. class_name: FQCN, simple name or glob (resolved like jar_find_class). visibility: Lowest visibility to include: public, protected, package, private. include_synthetic: Include compiler-generated bridge/synthetic members. fully_qualified_types: Print java.util.List instead of List.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
class_nameYes
visibilityNoprotected
include_syntheticNo
fully_qualified_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=true and openWorldHint=false, so the description carries meaningful extra value. It details what is included (declaration, annotations, fields, method signatures, generics, parameter names under -g, thrown exceptions, constant values) and explicitly what is not included (method bodies), giving an agent an accurate model of behavior.

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 compact, well-structured, and front-loaded. The first sentence states the purpose, the second adds key trade-offs, and the Args block provides necessary parameter detail without redundancy. Every sentence contributes information not already present in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only outline tool, the description is complete: it covers input formats, resolution behavior, output scope, caveats about debug symbols, and exclusions. An output schema exists to define return values, so the description does not need to repeat those details. The only external reference, 'resolved like jar_find_class', is reasonable since that sibling already exists in the toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain all parameters, and it does. Each param gets a concrete explanation: jar accepts paths or nested-jar syntax, class_name accepts FQCN/simple/glob and references jar_find_class resolution, visibility gives the allowed values, and the two booleans are explained with examples.

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 opens with a specific verb and resource: 'Show a class's API: declaration, annotations, fields and method signatures.' It clearly differentiates this from related tools by framing it as 'the cheap alternative to decompiling or reading source' and by stating that method bodies are not included, which distinguishes it from jar_read_source and jar_disassemble.

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?

It provides clear context for when to choose this tool: when only an API outline is needed and decompiling/source is overkill. It also notes the exclusion of method bodies, which signals when another tool would be needed, though it does not explicitly name those alternative siblings or provide a when-not-to-use list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_disassembleA
Read-only

Disassemble one method's bytecode with javap (needs a JDK on PATH).

Reach for this only when the API outline and the source are not enough -- for example when checking what a method compiles to, or reading a class that has no sources attached. Always pass method to keep it small.

Args: jar: Archive path or classes directory (nested ! specs are not supported). class_name: FQCN, simple name or glob. method: Method name to keep; empty returns every method (often large). limit: Maximum lines of disassembly to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
limitNo
methodNo
class_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation by disclosing an environmental requirement ('needs a JDK on PATH'), a supported-input limitation ('nested ! specs are not supported'), and a size-related behavior ('empty returns every method (often large)'). These details help the agent anticipate real-world failure modes and avoid huge outputs.

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 tightly organized: purpose first, usage guidance second, then a clean Args list. Every sentence adds operational value; there is no filler or repetition of structured data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only inspection tool with an output schema and four parameters, the description provides all essential context: prerequisites, when to use it, parameter semantics, and an important limitation. Nothing critical is missing for selecting or invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full explanatory burden. It compensates thoroughly: jar is described as 'Archive path or classes directory' with a limitation, class_name as 'FQCN, simple name or glob', method with its empty-value behavior, and limit as 'Maximum lines of disassembly'.

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 opens with a specific verb and resource: 'Disassemble one method's bytecode with javap'. It clearly differentiates this from sibling tools by explaining it is for when 'the API outline and the source are not enough', which distinguishes it from jar_class_outline, jar_read_source, and similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Reach for this only when the API outline and the source are not enough', with concrete examples like checking what a method compiles to or reading a class with no sources. It also gives a practical directive to 'Always pass method to keep it small', which helps the agent invoke it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_findA
Read-only

Find jar files on this machine by name: build output, Maven repo, Gradle cache.

Use it to turn "the Jackson databind jar" into a path you can pass to the other tools.

Args: query: Part of the file name, or a glob such as jackson-databind-*.jar. search_path: Extra directories to scan first, separated by the path separator. include_classifiers: Also list -sources, -javadoc and -tests jars. limit: Maximum jars to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
search_pathNo
include_classifiersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context: search scope (build output, Maven repo, Gradle cache) and the classifier behavior ('also list -sources, -javadoc and -tests jars'). No contradiction with annotations.

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 compact and front-loaded: core purpose first, then a practical use case, then parameter details. Every sentence earns its place with no redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all four parameters, the search domain, and the intended workflow. Since an output schema exists, return values are already handled. The description is complete for correct invocation and routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining every parameter: query with glob example, search_path with path separator note, include_classifiers with concrete classifier names, and limit as maximum count. This adds real meaning beyond the bare schema.

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?

States a specific verb and resource: 'Find jar files on this machine by name', with concrete scopes (build output, Maven repo, Gradle cache). The use case of turning a jar name into a path for other tools clearly distinguishes it from siblings like jar_find_class or jar_search.

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?

Gives explicit usage context: 'Use it to turn ... into a path you can pass to the other tools.' This implies when to invoke it, but does not name specific alternatives or state when not to use it. Clear context but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_find_classA
Read-only

Find classes in an archive by simple name, fully-qualified name or glob.

Use this to turn "where does HttpClient live" into a concrete class name you can pass to jar_class_outline or jar_read_source.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. name: HttpClient, com.acme.HttpClient, or a glob like com.acme.*Repo. limit: Maximum matches to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
nameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint: true and destructiveHint: false, and the description adds meaningful behavioral context: supported archive forms, classes directories, nested jar notation, name matching modes, and limit semantics. It does not mention no-match behavior or the exact return composition, but those are secondary given the read-only safety profile.

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 compact, front-loaded with the core purpose, then the use case, then structured parameter details. Every sentence carries information, and there is no filler or repetition that wastes an agent's attention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read-only lookup tool with no output schema, the description gives the agent enough to select and invoke it correctly: accepted inputs, match forms, limit behavior, and downstream tool chaining. The 'concrete class name' phrasing also clues the return value sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides no descriptions for its three properties, so the description fully compensates. The Args block explains jar with paths, class directories, and nested archives, name with simple/FQN/glob examples, and limit as the maximum matches returned. This is strong, concrete parameter documentation.

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 and resource: 'Find classes in an archive' by simple name, fully-qualified name, or glob. It also grounds the tool in a practical use case, turning 'where does HttpClient live' into a class name for downstream tools. It does not explicitly contrast itself with siblings like jar_find or jar_search, so it stops short of full sibling differentiation.

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 'Use this to...' sentence gives explicit guidance on when to invoke the tool: when you need to resolve a vague class reference into a concrete class name for jar_class_outline or jar_read_source. It does not state when not to use it or name a preferred alternative, so it misses the full 5-level guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_listA
Read-only

List entries in an archive, filtered by glob and kind.

Prefer this over unzip -l. Use kind='text' to find configuration, kind='archive' to find jars bundled inside a fat jar.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. pattern: Comma-separated globs matched against the entry path, e.g. META-INF/* or *.properties. Empty matches everything. kind: One of all, class, source, text, binary, archive. limit: Maximum entries to return. offset: Entries to skip, for paging.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
kindNoall
limitNo
offsetNo
patternNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the read-only nature is covered. The description adds useful behavioral context including the ability to point jar at a classes directory or `outer.jar!nested.jar`, and that an empty pattern matches everything. These are informative but largely parameter-level rather than deeper behavioral disclosures such as output shape or error cases.

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 compact and well-structured: a one-sentence purpose, two lines of usage guidance, and a clean Args list. Each sentence earns its place and the most important information is front-loaded. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 5-parameter tool with zero schema descriptions, the description is highly complete. It covers all parameters, provides examples, notes special cases, and mentions paging. The output schema exists, so the description need not detail return values. The only minor gap is sibling differentiation, which is already accounted for in other dimensions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden of explaining parameters. It does so thoroughly: jar's accepted forms, pattern glob syntax with examples, kind enum values, limit semantics, and offset paging. Every parameter is explained with enough detail for an agent to construct a correct call.

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 states a specific action and resource: 'List entries in an archive, filtered by glob and kind.' This is clear and non-tautological. However, it does not explicitly differentiate this tool from siblings like jar_find or jar_search, so the agent must infer distinctions from the tool name and action alone.

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 gives practical usage hints for parameter values ('Use kind='text' to find configuration, kind='archive' to find jars bundled inside a fat jar') and recommends this tool over `unzip -l`. It does not, however, explain when to choose jar_list over sibling tools such as jar_find, jar_search, or jar_overview, leaving some selection ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_overviewA
Read-only

Summarize a Java archive: manifest, size, packages, class count, and whether sources are attached.

Start here when you meet an unfamiliar jar, instead of unzipping it or listing every entry.

Args: jar: Path to a .jar/.war/.aar/.zip, an exploded classes directory, or a nested archive such as app.jar!BOOT-INF/lib/dep-1.0.jar.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, and the description aligns by describing a non-mutating summary operation. It adds useful behavioral context beyond annotations by specifying the output dimensions and the accepted input forms, including nested archives like `app.jar!BOOT-INF/lib/dep-1.0.jar`.

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 compact and well-structured: a one-sentence summary of behavior, one sentence of usage guidance, then a short Args block. Every sentence adds value, and the key guidance is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one required parameter, an output schema, and read-only annotations, the description covers all the information an agent needs to select and correctly invoke the tool. It also positions the tool among many siblings by saying to start here, reducing ambiguity in a crowded tool family.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter semantics. It does so thoroughly: 'jar' is explained as a path to jars, wars, aars, zips, exploded directories, or nested archives with a concrete syntax example. This fully compensates for the sparse schema.

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 ('Summarize') and names the exact resource and output fields: manifest, size, packages, class count, and source attachment. This makes the tool's purpose immediately clear and distinct from listing, searching, or extracting jar contents.

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 explicit when-to-use guidance: 'Start here when you meet an unfamiliar jar.' It also tells the agent what not to do instead ('instead of unzipping it or listing every entry'), which implies exclusions even if sibling tool names are not named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_read_entryA
Read-only

Read one text entry from an archive: MANIFEST, service files, XML, config.

Prefer this over unzip -p. Binary entries are described, not dumped.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. entry: Exact entry path, e.g. META-INF/spring.factories. start_line: 1-based first line to show. line_count: How many lines to show.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
entryYes
line_countNo
start_lineNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark readOnlyHint and openWorldHint; the description adds useful behavioral details: binary entries are described not dumped, the jar parameter accepts a classes directory or nested outer.jar!nested.jar path, and line numbers are 1-based. These go beyond the schema and annotations, though it does not cover error behavior or limits.

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 compact and front-loaded: purpose in the first sentence, followed by one usage tip and a concise parameter list. No redundant or marketing language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the unusual path forms, binary-entry behavior, and line-selection parameters, which is sufficient for most invocations given the available output schema and readOnly annotation. It falls short only in not clarifying the boundary with jar_read_source for Java source code.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates: jar's accepted path forms are specified, entry is defined as an exact path with an example, and start_line/line_count are explained as 1-based and line counts. Every parameter receives meaning beyond the bare schema property names.

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?

States a specific verb and resource: 'Read one text entry from an archive' and lists typical entry types (MANIFEST, service files, XML, config). It also notes binary entries are described rather than dumped, which clarifies scope, but it does not explicitly distinguish itself from sibling jar_read_source or other jar_* tools.

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?

Provides one comparative directive: 'Prefer this over unzip -p', and implies it is for text entries. It does not state when to use jar_read_entry versus the sibling jar_read_source or when not to use it, so the usage signal is mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jar_read_sourceA
Read-only

Read attached Java/Kotlin source for a class, one line window at a time.

Looks inside the archive itself, then the matching -sources.jar next to it (Maven layout) or beside it in the Gradle cache. If no source is available, say so and fall back to jar_class_outline.

Args: jar: Archive path, classes directory, or outer.jar!nested.jar. target: FQCN (com.acme.Foo) or an entry path (com/acme/Foo.java). start_line: 1-based first line to show. line_count: How many lines to show; use a window rather than whole files. sources_jar: Explicit sources archive, when auto-detection misses it.

ParametersJSON Schema
NameRequiredDescriptionDefault
jarYes
targetYes
line_countNo
start_lineNo
sources_jarNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses the search order: inside the archive itself, then the matching -sources.jar in Maven or Gradle layout. It also explains the behavior when source is unavailable ('say so and fall back to jar_class_outline') and details the explicit sources_jar override. This is rich behavioral context that the annotations alone do not provide.

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 opening sentence states the core purpose immediately. The behavior is explained in a short paragraph, followed by a compact Args list that documents every parameter. Each sentence earns its place, and the fallback and override details are included without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five parameters, no schema-level descriptions, and an output schema present, the description is complete. It covers all parameters, explains archive/source resolution, gives the fallback path, and sets expectations about windowed reading. There is no meaningful missing information an agent would need to select or invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the full burden of parameter documentation. It does: jar accepts an archive path, classes directory, or nested jar syntax; target accepts an FQCN or entry path; start_line is 1-based; line_count is meant for windowed reading; sources_jar is an explicit override. This adds significant meaning beyond the bare schema properties.

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: 'Read attached Java/Kotlin source for a class, one line window at a time.' This clearly distinguishes it from sibling tools like jar_class_outline and jar_read_entry by focusing on source code and line-window access. The name and description align well, and the fallback mention reinforces its role.

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 clear context for when to use the tool: reading attached source for a class, and explicitly says to fall back to jar_class_outline if no source is available. It also advises using a line window rather than reading entire files. It does not enumerate all sibling alternatives, but the fallback and windowing guidance provide practical routing.

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.

  1. 10 tool updatesv0.1.0
    • First observedjar_class_dependencies
    • First observedjar_class_outline
    • First observedjar_disassemble
    • First observedjar_find
    • First observedjar_find_class
    • First observedjar_list
    • First observedjar_overview
    • First observedjar_read_entry
    • First observedjar_read_source
    • First observedjar_search

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct inspection task: overview, listing, class lookup, API outline, source reading, entry reading, search, dependency analysis, disassembly, and jar discovery. There is no meaningful overlap that would make an agent likely to pick the wrong tool.

Naming Consistency3/5

All tools share the jar_ prefix, which helps, but the grammatical pattern is mixed: jar_list and jar_search are bare verbs, jar_find_class and jar_read_source are verb_noun, while jar_overview and jar_class_outline are noun phrases. The names are readable but not consistently verb_noun.

Tool Count5/5

Ten tools is well within the ideal range and each tool covers a distinct facet of archive inspection. The count feels neither bloated nor thin for the stated purpose.

Completeness5/5

The read-only jar inspection domain is covered thoroughly: overview, listing, class lookup, API outline, source reading, arbitrary text entries, grep-like search, class dependency analysis, bytecode disassembly, and locating jars on disk. An agent can move from finding a jar to reading its source or bytecode without obvious dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server for intelligently reading Java source code, supporting extraction from Maven dependencies and local projects with dual decompilers.
    2
    67 PyPI
    154
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol (MCP) server for exploring, analyzing, and decompiling Java JAR files.
    123 npm
    7
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server that indexes your codebase's public API at startup and serves it via compact tool responses, saving tokens vs reading source files.
    5
    43 PyPI
    21
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    MCP server for searching, browsing, and analyzing decompiled Minecraft source code locally. Supports symbol lookup, text search, reference lookup, and lightweight RAG.
    11
    -