JVM Source Lens
NPM · JVMSRC · SCANNED SEP 21
Gradle-accurate JVM classpath; fetch Java source, signatures, and class structure for agents.
Available components
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
- 32 of 102 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to Sintexer/jvm-source-lens). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 12 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability54
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 3358 tokens (~479/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 8 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
How do I install the JVM Source Lens MCP server?
JVM Source Lens runs locally as an npm package, launched with npx -y jvmsrc. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · jvmsrc
claude mcp add sintexer-jvmsrc -- npx -y jvmsrc
{
"mcpServers": {
"sintexer-jvmsrc": {
"command": "npx",
"args": [
"-y",
"jvmsrc"
]
}
}
} {
"servers": {
"sintexer-jvmsrc": {
"command": "npx",
"args": [
"-y",
"jvmsrc"
]
}
}
} codex mcp add sintexer-jvmsrc -- npx -y jvmsrc
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sintexer-jvmsrc": {
"type": "local",
"command": [
"npx",
"-y",
"jvmsrc"
],
"enabled": true
}
}
} openclaw mcp add sintexer-jvmsrc --command npx --arg -y --arg jvmsrc
mcp_servers:
sintexer-jvmsrc:
command: "npx"
args: ["-y", "jvmsrc"] {
"McpServers": {
"sintexer-jvmsrc": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"jvmsrc"
]
}
}
} assistant mcp add sintexer-jvmsrc -t stdio -c npx -a -y jvmsrc
{
"mcpServers": {
"sintexer-jvmsrc": {
"command": "npx",
"args": [
"-y",
"jvmsrc"
]
}
}
} 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.
- 20 Sept 26 −2
- Stability: pass → 0.80 functional
- 19 Sept 26 0
- Stability: 0.97 → pass security
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 15 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.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 −3
- Stability: pass → 0.77 functional
- 11 Sept 26 0
- Stability: 0.97 → pass security
- 9 Sept 26 +16
- Malware scan: unverified → pass ▲ security
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/jvmsrc@1.16.0
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 | Sintexer/jvm-source-lens |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/Sintexer/jvm-source-lens/.github/workflows/release-please.yml@refs/heads/master |
| Rekor log index | 2758300823 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:7176f507777777876d143dd1ddbc3c39a481821c0420f17076dda299cae4fa82e9016be9e5e101dc845f584d484a580616e55e488e6536995af245023 |
Background: How many MCP packages publish verified provenance →
Dependencies 102 packages
| Packages resolved | 102 |
|---|---|
| Stale | 32 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
find_in_class_source Find text in resolved Java source ~309
Default query is a literal substring; set regex: true only for a JavaScript RegExp. Searches the source of one resolved class — like grep, scoped to a single classpath-resolved class, not the workspace. Use this when: the class is known and you need to locate a specific string, identifier, or pattern inside it. For discovering classes by name, use search_classes; for grepping a whole dependency JAR, use search_in_artifact. Resolves source the same way as get_class_source (sources JAR preferred; CFR decompilation if absent). Returns hits with line/column, matched text, optional multiline block, and surrounding context lines. Compact text by default; full=true returns JSON. Result semantics: • Class missing from classpath: isError=false, found=false (CLASS_NOT_FOUND). • Class found, pattern not present: isError=false, found=false, querySucceeded=true — a successful scan with no match, not an error. Empty regex results state that regex mode was used.
| Name | Type | Req | Description |
|---|---|---|---|
| className | string | yes | – |
| configuration | string | – | – |
| contextLines | integer | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| include | array | – | – |
| includeTest | boolean | – | – |
| maxHits | integer | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
| query | string | yes | – |
| regex | boolean | – | – |
No output schema declared.
No examples provided.
get_class_source Get Java source for a class ~450
Returns the Java source of a fully-qualified class. The heaviest tool in the ladder — reach for it only when you genuinely need method bodies. Use this when: reading implementation details, understanding control flow, or confirming behavior the signature alone can't reveal. Do NOT use it to discover method names (use get_class_structure) or to check signatures (use get_method_signature). Always prefer an excerpt over full source: • methodNames — array of method names to extract. Use "<init>" for constructors. Response echoes matchedMethodNames and unmatchedMethodNames. Unmatched names are also sought on superclasses/interfaces on the classpath; inherited bodies include declaringClass metadata. • startLine/endLine — 1-based line range. If neither excerpt param is given, the full file is returned only when under ~64KiB (JVMSRC_MAX_FULL_SOURCE_CHARS); larger units return SOURCE_OUTPUT_TOO_LARGE — narrow with methodNames or a line range. Keep full source as a last resort. Source provenance: original source from a sources JAR when available (Javadoc, parameter names, generics are ground truth); otherwise CFR decompilation, where structure is reliable but identifiers may be synthetic. Check sourceAvailable on the response. Returns: compact text source with a provenance footer; full=true returns a JSON envelope. Only set full=true if you are parsing the result. Result semantics: • Class missing from a successfully resolved classpath: isError=false, found=false. Not an access failure. • If outputTruncated=true, fetch a narrower excerpt (methodNames or a tighter line range) — do not assume the missing code is absent. Errors: isError=true with errorCategory, isRetryable, message, and a stable error code.
| Name | Type | Req | Description |
|---|---|---|---|
| className | string | yes | – |
| configuration | string | – | – |
| endLine | integer | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| includeTest | boolean | – | – |
| methodName | string | – | – |
| methodNames | array | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
| startLine | integer | – | – |
No output schema declared.
No examples provided.
get_class_structure Get structured Java class API ~361
Returns the API surface of a class: purpose, declared methods, optionally fields/annotations/hierarchy. The right starting point after search_classes and before fetching source. Use this when: you have an FQN and want to know what the class does and what methods it exposes. For a single method's overloads, use get_method_signature instead. Scope (default = overview): • overview — class purpose + declared method names. When the type is field-heavy (≥8 fields and ≤2 non-constructor declared methods), lists fields (capped) instead of only a count. • declared — signature lines for all declared members. • effective — declared plus inherited API (capped). Params: className (required); scope; include (hierarchy/fields/annotations, mainly useful with full=true); standard project params. Returns: compact text by default; full=true returns JSON. Does not decompile. Compact declaration lines abbreviate modifiers (P=public, p=private, prot=protected, pack=package-private, s=static, f=final, a=abstract) — e.g. "Psf long ZERO", "Ps void foo()". JSON keeps full visibility/static/final fields. Errors: SIGNATURE_EXTRACT_FAILED if javap cannot read the class. CLASS_NOT_FOUND surfaces as isError=false, found=false — a clean miss, not a failure.
| Name | Type | Req | Description |
|---|---|---|---|
| className | string | yes | – |
| configuration | string | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| include | array | – | – |
| includeTest | boolean | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
| scope | string | – | – |
No output schema declared.
No examples provided.
get_method_signature Get Java method overload signatures ~442
Lists every overload of a named method on a class. Preferred over get_class_source whenever you only need signatures. Use this when: verifying a method exists, checking parameter types, picking the right overload, or confirming a return type. For constructors, pass methodName = "<init>". Params: className; methodName (required singular) OR methodNames with exactly one element (alias — do not pass multiple names; call once per method or use get_class_structure). Standard project params. Resolution strategy (default, bytecodeOnly=false): 1. Parse .java from the sources JAR or inter-project src if available — keeps real parameter names and generics (sourceAvailable=true). 2. Otherwise fall back to javap -private -verbose on bytecode — parameter names may be synthetic like arg0 (sourceAvailable=false). bytecodeOnly=true forces step 2: javap only on the binary classpath element. Gives full JVM descriptors, flags, and synthetic members; sourceAvailable is always false. Returns: compact text — one declaration line per overload — by default; full=true returns JSON. Compact lines use the same modifier abbreviations as get_class_structure (P/p/prot/pack + s/f/a), e.g. "Ps void empty()". full=true declarationLine stays full Java spelling. Result semantics: • Class missing from classpath: isError=false, found=false (CLASS_NOT_FOUND). • Class present but no matching method overloads: isError=false, found=false, methodFound=false, querySucceeded=true — same found semantics as search/find. The name may be a field; use get_class_structure. Inherited bodies: scope=effective then retry on declaringClass.
| Name | Type | Req | Description |
|---|---|---|---|
| bytecodeOnly | boolean | – | – |
| className | string | yes | – |
| configuration | string | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| include | array | – | – |
| includeTest | boolean | – | – |
| methodName | string | – | – |
| methodNames | array | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
No output schema declared.
No examples provided.
resolve_dependencies Resolve Gradle dependencies ~189
Runs (or returns cached) Gradle dependency resolution for the project and reports modules, configurations, and resolved artifacts. Use this when: diagnosing a version mismatch, debugging NoSuchMethodError / AbstractMethodError / ClassCastException across libraries, or confirming which version of a dependency is actually on the classpath. Start here before chasing symptoms in source. Params: standard project params; forceRefresh=true bypasses the hash cache — use it after dependency changes that don't touch build files (e.g., SNAPSHOT republish). Returns: compact text module/configuration summary by default; full=true returns the full artifact JSON. Only set full=true if parsing. Errors: isError=true with RESOLUTION_FAILED, plus errorCategory, isRetryable, and message.
| Name | Type | Req | Description |
|---|---|---|---|
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| include | array | – | – |
| projectRoot | string | yes | – |
No output schema declared.
No examples provided.
search_classes Search classes on the resolved classpath ~443
Discovery tool for finding classes when you don't know the FQN. Returns a ranked suggestion list: each hit is className (FQN) plus libName (artifact or Gradle module) — enough to call get_class_structure next. Use this when: the user mentions a type by simple name, you see an unknown class in a stack trace, or you need to locate which dependency provides something. Follow up with get_class_structure (scope=overview) — never jump straight to get_class_source. Query: case-insensitive substring matched against FQN, simple name, and (when sources were available at index time) declared method/field names and Javadoc text. Whitespace-separated tokens are AND'd (each token must match independently) — not one contiguous phrase. This is type-oriented discovery — not a full method-body grep. For literals/strings inside a known dependency JAR, use search_in_artifact. Globs with * and ? are matched against FQN or simple name only (no AND split). Params: query (required); modulePath, configuration, includeTest, limit (default 50, max 200), forceRefresh (after dependency changes). Optional include array expands the response (same tokens in compact text and JSON): simpleName, score, origin, coordinates, location (jarPath/moduleRoot), scope (moduleName/configurationName), indexMeta (index build stats at payload root), all (full per-hit fields plus indexMeta). Default omits jar paths and Maven coordinates. Returns: compact text — one FQN and libName per line by default; full=true returns JSON with the same default projection unless include expands it. Only set full=true if you are parsing the result programmatically. Errors: isError=true with RESOLUTION_FAILED if Gradle resolution fails, or a classpath validation code.
| Name | Type | Req | Description |
|---|---|---|---|
| configuration | string | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| include | array | – | – |
| includeTest | boolean | – | – |
| limit | integer | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
| query | string | yes | – |
No output schema declared.
No examples provided.
search_in_artifact Search text across all classes in one resolved dependency JAR ~428
Grep-like search across every class in one artifact (by Maven coordinates or absolute jarPath). Fetches source for each class (sources JAR preferred; CFR decompilation fallback) and runs the query, returning hits grouped by className. Use this when: you know which library contains a log message, exception string, or API literal — but not which class. Use find_in_class_source when the class is already known; use search_classes when you need to discover which library provides a class by name. Artifact selector (one required): • coordinates — { group, name, version? }. Omitting version does a loose match; if multiple JAR paths match, ARTIFACT_AMBIGUOUS is returned with a candidates list. • jarPath — absolute path from a prior resolve_dependencies result. Always unambiguous. Search params: query (required, literal by default); regex=true for JS RegExp; contextLines (default 3, max 50); maxHits (total across all classes, default 20, max 100); maxClasses (FQN scan cap, default 500). Returns: compact text — hits grouped by className with line:col and context; full=true for JSON. truncated=true when maxHits or maxClasses was reached. Result semantics: • ARTIFACT_NOT_FOUND / ARTIFACT_AMBIGUOUS: isError=false, found=false — not an access failure. • FIND_QUERY_INVALID: bad regex — fix and retry. • Line numbers are reliable only when sourceAvailable=true (original sources JAR).
| Name | Type | Req | Description |
|---|---|---|---|
| configuration | string | – | – |
| contextLines | integer | – | – |
| coordinates | object | – | – |
| forceRefresh | boolean | – | – |
| full | boolean | – | – |
| includeTest | boolean | – | – |
| jarPath | string | – | – |
| maxClasses | integer | – | – |
| maxHits | integer | – | – |
| modulePath | string | – | – |
| projectRoot | string | yes | – |
| query | string | yes | – |
| regex | boolean | – | – |
No output schema declared.
No examples provided.
What is the JVM Source Lens MCP server?
JVM Source Lens is an MCP server listed in the public MCP registry as io.github.Sintexer/jvmsrc. Gradle-accurate JVM classpath; fetch Java source, signatures, and class structure for agents. This page covers its npm package (jvmsrc).
Is the JVM Source Lens MCP server safe to use?
JVM Source Lens scores 86 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 JVM Source Lens MCP server expose?
JVM Source Lens exposes 7 tools: get_class_source, find_in_class_source, resolve_dependencies, search_classes, get_method_signature, and 2 more. Their descriptions and schemas cost roughly 2,622 tokens of context every time the server is loaded.
Is the JVM Source Lens MCP server still maintained?
JVM Source Lens 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 JVM Source Lens MCP server under?
JVM Source Lens declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.