MCP Steroid switches from HTTP to stdio, solving multi-IDE routing chaos
u/jonnyzzz built MCP Steroid, an IntelliJ plugin exposing the full IDE runtime to AI agents over MCP, and switched from HTTP to stdio transport after HTTP's dynamic ports, multi-IDE conflicts, and restart fragility proved unworkable in daily agentic coding use.
Score breakdown
The post documents a concrete failure mode — HTTP transport becoming unworkable for local multi-IDE agentic setups — and shows how a stdio coordinator pattern resolves port conflicts, restart fragility, and routing ambiguity that HTTP cannot cleanly solve in a desktop environment.
- 01MCP Steroid is an IntelliJ plugin that exposes the full IDE runtime — PSI, refactoring engine, run configs — to AI agents over MCP.
- 02The original HTTP transport suffered from dynamic ports, multi-IDE conflicts (IDEA, PyCharm, GoLand), launch-order dependence, and agent crashes when the IDE restarted.
- 03The pivot replaced HTTP with a stdio-based CLI coordinator called `devrig` that the agent launches directly.
u/jonnyzzz describes building MCP Steroid, an IntelliJ plugin designed to expose the full IDE runtime — PSI, refactoring engine, run configurations — to AI agents over MCP, rather than offering a curated subset of tools. The initial implementation used HTTP: the IDE hosted an MCP server, bound a port, and the agent connected to it. Shipped and used daily, it accumulated a catalog of failures that individually seemed manageable but stacked into persistent fragility. Dynamic port allocation meant multiple IDE instances (IDEA, PyCharm, GoLand running simultaneously) each claimed a different port, with the agent typically connecting to the wrong one. Launch order determined which IDE got which port, making agent-side reasoning about routing impossible. When the IDE restarted for an update, HTTP clients were left dialing a closed socket with no recovery path. Registering multiple servers under the same name ("mcp-steroid") gave the LLM no way to distinguish between them.
The agent's entire MCP configuration collapses to a single stdio command — no ports, no DNS, no firewall rules.
The pivot moved all routing responsibility out of the IDE and into a small CLI coordinator called `devrig`, which the agent launches directly over stdio. The agent's entire MCP configuration collapses to a single stdio command — no ports, no DNS, no firewall rules. `devrig` handles discovery, routing, and restart resilience; if the IDE goes down, the coordinator reconnects or starts a new one rather than leaving the agent blocked. It can also provision an IDE on demand (`devrig backend download idea-community && devrig backend start`) without human involvement. u/jonnyzzz notes that stdio also simplified the IDE-side implementation by removing the need to add HTTP dependencies to the plugin itself, and that the durable state living in the IDE process (files, indexes) means MCP sessions don't need to be pinned — any command can route to any available backend.
Key facts
- 01MCP Steroid is an IntelliJ plugin that exposes the full IDE runtime — PSI, refactoring engine, run configs — to AI agents over MCP.
- 02The original HTTP transport suffered from dynamic ports, multi-IDE conflicts (IDEA, PyCharm, GoLand), launch-order dependence, and agent crashes when the IDE restarted.
- 03The pivot replaced HTTP with a stdio-based CLI coordinator called `devrig` that the agent launches directly.
- 04The stdio design eliminates ports, DNS, and firewall concerns, and collapses the agent's MCP config to a single command.
- 05`devrig` supports on-demand IDE provisioning via commands like `devrig backend download idea-community && devrig backend start`.
- 06Sessionless routing is possible because durable state (files, indexes) lives in the IDE process, not in the MCP session.
- 07Switching to stdio also removed the need to add HTTP dependencies to the IDE plugin itself.
Topics
Summary and scoring are generated automatically from the original article. We always link back to the publisher and never republish images or paywalled content. Last processed Jun 11, 2026 · 08:34 UTC. How this works →