An MCP server exposing scoped, navigable JVM profiling tools that analyze JFR recordings and capture live JVM profiles, providing progressive disclosure of performance data (overview → drill into hot paths → pull allocation sites) so clients fetch only the slice they need rather than one big blob.
jvmlens provides 9 JVM profiling tools with consistent schemas across 8 of them. All tools have descriptions (10-80 chars, mostly adequate) and input schemas with proper types. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool or HOW they relate. Parameter descriptions are minimal (e.g., 'Path to a .jfr recording' with no format hints). No output schemas are documented, LLMs cannot predict what fields to extract or chain tools. Error handling is absent from visible code. Tool names are domain-specific but lack action verbs (overview, hot_paths, hot_leaves are nouns, not verb_noun patterns). The 'profile' tool stands out with better parameter variety (enums for engine/report), but others are repetitive. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only operations.
Top allocation sites and allocated types, by estimated bytes.
Deadlocked threads and their wait-for cycle (agent recordings).
Leaf (self-time) hot methods, runtime included.
Application-attributed hot call paths, by sample share.
External (network + file) blocking I/O by endpoint.
Lock contention by application method and contended monitors.
Event counts, the heuristic cause, and which drill-down tools to use next.
Tool names lack action verbs. 'overview', 'hot_paths', 'hot_leaves' are nouns; LLMs infer intent poorly. Should be 'analyze_overview', 'get_hot_paths', 'get_hot_leaves' or similar verb_noun pattern.
No output schemas documented. LLMs cannot predict response structure, field names, or types. Impossible to chain tools or extract specific data without trial-and-error.
Descriptions are terse (10-80 chars) and lack LLM-optimized guidance. No explanation of WHEN to use each tool, what problem it solves, or how it differs from similar tools. Baseline is 194 chars; these average ~50.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Virtual-thread pinning sites, by pinned time.
Capture a live local JVM by pid (jfr or async engine) and summarize it.
Parameter descriptions are minimal. 'Path to a .jfr recording' lacks format hints, size constraints, or examples. 'Application package prefixes' does not explain include-only semantics or expected format (e.g., 'com.example.*').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Agents cannot infer safety or retry semantics without explicit hints.