https://github.com/siom79/japicmp-mcp-server
A Model Context Protocol (MCP) server that exposes japicmp as an AI tool.
https://github.com/siom79/japicmp-mcp-server
Last synced: 4 days ago
JSON representation
A Model Context Protocol (MCP) server that exposes japicmp as an AI tool.
- Host: GitHub
- URL: https://github.com/siom79/japicmp-mcp-server
- Owner: siom79
- License: apache-2.0
- Created: 2026-05-22T19:45:45.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-19T20:33:08.000Z (about 1 month ago)
- Last Synced: 2026-07-20T03:33:07.451Z (4 days ago)
- Language: Java
- Size: 40 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# japicmp MCP Server
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that exposes [japicmp](https://github.com/siom79/japicmp) as an AI tool. Connect it to Claude Desktop (or any MCP-compatible client) and ask your AI assistant to compare the APIs of any two Maven artifact versions — directly from Maven Central.
## What it does
The server provides two tools:
- **`compareJavaApi`** — downloads two JAR versions from Maven Central and compares their APIs
- **`compareLocalJars`** — compares two local JAR files on disk
Both run a full japicmp comparison and return a Markdown compatibility report with semver classification, a summary table, and detailed per-class breakdowns.
### Example
> "Compare `com.github.siom79.japicmp:japicmp` version 0.25.0 with 0.26.0 using japicmp"
```
Here are the results of comparing japicmp 0.25.0 → 0.26.0:
---
Verdict: MAJOR (breaking changes)
The release is not binary-compatible due to changes in japicmp.cmp.JApiCmpArchive.
---
Breaking changes in JApiCmpArchive
Three methods changed their return types to Optional:
┌────────────┬─────────────────┬──────────────────┐
│ Method │ Old return type │ New return type │
├────────────┼─────────────────┼──────────────────┤
│ getBytes() │ byte[] │ Optional │
├────────────┼─────────────────┼──────────────────┤
│ getFile() │ File │ Optional │
├────────────┼─────────────────┼──────────────────┤
│ getName() │ String │ Optional │
└────────────┴─────────────────┴──────────────────┘
These are binary and source incompatible — any code calling these methods needs to be updated to unwrap the Optional.
---
Other modified classes (no compatibility changes)
The following classes were modified but remain fully binary-, source-, and serialization-compatible:
- japicmp.config.Options — field N_A modifier changed to public static final
- japicmp.model.JApiBehavior
- japicmp.model.JApiClass
- japicmp.model.JApiField
---
Summary: The only breaking change is the JApiCmpArchive return type wrapping in Optional. If you use that class directly, update call sites to handle Optional
results. |
```
The report identifies that `JApiCmpArchive.getFile()`, `getBytes()`, and `getName()` changed their return types to `Optional` — a **binary-incompatible** change requiring a semver MAJOR bump.
## Prerequisites
- Java 25+
## Download
You can download the latest release [here](https://github.com/siom79/japicmp-mcp-server/releases).
## Build
### Prerequisites:
- Maven 3.9+
### Build command
```bash
mvn package
```
This produces `target/japicmp-mcp-server-0.0.4-SNAPSHOT.jar`.
## Integration with Claude
Add the server to your `.mcp.json`:
```json
{
"mcpServers": {
"japicmp": {
"command": "java",
"args": ["-jar", "/path/to/japicmp-mcp-server-0.0.4-SNAPSHOT.jar"]
}
}
}
```
Then restart your CLI. Both tools will be available automatically.
## Tool reference
### `compareJavaApi`
Compares two Maven artifacts for API compatibility using japicmp. Returns a Markdown report.
| Parameter | Type | Description |
|-----------|------|-------------|
| `oldGroupId` | string | GroupId of the old artifact (e.g. `com.example`) |
| `oldArtifactId` | string | ArtifactId of the old artifact |
| `oldVersion` | string | Version of the old artifact (e.g. `1.0.0`) |
| `newGroupId` | string | GroupId of the new artifact |
| `newArtifactId` | string | ArtifactId of the new artifact |
| `newVersion` | string | Version of the new artifact |
| `onlyModified` | boolean | Only include modified API elements in the report |
| `onlyBinaryIncompatible` | boolean | Only include binary-incompatible changes in the report |
Both artifacts must be available on Maven Central.
### `compareLocalJars`
Compares two local JAR files for API compatibility using japicmp. Returns a Markdown report.
| Parameter | Type | Description |
|-----------|------|-------------|
| `oldJarPath` | string | Absolute path to the old JAR file |
| `newJarPath` | string | Absolute path to the new JAR file |
| `onlyModified` | boolean | Only include modified API elements in the report |
| `onlyBinaryIncompatible` | boolean | Only include binary-incompatible changes in the report |
Both paths must be absolute and point to readable `.jar` files.
### Example
> "Compare `/home/user/Downloads/japicmp-0.24.0.jar` with `/home/user/Downloads/japicmp-0.25.0.jar` using japicmp"
```
## Compatibility Report: japicmp 0.24.0 → 0.25.0
Verdict: MAJOR (breaking changes)
Breaking change in japicmp.compat.CompatibilityChanges:
Removed: CompatibilityChanges(JarArchiveComparator)
Added: CompatibilityChanges(JarArchiveComparator, JarArchiveComparatorOptions)
New method in japicmp.util.FileHelper (compatible):
Added: static public String guessVersion(File)
```
## Technology stack
| Component | Version |
|-----------|---------|
| Java | 25 |
| Spring Boot | 4.0.6 |
| Spring AI MCP Server | 1.0.0 |
| japicmp | 0.26.0 |
| Transport | stdio |
## License
Same as the parent [japicmpweb](https://github.com/siom79/japicmp) project.