Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Lets AI agents read the real source of any Maven dependency, decompiled from ~/.m2 or Central.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
MAVEN_REPOSITORY, MAVEN_REMOTE_REPOS, MAVEN_REMOTE_USERNAME, MAVEN_REMOTE_PASSWORD, MAVEN_OFFLINE, MAVEN_AUTO_DOWNLOAD, MAVEN_DECODER_CACHE_DIRValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"maven-decoder": {
"command": "npx",
"args": [
"-y",
"maven-decoder-mcp"
],
"env": {
"MAVEN_REPOSITORY": "your-value",
"MAVEN_REMOTE_REPOS": "your-value",
"MAVEN_REMOTE_USERNAME": "your-value",
"MAVEN_REMOTE_PASSWORD": "your-value",
"MAVEN_OFFLINE": "your-value",
"MAVEN_AUTO_DOWNLOAD": "your-value",
"MAVEN_DECODER_CACHE_DIR": "your-value"
}
}
}
}Run this in your terminal
claude mcp add maven-decoder --env MAVEN_REPOSITORY=your-value --env MAVEN_REMOTE_REPOS=your-value --env MAVEN_REMOTE_USERNAME=your-value --env MAVEN_REMOTE_PASSWORD=your-value --env MAVEN_OFFLINE=your-value --env MAVEN_AUTO_DOWNLOAD=your-value --env MAVEN_DECODER_CACHE_DIR=your-value -- npx -y maven-decoder-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"maven-decoder": {
"command": "npx",
"args": [
"-y",
"maven-decoder-mcp"
],
"env": {
"MAVEN_REPOSITORY": "your-value",
"MAVEN_REMOTE_REPOS": "your-value",
"MAVEN_REMOTE_USERNAME": "your-value",
"MAVEN_REMOTE_PASSWORD": "your-value",
"MAVEN_OFFLINE": "your-value",
"MAVEN_AUTO_DOWNLOAD": "your-value",
"MAVEN_DECODER_CACHE_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"maven-decoder": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"maven-decoder-mcp"
],
"env": {
"MAVEN_REPOSITORY": "your-value",
"MAVEN_REMOTE_REPOS": "your-value",
"MAVEN_REMOTE_USERNAME": "your-value",
"MAVEN_REMOTE_PASSWORD": "your-value",
"MAVEN_OFFLINE": "your-value",
"MAVEN_AUTO_DOWNLOAD": "your-value",
"MAVEN_DECODER_CACHE_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
MAVEN_REPOSITORY envMAVEN_REMOTE_REPOS envMAVEN_REMOTE_USERNAME envMAVEN_OFFLINE envMAVEN_AUTO_DOWNLOAD envMAVEN_DECODER_CACHE_DIR envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account salitaba, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: MAVEN_REMOTE_PASSWORD
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.3.2) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js, Python (uv) on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Zoo MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
An MCP server that provides access to the Zoo API for various CAD operations and tools.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
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.
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.
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.
~/.m2/repository)curl -fsSL https://raw.githubusercontent.com/salitaba/maven-decoder-mcp/main/install.sh | bash
# Install uv (if not installed)
curl -Ls https://astral.sh/uv/install.sh | sh
uvx maven-decoder-mcp
# Install globally
npm install -g maven-decoder-mcp
npm install maven-decoder-mcp
maven-decoder-mcp
# Pull and run
docker run --rm -it \ -v ~/.m2:/home/mcpuser/.m2 \ -v $(pwd):/workspace \ ali79taba/maven-decoder-mcp:latest
# Clone repository
git clone https://github.com/salitaba/maven-decoder-mcp.git cd maven-decoder-mcp
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
./setup_decompilers.sh
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]"
$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):
MAVEN_DECODER_CACHE_DIR: the complete cache directory; no subdirectory is appended.XDG_CACHE_HOME: append maven-decoder-mcp\repository.LOCALAPPDATA: append maven-decoder-mcp\repository.~/.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.
Add to your ~/.cursor/mcp_servers.json:
{
"maven-decoder": { "command": "uvx", "args": ["maven-decoder-mcp"] } }
The server runs as a standard MCP server and can be integrated with any MCP-compatible client.
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.
| 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 |
| 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 |
| Tool | Parameter | Type | Default | Description |
|---|---|---|---|---|
list_artifacts | group_id | string | — | Filter by group ID (e.g., 'org.springframework') |
list_artifacts | artifact_id | string | — | Filter by artifact ID (e.g., 'spring-core') |
list_artifacts | version | string | — | Filter by version (e.g., '5.3.21') |
list_artifacts | sort_by | string | name | Order results by: 'name' (group/artifact/version ascending, default), 'size' (largest jars first), or 'modified' (most recently modified first). Unknown values fall back to 'name'. |
list_artifacts | limit | integer | 50 | Maximum number of artifacts to return |
list_artifacts | page | integer | 1 | Page number for pagination |
list_artifacts | items_per_page | integer | 20 | Items per page |
analyze_jar | group_id* | string | — | Maven group ID |
analyze_jar | artifact_id* | string | — | Maven artifact ID |
analyze_jar | version* | string | — | Maven version |
analyze_jar | include_bytecode | boolean | False | Include bytecode analysis |
analyze_jar | include_manifest | boolean | True | Include JAR manifest |
analyze_jar | summarize_large_content | boolean | True | Summarize large content automatically |
extract_class_info | group_id* | string | — | Maven group ID |
extract_class_info | artifact_id* | string | — | Maven artifact ID |
extract_class_info | version* | string | — | Maven version |
extract_class_info | class_pattern | string | — | Pattern to match class names (regex supported) |
extract_class_info | include_methods | boolean | True | Include method signatures |
extract_class_info | include_fields | boolean | True | Include field information |
extract_class_info | include_bytecode | boolean | False | Include verbose javap bytecode output for matched classes |
extract_class_info | page | integer | 1 | Page number for pagination |
extract_class_info | items_per_page | integer | 20 | Items per page |
extract_class_info | summarize_large_content | boolean | True | Summarize large content automatically |
get_dependencies | group_id* | string | — | Maven group ID |
get_dependencies | artifact_id* | string | — | Maven artifact ID |
get_dependencies | version* | string | — | Maven version |
get_dependencies | include_transitive | boolean | False | Include transitive dependencies |
get_dependencies | page | integer | 1 | Page number for pagination |
get_dependencies | items_per_page | integer | 20 | Items per page |
search_classes | class_name | string | — | Class name to search for (supports wildcards) |
search_classes | package_pattern | string | — | Package pattern to filter by |
search_classes | annotation | string | — | Search for classes with specific annotation |
search_classes | case_sensitive | boolean | True | Match class_name and package_pattern case-sensitively. Set false for a case-insensitive search (e.g. 'arraylist' matches 'ArrayList'). |
| search_classes | limit | integer | 100 | Maximum
Only the beginning is shown; read the rest in the repo