Skip to main content
Glama
Imanity-Software

spark-profiler-mcp

Official

spark-profiler-mcp

npm CI node license

MCP server that reads spark profiler files so an AI can give accurate Minecraft server tuning advice.

Parses spark's binary protobuf directly: no upload, no protoc. Ships a diagnose engine that knows TPS/MSPT/GC/heap thresholds and call-tree signatures (entity ticking, chunk gen, redstone, blocking I/O, plugin hogs, JVM flags), returns ranked findings with concrete fixes.

Supported files

File

spark command

Contents

.sparkprofile

/spark profiler --stop

Sampler / call tree

.sparkheap

/spark heapsummary --save-to-file

Memory (top retained types)

.sparkhealth

/spark health --save-to-file

TPS/MSPT/CPU/entities over time

Input = local path, https://spark.lucko.me/<key> / bytebin URL, or bare bytebin key. gzip and raw protobuf both auto-handled.

Shared spark.lucko.me links expire (bytebin deletes them). For permanent analysis, --save-to-file.

Most tools (diagnose, get_summary, get_platform_info, get_system_stats, get_health) work on sampler and health files. .sparkheapget_heap_summary. Call-tree tools = sampler only.

Related MCP server: javaperf

Install (one line)

Published to npm — no clone, no build; npx fetches and runs it:

claude mcp add spark-profiler -- npx -y spark-profiler-mcp

Same thing as an MCP client config block (.mcp.json / claude_desktop_config.json):

{
  "mcpServers": {
    "spark-profiler": { "command": "npx", "args": ["-y", "spark-profiler-mcp"] }
  }
}

Then ask: "Load this.sparkprofile and tell me what to tune." The assistant calls load_profilediagnose → drills in.

From source (dev / unpublished)

npm install && npm run build
claude mcp add spark-profiler -- node /absolute/path/to/spark-profiler-mcp/dist/index.js

Tools

Tool

Purpose

load_profile(source)

Parse file/URL/key → profileId + headline.

get_summary

Version, TPS, MSPT, heap, GC%, entities, hot methods, top plugins, verdict.

diagnose

Ranked findings: evidence → diagnosis → action.

get_platform_info

Brand/version, plugins, config highlights (view/sim-distance, spawn limits).

get_system_stats

Host CPU/RAM/disk/OS, Java, JVM args (secrets redacted), GC, Aikar check.

get_health

TPS 1/5/15m, MSPT percentiles, ping, heap, per-minute time-series (.sparkhealth).

get_world_stats

Entities, top types, per-world totals, data packs, game rules.

list_threads

Sampled threads, busiest first.

get_top_self_time

Hottest methods by self time (idle/native excluded).

get_sources_breakdown

Self-time per plugin/mod.

get_call_tree

Pruned tree. rootPath jumps to any frame.

search_call_tree

Find frames by substring or /regex/.

get_heap_summary

.sparkheap: largest retained types.

Token-cheap by design. Outputs = summaries + top-N. Full call tree never dumped. Reach it via get_call_tree (depth + minPercent capped) and search_call_tree. Parsed once, cached by profileId.

How it reads spark files

  • Vendored proto/spark/*.proto (from lucko/spark) loaded at runtime by protobufjs: no codegen.

  • .sparkprofile = SamplerData. Each thread = flattened call tree: ThreadNode.children is a flat pool, children_refs rebuild it. Self time = node total − Σ children. Native/idle frames flagged so the active hot path shows.

  • vmArgs surfaced for JVM analysis. Credential-like -D props redacted.

Development

npm run dev        # run from source (tsx)
npm test           # vitest: decode example, check analysis + diagnosis
npm run smoke      # end-to-end over stdio
npm run inspector  # @modelcontextprotocol/inspector

Publishing (maintainer)

Releases are automated via GitHub Actions + npm Trusted Publishing (OIDC) — no npm token is stored anywhere. One-time setup on npmjs.com: the package → Settings → Trusted Publisher → GitHub Actions, with Organization Imanity-Software, Repository spark-profiler-mcp, Workflow publish.yml. Then to cut a release:

# bump "version" in package.json, then:
git tag v0.1.1 && git push origin v0.1.1

.github/workflows/publish.yml builds, tests, and runs npm publish authenticated by OIDC, with provenance generated automatically. (Needs Node ≥ 22.14 + npm ≥ 11.5.1; the workflow upgrades npm itself.)

files ships only dist/ + proto/ (schemas are loaded at runtime, so they must be included); the 24 MB example and tests are excluded.

Manual fallback (no provenance): npm login && npm publishprepublishOnly builds + tests first.

Prefer not to use npm at all? npx -y github:Imanity-Software/spark-profiler-mcp also works — the prepare hook builds it on install.

License

MIT. spark is © lucko, GPLv3. Only its .proto schemas are vendored here.

Available Tools

14 tools
diagnoseDiagnose performance issuesA

Apply the built-in interpretation knowledge base (TPS/MSPT/GC/heap/CPU thresholds, plugin dominance, entity/chunk/redstone/IO signatures, JVM-flag checks) and return ranked findings, each with evidence, diagnosis, and a concrete recommended action. This is the primary 'what should I tune' tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the use of thresholds, signatures, and checks, and the return format (ranked findings with evidence, diagnosis, action). However, it does not clarify whether the tool is read-only or has side effects, which is a gap for a diagnostic tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first details the tool's action comprehensively, the second reinforces its role. No fluff, front-loaded, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single parameter, no output schema, and no annotations, the description covers input, behavior, and output format adequately. Would benefit from mentioning if the tool modifies state, but otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with profileId described as 'The id returned by load_profile.' The description adds no additional meaning beyond the schema, meeting baseline expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it applies a built-in knowledge base to diagnose performance issues and returns ranked findings with evidence, diagnosis, and action. It distinguishes itself as the primary 'what should I tune' tool, differentiating from siblings like get_health or get_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It positions itself as the primary tuning tool, giving clear context for when to use it. However, it doesn't explicitly state when not to use it or mention alternatives among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_call_treeDrill into the call treeA

Pruned call tree for a thread. Children below minPercent of the thread total are dropped and depth is capped. Pass rootPath (an array of 'Class.method' labels/substrings) to descend into a specific subtree before expanding.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadNoThread name (default 'Server thread').
maxDepthNo
rootPathNoDescend into this frame path first, e.g. ['runServer','tickChildren'].
profileIdYesThe id returned by load_profile.
minPercentNoDrop frames below this % of thread total.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. It clearly discloses behavioral traits: pruning (children below minPercent dropped), depth capping, and the effect of rootPath. This is comprehensive for a read-only exploration tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with no waste. It front-loads the core purpose and pruning behavior, then explains the rootPath parameter. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters and no output schema. The description explains the core behavior (pruning, depth capping) and the special rootPath parameter. It does not describe return values, but that is acceptable given no output schema. The description is complete enough for an AI agent to understand how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, indicating most parameters are explained in the schema. The description adds value by explaining 'rootPath' usage with an example. This adds meaning beyond the schema's description of 'Descend into this frame path first'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: 'Pruned call tree for a thread.' The verb 'Drill into' and resource 'call tree' are specific. It distinguishes from sibling 'search_call_tree' by describing a different operation (drilling vs searching).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on using 'rootPath' to descend into a subtree, which is helpful. However, it does not explicitly state when not to use this tool or compare with alternatives like 'search_call_tree'. The usage context is clear but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_healthTPS / MSPT / GC healthB

Tick health: TPS (1m/5m/15m), MSPT percentiles (mean/median/p95/max), ping, heap, GC analysis, and — for .sparkhealth reports (and the windows inside a sampler) — the per-minute time series with the worst windows highlighted.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.
windowLimitNoMax time-series windows to return.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The description details the return format comprehensively but does not mention whether the tool is read-only, side effects, permissions, or rate limits. For a health check tool, it is likely read-only, but this is not stated, leaving some uncertainty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently lists many metrics. It is front-loaded with 'Tick health:' but could be slightly more readable. No fluff exists, though the term 'tick' is awkward.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description provides a thorough overview of the return values, including specific percentiles, time series, and window highlighting. It covers the main aspects expected from a health tool, leaving little ambiguity about what information is retrieved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents both parameters (profileId and windowLimit). The description adds no additional context for the parameters, listing only output metrics. Baseline score of 3 is appropriate since the schema is self-sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the tool returns health metrics including TPS, MSPT percentiles, ping, heap, and GC analysis. The verb 'tick' is ambiguous but the list of metrics makes the purpose clear. It is specific about the resource (health) and distinguishes from sibling tools like get_heap_summary or get_system_stats by listing different metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as diagnose or get_system_stats. The description does not mention prerequisites, when not to use it, or what scenarios it is best suited for. The agent must infer from the metric list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_heap_summaryHeap summary (.sparkheap)C

For a .sparkheap file: the largest retained types by size, with instance counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNo
profileIdYesThe id returned by load_profile.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must bear the full burden of behavioral disclosure. It does not state whether the tool is read-only, destructive, or has side effects. The description only describes the output, not the behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (one sentence) but lacks structure. It front-loads the file type but provides no headings or separation. It is somewhat under-specified for a tool with 2 parameters and no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of sibling tools like get_summary and no output schema, the description is incomplete. It does not explain what 'largest retained types' means, the output format, or how it relates to other tools. More context is needed for an agent to choose correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only profileId has a schema description). The description adds no parameter-specific meaning beyond the schema. It does not explain how 'topN' affects results or what 'profileId' refers to, beyond what is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is for .sparkheap files and returns the largest retained types by size with instance counts. It distinguishes itself from siblings like get_summary (which likely targets other file types) and get_sources_breakdown (different focus).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_summary or get_sources_breakdown. No prerequisites or conditions mentioned. The description is purely declarative without usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_platform_infoPlatform & pluginsA

Server brand/version, Minecraft version, the plugin/mod list with versions, config file names, and key config highlights (view/simulation-distance, spawn limits, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It lists what is returned but does not mention side effects, authorization needs, or whether the operation is read-only. The description provides some transparency but leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently lists the output components. It is concise but could be more structured or broken into a bullet list for clarity. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately explains the return values. It covers the main categories of returned data. However, it lacks details on whether performance impact exists or if the data is real-time vs cached, but given the tool's simplicity (one parameter), it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter (profileId), so baseline is 3. The description does not add any additional meaning beyond what the schema already provides; it only describes the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies what the tool returns: server brand/version, Minecraft version, plugin/mod list, config file names, and key config highlights. This is a specific verb+resource that distinguishes it from sibling tools like diagnose or get_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving platform information but does not explicitly state when to use it vs. alternatives, nor does it provide when-not-to-use guidance or mention sibling tools. Usage context is implied but not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sources_breakdownPer-plugin breakdownA

Self-time grouped by plugin/mod source (spark 'sources' view) on a thread. excludeNative drops idle frames. Shows which plugin/mod owns the work.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNo
threadNoThread name (default 'Server thread').
profileIdYesThe id returned by load_profile.
excludeNativeNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that excludeNative drops idle frames, adding behavioral context beyond schema. However, given no annotations, it does not cover other aspects like auth needs or rate limits, leaving transparency incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the primary purpose and a key behavioral detail, with no superfluous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes the tool's action clearly but omits details about output format, ordering, and how topN limits results, which are important for an agent to fully understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning for excludeNative by explaining its effect, but does not describe topN or thread beyond what schema already provides. With 50% schema coverage, more parameter context would be beneficial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it groups self-time by plugin/mod source, referencing Spark's 'sources' view, and distinguishes itself from siblings like get_top_self_time by specifying the grouping dimension.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for identifying responsible plugins/mods but lacks explicit when-to-use or when-not-to-use guidance relative to alternatives like get_top_self_time.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summaryProfile summaryA

Headline health summary: server/MC version, TPS, MSPT, heap, GC%, entities, top hot methods & plugin sources, and the overall diagnosis verdict.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It describes what the tool returns but does not mention side effects, authentication requirements, or behavior on invalid profileId. It implies a read-only operation but lacks explicit confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads key information. It is concise and lists all relevant metrics, though it could be slightly more structured for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description effectively explains what will be returned (list of health metrics). It covers the essential information for a summary tool. However, it could include details about the diagnosis verdict and how metrics are aggregated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'profileId'. The description does not add additional semantic meaning beyond what the schema already provides (e.g., format or constraints). Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides a 'headline health summary' and enumerates specific metrics like server/MC version, TPS, heap, etc. This differentiates it from other tools like 'diagnose' or 'get_health' that likely provide more detailed or different perspectives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a quick overview of server health, but it does not explicitly state when to use this tool versus alternatives such as 'diagnose' or 'get_health'. There is no mention of exclusions or specific contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_system_statsSystem & JVM statsA

Host CPU/RAM/disk/OS, Java version, JVM args (secrets redacted), detected GC, Xmx/Xms, and an Aikar's-flags check.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of transparency. It mentions that JVM args have secrets redacted, which is a behavioral trait. However, it does not explicitly state that the tool is read-only or safe to call repeatedly, nor does it describe any potential side effects or performance considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently lists all returned data items without any fluff. Every part contributes to understanding the tool's output, making it appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple data points) and lack of output schema, the description covers all major aspects (CPU, RAM, disk, OS, Java, JVM args, GC, memory settings, Aikar's flags). It could be more complete by indicating the return format (e.g., JSON structure), but the listing is sufficient for an experienced user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter (profileId) described as 'The id returned by load_profile.' The description adds no extra meaning to the parameter beyond the schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly lists all data types returned (CPU, RAM, disk, OS, Java version, JVM args, GC, Xmx/Xms, Aikar's flags), providing a clear and specific purpose. The title 'System & JVM stats' aligns well, and the verb 'get' is implied by the name, distinguishing it from sibling tools like get_health or get_platform_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_health or get_summary. The description lacks any contextual usage advice, exclusions, or prerequisites, leaving the agent without decision support for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_self_timeHottest methods (self time)B

Top methods by self-time on a thread (default 'Server thread'). excludeNative drops idle/native wait frames to reveal the hottest Java methods.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNo
threadNoThread name (default 'Server thread').
profileIdYesThe id returned by load_profile.
excludeNativeNoExclude native/idle frames (recommended).

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It explains the effect of excludeNative but does not mention that the tool is read-only, or that it returns a sorted list of top N methods. The output format is not described, which is a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each dense with information. No unnecessary words. Front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should cover more about the return structure and usage context. It lacks guidance on integrating with load_profile, and does not explain that the result is a list of methods with self-time values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds little beyond what the schema already provides. The default thread and excludeNative effect are restated from schema. For topN parameter, no additional detail is given beyond min/max. With 75% schema coverage, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns top methods by self-time on a specific thread, with the title reinforcing the 'hottest methods' concept. It distinguishes from sibling tools like get_call_tree which would provide a hierarchical view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like get_call_tree or search_call_tree. The description implies it is for hotspot analysis but does not say when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_world_statsWorld & entitiesA

World/entity statistics: total entities, top entity types by count, per-world entity totals, data packs, non-default game rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoTop entity types to return.
profileIdYesThe id returned by load_profile.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden for behavioral disclosure. It fails to state that the tool is read-only, lacks information on permissions, side effects, or response size. The list of returned stats is helpful but insufficient for safety or performance awareness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single concise sentence that efficiently lists all included statistics. No redundant words, every phrase adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple stats retrieval tool with no output schema, the description sufficiently outlines the returned data categories. However, it could mention the format (e.g., JSON) or whether results are nested, though not strictly required given the explicit list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add any parameter meaning beyond what the schema already provides (e.g., topN is implied by 'top entity types' but schema already describes it). No added semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'World/entity statistics' and lists specific data points (total entities, top entity types, per-world totals, data packs, non-default game rules), making the verb-resource relationship explicit and distinguishing it from sibling tools like get_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving world/entity statistics but provides no explicit guidance on when to use this tool over alternatives or when not to use it. Agent can infer context from the listed data items, but exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_profilesList loaded profilesA

List the profiles currently loaded in memory (id, type, source).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It transparently states it lists profiles 'in memory' and the fields. Could mention it's a read-only operation, but it's reasonably clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise single sentence that front-loads the action and resource. Could be slightly more informative but is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description adequately covers the tool's purpose and output fields. Adding a mention of the return type would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; baseline 4. The description adds value by specifying the output fields, which is helpful beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists profiles currently loaded in memory, specifying the fields (id, type, source). It distinguishes from sibling 'load_profile', which loads profiles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use when you need to see loaded profiles. No explicit when-not-to-use or alternatives provided, but the simplicity makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_threadsList sampled threadsA

List the sampled threads (name, total sampled ms, node count), busiest first. Use a name with the call-tree tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileIdYesThe id returned by load_profile.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the output fields and ordering (busiest first), which is good, but it does not mention behavior on invalid profileId or any side effects. It is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with a supporting hint, achieving the goal without any fluff. Every word serves a purpose, making it highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has only one parameter and no output schema, the description covers the essential aspects: the action, output fields, and how to use the result. It is nearly complete, with minor room to add error handling details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with a description for profileId. The tool description does not add any additional meaning beyond what the schema already provides, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists sampled threads with specific fields (name, total sampled ms, node count) sorted busiest first. It also distinguishes from sibling tools by advising to use a thread name with call-tree tools, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is a precursor to call-tree tools ('Use a name with the call-tree tools'), implying when it should be used. However, it does not explicitly state when not to use it or compare with alternatives, which would make it more complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_profileLoad a spark profileA

Load and parse a spark file from a local path, a bytebin/spark.lucko.me URL, or a bytebin key. Supports .sparkprofile (sampler), .sparkheap (memory), and .sparkhealth (health) files. Returns a profileId plus a headline summary; all other tools take that profileId.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesLocal file path, a https://spark.lucko.me/<key> or bytebin URL, or a bare bytebin key.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses supported file types and output format but omits details on failure modes, permission requirements, or side effects. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action verb. Each sentence adds unique information without redundancy. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, no output schema, and low complexity, the description is fully complete. It explains what the tool does, what inputs are valid, and how it fits into the workflow (other tools depend on its output).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage and describes the parameter. The description adds significant value by clarifying the types of sources (local path, URL, bytebin key) and file extensions, going beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Load and parse') and identifies the resource (spark files), supported file types, and clear output (profileId + headline summary). It distinguishes itself from sibling tools by being the entry point for loading.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that 'all other tools take that profileId', implying this tool should be used first. It provides clear context but does not explicitly exclude alternative usage or mention when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_call_treeSearch the call treeA

Find stack frames whose Class.method matches a substring or /regex/, returned with total/self time. Useful to check whether a suspected plugin/mechanic appears and how heavy it is.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
threadNoThread name (default 'Server thread').
patternYesSubstring (case-insensitive) or /regex/.
profileIdYesThe id returned by load_profile.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It implies read-only ('Find') but does not explicitly confirm non-destructiveness or mention side effects, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load purpose and add a usage tip. Every word contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description adequately explains search behavior and return data (total/self time). Could add details on result ordering or pagination, but not deficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 parameters described). Description adds context for 'pattern' (substring/regex) but not for 'limit' or 'profileId'. Schema covers most, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds stack frames by Class.method matching a substring or regex and returns timing info. It distinguishes from sibling 'get_call_tree' which returns full tree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises using it to check if a suspected plugin/mechanic appears and its weight. It provides a clear use case but does not explicitly state when not to use or list alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv0.1.1
    • First observeddiagnose
    • First observedget_call_tree
    • First observedget_health
    • First observedget_heap_summary
    • First observedget_platform_info
    • First observedget_sources_breakdown
    • First observedget_summary
    • First observedget_system_stats
    • First observedget_top_self_time
    • First observedget_world_stats
    • First observedlist_profiles
    • First observedlist_threads
    • First observedload_profile
    • First observedsearch_call_tree

TDQS

A3.7/5.0
Disambiguation4/5

Most tools target distinct aspects (health, call trees, heap, threads, etc.) with clear descriptions. Minor overlap between get_health and get_summary, and between get_top_self_time and get_sources_breakdown, but descriptions sufficiently differentiate them.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using underscores (e.g., list_profiles, get_health, search_call_tree). Only 'diagnose' is a single word but fits the pattern. No mixing of styles.

Tool Count5/5

14 tools cover the core functionality of a spark profiler (loading, listing, health, call trees, heap, threads, system stats, diagnosis) without being excessive. Each tool has a clear purpose and earns its place.

Completeness4/5

The set covers the main analysis workflows: load, list, health, call trees, heap, threads, system info, and diagnosis. Missing a tool to clear/unload profiles, and no export or flame graph visualization, but core diagnostic needs are met.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    26
    64
    10
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for profiling Python processes using py-spy, supporting flamegraphs, stack dumps, and performance comparisons.
    6
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Hybrid TypeScript/Java MCP server for analyzing JVM Flight Recorder files, enabling AI agents to diagnose exceptions, slow SQL, network latency, and performance bottlenecks.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Imanity-Software/spark-profiler-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server