v0.95.0

This release is obsolete. Please use the latest release: v0.101

MCP Steroid v0.95.0 — IntelliJ for AI Agents, not humans. New McpEditingGuard kills the memory-vs-disk modal that blocked the IDE, typed PSI recipe for DuplicatedCode clone-pair extraction, three agent-first design tenets codified, faster modality check.

Release Date: May 11, 2026

Highlights

McpEditingGuard — Memory-vs-Disk Modal Hardening

Both steroid_execute_code and steroid_apply_patch now run their bodies through a single guard that owns the before/after flow: modality fail-fast (DialogKiller dismisses leftover modals, otherwise we abort with a clean MCP error instead of parking on the EDT), pre-flight commit + saveAllDocuments + awaitRefresh (every open document’s mod-stamp matches disk before the body runs, so the platform’s MemoryDiskConflictResolver short-circuits naturally), prefer-disk reload override scoped to the body’s lifetime (belt-and-braces against the rare race where the user edits a file while the agent writes it), and post-flight awaitRefresh (picks up disk changes from external commands the body invoked). The modal “memory differs from disk” dialog no longer blocks the IDE — #27.

New MCP Resource: mcp-steroid://ide/find-duplicates

Typed PSI-based recipe for extracting clone pairs from IntelliJ’s DuplicatedCode global inspection (LocalInspectionToolWrapper(DuplicateInspection())InspectionEngine.runInspectionOnFile). Direct import com.jetbrains.clones.DuplicateProblemDescriptor + dpd.textClone access — the duplicates-detector module is already on the script classpath in IDEA Ultimate, so no private-field reflection or setAccessible(true) is needed. Previously agents probed JavaPsiFacade (which only sees user-project classes, not plugin classes), concluded the class was unavailable, and reached for reflection — #33.

The supporting reflection policy is now stated in mcp-steroid://skill/mcp-steroid-info (the startup-instructions text every agent reads) and the top-level coding-with-intellij skill guide: typed imports first, probes for classpath-presence are allowed, private-field reflection in shipped recipes is not.

Three Agent-First Design Tenets Codified

New canonical statement at docs/PHILOSOPHY.md, mirrored at runtime as mcp-steroid://skill/design-philosophy (fetch via steroid_fetch_resource). Three tenets that until now were implicit:

  1. The MCP tool surface stays narrow. 10 tools today; new tools require a three-gate test (rule out the IntelliJ API, rule out a richer recipe, three-agent quorum).
  2. Power lives in prompts and direct IntelliJ APIs inside steroid_execute_code, not in new tools.
  3. McpScriptContext methods are last-resort. The whole IntelliJ API surface is reachable from scripts; helpers there compete for attention with everything else.

Per-folder agent guides (ij-plugin, prompts, test-integration, test-experiments, docs, website) and the README now cite the tenets in their own scope. The README’s tool table was genuinely stale (claimed 9 tools, listed an obsolete Capabilities Discovery row) — it now lists all 10 tools with their steroid_* API names.

DialogWindowsLookup — Synchronous Modality Check

The old timeout-driven probe dispatched to the EDT with a 100 ms ceiling: false positives under IDE load (a busy EDT looked exactly like a parked one, so steroid_list_windows and the dialog-killer path flagged a modal whenever the IDE was just slow), and a permanent +100 ms tax on every call when the EDT was actually parked. Replaced by isModalDialogShown() — one EDT dispatch with ModalityState.any() reading ModalityState.current(). Non-equal to ModalityState.nonModal() means elevated modality, the only condition we need before enumerating dialog windows. Progress modals (Task.Modal, write-action queues) — which elevate modality but are not user-consent prompts — still get filtered out by the existing isModal predicate downstream.

Tool-Handler Architecture: Spec + Handler + IJ Service

Internal refactor. Each MCP tool now has a Spec class that owns the MCP schema and JSON-arg parsing, an interface for the handler entry point, and an @Service IDE-level implementation. Typed @Serializable param classes replace the raw JsonObject plumbing through ExecutionStorage and the handlers. Per-handler local errorResult helpers are gone — shared ToolCallResult.errorResult / successTextResult extensions instead. Tool handlers also use lazy initialization via lambda + a PromptsContextHandler interface for prompts-context injection. Improves testability and per-tool isolation.

steroid_execute_code: Drop required_plugins Parameter

The feature was never useful in practice — scripts that reference plugin classes either work (the plugin is loaded) or fail at compile time with a clear error. The parameter is removed from the tool schema; existing scripts that didn’t use it are unaffected.

Other

Plugin Verifier: Still Zero Internal-API Usages

Compatible against both IntelliJ 2025.3 (IU-253.28294.334) and 2026.1 (IU-261.22158.277), 0 internal-API usages (hard gate). Experimental API usages: 4 (up from 3 in 0.94.0). The new entry is the suspending overload RefreshQueue.refresh(boolean, List, Continuation) invoked from VfsRefreshService.awaitRefresh — a public replacement for the old callback API. All four entries are public IntelliJ APIs that IntelliJ itself flags as experimental.

Download

Add this URL in Settings -> Plugins -> ⚙️ -> Manage Plugin Repositories…:

https://mcp-steroid.jonnyzzz.com/updatePlugins.xml

The IDE will find the plugin and notify you when updates are available.

JetBrains Marketplace

Search for MCP Steroid in Settings -> Plugins -> Marketplace.

Manual Download

  1. Download the .zip file from the GitHub release page above
  2. In IntelliJ IDEA, go to Settings -> Plugins -> ⚙️ -> Install Plugin from Disk…
  3. Select the downloaded ZIP file
  4. Restart the IDE

End User License Agreement (EULA) - By downloading and using this plugin, you agree to the terms of the EULA.

Connecting to Cloud Agents

See Getting Started.

Supported AI Agents

Claude Code, Codex, Gemini, Cursor, and any other coding agent that supports the latest MCP via HTTP Streaming.

Reporting issues

Use “Collect Logs and Diagnostics Data” action in IntelliJ to collect information about the problem. Review the log file for specific problem.

Discord Community

Message Eugene on LinkedIn for a Discord invite: linkedin.com/in/jonnyzzz

Direct invite link: discord.gg/e9qgQ7NeTC

That is the best place to discuss the plugin, ideas, features.

Feedback

We’re actively learning what content and features work best for the plugin. Your feedback is invaluable!

If you encounter any issues or have suggestions, please let us know in GitHub Issues! Your feedback directly shapes the development of MCP Steroid.

Fixed Issues

Proof-of-Concept & Support

MCP Steroid is built by Eugene Petrenko, with 21 years of JetBrains ecosystem experience.

We run Proof-of-Concept engagements for company-specific use cases — custom skills, internal tooling integrations, AI Agent workflows tailored to your codebase. Learn more about consulting and Proof-of-Concept options.

Beyond GitHub Sponsors, MCP Steroid also accepts in-kind support: compute tokens for evaluation runs, hardware for the multi-IDE test matrix, and licenses for benchmarking and observability tools. If you or your organisation would like to back the project or the research behind it on those terms, reach out — contact details are linked below.