
javaperf
io.github.theSharquePublished by GitHub account theSharquev1.4.2Updated Oct 24, 2026
Java profiling MCP via jcmd/jfr/jps. Diagnose performance, analyze threads, inspect JFR recordings.
Overview
Local MCP server that lets an assistant profile and diagnose running Java applications through JDK tools jps, jcmd and jfr.
- What you can do
- List running Java processes and inspect JVM info, uptime, version and flags
- Start, list and stop JFR recordings, then parse them into summaries, CPU, frequency, memory, GC, network, file I/O, lock and native profiles
- Take thread dumps, check deadlocks and analyze lock-wait chains
- Inspect heap with histograms, growth diffs, heap dumps and heap summaries
- Run jcmd diagnostics for native memory, GC class stats, finalizers, compiler code cache and compiler queue
- Trace a method's call tree from a recording
- When to use it
- Useful when you need an assistant to investigate Java performance problems on the same machine: high CPU, memory leaks, GC pressure, lock contention, deadlocks or slow I/O, without typing jcmd and jfr commands by hand.
- Requirements
- Runs as a local stdio process, typically via npx from the npm package javaperf. Needs Node.js v18+ and a JDK (8u262+ or 11+) with JFR support; jps, jcmd and jfr are found via JAVA_HOME or the PATH, and JAVA_HOME may need to be set in the server config. Must run as the same OS user as the target JVM on the same host.
Installation
In SourceWeft
- Open javaperf in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
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
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)
For Developers
- Clone the repository:
- Install dependencies:
- Build the project:
Usage
Development Mode
Production Mode
MCP Inspector
Debug and test with MCP Inspector:
Integration
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:
Option 2: Via npm link (Development)
For local development with live changes:
Requires: cd /path/to/mcp-jperf && npm link -g
Option 3: Direct path
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):
Continue.dev
Edit .continue/config.json:
Tools
Example Workflow
- List processes →
list_java_processes - Start recording →
start_profilingwithpidandduration(e.g. 60) - Wait for
durationseconds (or let it run) - Check recordings (optional) →
list_jfr_recordingsto getrecordingId - Stop and save →
stop_profilingwithpidandrecordingId - Analyze →
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_processes - Find growing classes →
heap_live_histogram_diffwithpid,intervalSeconds: 5 - Record under load →
start_profiling→ wait →stop_profiling - Allocation profile →
profile_memoryonnew_profile(checkoldObjectSamplesByClassfor suspect class) - GC pressure →
gc_efficiencyon the same.jfr - Confirm 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
Source: README.md at commit 9d97a88
Tools
0Version history
2- v1.4.2LatestSep 27, 2026
- v1.4.1Sep 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.