v0.94.0
This release is obsolete. Please use the latest release: v0.101
MCP Steroid v0.94.0 — IntelliJ for AI Agents, not humans. New atomic multi-file steroid_apply_patch tool, periodic DialogKiller, Maven/Gradle prompt resources, and zero internal-API usages.
Release Date: May 5, 2026
Highlights
New Tool: steroid_apply_patch
Atomic multi-file batch edits in a single MCP call. Input: {project_name, hunks: [{file_path, old_string, new_string}, ...]}. All hunks land inside one WriteCommandAction (“MCP Steroid: apply-patch (N hunks)”); per-file descending offset order; pre-flight rejects missing or non-unique old_string matches before touching any document; touched documents are saved before the call returns. Microshop-2 benchmark: 8 hunks across 8 files in ~66 ms, zero Edit fallbacks. Same engine is exposed in scripts as applyPatch { hunk(file, old, new); ... } on McpScriptContext.
New MCP Resources
mcp-steroid://ide/apply-patch— multi-site literal-text edit recipe (DSL form).mcp-steroid://skill/execute-code-gradle— Gradle test execution: prefer IDE path (ProjectTaskManager.build), wait forProjectDataImportListener.onFinalTasksFinished, surface failure cause fromBuildView, toolchain-vendor + disabled-test-task patterns.mcp-steroid://skill/apply-patch-tool-description— tool-description article for the new tool.
Rewritten Resources
mcp-steroid://lsp/rename— semantic rename viaRenameProcessorinstead of regex; correctly handles overrides, qualified references, annotation strings, dry-run.mcp-steroid://skill/execute-code-maven— pinned to the SM data-model approach (pollSMTestProxyinstead of layering listeners), captures Run console viaProgramRunner.Callback, two-call test pattern (compile → run).mcp-steroid://skill/execute-code-tool-description— explicit threading-wrap rules surfaced on read-action errors; in-place edit recipe; apply-patch routing.mcp-steroid://skill/coding-with-intellij*—Observation.awaitConfiguration+smartReadActionfor indexed reads (replaces unreliablewaitForSmartMode).
DialogKiller Replaces ModalityStateMonitor
The 236-line ModalityStateMonitor is gone. DialogKiller runs as a periodic EDT poll, dismisses real DialogWrapper windows, and ignores coroutine progress entities and elevated ModalityState.any() blocks. Side effects: Maven and Gradle test runs no longer get cancelled mid-flight; SDK-lookup banners stop being flagged as modals. New per-call dialog_killer: true|false parameter on steroid_execute_code lets a script opt in/out.
Bug Fixes
steroid_action_discoverywraps lookup in a read action and drops over-eager action-group expansion (which also removed an internal-API call toUtils.expandActionGroupSuspend) — #24.steroid_open_projectcallsTrustedPaths.setProjectPathTrusted(true)before opening, eliminating the trust modal on freshly cloned projects — #28, #30.steroid_execute_feedbacknow aggregates every validation error in one response instead of failing on the first.- Tooltip text retrieval wrapped in a read action.
ExceptionCaptureServicesurvives JUL records with nullLogRecord.parameters; the original IDE error is no longer masked.DialogWindowsLookupno longer flags elevatedModalityState.any()blocks as modal dialogs.
Output Hints from steroid_execute_code
- Script produced no user output → response appends a hint to add
println(...). - Build/Compile result
errors=false, aborted=true→ response appendsREQUIRED ACTION: NEXT TOOL CALL must be mcp__mcp-steroid__steroid_fetch_resourcewith the matching Maven/Gradle resource URI.
VfsRefreshService
New project-level service. CodeEvalManager calls awaitRefresh() (suspending, 30 s cap) before kotlinc compiles a script, and scheduleAsyncRefresh() (fire-and-forget) in the finally after every steroid_execute_code and steroid_apply_patch call. PSI sees up-to-date files between back-to-back script calls without callers writing their own refresh boilerplate.
Plugin Verifier: Zero Internal-API Usages
Building on 0.93.0’s reduction (29 → 4): the action-group expansion path was the last avoidable internal-API call. The 0.94.0 binary reports 0 internal-API usages against both IntelliJ 2025.3 and 2026.1 under Plugin Verifier. Three experimental references remain — all of them public replacements that IntelliJ itself flags as experimental (IdeaPluginDescriptor.contentModules, suspending writeAction).
~10× Faster No-Change TDD Loop
External contributor Dmitry Protsenko (@NordCoderd) traced four orthogonal sources of cache invalidation in the build (#26): LocalDateTime.now() outside deployPlugin invocations (kept generateMetadata out-of-date), the orphaned Random.nextInt() seed in GenerateMetadataTask, missing inputs/outputs on npmBuild, and per-run If-Modified-Since round-trips for tessdata. Atomic OCR + Kotlin compiler downloads guard against corrupted-on-disk files. No-change ./gradlew :ij-plugin:test drops from ~28 s to ~3 s.
SDK-Lookup Modal Hardening
Three independent IntelliJ entry points fire an “Unknown SDK” / “Resolving SDKs…” modal on project open. The plugin now disables all three (-Dunknown.sdk=false, -Dunknown.sdk.auto=false, -Dunknown.sdk.modal.jps=false) and ships mcpListJdks / mcpAddJdk / mcpRegisterJdks driver helpers. Pre-registers bare/corretto-N/temurin-N aliases for every JDK on the agent before the IDE’s SdkLookup task can race in. JDK setup is skipped cleanly on non-Java IDEs (PyCharm, GoLand, WebStorm, Rider).
Other
- Ktor MCP idle timeout raised to 600 s (long Maven/Gradle test runs no longer drop the connection).
- New integration tests pinned to real flows:
YouTrackDbMavenTest(split for 253 + 261),KeycloakMavenTest,RetrofitGradleTest→IntelliJPlatformGradleTest,OpenProjectTrustIntegrationTest,IntelliJThisLoggerLookupTest. - Dropped unused
SkillReferenceclass andSteroidsMcpServerStartupActivity.
Download
Custom Plugin Repository (Recommended)
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
- Download mcp-steroid-0.94.0.zip — Plugin ZIP from the release page
- Release page on GitHub
- Download the
.zipfile from the GitHub release page above - In IntelliJ IDEA, go to Settings -> Plugins -> ⚙️ -> Install Plugin from Disk…
- Select the downloaded ZIP file
- 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
- #23 — VFS refresh: awaited before kotlinc + fire-and-forget after exec (now
VfsRefreshService). - #28 —
steroid_open_projectshould trust project path before opening. - #29 — Delayed
IndexNotReadyExceptionin IntelliJ monorepo MCP symbol lookup.
Contributors
Thank you to the contributors in this release:
- Dmitry Protsenko (@NordCoderd)