Enables GitHub Copilot to analyze Java applications for Jakarta EE migration readiness, detect blockers, recommend compatible versions, and create comprehensive migration plans from Java EE 8 (javax.) to Jakarta EE 9+ (jakarta.).
Jakarta Migration MCP Server
A Model Context Protocol (MCP) server that provides AI coding assistants with specialized tools for analyzing and migrating Java applications from Java EE 8 (javax.*) to Jakarta EE 9+ (jakarta.*).
🚀 Quick Start
Option 1: Use Apify Hosted Server (Recommended)
The easiest way to get started is using our hosted MCP server on Apify - no installation required!
Free Tier Available: Basic features are free. Get started →
MCP Server URL: https://mcp.apify.com/?tools=actors,docs,adrian_m/JakartaMigrationMCP
Configuration Options:
Option A: Streamable HTTP (Recommended) - Simpler, more reliable:
Option B: SSE (Legacy) - For clients that don't support Streamable HTTP yet:
💡 Why Streamable HTTP? Streamable HTTP is simpler, more reliable, and recommended by the MCP spec. SSE is deprecated but still supported for backward compatibility.
🔑 Authentication: You'll need an Apify API token. Get it from Apify Console → Integrations. Some MCP clients may prompt you to authenticate via OAuth.
See Apify Setup below for detailed instructions.
Option 2: Run Locally (STDIO)
For local development or when you need full control:
Prerequisites: Java 21+ and Node.js 18+
See Local Setup below for client configuration.
📋 What It Does
The Jakarta Migration MCP Server enables your AI coding assistant to:
🔍 Analyze Jakarta Readiness - Assess Java projects for migration readiness with detailed dependency analysis
🚫 Detect Blockers - Identify dependencies and code patterns that prevent Jakarta migration
📦 Recommend Versions - Suggest Jakarta-compatible versions for existing dependencies
📋 Create Migration Plans - Generate comprehensive, phased migration plans with risk assessment
📊 Analyze Migration Impact - Comprehensive impact analysis combining dependency analysis and source code scanning
✅ Verify Runtime - Test migrated applications to ensure they run correctly after migration
The Problem It Solves
Migrating from Java EE 8 (javax.*) to Jakarta EE 9+ (jakarta.*) is complex because:
Dependency Hell: Many libraries haven't migrated, creating transitive conflicts
Binary Incompatibility: Compiled JARs may reference
javax.*internallyHidden Dependencies:
javax.*usage in XML configs, annotations, and dynamic loadingRisk Assessment: Need to understand migration impact before starting
This MCP server provides AI assistants with the specialized knowledge and tools to navigate these challenges effectively.
🔒 Security & Privacy
Your code and project data are handled with the utmost care. We understand that Java developers working with enterprise codebases need complete confidence in the security and privacy of their intellectual property.
Stateless Architecture
✅ No Data Persistence - The service is completely stateless. Your project files, source code, and analysis results are never stored, logged, or persisted on our servers.
✅ No Data Collection - We don't collect, track, or analyze your code. Each request is processed independently with no memory of previous requests.
✅ Local Execution Option - For maximum privacy, you can run the entire service locally using the Local Setup option. Your code never leaves your machine.
Privacy Guarantees
Zero Code Storage: Project files are only read during analysis and immediately discarded
No Telemetry: No usage tracking, analytics, or code scanning for any purpose other than migration analysis
Open Source: The core service is open source, so you can audit exactly what it does
Enterprise Ready: Safe for use with proprietary and sensitive codebases
Hosted Service (Apify)
When using the Apify-hosted service:
Analysis is performed in isolated, ephemeral containers
All containers are destroyed immediately after processing
No persistent storage is used
Your API token is only used for authentication and billing
Local Service
When running locally via STDIO:
100% Local - Everything runs on your machine
No Network Calls - No external requests are made
Complete Control - You have full visibility and control over the process
For maximum security and privacy, we recommend using the local STDIO setup for sensitive projects.
💰 Pricing & Features
Free Tier (Community)
✅ All core features included:
Dependency analysis
Blocker detection
Version recommendations
Migration planning
Runtime verification
Premium Features (Paid)
🚀 Advanced capabilities (coming soon):
Auto-Fixes - Automatically fix detected issues without manual intervention
One-Click Refactor - Execute complete Jakarta migration with a single command
Binary Fixes - Fix issues in compiled binaries and JAR files
Advanced Analysis - Deep transitive conflict detection and resolution
Batch Operations - Process multiple projects simultaneously
Custom Recipes - Create and use custom migration recipes
API Access - Programmatic API for CI/CD integrations
Pricing: Starting from $0.01 / 1,000 results. View pricing →
🔧 Setup Instructions
Apify Hosted Server Setup
The Apify-hosted server supports both Streamable HTTP and SSE transports.
MCP Server URL: https://mcp.apify.com/?tools=actors,docs,adrian_m/JakartaMigrationMCP
Actor Page: apify.com/adrian_m/jakartamigrationmcp
🔑 Authentication Required: You'll need an Apify API token. Get it from Apify Console → Integrations. Some MCP clients support OAuth authentication which will prompt you to sign in.
💡 Transport Recommendation: Use Streamable HTTP (recommended) for better reliability and simplicity. SSE is available for backward compatibility but is deprecated in the MCP spec.
For Cursor IDE
⚠️ Important: Cursor primarily supports stdio transport, not SSE. For Cursor, use the Local Setup (STDIO) instructions below instead.
If your Cursor version supports HTTP transports:
Open Cursor Settings (
Ctrl+,on Windows/Linux orCmd+,on Mac)Navigate to Features → MCP
Click "+ Add New MCP Server"
Add configuration (prefer Streamable HTTP):
Streamable HTTP (Recommended):
Or SSE (Legacy):
🔑 Get API Token: Replace
YOUR_APIFY_API_TOKENwith your token from Apify Console → Integrations
Restart Cursor completely for changes to take effect
For Claude Code (VS Code Extension)
Open VS Code Settings (
Ctrl+,orCmd+,)Search for "MCP" or navigate to Extensions → Claude Code → Settings
Add configuration (prefer Streamable HTTP):
Streamable HTTP (Recommended):
Or SSE (Legacy):
🔑 Get API Token: Replace
YOUR_APIFY_API_TOKENwith your token from Apify Console → Integrations
Restart VS Code
For GitHub Copilot
GitHub Copilot supports MCP through the Copilot Chat interface:
Open Copilot Chat (
Ctrl+LorCmd+L)Navigate to Settings → MCP Servers
Add server:
URL:
https://mcp.apify.com/?tools=actors,docs,adrian_m/JakartaMigrationMCPTransport Type: Streamable HTTP (recommended) or SSE (legacy)
Authorization: Add your Apify API token in the headers section
🔑 Get API Token: Get your token from Apify Console → Integrations
For Antigravity
Open Antigravity Settings
Navigate to MCP Configuration
Add server (prefer Streamable HTTP):
Streamable HTTP (Recommended):
Or SSE (Legacy):
🔑 Get API Token: Replace
YOUR_APIFY_API_TOKENwith your token from Apify Console → Integrations
Local Setup (STDIO)
For local development, use STDIO transport which works with Cursor, Claude Code, and Antigravity.
Prerequisites
Java 21+ - Download from Adoptium
Node.js 18+ - Download from nodejs.org
Installation
Configuration
Cursor IDE
Open Cursor Settings (
Ctrl+,orCmd+,)Navigate to Features → MCP
Add configuration:
Windows:
Mac/Linux:
Restart Cursor completely
Claude Code (VS Code Extension)
Open VS Code Settings
Navigate to Claude Code → MCP Settings
Add the same configuration as Cursor
Restart VS Code
Antigravity
Open Antigravity Settings
Navigate to MCP Configuration
Add:
Alternative: Run from JAR
If you've built the project locally:
Windows:
Mac/Linux:
Local HTTP Setup (Streamable HTTP or SSE)
For local HTTP-based testing or development:
Build the project:
./gradlew bootJarStart server with Streamable HTTP:
java -jar build/libs/jakarta-migration-mcp-1.0.0-SNAPSHOT.jar \ --spring.profiles.active=mcp-streamable-httpOr with SSE (legacy):
java -jar build/libs/jakarta-migration-mcp-1.0.0-SNAPSHOT.jar \ --spring.profiles.active=mcp-sseTest the endpoint:
# Streamable HTTP (recommended) curl -X POST http://localhost:8080/mcp/streamable-http \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' # Or SSE (legacy) curl -X POST http://localhost:8080/mcp/sse \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Configure MCP client to use
http://localhost:8080/mcp/streamable-http(or/mcp/ssefor SSE)
💬 Usage Examples
Once configured, you can use the MCP tools in your AI assistant:
Analyze Project Readiness
Detect Migration Blockers
Get Version Recommendations
Create Migration Plan
Verify Runtime
🛠️ Available Tools
Tool | Description |
| Comprehensive project analysis with readiness score |
| Find dependencies and patterns that prevent migration |
| Get Jakarta-compatible version recommendations |
| Generate phased migration plan with risk assessment |
| Analyze full migration impact combining dependency analysis and source code scanning |
| Test migrated application execution |
See MCP Tools Documentation for detailed tool descriptions and parameters.
🐛 Troubleshooting
Tools Not Appearing
Restart your IDE completely - MCP servers load on startup
Check MCP server status - Look for errors in IDE logs
Verify configuration - Ensure JSON syntax is correct
Check prerequisites - Java 21+ and Node.js 18+ must be installed
Connection Issues
For Apify (SSE):
Verify your internet connection
Check if Apify service is available
Ensure you're using the correct URL
For Local (STDIO):
Verify Java is installed:
java -versionVerify Node.js is installed:
node --versionTry running manually:
npx -y @jakarta-migration/mcp-server
Platform-Specific Issues
Windows:
Use forward slashes in paths:
C:/path/to/file.jarEnsure Java is in your PATH
Mac/Linux:
Ensure execute permissions:
chmod +x gradlewUse absolute paths in configuration
📚 Documentation
For Users
MCP Setup Guide - Detailed MCP configuration instructions
MCP Tools Reference - Complete tool documentation
Transport Configuration - STDIO vs SSE explained
For Developers
Development Setup - Build and development environment
Architecture - System design and modules
Testing Guide - Testing standards and practices
Contributing - How to contribute to the project
🔗 Resources
Apify Store: jakartamigrationmcp
MCP Documentation: modelcontextprotocol.io
Spring AI: docs.spring.io/spring-ai
Jakarta EE: jakarta.ee
📄 License
MIT License - See LICENSE file for details.
🙏 Acknowledgments
Built with ❤️ for the Java community. Special thanks to:
Spring AI team for MCP framework
OpenRewrite for migration recipes
Apify for hosting infrastructure
Need help? Open an issue or check our documentation.