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.

JVM Source Lens

NPM · JVMSRC · SCANNED SEP 21

Gradle-accurate JVM classpath; fetch Java source, signatures, and class structure for agents.

Available components

0 this week 86 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
  • 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
Install

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

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

  • 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
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/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 →

MCP tools · 7 exposed · ~2,622 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
find_in_class_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.

NameTypeReqDescription
classNamestringyes
configurationstring
contextLinesinteger
forceRefreshboolean
fullboolean
includearray
includeTestboolean
maxHitsinteger
modulePathstring
projectRootstringyes
querystringyes
regexboolean

No output schema declared.

No examples provided.

get_class_source ~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.

NameTypeReqDescription
classNamestringyes
configurationstring
endLineinteger
forceRefreshboolean
fullboolean
includeTestboolean
methodNamestring
methodNamesarray
modulePathstring
projectRootstringyes
startLineinteger

No output schema declared.

No examples provided.

get_class_structure ~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.

NameTypeReqDescription
classNamestringyes
configurationstring
forceRefreshboolean
fullboolean
includearray
includeTestboolean
modulePathstring
projectRootstringyes
scopestring

No output schema declared.

No examples provided.

get_method_signature ~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.

NameTypeReqDescription
bytecodeOnlyboolean
classNamestringyes
configurationstring
forceRefreshboolean
fullboolean
includearray
includeTestboolean
methodNamestring
methodNamesarray
modulePathstring
projectRootstringyes

No output schema declared.

No examples provided.

resolve_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.

NameTypeReqDescription
forceRefreshboolean
fullboolean
includearray
projectRootstringyes

No output schema declared.

No examples provided.

search_classes ~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.

NameTypeReqDescription
configurationstring
forceRefreshboolean
fullboolean
includearray
includeTestboolean
limitinteger
modulePathstring
projectRootstringyes
querystringyes

No output schema declared.

No examples provided.

search_in_artifact ~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).

NameTypeReqDescription
configurationstring
contextLinesinteger
coordinatesobject
forceRefreshboolean
fullboolean
includeTestboolean
jarPathstring
maxClassesinteger
maxHitsinteger
modulePathstring
projectRootstringyes
querystringyes
regexboolean

No output schema declared.

No examples provided.

Common questions

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.