---
title: "v0.94.0"
description: "New steroid_apply_patch tool, DialogKiller, Maven/Gradle resources, ~10× faster TDD, zero internal-API usages"
aliases:
  - /release-0.94.0/
---

<div class="success">
<p><strong>MCP Steroid v0.94.0 — IntelliJ for AI Agents, not humans.</strong> New atomic multi-file <code>steroid_apply_patch</code> tool, periodic DialogKiller, Maven/Gradle prompt resources, and zero internal-API usages.</p>
</div>

**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 for `ProjectDataImportListener.onFinalTasksFinished`, surface failure cause from `BuildView`, 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 via `RenameProcessor` instead of regex; correctly handles overrides, qualified references, annotation strings, dry-run.
- `mcp-steroid://skill/execute-code-maven` — pinned to the SM data-model approach (poll `SMTestProxy` instead of layering listeners), captures Run console via `ProgramRunner.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` + `smartReadAction` for indexed reads (replaces unreliable `waitForSmartMode`).

### `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_discovery` wraps lookup in a read action and drops over-eager action-group expansion (which also removed an internal-API call to `Utils.expandActionGroupSuspend`) — [#24](https://github.com/jonnyzzz/mcp-steroid/pull/24).
- `steroid_open_project` calls `TrustedPaths.setProjectPathTrusted(true)` *before* opening, eliminating the trust modal on freshly cloned projects — [#28](https://github.com/jonnyzzz/mcp-steroid/issues/28), [#30](https://github.com/jonnyzzz/mcp-steroid/pull/30).
- `steroid_execute_feedback` now aggregates every validation error in one response instead of failing on the first.
- Tooltip text retrieval wrapped in a read action.
- `ExceptionCaptureService` survives JUL records with null `LogRecord.parameters`; the original IDE error is no longer masked.
- `DialogWindowsLookup` no longer flags elevated `ModalityState.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 appends `REQUIRED ACTION: NEXT TOOL CALL must be mcp__mcp-steroid__steroid_fetch_resource` with 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](https://github.com/NordCoderd)) traced four orthogonal sources of cache invalidation in the build ([#26](https://github.com/jonnyzzz/mcp-steroid/pull/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 `SkillReference` class and `SteroidsMcpServerStartupActivity`.

## Download

### Custom Plugin Repository (Recommended)

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

<pre style="background: rgba(40, 167, 69, 0.1); padding: 0.5rem 1rem; border-radius: 4px; user-select: all;">https://mcp-steroid.jonnyzzz.com/updatePlugins.xml</pre>

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](https://github.com/jonnyzzz/mcp-steroid/releases/tag/v0.94.0)** — Plugin ZIP from the release page
- [Release page on GitHub](https://github.com/jonnyzzz/mcp-steroid/releases/tag/v0.94.0)

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)](https://github.com/jonnyzzz/mcp-steroid/releases/download/v0.94.0/EULA)** - By downloading and using this plugin, you agree to the terms of the EULA.

## Connecting to Cloud Agents

See [Getting Started](https://mcp-steroid.jonnyzzz.com/docs/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](https://linkedin.com/in/jonnyzzz)

Direct invite link: [discord.gg/e9qgQ7NeTC](https://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](https://github.com/jonnyzzz/mcp-steroid/issues)! Your feedback directly shapes the development of MCP Steroid.

<section class="feedback-section">
<div class="cta-card">
<h2 class="section-title">Share Feedback with Eugene</h2>
<p>Tell Eugene what works and what should improve in early access releases.</p>
<p>Connect on <a href="https://linkedin.com/in/jonnyzzz" target="_blank" rel="noopener">LinkedIn</a> or <a href="https://x.com/jonnyzzz" target="_blank" rel="noopener">X</a>.</p>
</div>
</section>

## Fixed Issues

- [#23](https://github.com/jonnyzzz/mcp-steroid/issues/23) — VFS refresh: awaited before kotlinc + fire-and-forget after exec (now `VfsRefreshService`).
- [#28](https://github.com/jonnyzzz/mcp-steroid/issues/28) — `steroid_open_project` should trust project path before opening.
- [#29](https://github.com/jonnyzzz/mcp-steroid/issues/29) — Delayed `IndexNotReadyException` in IntelliJ monorepo MCP symbol lookup.

## Contributors

Thank you to the contributors in this release:

- **Dmitry Protsenko** ([@NordCoderd](https://github.com/NordCoderd))

## Support the Project

This project needs funding to continue development, testing, and support.

[![GitHub Sponsors](https://img.shields.io/badge/GitHub-Sponsors-EA4AAA?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/jonnyzzz)

- Sponsor MCP Steroid: [github.com/sponsors/jonnyzzz](https://github.com/sponsors/jonnyzzz)
- Contact Eugene on LinkedIn: [linkedin.com/in/jonnyzzz](https://linkedin.com/in/jonnyzzz)

---

*Thank you for using MCP Steroid!*
