Skip to main content
Glama
salitaba

Maven Decoder MCP Server

by salitaba

Maven Decoder MCP Server

skills.sh

Your agent guesses at library APIs it has never read. This makes it read them.

Lets AI agents read the actual source of any Maven dependency โ€” decompiles jars from ~/.m2 or Maven Central, and diffs versions for breaking changes.

Demo: comparing jsoup 1.17.2 with 1.23.2

Ask an agent "I'm upgrading org.jsoup:jsoup from 1.17.2 to 1.23.2 โ€” what breaks?" and without a way to read the jars it will answer from memory. With this server, compare_versions reads both jars and reports what actually changed:

1.17.2 โ†’ 1.23.2

Breaking changes

45

Members removed

31

Members added

150

Classes with API changes

47 of 115 compared

Members are compared as declared, so one that moved to a supertype is reported as removed even though it may still be callable. The tool states this in its own output.

It works on artifacts that have no sources jar too: extract_class_info falls back to javap and returns parsed fields, methods, and bytecode version โ€” which is exactly the case for the internal artifacts in a corporate Nexus.

Try it in one command

npx skills add https://github.com/salitaba/maven-decoder-mcp --skill maven-code-search

That installs the maven-code-search agent skill, which tells your agent when to reach for these tools. For a raw MCP server setup instead, see Installation.

๐Ÿš€ Features

Core Functionality

  • Jar File Analysis: Deep inspection of jar files including metadata, manifests, and structure

  • Dependency Resolution: Complete dependency tree analysis with transitive dependencies

  • Source Code Extraction: Extract source code from source jars or decompile bytecode

  • Class Information: Detailed class signatures, methods, fields, and annotations

  • Search Capabilities: Find classes, methods, and dependencies across all artifacts

  • Version Management: Compare versions, find dependents, and track version conflicts

Online Maven Support

  • Maven Central Search: Find artifacts and classes that are not installed locally

  • Remote Version Listing: See every published version, not just the ones you have

  • On-Demand Download: Fetch any artifact (jar, sources, POM) into a local cache

  • Transparent Fallback: Every analysis tool automatically downloads a missing artifact, so decompiling a dependency you never installed just works

  • Mirror Friendly: Point it at a corporate Nexus/Artifactory, with optional credentials

  • Offline Mode: A single env var restores fully local, network-free behavior

Advanced Features

  • Decompilation Support: Integrated support for multiple Java decompilers (CFR, Fernflower, Procyon)

  • Conflict Analysis: Detect and analyze dependency version conflicts

  • Repository Navigation: Browse and explore the local Maven repository structure

  • Metadata Parsing: Extract and parse Maven POM files and metadata

  • Service Discovery: Find and analyze Java services and SPI implementations

  • Response Management: Intelligent pagination and summarization for large responses

  • Method Extraction: Extract specific methods from large Java classes

  • Integrity Checking: Downloads are verified against the repository's SHA-1 checksums

Related MCP server: Code Understanding MCP Server

๐Ÿ“ฆ Installation

Prerequisites

  • Java 8+ (for decompilation features)

  • Maven local repository (~/.m2/repository)

  • One of: Python 3.8+, Node.js 14+, or Docker

๐Ÿš€ Quick Install

curl -fsSL https://raw.githubusercontent.com/salitaba/maven-decoder-mcp/main/install.sh | bash

๐Ÿ“‹ Installation Methods

# Install uv (if not installed)
curl -Ls https://astral.sh/uv/install.sh | sh
# Ensure your shell PATH is updated (restart shell or eval as printed by installer)

# Run the server via uvx (isolated, fast, no venv needed)
uvx maven-decoder-mcp

# Optional: pick a specific Python
# uvx --python 3.12 maven-decoder-mcp

Method 2: Node.js/npm

# Install globally
npm install -g maven-decoder-mcp

# Or install locally
npm install maven-decoder-mcp

# Run the server
maven-decoder-mcp
# or if installed locally: npx maven-decoder-mcp

Method 3: Docker

# Pull and run
docker run --rm -it \
  -v ~/.m2:/home/mcpuser/.m2 \
  -v $(pwd):/workspace \
  ali79taba/maven-decoder-mcp:latest

Method 4: From Source (Development)

# Clone repository
git clone https://github.com/salitaba/maven-decoder-mcp.git
cd maven-decoder-mcp

# Option A: Using Virtual Environment
python3 -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
pip install -r requirements.txt
pip install "git+https://github.com/modelcontextprotocol/python-sdk.git"
./setup_decompilers.sh

# Option B: System-wide Installation (not recommended)
./setup_decompilers.sh

Windows

For a source checkout, use Python 3.10 or newer and a JDK on PATH. From the repository root, create and activate a virtual environment in PowerShell:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"

# Point to your existing local Maven repository (drive-letter paths are supported)
$env:MAVEN_REPOSITORY = 'F:\data\repository'
maven-decoder-mcp

In Command Prompt (cmd.exe), activate with .venv\Scripts\activate.bat and set the repository with set "MAVEN_REPOSITORY=F:\data\repository" instead. These environment settings apply to programs launched from that terminal; set them in your MCP client's environment when it launches the server separately.

Remote downloads use a separate cache, resolved in this order (empty values are skipped):

  1. MAVEN_DECODER_CACHE_DIR: the complete cache directory; no subdirectory is appended.

  2. XDG_CACHE_HOME: append maven-decoder-mcp\repository.

  3. LOCALAPPDATA: append maven-decoder-mcp\repository.

  4. Otherwise, ~/.cache/maven-decoder-mcp/repository under your home directory.

On Windows, this usually means %LOCALAPPDATA%\maven-decoder-mcp\repository; XDG_CACHE_HOME still takes precedence if set. The cache uses Maven's directory layout but stays separate from the real local repository so downloads do not interfere with Maven builds. Setting MAVEN_REPOSITORY does not change the cache location.

๐Ÿ”ง Configuration

For Cursor IDE

Add to your ~/.cursor/mcp_servers.json:

{
  "maven-decoder": {
    "command": "uvx",
    "args": ["maven-decoder-mcp"]
  }
}

For Other MCP Clients

The server runs as a standard MCP server and can be integrated with any MCP-compatible client.

๐Ÿง  AI Agent Skill

This repository includes a maven-code-search agent skill that tells AI coding agents when and how to use this MCP for searching installed Maven package code.

npx skills add https://github.com/salitaba/maven-decoder-mcp --skill maven-code-search

The skill is located at skills/maven-code-search and is ready for skills.sh indexing after the repository is pushed.

๐Ÿ› ๏ธ Available Tools

Local Analysis

Tool

Description

list_artifacts

List artifacts in Maven repository with filtering

analyze_jar

Analyze jar file structure and contents

extract_class_info

Get detailed information about Java classes

get_dependencies

Retrieve Maven dependencies from POM files

search_classes

Search for classes across all jars, optionally filtered by annotation

extract_source_code

Decompile and extract Java source code

extract_jar_resource

Extract text resources such as .proto files, services, and metadata

compare_versions

Compare two versions, including a public API diff and breaking changes

find_usage_examples

Find classes that reference a given class or method

get_dependency_tree

Get complete dependency tree

find_dependents

Find artifacts that depend on a specific artifact

get_version_info

Get installed versions of an artifact (set include_remote to add published ones)

analyze_jar_structure

Analyze overall jar structure and metadata

extract_method_info

Extract specific method information from Java classes

Online (Maven Central)

Tool

Description

search_maven_central

Search Maven Central for artifacts by name, coordinates, or contained class

get_remote_versions

List every version published remotely, flagging which are installed

download_artifact

Download an artifact (jar/sources/POM) into the local cache; accepts latest

๐Ÿ’ก Usage Examples

Finding Dependencies

"Show me all dependencies of org.springframework:spring-core:5.3.21"

Decompiling Classes

"Decompile the class com.example.MyService from my Maven repository"

Analyzing Conflicts

"Find all version conflicts in my Maven repository"

Checking an Upgrade for Breaking Changes

"Compare org.jsoup:jsoup 1.17.2 with 1.23.2 and tell me what would break"

compare_versions diffs the public and protected members of every class the two versions share, and reports removals separately from additions. Removed members and removed classes are counted as breaking changes. Members are compared as declared, so one that moved to a supertype is reported as removed even though it may still be callable.

Exploring APIs

"Show me all public methods in the Jackson ObjectMapper class"

Inspecting Compiled-Only Artifacts

"The sources jar is missing. Use extract_class_info for bytecode-backed fields and methods."
"Find and read .proto resources from com.example:protobuf-lib:1.0.0"

When a dependency has no sources jar, extract_class_info uses javap internally and returns parsed fields, methods, bytecode version, and optional verbose bytecode output. Agents should use analyze_jar, extract_class_info, extract_source_code, and extract_jar_resource through this MCP instead of running jar or javap directly.

Working with Large Responses

"List all Spring classes with pagination (page 2, 10 items per page)"
"Extract source code for a large class with summarization"
"Get method information for specific patterns in a class"

Searching Maven Central (Online)

"Which Maven artifact contains the class HikariDataSource?"
"Search Maven Central for retrofit"
"What is the newest published version of org.apache.commons:commons-lang3?"
"Download com.google.code.gson:gson:latest and show me the JsonParser class"

๐ŸŒ Online Maven Support

The server works against the local repository and remote repositories. Online access is enabled by default.

How it works

  1. Every tool first looks in your local repository (~/.m2/repository).

  2. On a miss, the artifact is downloaded from Maven Central into a cache (~/.cache/maven-decoder-mcp/repository) that uses the standard Maven layout.

  3. All existing analysis (decompilation, class info, dependencies) then runs on the cached artifact exactly as it would on an installed one.

The cache is deliberately separate from ~/.m2 so downloads never interfere with your Maven or Gradle builds. Responses include an origin field (local-repository or remote-cache) so you always know where a result came from.

Going offline

MAVEN_OFFLINE=true   # no network access at all; original local-only behavior
MAVEN_AUTO_DOWNLOAD=false   # keep online search, but never auto-download

Using a private mirror

MAVEN_REMOTE_REPOS="https://nexus.corp/repository/maven-public"
MAVEN_REMOTE_USERNAME=builder
MAVEN_REMOTE_PASSWORD=secret

A note on the search index

Artifact downloads use repo1.maven.org, which is fast and reliable. Artifact search uses search.maven.org, the only public index that answers class-level (c: / fc:) queries correctly. That index rate-limits bursts, so requests are retried with backoff; a busy period can still surface as a timeout. Downloads and version listing are unaffected, because they read maven-metadata.xml directly from the repository.

๐Ÿ”„ Response Management

Pagination Support

The server automatically handles large responses through intelligent pagination:

  • Automatic Detection: Responses exceeding 50KB are automatically paginated

  • Configurable Page Size: Default 20 items per page, customizable per request

  • Pagination Metadata: Each response includes pagination information

  • Supported Tools: list_artifacts, extract_class_info, search_classes, get_dependencies, find_dependents, get_version_info

Summarization Features

Large text content is automatically summarized to improve readability:

  • Smart Summarization: Preserves important parts (package declarations, method signatures, closing braces)

  • Configurable Limits: Default 10KB text limit, customizable

  • Java-Specific: Optimized for Java source code structure

  • Metadata Preservation: Original structure and metadata are maintained

Method Extraction

New tool for targeted access to specific methods:

  • Pattern Matching: Use regex patterns to find specific methods

  • Limited Results: Control the number of methods returned

  • Full Context: Includes method signatures, bodies, and line numbers

  • Efficient Processing: Only extracts requested methods, not entire classes

๐Ÿ—๏ธ Architecture

The server is built with a modular architecture:

  • MavenDecoderServer: Main MCP server implementation

  • ResponseManager: Handles pagination and summarization

  • JavaDecompiler: Handles multiple decompilation strategies

  • MavenDependencyAnalyzer: Analyzes Maven dependencies and metadata

  • MavenCentralClient: Remote search, version listing, and artifact downloads

  • Decompilers: CFR, Procyon, Fernflower, and javap integration

๐Ÿงช Development

Running Tests

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run specific test
python test_startup.py

Building Package

# Build distribution
python setup.py sdist bdist_wheel

# Install locally
pip install dist/maven_decoder_mcp-*.whl

Docker Development

# Build Docker image
docker build -t maven-decoder-mcp .

# Run container
docker run --rm -it maven-decoder-mcp

๐Ÿ“ Configuration Options

Environment Variables

Local repository

  • MAVEN_REPOSITORY / MAVEN_REPO: direct path to local Maven repository (e.g. F:\data\repository). Highest precedence.

  • MAVEN_HOME / M2_HOME: Maven install dir or repository dir. A nested repository/ subdir wins when it exists; conf/settings.xml <localRepository> honored.

  • ~/.m2/settings.xml <localRepository> honored when no env var set. Fallback: ~/.m2/repository.

Online access

  • MAVEN_OFFLINE: set to true to disable all network access (default: false)

  • MAVEN_AUTO_DOWNLOAD: auto-fetch artifacts missing locally (default: true)

  • MAVEN_REMOTE_REPOS / MAVEN_REMOTE_REPO: comma/space separated repository base URLs (default: https://repo1.maven.org/maven2)

  • MAVEN_SEARCH_URL: comma/space separated Solr search endpoints (default: https://search.maven.org/solrsearch/select)

  • MAVEN_DECODER_CACHE_DIR: where downloaded artifacts are cached (default: ~/.cache/maven-decoder-mcp/repository)

  • MAVEN_REMOTE_USERNAME / MAVEN_REMOTE_PASSWORD: basic-auth credentials for a private mirror

  • MAVEN_HTTP_TIMEOUT: per-request timeout in seconds (default: 30)

  • MAVEN_HTTP_RETRIES: retries for transient network failures (default: 3)

  • MAVEN_MAX_DOWNLOAD_SIZE: maximum download size in bytes (default: 104857600)

  • MAVEN_VERIFY_CHECKSUM: verify downloads against published SHA-1 (default: true)

Responses

  • MCP_LOG_LEVEL: Logging level (DEBUG, INFO, WARNING, ERROR)

  • MCP_MAX_RESPONSE_SIZE: Maximum response size in bytes (default: 50000)

  • MCP_MAX_ITEMS_PER_PAGE: Default items per page (default: 20)

  • MCP_MAX_TEXT_LENGTH: Maximum text length before summarization (default: 10000)

  • MCP_MAX_LINES: Maximum lines before summarization (default: 500)

  • MCP_USAGE_SCAN_LIMIT: Max classes scanned by find_usage_examples (default: 200000)

  • MCP_API_DIFF_LIMIT: Max classes compared by compare_versions (default: 2000)

  • MAVEN_DECODER_DECOMPILER_DIR: Directory holding cfr.jar / procyon-decompiler.jar

Advanced Configuration

The server automatically detects and configures:

  • Maven repository location

  • Available Java decompilers

  • System capabilities

๐Ÿ” Troubleshooting

Common Issues

Server won't start

# Check Python installation
python --version

# Check Maven repository
ls ~/.m2/repository

# Check logs
maven-decoder-mcp --debug

Decompilation fails

# Check the environment: Java, repository, cache and available decompilers
maven-decoder-setup status

# Install the optional CFR and Procyon decompilers
maven-decoder-setup decompilers

Without CFR or Procyon the server still works, falling back to javap from the JDK for signatures, fields and methods.

No artifacts found

# Verify Maven repository location
ls ~/.m2/repository

# Run a Maven build to populate repository
mvn dependency:resolve

Maven Central search times out

The public search index rate-limits bursts of requests. Retries with backoff are built in, but during heavy throttling a search can still fail. Workarounds:

# Wait a moment and retry, or raise the retry budget
MAVEN_HTTP_RETRIES=5

# Downloads and version listing do not use the search index, so these keep
# working even while search is throttled:
#   get_remote_versions, download_artifact

Downloads fail behind a proxy or firewall

# requests honors the standard proxy variables
export HTTPS_PROXY=http://proxy.corp:8080

# Or point at an internal mirror
export MAVEN_REMOTE_REPOS="https://nexus.corp/repository/maven-public"

# Or turn the network off entirely
export MAVEN_OFFLINE=true

๐Ÿค Contributing

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“Š Stats

GitHub Stars PyPI Downloads Docker Pulls


Made with โค๏ธ for the Java development community

Available Tools

17 tools
analyze_jarC

Analyze a specific jar file and extract detailed information

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesMaven version
group_idYesMaven group ID
artifact_idYesMaven artifact ID
include_bytecodeNoInclude bytecode analysis
include_manifestNoInclude JAR manifest
summarize_large_contentNoSummarize large content automatically

TDQS

C2.9/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 the full burden of behavioral disclosure. It only says 'analyze' and 'extract detailed information,' leaving unclear whether this is read-only, whether remote downloads occur, or what the response contains.

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 redundancy and is appropriately front-loaded with the main action. The phrase 'detailed information' is vague, but the structure itself is concise and free of filler.

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 no annotations, no output schema, and a large sibling list, the description is too minimal to be complete. It omits output format, behavioral expectations, and distinctions from related extractor tools, leaving the agent to rely on the name and parameters 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?

All six parameters are fully described in the input schema (100% coverage), so the description does not need to restate them. The description adds no extra meaning beyond what the schema already provides, which matches the baseline for high schema coverage.

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 clear verb-resource pair: 'analyze a specific jar file and extract detailed information.' However, it does not enumerate what information is extracted or distinguish itself from sibling tools like analyze_jar_structure and extract_class_info.

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 the 16 related sibling tools. There is no mention of alternatives, exclusions, or typical use cases, so an agent gets no routing cues for selection.

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

analyze_jar_structureC

Analyze the overall structure and metadata of a jar file

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesMaven version
group_idYesMaven group ID
artifact_idYesMaven artifact ID
summarize_large_contentNoSummarize large content automatically

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 only says 'Analyze', implying a read-only operation but never explicitly stating side effects, return format, or any constraints. It also does not mention how 'summarize_large_content' affects behavior, leaving the agent with minimal insight into what happens when invoked.

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, direct sentence with no fluff or redundancy. It front-loads the core action and resource, making it easy to scan. There is no unnecessary detail or repetition, achieving excellent conciseness.

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 moderate complexity with three required coordinates and an optional flag, yet the description provides no information about the output structure, return value, or whether the operation is safe. Since there is no output schema and no annotations, the description should compensate, but it does not. An agent would have to guess what 'structure and metadata' means in terms of the response.

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 100%, so the schema already explains all four parameters. The description adds no additional parameter context, so the baseline of 3 is appropriate. It neither clarifies nor detracts from the schema's meaning.

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 a verb ('Analyze') and a specific resource ('overall structure and metadata of a jar file'), making its purpose evident. However, it does not differentiate from the sibling tool 'analyze_jar', which likely serves a similar or broader role, so it misses the full 5-point bar that requires sibling distinction.

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 provided on when to use this tool versus alternatives such as 'analyze_jar' or 'extract_class_info'. The description does not mention any conditions or contexts that would make this tool the preferred choice, leaving the agent without routing information.

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

compare_versionsA

Compare different versions of the same Maven artifact

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYesMaven group ID
version1YesFirst (older) version to compare
version2YesSecond (newer) version to compare
artifact_idYesMaven artifact ID
compare_apiNoDiff the public API: added/removed public and protected methods and fields, and breaking changes
summarize_large_contentNoSummarize large content automatically

TDQS

A3.7/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 the full burden. It doesn't disclose whether the operation is read-only, what the output format is, or any side effects. The parameter 'compare_api' hints at an API diff but the description itself gives no behavioral details.

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, concise sentence that is front-loaded with the main action. It wastes no words and is easy to parse.

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 tool is simple and the parameters are clear, but the description doesn't mention what the comparison result looks like (e.g., diff, report, boolean). Given there is no output schema, this missing information leaves a gap in completeness.

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 100% and each parameter has a brief description. The descriptions are self-explanatory for group_id, artifact_id, version1, and version2. However, the description adds no extra semantic value beyond the schema, so it stays at the 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 clearly states the action ('Compare') and the resource ('different versions of the same Maven artifact'), which is specific and unambiguous. It distinguishes the tool from siblings that list versions or analyze structures, though it doesn't explicitly name alternatives.

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 implies usage: comparing two versions of an artifact. It doesn't explicitly state when not to use it, but the context is clear enough for a simple comparison tool. It could mention that it's for side-by-side version comparison, but the required parameters (version1, version2) make this obvious.

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

download_artifactA

Download an artifact from the remote repository into the local analysis cache so every other tool can inspect it. Use 'latest' as the version to fetch the newest release.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoRe-download even when the file is already cached
versionYesVersion to download, or 'latest' for the newest release
group_idYesMaven group ID
classifierNoDownload a specific classified jar instead of the main one
artifact_idYesMaven artifact ID
include_javadocNoAlso download the javadoc jar when published
include_sourcesNoAlso download the sources jar when published

TDQS

A3.6/5.0
Behavior3/5

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

The description discloses the primary side effect (populating the local cache) and mentions the 'latest' version behavior, but it does not elaborate on handling of cached artifacts, force behavior, or potential network dependency. With no annotations, more detail would be expected.

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 no fluff. It front-loads the primary action and purpose, and the 'latest' usage hint is relevant. Every word contributes to understanding.

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?

For a simple download operation with a side-effect cache, the description gives sufficient context about the tool's role in the broader workflow (enabling other tools). It lacks explicit return-value info but that is not critical for this type of tool.

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 100% with each parameter already described in the schema. The tool description adds only a redundant note about 'latest' which is already present in the version parameter. It does not provide additional semantic nuance beyond the parameter descriptions.

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 clearly states the action (download), the resource (artifact from remote repository), and the target (local analysis cache). It also explains the intent (so every other tool can inspect it), making the tool's purpose unmistakable.

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 does not explicitly contrast this tool with its siblings like search_maven_central or get_remote_versions. It implies this is a prerequisite for local inspection but provides no direct guidance on when to choose this over alternatives.

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

extract_class_infoC

Get detailed information about Java classes in a jar

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
versionYesMaven version
group_idYesMaven group ID
artifact_idYesMaven artifact ID
class_patternNoPattern to match class names (regex supported)
include_fieldsNoInclude field information
items_per_pageNoItems per page
include_methodsNoInclude method signatures
include_bytecodeNoInclude verbose javap bytecode output for matched classes
summarize_large_contentNoSummarize large content automatically

TDQS

C2.9/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 the full burden of behavioral disclosure. It does not mention pagination, defaults like summarize_large_content, output format, or whether the operation is read-only. The description is generic and adds little beyond the tool name.

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, front-loaded sentence with no redundant words. It is efficient, but it is also generic and could have included a brief mention of the Maven coordinate requirement without being verbose.

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 tool with 10 parameters, 3 required fields, no output schema, and no annotations, the description is too minimal. It leaves out context about expected return values, pagination behavior, and when to choose this tool among many overlapping siblings, making it hard for an agent to invoke it 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 100%, so the input schema fully documents all 10 parameters. The description adds no extra meaning about parameters, interactions, or defaults, so the baseline score of 3 applies.

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 ('Get') and identifies the resource ('detailed information about Java classes in a jar'). It is clear, but it does not differentiate among siblings like search_classes, analyze_jar_structure, or extract_method_info, so it is not a 5.

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. It does not mention exclusions, prerequisites (such as Maven coordinates), or that it might be better for detailed class inspection while other siblings handle searching or method extraction.

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

extract_jar_resourceA

Extract text resources from a jar, such as .proto files, service descriptors, or metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matching resources to return
versionYesMaven version
group_idYesMaven group ID
max_bytesNoMaximum bytes to read per resource
artifact_idYesMaven artifact ID
resource_pathNoExact resource path inside the jar
resource_patternNoRegex pattern to match resource paths

TDQS

A3.6/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 the full burden of behavioral disclosure. It states only that text resources are extracted, without mentioning whether the operation is read-only, whether it downloads the jar, what happens for binary files, how max_bytes affects output, or what the response shape is. This is a significant gap for an extraction tool with no annotation safety signals.

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 efficient sentence with no filler; it front-loads the core action and resource, then enriches with three concrete examples. Every word earns its place, and the structure is appropriately scannable for an agent.

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 7 parameters, no output schema, and no annotations, the description needs to provide more operating context, but it does not explain return values, matching behavior, or the relationship between resource_path and resource_pattern. An agent still lacks key information needed to correctly invoke the tool, such as whether at least one path/pattern is required or what happens when no resources match.

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 input schema already documents all 7 parameters with descriptions, so the schema coverage is 100% and the baseline is 3. The description adds only a general sense of what resource types are relevant; it does not add meaning beyond the schema for parameters like resource_path, resource_pattern, limit, or max_bytes.

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 (extract) and resource (text resources inside a jar), and gives concrete examples (.proto files, service descriptors, metadata). These examples clearly differentiate it from sibling tools like extract_class_info and extract_source_code, which target class binaries and source code rather than arbitrary text resources.

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 provides clear context for when this tool is appropriate by enumerating text-resource types like .proto files and service descriptors, implying its niche among the sibling extraction tools. However, it does not explicitly name alternatives or state when not to use it, so the guidance is clear but not fully explicit.

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

extract_method_infoC

Extract specific method information from a Java class

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesMaven version
group_idYesMaven group ID
class_nameYesFully qualified class name
artifact_idYesMaven artifact ID
max_methodsNoMaximum number of methods to return
method_patternNoPattern to match method names (regex supported)
include_bytecodeNoInclude bytecode analysis

TDQS

C2.9/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 disclosure. It only says 'Extract specific method information' and does not reveal whether this downloads artifacts, accesses Maven Central, is read-only, handles missing classes, or what output format to expect. This is a significant transparency gap for a tool that likely performs network/resolution work.

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 short sentence with no redundant phrasing, no repetition of schema details, and the key action and resource are front-loaded. Every word serves a purpose.

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 7 parameters, 4 required Maven coordinates, no output schema, and no annotations, this bare description is not enough. It does not mention that the class is resolved via Maven coordinates, what 'method information' contains, how method_pattern and include_bytecode affect behavior, or what the return shape looks like. The schema helps, but the description leaves too much unstated.

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 100%, so the input schema already documents all parameters, including optional filters like method_pattern and include_bytecode. The description adds little beyond the word 'specific,' which loosely maps to the filtering parameters but provides no additional semantic detail. Baseline 3 is appropriate.

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 verb ('Extract'), a resource ('method information'), and the source scope ('a Java class'). This clearly distinguishes it from related class-level or jar-level tools, even though it does not explicitly name the sibling it differs from.

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 implies use when method-level details are needed from a Java class, but it provides no explicit when-to-use guidance, no exclusions, and no pointers to alternative tools like extract_class_info or analyze_jar_structure. The agent must infer usage context from the tool name and schema.

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

extract_source_codeB

Extract source code from jar (if available) or decompile bytecode

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesMaven version
group_idYesMaven group ID
max_linesNoMaximum lines to return (0 for all)
class_nameYesFully qualified class name
artifact_idYesMaven artifact ID
prefer_sourcesNoPrefer source jar over decompilation
summarize_large_contentNoSummarize large content automatically

TDQS

B3.3/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 behavioral disclosure burden. It does disclose a key behavior: it prefers the source jar and falls back to decompilation. However, it omits other important behaviors such as summarization of large content, line limiting, and whether network/download operations are involved. These gaps matter given the absence of annotations and an output schema.

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; every word contributes to the core behavior. It is front-loaded with the action and resource. It is appropriately sized for a high-level summary, though it leaves behavioral detail to other dimensions.

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 tool has 7 parameters, including flags like max_lines and summarize_large_content, yet the description explains none of their interaction. There is no output schema and no annotations, so the agent has no indication of return format, error conditions, decompilation limits, or network behavior. For an operation of this complexity, the description is too sparse.

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 100%, so the baseline is 3. The description adds minor context by explaining the 'source jar vs decompile' tradeoff, which loosely aligns with prefer_sources, but it does not meaningfully enrich the meaning of the Maven coordinates, class_name, max_lines, or summarize_large_content beyond what the schema already states.

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 action verb ('Extract') and a concrete resource ('source code'), and clarifies the two paths: extracting from a source jar or decompiling bytecode. This distinguishes it from siblings like extract_class_info and extract_method_info, which focus on metadata rather than source code, though it does not name those alternatives explicitly.

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 this tool is for obtaining source code when a Maven artifact is identified, and it conveys a fallback path (decompile bytecode if source jar is unavailable). However, it provides no explicit guidance on when to choose this over siblings like extract_class_info or extract_jar_resource, nor any exclusions or prerequisites.

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

find_dependentsC

Find artifacts that depend on a specific artifact

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum results to return
versionNoSpecific version to search for (optional)
group_idYesTarget group ID
artifact_idYesTarget artifact ID
items_per_pageNoItems per page

TDQS

C2.9/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 behavioral burden. It only states the query intent and does not mention pagination behavior, result format, whether version is optional, or how dependent artifacts are scoped (direct vs transitive).

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, focused sentence with no filler. It front-loads the core purpose, but it is minimal enough that it lacks auxiliary context without becoming unnecessarily long.

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 six parameters, no output schema, and no annotations, a one-sentence description is insufficient. It omits how pagination works, what the response contains, and how this tool relates to sibling dependency 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?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level meaning; importantly, it does not clarify the redundant pagination parameters page, limit, and items_per_page, but the schema already documents each parameter.

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 clear verb and resource: 'Find artifacts that depend on a specific artifact.' It communicates the reverse-dependency concept, though it does not explicitly distinguish itself from siblings like get_dependencies or get_dependency_tree.

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 gives no guidance on when to use this tool versus alternatives. With siblings like get_dependencies and get_dependency_tree, the agent must infer the opposite-direction semantics from the tool name and description rather than being told.

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

find_usage_examplesB

Find usage examples of classes/methods in test jars

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum results to return
class_nameYesClass name to find usage for
method_nameNoMethod name to find usage for
search_testsNoSearch in test jars
items_per_pageNoItems per page

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of explaining behavior. It states that the tool 'finds usage examples in test jars,' but it does not disclose whether this is a read-only operation, what the output looks like, how pagination behaves, or what happens when no examples are found. These behavioral gaps are notable for a tool with no output schema and no 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 a single, concise sentence that front-loads the core purpose. There is no redundant or filler content, and it is appropriately sized for what it communicates.

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 six parameters, no annotations, and no output schema, the description is too minimal to be fully actionable. It does not explain return values, pagination semantics, or how this tool fits among the sixteen listed siblings. An agent would likely need additional inference or experimentation to invoke it correctly for non-default cases.

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 100%, so the schema already documents each parameter clearly. The description adds little beyond mapping 'classes/methods' to class_name and method_name, and 'test jars' to search_tests. It does not clarify the relationship between page, limit, and items_per_page or their effective behavior.

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 clear verb and resource: 'Find usage examples of classes/methods in test jars.' It is specific enough to distinguish this tool from siblings like extract_class_info or extract_method_info, which focus on structural details rather than usage examples. The scope 'test jars' further narrows the purpose.

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?

There is no guidance about when to use this tool versus the many sibling tools. The description does not mention alternatives, exclusions, or conditions that would help an agent choose between find_usage_examples and similar search/analysis tools. The only implied context is that test jars are the search target, but no explicit usage guidance is provided.

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

get_dependenciesC

Get Maven dependencies from POM files

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
versionYesMaven version
group_idYesMaven group ID
artifact_idYesMaven artifact ID
items_per_pageNoItems per page
include_transitiveNoInclude transitive dependencies

TDQS

C2.6/5.0
Behavior1/5

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

No annotations are provided, and the description does not disclose any behavioral aspects such as whether the operation is read-only, side effects, pagination limits, or error behavior. The full burden falls on the description, which is minimal and lacks any transparency about what happens when the tool is invoked.

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 extremely concise and to the point, consisting of a single clear sentence. There is no redundant information or filler, and it effectively communicates the core function without unnecessary verbosity.

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 description lacks context about the output format, return type, or any additional information an agent might need to interpret the results. Since there is no output schema and the tool appears simple, some explanation of what 'dependencies' entails (e.g., list of objects, fields) would improve completeness. Currently, the agent is left guessing about the response structure.

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 full descriptions for all six parameters with 100% coverage, so the baseline is met. The tool description itself does not add any extra semantic meaning beyond what the schema already conveys, but no parameter is left undocumented.

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 ('Get'), the resource ('Maven dependencies'), and the source ('POM files'). It is specific and unambiguous, but it does not explicitly differentiate from the sibling tool 'get_dependency_tree', which could also return dependency information. Despite this, the purpose is clear.

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

Usage Guidelines1/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 over alternatives. It does not mention scenarios where this tool is preferred, nor does it contrast with siblings like 'get_dependency_tree' or 'find_dependents'. No usage conditions or prerequisites are stated.

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

get_dependency_treeC

Get complete dependency tree for an artifact

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesMaven version
group_idYesMaven group ID
max_depthNoMaximum depth to show
artifact_idYesMaven artifact ID
summarize_large_contentNoSummarize large content automatically

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description must carry the behavioral burden. It calls the tree 'complete' but the schema defaults max_depth to 3 and summarize_large_content to true, meaning results may be truncated or summarized. This tension is not addressed.

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 front-loaded sentence with no filler. It is appropriately terse, though its brevity is achieved partly by omitting useful behavioral and comparative context.

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 output schema, no annotations, and a close sibling get_dependencies, this description is underspecified. It does not explain return shape, the effect of max_depth, summarization behavior, or when to choose this tool over alternatives.

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 100%, so the parameters are already documented meaningfully. The description adds almost no parameter-level detail beyond naming the artifact; it does not explain how max_depth affects the 'complete' claim or what summarize_large_content does.

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 clear verb and resource: 'Get complete dependency tree for an artifact'. The Maven coordinates are visible in the schema. It does not explicitly contrast with sibling get_dependencies, but 'tree' implies recursive structure versus a flat dependency list.

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 when-to-use guidance is provided, and no alternative tools are mentioned. The agent is left to infer when this is preferable to get_dependencies or list_artifacts. The word 'complete' implies a full traversal, but that is not made explicit.

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

get_remote_versionsA

List all versions of an artifact published on the remote repository, including versions that are not installed locally

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum versions to return
group_idYesMaven group ID
artifact_idYesMaven artifact ID

TDQS

A4/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 transparency burden. It usefully discloses the remote scope and the inclusion of non-local versions. However, it claims to list 'all' versions while the schema includes a 'limit' parameter, creating a slight ambiguity about whether results are truly complete or capped.

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 is immediately informative. The main action and key qualifier are front-loaded, with no filler or redundant detail. Every word contributes to understanding.

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?

For a simple list operation with fully documented parameters, this description is nearly complete. It conveys the remote-versus-local distinction, which is the main contextual nuance. The missing return-format details are less critical given the tool's straightforward name and behavior.

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 100%, so the schema already fully documents the three parameters. The description adds no additional parameter-level meaning, but the baseline of 3 is appropriate given the schema handles the explanation.

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 clearly states a specific verb ('List'), a resource ('versions of an artifact published on the remote repository'), and a key differentiator ('including versions that are not installed locally'). This distinguishes it from sibling tools like get_version_info and list_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 provides clear context for when to use the tool: when you need versions available on the remote repository, including those not installed locally. However, it does not explicitly name alternatives or state when not to use it, leaving some routing to inference.

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

get_version_infoB

Get all available versions of an artifact, optionally including versions published remotely

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum versions to return
group_idYesMaven group ID
artifact_idYesMaven artifact ID
include_remoteNoAlso list versions published on the remote repository (not just installed ones)
items_per_pageNoItems per page

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavioral traits. It only states a high-level read operation and the optional remote inclusion, but does not mention that by default only installed versions are returned, that results are paginated, or any repository-related behavior. The schema's include_remote description partially fills in default behavior, but the description itself is thin for a tool with no annotation 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 a single efficient sentence, front-loading the main action and resource. Every word contributes meaning, and it avoids redundant restating of the tool name or parameter details.

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 presence of six parameters, including two pagination-related parameters, and the absence of an output schema mean the description should provide more context about return values, pagination defaults, and the relationship between local and remote versions. It currently leaves an agent uncertain about what will be returned and how pagination parameters interact.

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 100%, so parameters are already well-documented. The description adds minimal extra meaning beyond the schemaโ€”mainly reinforcing the 'all versions' and 'optional remote' concepts already present in include_remote. It does not clarify the relationship between 'limit' and 'items_per_page', but the schema baseline of 3 applies.

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 ('Get') and resource ('all available versions of an artifact'), and clarifies an optional scope ('including versions published remotely'). This clearly distinguishes it from siblings like list_artifacts (lists artifacts) and get_remote_versions (likely remote-only), while conveying the full retrieval behavior.

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 intended use is implied: use this tool when you need versions of a specific Maven artifact. However, the description gives no explicit guidance on when to prefer an alternative such as get_remote_versions or compare_versions, and does not state when remote inclusion would or would not be appropriate.

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

list_artifactsA

List all Maven artifacts in the local repository with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum number of artifacts to return
versionNoFilter by version (e.g., '5.3.21')
group_idNoFilter by group ID (e.g., 'org.springframework')
artifact_idNoFilter by artifact ID (e.g., 'spring-core')
items_per_pageNoItems per page

TDQS

A3.8/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. It states the operation is a listing operation and clarifies the local scope and filtering capability. However, it does not disclose pagination behavior, output shape, or the fact that 'all' artifacts are likely returned in pages based on the limit/items_per_page parameters.

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, front-loaded sentence with no filler, making it easy to scan. It sacrifices some useful context (pagination, usage guidance) for brevity, but the wording itself is efficient.

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 basic list-and-filter operation, especially because all parameters are described in the schema. Yet it has clear gaps: no output schema, no mention of pagination semantics, and no guidance on how this tool relates to the many sibling 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?

Schema description coverage is 100%, so the parameters themselves are already fully documented. The description adds only the generic notion of 'optional filtering', which does not meaningfully clarify the ambiguous relationship between 'limit' and 'items_per_page'.

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 ('List') and identifies the exact resource ('Maven artifacts in the local repository') with a clear qualifier ('optional filtering'). This distinguishes it from sibling tools focused on remote search, analysis, extraction, and dependency resolution.

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 phrase 'in the local repository' provides clear context that this tool is for local artifact enumeration, in contrast to tools like search_maven_central or get_remote_versions. However, it does not explicitly mention when to prefer alternatives or describe exclusions.

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

search_classesC

Search for Java classes across all jars in the repository

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum results to return
annotationNoSearch for classes with specific annotation
class_nameNoClass name to search for (supports wildcards)
items_per_pageNoItems per page
package_patternNoPackage pattern to filter by

TDQS

C2.9/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 the full burden of behavioral disclosure. It implies a read-only search operation but does not describe return values, output structure, potential breadth of the scan, or any side effects. The phrase 'across all jars' hints at a potentially broad operation, but the description does not elaborate.

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 clear sentence with no filler or repetition. It is concise and front-loaded, though slightly too sparse to fully support a six-parameter tool with no additional context.

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 six optional parameters, no output schema, and no annotations, the description is incomplete for safe tool selection and invocation. It does not clarify the relationship between 'page'/'limit' and 'items_per_page', explain the result format, or distinguish when this tool should be preferred over related siblings.

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 100%, so the schema already documents each parameter. The tool description adds no additional semantic value beyond what the schema provides, which matches the baseline score of 3.

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 a specific action ('Search') and resource ('Java classes across all jars in the repository'), which is informative and distinct from most sibling tools like analyze_jar_structure or extract_class_info. However, it does not explicitly name or contrast any sibling, so full differentiation is left 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 Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives such as search_maven_central or extract_class_info. The description states the scope but provides no exclusions, prerequisites, or selection criteria.

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

search_maven_centralA

Search Maven Central (or the configured mirror) online for artifacts, including ones not installed locally. Use this to discover coordinates or find which published artifact contains a class.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoMaximum results to return (max 200)
queryNoFree-text search term (e.g. 'jackson databind')
group_idNoExact group ID filter (e.g. 'org.springframework')
packagingNoPackaging filter (e.g. 'jar', 'pom')
class_nameNoSimple class name to find the containing artifact (e.g. 'ObjectMapper')
artifact_idNoExact artifact ID filter (e.g. 'spring-core')
all_versionsNoReturn every published version instead of only the latest per artifact
fully_qualified_classNoFully qualified class name (e.g. 'com.fasterxml.jackson.databind.ObjectMapper')

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are present, so the description carries the full behavioral burden. It does disclose meaningful context: the operation is a remote online search against the configured mirror and can return artifacts not installed locally. However, it never explicitly states a read-only safety profile and does not address failure modes such as network unavailability or mirror misconfiguration.

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 sentences with no waste: the first states the action and scope, the second the two primary use cases. The core purpose is front-loaded and every clause earns its place.

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 9 parameters are fully documented in the schema and the description anchors the two main use cases well. But with no annotations and no output schema, the result shape and the read-only safety profile are left implicit. Adequate for a conceptually simple search tool, yet not fully complete.

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 100%, so the baseline is 3. The description adds modest selection guidance by mapping use cases to parameter groups: 'discover coordinates' implies query/group_id/artifact_id, while 'find which published artifact contains a class' implies class_name/fully_qualified_class. It doesn't explain filter combination or pagination semantics beyond what the schema already documents.

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 ('Search') with a clear resource ('Maven Central or the configured mirror') and defines the scope ('online', 'including ones not installed locally'). It names two concrete use cases โ€” discovering coordinates and finding which published artifact contains a class โ€” which separates it from local tools like list_artifacts and search_classes in the sibling set.

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?

'Use this to discover coordinates or find which published artifact contains a class' gives explicit when-to-use scenarios, and 'including ones not installed locally' signals when the remote search is the right choice over local alternatives. It stops short of naming siblings or stating when-not-to-use, so it's clear context without explicit exclusions.

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. 17 tool updatesv1.3.0
    • First observedanalyze_jar
    • First observedanalyze_jar_structure
    • First observedcompare_versions
    • First observeddownload_artifact
    • First observedextract_class_info
    • First observedextract_jar_resource
    • First observedextract_method_info
    • First observedextract_source_code
    • First observedfind_dependents
    • First observedfind_usage_examples
    • First observedget_dependencies
    • First observedget_dependency_tree
    • First observedget_remote_versions
    • First observedget_version_info
    • First observedlist_artifacts
    • First observedsearch_classes
    • First observedsearch_maven_central

TDQS

B3.3/5.0

Scored across 17 tools

Disambiguation2/5

Several tools have overlapping purposesโ€”analyze_jar_structure vs analyze_jar, get_version_info vs get_remote_versions, get_dependencies vs get_dependency_tree, and search_classes vs search_maven_centralโ€”so an agent could easily pick the wrong one. The descriptions clarify local vs remote or detail level somewhat, but the boundaries are not crisp.

Naming Consistency5/5

All tool names follow a consistent lowercase snake_case verb_noun pattern, using verbs like analyze, list, extract, get, search, compare, find, and download. The naming makes the action and target clear even when some tools are semantically close.

Tool Count4/5

17 tools is slightly above the ideal 3-15 range, but the server covers a broad domain: local repository scanning, jar inspection, dependency analysis, remote search, and downloading. A few redundant tools could be consolidated, but the count is not excessive.

Completeness5/5

The tool set covers artifact discovery, downloading, jar analysis, class/method/source extraction, dependency trees, reverse dependents, and remote version lookup. This is a comprehensive read/analysis surface with no obvious dead-end gaps for the stated Maven decoder purpose.

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
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI agents structured code understanding and precise code intelligence via local indexing of AST, call graphs, and semantic search.
    81
    4
    Apache 2.0
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    An advanced MCP server that provides deep code understanding and analysis using GraphRAG, AST parsing, and semantic memory, enabling AI agents to query and interact with complex codebases.
    -