MCPcopy Index your code
hub / github.com/QAInsights/jmeter-ai

github.com/QAInsights/jmeter-ai @v2.0.9

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.0.9 ↗ · + Follow
1,043 symbols 2,887 edges 96 files 276 documented · 26% updated 12d agov2.0.9 · 2026-06-10★ 527 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🚀 Feather Wand - JMeter Agent

This plugin provides a simple way to chat with AI in JMeter. Feather Wand serves as your intelligent assistant for JMeter test plan development, optimization, and troubleshooting.

PerfAtlas

🪄 About the name: The name "Feather Wand" was suggested by my children who were inspired by an episode of the animated show Bluey. In the episode, a simple feather becomes a magical wand that transforms the ordinary into something special (heavy) - much like how this plugin aims to transform your JMeter experience with a touch of AI magic!

Feather Wand Feather Wand - JSR223 Context Menu

✨ Features

  • Chat with AI directly within JMeter using Claude, OpenAI, Google Gemini, DeepSeek, or Ollama models
  • New! Multi-AI CLI Terminal: run Claude Code, OpenAI Codex CLI, OpenCode, or Antigravity CLI interactively within JMeter — switch between available CLIs via a dropdown selector, with full awareness of your current test plan structure.
  • New! Streaming AI responses: AI responses appear token-by-token in real-time (supports Claude, OpenAI, Google Gemini, DeepSeek, and Ollama)
  • New! Stop button: Cancel an ongoing AI response at any time with the Stop button
  • New! Response chime: Audio notification when AI responses complete (configurable)
  • Get suggestions for JMeter elements based on your needs
  • Ask questions about JMeter functionality and best practices
  • Command intellisense with auto-completion for special commands in the chat input box
  • Use @this command to get detailed information about the currently selected element
  • Use @code command to extract code blocks from AI responses into the JSR223 editor
  • Use @usage command to get usage examples for JMeter components
  • Use @lint command to automatically rename elements in your test plan for better organization and readability
  • Use @optimize command to get optimization recommendations for the currently selected element in your test plan
  • Use @wrap command to intelligently group HTTP samplers under Transaction Controllers for better organization and reporting
  • Use right click context menu to refactor code, format code, and add functions in JSR223 script editor
  • Customize AI behavior through configuration properties
  • Switch between Claude, OpenAI, Google Gemini, DeepSeek, and Ollama models based on your preference or specific needs

📥 Installation

Plugins Manager (Recommended)

  1. Install the JMeter Plugins Manager from Plugins Manager.
  2. Restart JMeter.
  3. Launch Plugins Manager.
  4. Search for feather wand under Available Plugins tab.
  5. Select it and click Apply Changes and Restart JMeter button.

Manual Installation (Alternative)

  1. Download the latest release JAR file from the Releases page.
  2. Place the JAR file in the lib/ext directory of your JMeter installation.
  3. Copy the contents of jmeter-ai-sample.properties into your jmeter.properties file (located in the bin directory of your JMeter installation) or into your user.properties file.
  4. Configure your API key(s) for Anthropic and/or OpenAI in the properties file.
  5. Restart JMeter.
  6. The Feather Wand plugin will appear as a new component in the right-click menu under "Add" > "Non-Test Elements" > " Feather Wand".

⚙️ Configuration

The Feather Wand plugin can be configured through JMeter properties. Copy the jmeter-ai-sample.properties file content to your jmeter.properties or user.properties file and modify the properties as needed.

🔧 Available Configuration Options

Streaming Configuration

Property Description Default Value
jmeter.ai.streaming.enabled Enable real-time streaming of AI responses (token-by-token display) true
jmeter.ai.response.chime Play an audio chime when AI responses complete false

When streaming is enabled (default), AI responses appear progressively in the chat as they are generated. You can cancel the response at any time using the Stop button that appears next to the Send button. This feature is supported by all five AI services: Claude, OpenAI, Google Gemini, DeepSeek, and Ollama. If you prefer to receive the complete response at once (non-streaming), set jmeter.ai.streaming.enabled=false.

Anthropic (Claude) Configuration

Property Description Default Value
anthropic.api.key Your Claude API key Required
claude.default.model Default Claude model to use claude-sonnet-4-6
claude.temperature Temperature setting (0.0-1.0) 0.5
claude.max.tokens Maximum tokens for AI responses 1024
claude.max.history.size Maximum conversation history size 10
claude.system.prompt System prompt that guides Claude's responses See sample properties file
anthropic.log.level Logging level for Anthropic API requests ("info" or "debug") Empty (disabled)

OpenAI Configuration

Property Description Default Value
openai.api.key Your OpenAI API key Required
openai.default.model Default OpenAI model to use gpt-4o
openai.temperature Temperature setting (0.0-1.0) 0.5
openai.max.tokens Maximum tokens for AI responses 1024
openai.max.history.size Maximum conversation history size 10
openai.system.prompt System prompt that guides OpenAI's responses See sample properties file
openai.log.level Logging level for OpenAI API requests ("INFO" or "DEBUG") Empty (disabled)

Google Gemini Configuration

Property Description Default Value
google.api.key Your Google AI API key Required
google.streaming.enabled Enable real-time streaming for Google Gemini true
google.default.model Default Google Gemini model to use gemini-2.5-flash
google.temperature Temperature setting (0.0-1.0) 0.7
google.max.tokens Maximum tokens for AI responses 4096
google.max.history.size Maximum conversation history size 10
google.system.prompt System prompt that guides Gemini's responses See sample properties file

Ollama Configuration

Property Description Default Value
ollama.host Ollama server host http://localhost
ollama.port Ollama server port 11434
ollama.default.model Default Ollama model to use deepseek-r1:1.5b
ollama.temperature Temperature setting (0.0-1.0) 0.5
ollama.max.history.size Maximum conversation history size 10
ollama.thinking.mode Enable extended thinking (ENABLED or DISABLED) DISABLED
ollama.thinking.level Thinking depth (LOW, MEDIUM, or HIGH) MEDIUM
ollama.request.timeout.seconds HTTP request timeout in seconds (increase for thinking models) 120
ollama.system.prompt System prompt that guides Ollama's responses See sample properties file

⚠️ When ollama.thinking.mode=ENABLED, increase ollama.request.timeout.seconds to at least 300 to avoid timeout errors during long inference.

Code Refactoring Configuration

Property Description Default Value
jmeter.ai.refactoring.enabled Enable code refactoring for JSR223 script editor true
jmeter.ai.service.type The AI service to use for code refactoring ("anthropic", "openai", "ollama", "deepseek", or "google") "anthropic"

AI CLI Terminal Configuration

The AI CLI Terminal supports Claude Code, OpenAI Codex CLI, GitHub Copilot CLI, OpenCode, and * Antigravity CLI*. The plugin automatically detects which CLIs are available on your system's PATH and presents them in a dropdown selector.

Prerequisites:

CLI Binary Name Installation Guide
Claude Code claude Claude Code Quickstart
OpenAI Codex CLI codex OpenAI Codex CLI
GitHub Copilot CLI copilot GitHub Copilot CLI
OpenCode opencode OpenCode
Antigravity CLI agy Antigravity CLI
Property Description Default Value
jmeter.ai.terminal.claudecode.enabled Enable the embedded AI CLI Terminal feature (applies to all supported CLIs) true
jmeter.ai.terminal.claudecode.path Full path to the claude executable (e.g., /usr/local/bin/claude or C:\...) Empty (auto-detect)
jmeter.ai.terminal.claudecode.prompt Custom system prompt passed to the CLI (not recommended to change) See sample properties file
jmeter.ai.terminal.copilot.enabled Enable GitHub Copilot CLI in the AI CLI Terminal false
jmeter.ai.terminal.copilot.path Full path to the copilot executable Empty (auto-detect)
jmeter.ai.terminal.copilot.prompt Custom system prompt for GitHub Copilot CLI See sample properties file
jmeter.ai.terminal.antigravity.enabled Enable Antigravity CLI detection in the terminal (requires agy on PATH) false
jmeter.ai.terminal.antigravity.prompt Custom system prompt passed to Antigravity CLI See sample properties file

💬 Customizing the System Prompt

The system prompt defines how the AI (Claude or OpenAI) responds to your queries. You can customize this in the properties file to focus on specific aspects of JMeter or add your own guidelines.

claude.system.prompt, openai.system.prompt, google.system.prompt, deepseek.system.prompt, and ollama.system.prompt can be configured separately in the properties file. The default prompts are designed to provide helpful, JMeter-specific responses tailored to each AI model's capabilities.

🔍 Special Commands

📊 @usage Command

Use the @usage command to view detailed token usage information for your AI interactions:

  1. How to Use:

    • Simply type `@us

Extension points exported contracts — how you extend this code

AiService (Interface)
(no doc) [10 implementers]
src/main/java/org/qainsights/jmeter/ai/service/AiService.java
CommandCallback (Interface)
Callback interface implemented by AiChatPanel so that CommandDispatcher can trigger UI updates and access shared state w [2 …
src/main/java/org/qainsights/jmeter/ai/gui/CommandCallback.java
AiCliAdapter (Interface)
Interface for AI CLI adapters. Allows extending the terminal integration to support multiple AI CLIs. [1 implementers]
src/main/java/org/qainsights/jmeter/ai/claudecode/AiCliAdapter.java

Core symbols most depended-on inside this repo

addSynonyms
called by 122
src/main/java/org/qainsights/jmeter/ai/utils/JMeterElementRequestHandler.java
getName
called by 119
src/main/java/org/qainsights/jmeter/ai/service/AiService.java
getProperty
called by 103
src/main/java/org/qainsights/jmeter/ai/utils/AiConfig.java
generateStreamResponse
called by 75
src/main/java/org/qainsights/jmeter/ai/service/AiService.java
getInstance
called by 43
src/main/java/org/qainsights/jmeter/ai/usage/OpenAiUsage.java
generateResponse
called by 32
src/main/java/org/qainsights/jmeter/ai/service/AiService.java
getName
called by 27
src/main/java/org/qainsights/jmeter/ai/claudecode/AiCliAdapter.java
toString
called by 27
src/main/java/org/qainsights/jmeter/ai/claudecode/BaseCliAdapter.java

Shape

Method 932
Class 106
Interface 3
Enum 2

Languages

Java100%

Modules by API surface

src/main/java/org/qainsights/jmeter/ai/gui/AiChatPanel.java58 symbols
src/test/java/org/qainsights/jmeter/ai/gui/ChineseCharacterSupportTest.java35 symbols
src/test/java/org/qainsights/jmeter/ai/service/DeepseekAiServiceStreamingTest.java34 symbols
src/main/java/org/qainsights/jmeter/ai/correlation/CorrelationEngine.java31 symbols
src/main/java/org/qainsights/jmeter/ai/correlation/CorrelationReviewDialog.java26 symbols
src/main/java/org/qainsights/jmeter/ai/gui/CommandCallback.java25 symbols
src/main/java/org/qainsights/jmeter/ai/correlation/CorrelationCandidate.java25 symbols
src/test/java/org/qainsights/jmeter/ai/gui/CommandDispatcherStreamingTest.java22 symbols
src/test/java/org/qainsights/jmeter/ai/claudecode/JMeterActionBridgeTest.java22 symbols
src/main/java/org/qainsights/jmeter/ai/utils/JMeterElementManager.java21 symbols
src/main/java/org/qainsights/jmeter/ai/claudecode/ClaudeCodePanel.java21 symbols
src/test/java/org/qainsights/jmeter/ai/service/GoogleAiServiceTest.java20 symbols

For agents

$ claude mcp add jmeter-ai \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact