javaperf
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@javaperflist Java processes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
javaperf
MCP (Model Context Protocol) server for profiling Java applications via JDK utilities (jcmd, jfr, jps)
Enables AI assistants to diagnose performance, analyze threads, and inspect JFR recordings without manual CLI usage.
π¦ Install: npm install -g javaperf or use via npx
π npm: https://www.npmjs.com/package/javaperf
How to connect to Claude Desktop / IDE
Add the server to your MCP config. Example for claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"javaperf": {
"command": "npx",
"args": ["-y", "javaperf"]
}
}
}For Cursor IDE: Settings β Features β Model Context Protocol β Edit Config, then add the same block inside mcpServers. See the Integration section for more options (local dev, custom JAVA_HOME, etc.).
Requirements
Node.js v18+
JDK 8u262+ or 11+ with JFR support
JDK tools (jps, jcmd, jfr) are auto-detected via JAVA_HOME or which java. If not found, set JAVA_HOME to your JDK root.
Quick Start
For Users (using npm package)
# No installation needed - use directly in Cursor/Claude Desktop
# Just configure it as described in Integration section belowFor Developers
Clone the repository:
git clone https://github.com/theSharque/mcp-jperf.git
cd mcp-jperfInstall dependencies:
npm installBuild the project:
npm run buildUsage
Development Mode
npm run devProduction Mode
npm startMCP Inspector
Debug and test with MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsIntegration
Cursor IDE
Open Cursor Settings β Features β Model Context Protocol
Click "Edit Config" button
Add one of the configurations below
Option 1: Via npm (Recommended)
Installs from npm registry automatically:
{
"mcpServers": {
"javaperf": {
"command": "npx",
"args": ["-y", "javaperf"]
}
}
}Option 2: Via npm link (Development)
For local development with live changes:
{
"mcpServers": {
"javaperf": {
"command": "javaperf"
}
}
}Requires: cd /path/to/mcp-jperf && npm link -g
Option 3: Direct path
{
"mcpServers": {
"javaperf": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "${workspaceFolder}",
"env": {
"JAVA_HOME": "/path/to/your/jdk"
}
}
}
}If list_java_processes fails with "jps not found", the MCP server may not inherit your shell's JAVA_HOME. Add the env block above with your JDK root path (e.g. /usr/lib/jvm/java-17 or ~/.sdkman/candidates/java/current).
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"javaperf": {
"command": "npx",
"args": ["-y", "javaperf"]
}
}
}Continue.dev
Edit .continue/config.json:
{
"mcpServers": {
"javaperf": {
"command": "npx",
"args": ["-y", "javaperf"]
}
}
}Tools
Tool | Description |
| List running Java processes (pid, mainClass, args). Use |
| Start JFR. Pass |
| Socket I/O summary from |
| File read/write summary ( |
| Monitor contention ( |
| Native-method CPU hotspots ( |
|
|
|
|
|
|
|
|
|
|
| List active JFR recordings for a process. Use before |
| Stop recording and save to recordings/new_profile.jfr. Requires |
| Check for Java-level deadlocks. Returns structured JSON with threads, locks, and cycle. |
| Thread dump (jstack) with deadlock summary. Pass |
| Class histogram (GC.class_histogram). Pass |
| Two histograms spaced by |
| Create .hprof for MAT/VisualVM. After |
| Brief heap summary. Pass |
| JVM info: uptime, version, flags. Pass |
| Build call tree for a method from .jfr. Pass |
| Parse .jfr into summary: top methods, GC stats, anomalies. Optional: |
| Memory profile: top allocators by bytes/count, allocation stacks, OldObjectSample by class. Optional: |
| GC efficiency from .jfr: pause vs freed bytes per collector. Optional: |
| CPU bottleneck profile (bottom-up). Optional: |
| Call frequency profile (leaf frames). Optional: |
Example Workflow
List processes β
list_java_processesStart recording β
start_profilingwithpidandduration(e.g. 60)Wait for
durationseconds (or let it run)Check recordings (optional) β
list_jfr_recordingsto getrecordingIdStop and save β
stop_profilingwithpidandrecordingIdAnalyze β
parse_jfr_summary,profile_memory,gc_efficiency,profile_time,profile_frequency,trace_method,profile_jfr_network,profile_jfr_file_io,profile_jfr_locks, orprofile_jfr_native(events must exist in the recording β usestart_profilingwith a suitable preset or.jfcviasettingsFile)
Example Workflow: Memory leak hypothesis
List processes β
list_java_processesFind growing classes β
heap_live_histogram_diffwithpid,intervalSeconds: 5Record under load β
start_profilingβ wait βstop_profilingAllocation profile β
profile_memoryonnew_profile(checkoldObjectSamplesByClassfor suspect class)GC pressure β
gc_efficiencyon the same.jfrConfirm retention β
heap_dumpβ Eclipse MAT β Path to GC Roots (exclude weak/soft references)AI builds a coherent leak hypothesis from the combined results (no dedicated tool)
Remote JVM (stdio MCP)
javaperf uses stdio MCP and attaches to JVMs via local jps/jcmd. That only works on the OS account and host where the MCP process runs.
To diagnose a JVM on another machine:
Run the MCP server (your IDE connector, Cursor, or Claude Desktop) on that machine, for example SSH remote workspace, Codespaces, CI runner checkout on the server, or a shell session on the same host as the process.
Do not rely on piping
jcmdover plain SSH from another host unless you deliberately run MCP there; attaching across hosts is outside this serverβs scope.
Requirements (same user, local attach) listed under Limitations still apply.
Limitations
Sampling: JFR samples ~10ms; fast methods may not appear in ExecutionSample
Local only: Runs on the machine where MCP is started
Permissions: Must run as same user as target JVM for jcmd access
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/theSharque/mcp-jperf'
If you have feedback or need assistance with the MCP directory API, please join our Discord server