Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

javaperf

NPM · JAVAPERF · SCANNED SEP 21

Java profiling MCP via jcmd/jfr/jps. Diagnose performance, analyze threads, inspect JFR recordings.

Available components

0 this week 93 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to theSharque/mcp-jperf). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 120 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability79
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 2587 tokens (~99/item across 26 items; 26 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage93
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 78% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 26 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 26 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the javaperf MCP server?

javaperf runs locally as an npm package, launched with npx -y javaperf. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · javaperf

# add to Claude Code
claude mcp add thesharque-javaperf -- npx -y javaperf
// .cursor/mcp.json
{
  "mcpServers": {
    "thesharque-javaperf": {
      "command": "npx",
      "args": [
        "-y",
        "javaperf"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "thesharque-javaperf": {
      "command": "npx",
      "args": [
        "-y",
        "javaperf"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add thesharque-javaperf -- npx -y javaperf
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "thesharque-javaperf": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "javaperf"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add thesharque-javaperf --command npx --arg -y --arg javaperf
# ~/.hermes/config.yaml
mcp_servers:
  thesharque-javaperf:
    command: "npx"
    args: ["-y", "javaperf"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "thesharque-javaperf": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "javaperf"
      ]
    }
  }
}
# add to Vellum
assistant mcp add thesharque-javaperf -t stdio -c npx -a -y javaperf
// mcp.json
{
  "mcpServers": {
    "thesharque-javaperf": {
      "command": "npx",
      "args": [
        "-y",
        "javaperf"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 16 Sept 26 0
    • Stability: 0.97 → pass security
  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 14 Sept 26 0
    • Security disclosure: unverified → fail functional
  • 13 Sept 26 0
    • Security disclosure: fail → unverified functional
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 −2
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/javaperf@1.4.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo theSharque/mcp-jperf
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/theSharque/mcp-jperf/.github/workflows/publish.yml@refs/heads/main
Rekor log index 1615698030
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:1b4f70aabe238b327abf6c18563878524e1f6ef87f7a089babcffebaf6f67e337f3623a28c401feda7b502539d9f6d2f6c9a693528f570e371c99c46e

Background: How many MCP packages publish verified provenance →

Dependencies 95 packages
Packages resolved 95
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 26 exposed · ~2,587 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_threads ~124

Thread dump (jstack -l). Default: plain text. Set structured=true for JSON lock-wait chains (live snapshot). Historical contention: profile_jfr_locks. Deadlock cycle: check_deadlock.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.
structuredbooleanReturn structured JSON with lockWaitChains instead of plain-text dump. Default: false.
topNintegerMaximum number of threads to include in the output. Default: 10. Increase for applications with many threads.

No output schema declared.

No examples provided.

check_deadlock ~78

Checks for Java-level deadlocks in the specified process. Parses jcmd Thread.print output and returns structured JSON: which threads are involved, what locks they hold/wait for, and the deadlock cycle. Use for automated analysis and reports.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.

No output schema declared.

No examples provided.

compiler_codecache ~30

jcmd Compiler.codecache — code heap usage and related JVM output.

NameTypeReqDescription
pidintegeryes

No output schema declared.

No examples provided.

compiler_queue ~27

jcmd Compiler.queue — methods queued for JIT compilation.

NameTypeReqDescription
pidintegeryes

No output schema declared.

No examples provided.

gc_class_stats ~56

jcmd GC.class_stats (class loader / metaspace style stats where supported—often JDK 21+). On older JDK returns error hint; use heap_info or heap_histogram instead.

NameTypeReqDescription
pidintegeryes

No output schema declared.

No examples provided.

gc_efficiency ~68

GC efficiency from .jfr: pause time vs freed bytes per collector/cause. Use after stop_profiling; complements profile_memory and heap_info. Not a general JFR summary (see parse_jfr_summary).

NameTypeReqDescription
filepathstring
topNinteger

No output schema declared.

No examples provided.

gc_finalizer_info ~33

jcmd GC.finalizer_info — finalizer queue diagnostics for the live process.

NameTypeReqDescription
pidintegeryes

No output schema declared.

No examples provided.

heap_dump ~77

Creates .hprof for Eclipse MAT / VisualVM. After heap_live_histogram_diff picks a growing class, use MAT Path to GC Roots (exclude weak/soft). Saved to recordings/heap_dump.hprof. Warning: large file.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.

No output schema declared.

No examples provided.

heap_histogram ~94

Static class histogram (jcmd GC.class_histogram). For live growth over time use heap_live_histogram_diff instead.

NameTypeReqDescription
allbooleanInclude unreachable objects. Triggers full GC and may cause application pause.
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.
topNintegerMaximum number of top classes to return. Default: 20.

No output schema declared.

No examples provided.

heap_info ~47

Brief heap usage summary: capacities, used, committed regions. Quick snapshot without full dump.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.

No output schema declared.

No examples provided.

heap_live_histogram_diff ~145

Two GC.class_histogram snapshots spaced by intervalSeconds; returns classes whose instance count grew most. Use first in memory-leak workflow; then profile_memory and heap_dump (MAT path-to-GC-roots). Each snapshot walks the heap and may pause the app.

NameTypeReqDescription
allbooleanInclude unreachable objects (-all). Triggers full GC and may pause the app.
intervalSecondsintegerSeconds between baseline and snapshot histograms. Default: 5.
minInstanceDeltaintegerIgnore classes with instance growth below this threshold.
pidintegeryesProcess ID from list_java_processes.
topNinteger

No output schema declared.

No examples provided.

list_java_processes ~96

Lists all running Java processes on the machine. Returns an array of objects with pid, mainClass, and args. Use this tool first to discover the target process PID before calling start_profiling or analyze_threads. Data is obtained via jps -l -m.

NameTypeReqDescription
topNintegerMaximum number of processes to return in the list. Default: 10. Use higher values if many Java processes are running.

No output schema declared.

No examples provided.

list_jfr_recordings ~78

Lists active and recent JFR recordings for a Java process (jcmd JFR.check). Returns recording id, duration, state (running/stopped), and filename. Use before stop_profiling to get the correct recordingId.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.

No output schema declared.

No examples provided.

native_memory_summary ~45

jcmd VM.native_memory summary=true. Requires JVM started with -XX:NativeMemoryTracking=summary or detail; otherwise explains how to enable.

NameTypeReqDescription
pidintegeryes

No output schema declared.

No examples provided.

parse_jfr_summary ~172

Parses a .jfr file and returns a structured summary: top methods by CPU samples, GC statistics, thread allocation stats, and anomaly hints (e.g. high GC count). Use for a quick high-level overview of the recording before diving into specific profiles.

NameTypeReqDescription
eventsarrayOptional list of JFR event types to include. Default: jdk.ExecutionSample, jdk.GarbageCollection, jdk.JavaThreadStatistics, jdk.ThreadAllocationStatistics.
filepathstringPath to .jfr file. Shortcuts: 'new_profile' (current, default) or 'old_profile' (previous). Or full path e.g. recordings/new_profile.jfr.
topNintegerMaximum number of top methods to include in the summary. Default: 10.

No output schema declared.

No examples provided.

profile_frequency ~141

Call frequency profile from a .jfr file. Counts methods that appear at the leaf (top) of the stack in ExecutionSample events — i.e. methods that were actively executing when sampled. Returns the most frequently sampled methods (exclusive, not cumulative). Use when looking for hot spots or the most often executed code paths.

NameTypeReqDescription
filepathstringPath to .jfr file. Shortcuts: 'new_profile' (current, default) or 'old_profile' (previous). Or full path e.g. recordings/new_profile.jfr.
topNintegerMaximum number of top methods by call frequency to return. Default: 10.

No output schema declared.

No examples provided.

profile_jfr_file_io ~93

Summarize file read/write events (jdk.FileRead, jdk.FileWrite): counts, bytes, top paths, stack hotspots. Events must exist in recording; configure via start_profiling preset or settingsFile (.jfc).

NameTypeReqDescription
filepathstringPath to .jfr. Shortcuts: new_profile, old_profile.
topNintegerTop N paths/methods.

No output schema declared.

No examples provided.

profile_jfr_locks ~74

Lock contention from JFR: synchronized monitors (JavaMonitorBlocked) and j.u.c parking (ThreadPark). Live wait chains: analyze_threads structured=true. Deadlocks: check_deadlock. Enable events via custom .jfc if missing.

NameTypeReqDescription
filepathstring
topNinteger

No output schema declared.

No examples provided.

profile_jfr_native ~51

CPU-style cumulative hotspots from jdk.NativeMethodSample stacks. Recording must enable NativeMethodSample (often requires custom .jfc).

NameTypeReqDescription
filepathstring
topNinteger

No output schema declared.

No examples provided.

profile_jfr_network ~124

Summarize JDK socket I/O from a .jfr (jdk.SocketRead, jdk.SocketWrite): event counts, total bytes read/written where available, top endpoints (host:port / address), and cumulative stack hotspots. Recording must include those events (custom .jfc or preset that enables them). If emptyEvents, use start_profiling settingsFile.

NameTypeReqDescription
filepathstringPath to .jfr. Shortcuts: new_profile, old_profile, or absolute path.
topNintegerTop N endpoints and methods.

No output schema declared.

No examples provided.

profile_memory ~142

JFR memory profile: top allocators by bytes/count, allocation stacks, OldObjectSample by class (allocation site, not GC roots). Pair with heap_live_histogram_diff, gc_efficiency, heap_dump+MAT. Requires profile preset recording.

NameTypeReqDescription
filepathstringPath to .jfr file. Shortcuts: 'new_profile' (current, default) or 'old_profile' (previous). Or full path e.g. recordings/new_profile.jfr.
sortBystringPrimary ranking for topAllocators. Default: bytes.
topNintegerMaximum number of top allocators to return. Default: 10.

No output schema declared.

No examples provided.

profile_time ~141

CPU time (bottleneck) profile from a .jfr file. Uses bottom-up aggregation: each method is counted in every sample where it appears in the stack, including time spent in callees. Returns methods consuming the most CPU time. Use when the goal is to find performance bottlenecks and slow code paths.

NameTypeReqDescription
filepathstringPath to .jfr file. Shortcuts: 'new_profile' (current, default) or 'old_profile' (previous). Or full path e.g. recordings/new_profile.jfr.
topNintegerMaximum number of top methods by CPU time to return. Default: 10.

No output schema declared.

No examples provided.

start_profiling ~256

Starts JFR on the target PID. Rotates recordings (old_profile.jfr ← new_profile.jfr). Default preset is profile. Optional preset or settingsFile (.jfc, cwd-relative or absolute)—mutually exclusive. Builtin presets may omit socket/I/O/native/locks; use a custom .jfc for jdk.SocketRead/Write, FileRead/Write, JavaMonitorBlocked, jdk.ThreadPark, NativeMethodSample. Then list_jfr_recordings and stop_profiling.

NameTypeReqDescription
durationintegeryesRecording duration in seconds. Typical: 10–60 quick, 300+ under load.
memorysizestringJFR buffer size, e.g. 20M. Default JVM buffer applies if omitted.
pidintegeryesProcess ID of the Java application. Use list_java_processes.
presetstringBuiltin settings name (e.g. profile, default). Effective default when omitted is profile. Mutually exclusive with settingsFile.
settingsFilestringPath to .jfc file (cwd-relative or absolute). Mutually exclusive with preset.
stackdepthintegerStack depth for JFR events. Default 128.

No output schema declared.

No examples provided.

stop_profiling ~115

Stops an active JFR recording and saves it to recordings/new_profile.jfr. Use recordings/new_profile.jfr for current data, recordings/old_profile.jfr for previous (before/after comparison).

NameTypeReqDescription
pidintegeryesProcess ID of the Java process that has the active recording. Must match the pid used in start_profiling.
recordingIdstringyesID of the recording to stop. This is the recordingId returned by start_profiling (e.g. '1' or '2').

No output schema declared.

No examples provided.

trace_method ~236

Builds a call tree for a specific method from a .jfr file. Filters ExecutionSample events to find stack traces containing the given class and method, then aggregates call paths. Use when you want to see who calls a particular method and from where. Limitation: JFR sampling (~10 ms) may miss very fast methods.

NameTypeReqDescription
classNamestringyesFully qualified class name (e.g. com.example.MyService) or a substring to match. Used to filter stack frames.
eventsarrayOptional list of JFR event types to parse. Default: jdk.ExecutionSample. Advanced users can specify other event types.
filepathstringPath to .jfr file. Shortcuts: 'new_profile' (current, default) or 'old_profile' (previous). Or full path e.g. recordings/new_profile.jfr.
methodNamestringyesMethod name to search for (e.g. processRequest). Matches the method in the stack trace.
topNintegerMaximum number of call paths (branches) to return in the call tree. Default: 10.

No output schema declared.

No examples provided.

vm_info ~44

JVM information: uptime, version, and flags. Useful for environment verification.

NameTypeReqDescription
pidintegeryesProcess ID of the Java application. Get this from list_java_processes.

No output schema declared.

No examples provided.

Common questions

What is the javaperf MCP server?

javaperf is an MCP server listed in the public MCP registry as io.github.theSharque/javaperf. Java profiling MCP via jcmd/jfr/jps. Diagnose performance, analyze threads, inspect JFR recordings. This page covers its npm package (javaperf).

Is the javaperf MCP server safe to use?

javaperf scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the javaperf MCP server expose?

javaperf exposes 26 tools: list_java_processes, start_profiling, stop_profiling, check_deadlock, list_jfr_recordings, and 21 more. Their descriptions and schemas cost roughly 2,587 tokens of context every time the server is loaded.

Is the javaperf MCP server still maintained?

javaperf is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the javaperf MCP server under?

javaperf declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.