Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

jafar-perf-box

A Claude Code plugin marketplace for the Jafar JFR / heap dump / profile analysis toolkit.

/plugin marketplace add btraceio/jafar-perf-box
/plugin install jafar-perf@btraceio

Two names, because they name two different things: jafar-perf-box is this repository, which is the marketplace, and jafar-perf is the plugin inside it. @btraceio is the marketplace's name as declared in .claude-plugin/marketplace.json, not the GitHub organisation. So you add the repository and install the plugin.

This repository is deliberately small — a few hundred kilobytes of Markdown. Adding a marketplace clones its repository, so the plugin lives here rather than in the Jafar source tree, which carries several megabytes of binary test recordings that a plugin user has no use for.

What is in it

jafar-perf — the methodology layer over Jafar's MCP server: nine skills (triage, cpu, latency, gc, memory-leak, heap-diff, compare, jfrpath, report) and seven agents that know which analysis to run on an unfamiliar recording or heap dump, not just how to run one. See plugins/jafar-perf/README.md.

The plugin bundles .mcp.json, so installing it also registers the jafar MCP server (jbang jfr-mcp@btraceio --stdio). JBang must be on your PATH; it fetches the server on first use. No separate claude mcp add is needed.

Using it with pi

The same skills and MCP server also install into the pi coding agent. The root package.json makes this repository a pi package: its pi key points at the plugin's skills/ and its .mcp.json, so both harnesses read one copy of each.

pi install npm:pi-mcp-adapter
pi install git:github.com/btraceio/jafar-perf-box

pi has no built-in MCP support; the MCP server needs the third-party pi-mcp-adapter extension. The adapter exposes the server's tools through its mcp proxy tool (mcp({ tool: "jfr_open", args: {...} })) rather than as individual tools, and it names the server jafar-perf-box__jafar. The skills name tools by their bare names, which the proxy resolves. The seven agents are Claude Code subagents and do not load in pi, which has no subagent support of its own.

Jafar's own installer (install.sh in btraceio/jafar) runs both commands for you.

Keeping the skills honest

The skills name MCP tools and their parameters explicitly. Nothing in Jafar's test suite knows this repository exists, so a tool renamed there turns a skill here into confident instructions for a call that fails — the one real cost of keeping the plugin separate.

scripts/check_tool_references.py closes it. It starts the published server the same way the README tells users to, asks it for tools/list, and fails if any name in a skill or agent is missing, reporting the exact file and line. Run it locally against a build of your own:

python3 scripts/check_tool_references.py --jar path/to/jfr-mcp-all.jar

The tool-drift workflow runs it weekly, not only on push: the drift originates in another repository, so a push trigger would never fire at the moment it matters. A failing scheduled run opens an issue, because nobody watches a cron job.

Relationship to the Jafar repository

The plugin drives the MCP tools built in btraceio/jafar. When a tool's output shape changes there, the affected skill changes here — the two are versioned separately, so a skill referencing a tool that does not exist in the user's installed server is the failure mode to watch for. Each skill names the tools it uses.

About

Performance agent in a box

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages