The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Jetbrains Index MCP Plugin listing page.
A JetBrains IDE plugin that exposes an MCP (Model Context Protocol) server, enabling AI coding assistants like Claude, Codex, Cursor, and Windsurf to leverage the IDE's powerful indexing and refactoring capabilities.
Fully tested: IntelliJ IDEA, PyCharm, WebStorm, GoLand, RustRover, Android Studio, PhpStorm May work (untested): RubyMine, CLion, DataGrip
IDE Index MCP Server provides AI coding assistants with access to the IDE's powerful code intelligence features through the Model Context Protocol (MCP).
Multi-Language Support Advanced tools work across multiple languages based on available plugins:
Universal Tools (All Supported JetBrains IDEs)
Extended Tools (Language-Aware) These tools activate based on installed language plugins:
Refactoring Tools
Project Lifecycle Management
When working across many projects simultaneously, idle ones consume memory unnecessarily and leave editors open for no reason. Lifecycle management sleeps and wakes projects based on window focus and MCP activity. It is opt-in — disabled by default; turn on "Enable lifecycle management" in Settings → Tools → Index MCP Server, after which no further configuration is required.
ide_project_status - Combined snapshot of every open and managed projectide_set_project_mode / ide_get_project_modes - Explicit mode controlide_release_project - Unenroll a project from lifecycle managementide_lifecycle_log - Timestamped event log with trigger reasons, for diagnosing unexpected behaviour. The ring buffer is always active; file output enables via Help → Diagnostic Tools → Debug Log SettingsUnlike simple text-based code analysis, this plugin gives AI assistants access to:
Perfect for AI-assisted development workflows where accuracy and safety matter.
The server binds to 127.0.0.1 with no authentication — any local process can call its
tools with your IDE's file access. On a single-user dev machine that's the same trust
boundary your shell already has; on a shared machine, it's worth weighing before you
enable the write tools.
Settings/Preferences > Plugins > Marketplace > Search for "IDE Index MCP Server" > Install
Go to JetBrains Marketplace and install it by clicking the Install to ... button.
Download the latest release and install it manually: Settings/Preferences > Plugins > ⚙️ > Install plugin from disk...
intellij-index on port 29170pycharm-index on port 29172webstorm-index on port 29173The easiest way to configure your AI assistant:
Disclaimer: This repository is not maintained by me. Please use its own issue tracker for integration-specific issues and support.
Use the "Install on Coding Agents" button in the tool window, or run this command (adjust name and port for your IDE):
Options:
--scope user - Adds globally for all projects--scope project - Adds to current project onlyTo remove: claude mcp remove <server-name> (e.g., claude mcp remove intellij-index)
Use the "Install on Coding Agents" button in the tool window, or run this command (adjust name and port for your IDE):
To remove: codex mcp remove <server-name> (e.g., codex mcp remove intellij-index)
Add to .cursor/mcp.json in your project root or ~/.cursor/mcp.json globally (adjust name and port for your IDE):
Add to ~/.codeium/windsurf/mcp_config.json (adjust name and port for your IDE):
Note: Replace the server name and port with your IDE's defaults. See IDE-Specific Defaults below.
Each JetBrains IDE has a unique default port and server name to allow running multiple IDEs simultaneously without conflicts:
| IDE | Server Name | Default Port |
|---|---|---|
| IntelliJ IDEA | intellij-index | 29170 |
| Android Studio | android-studio-index | 29171 |
| PyCharm | pycharm-index | 29172 |
| WebStorm | webstorm-index | 29173 |
| GoLand | goland-index | 29174 |
| PhpStorm | phpstorm-index | 29175 |
| RubyMine | rubymine-index | 29176 |
| CLion | clion-index | 29177 |
| RustRover | rustrover-index | 29178 |
| DataGrip | datagrip-index | 29179 |
| Aqua | aqua-index | 29180 |
| DataSpell | dataspell-index | 29181 |
| Rider | rider-index | 29182 |
Tip: Use the "Install on Coding Agents" button in the tool window - it automatically uses the correct server name and port for your IDE.
The plugin provides 52 MCP tools organized by availability. Tools marked (disabled by default) can be enabled in Settings > Tools > Index MCP Server > Exposed Tools.
These tools work in all supported JetBrains IDEs.
| Tool | Description |
|---|---|
ide_find_references | Find all references to a symbol across the entire project, optionally restricted to path globs via paths |
ide_find_definition | Find the definition/declaration location of a symbol |
ide_symbol_info | Resolved signature and documentation for the symbol at a position — parameter and return types expanded to fully qualified names (Java), structured parameters, modifiers, containing declaration, and the doc comment as plain text, without reading the file (disabled by default) |
ide_find_class | Search for classes/interfaces by name with camelCase/substring/wildcard matching |
ide_find_file | Search for files by name using IDE's file index |
ide_find_symbol | Search for symbols (classes, methods, fields, functions) by name with IntelliJ Go to Symbol matching (disabled by default) |
ide_search_text | Text search using IntelliJ Find in Files with context filtering (substring and regex matching), optionally restricted to path globs via paths |
ide_diagnostics | Analyze file problems with fresh editor diagnostics for open files or public batch diagnostics for closed files, plus optional build/test results; intentions are best-effort |
ide_project_diagnostics | Batch/project-scope diagnostics for many files including unopened ones, with fail-closed coverage metadata: a complete flag plus per-file analyzed/timed_out/failed/skipped/not_analyzed states, so an empty result can never be mistaken for a clean project. Long analyses return an analysisId to poll (disabled by default) |
ide_index_status | Check if the IDE is in dumb mode or smart mode |
ide_sync_files | Force sync IDE's virtual file system and PSI cache with external file changes |
ide_reload_project | Force-reload Maven or Gradle build model after modifying pom.xml/build.gradle (disabled by default) |
ide_link_build_system | Link an unlinked Maven/Gradle project for dependency resolution (disabled by default) |
ide_import_modules | Import external Maven project directories as modules into the current IntelliJ window (disabled by default, requires Maven plugin) |
ide_open_workspace | Scan a root directory for Maven projects, or provide an explicit module list, and open them all in one IntelliJ window with full cross-project code intelligence (disabled by default, requires Maven plugin) |
ide_build_project | Build project using IDE's build system (JPS, Gradle, Maven, CMake (CLion)) with structured errors. Long builds return a buildId to poll, so the MCP client's request timeout is never hit (disabled by default) |
ide_run_tests | Run tests via the IDE's run configuration infrastructure; structured pass/fail results with per-test console output, read from the IDE's test runner (works with any framework — JUnit, TestNG, pytest, Jest, Go test, PHPUnit). Class/method FQN targeting is Java/Kotlin-only; other languages pass an existing run-config name. Long runs return a runId to poll, so the MCP client's request timeout is never hit (disabled by default) |
ide_read_file | Read file content by path or qualified name, including library/jar sources (disabled by default) |
ide_get_active_file | Get the currently active file(s) in the editor with cursor position (disabled by default) |
ide_open_file | Open a file in the editor with optional line/column navigation (disabled by default) |
ide_set_power_save_mode | Enable or disable IDE Power Save Mode — suspends background inspections while keeping the index and all code intelligence operational (disabled by default) |
ide_close_project | Close an open project window and free its memory — refuses to close the last open project (disabled by default) |
ide_create_module | Add a directory as an IntelliJ module with a content root, enabling code intelligence for non-Maven projects (TypeScript, plain directories, etc.) (disabled by default) |
ide_open_project | Open a project by absolute path and wait until indexing completes (configurable timeout); returns immediately if already open (disabled by default) |
ide_install_plugin | Install a plugin zip into the IDE, replacing any existing version — auto-detects build/distributions/*.zip when no path is given (disabled by default) |
ide_restart | Restart the IDE — terminates the MCP connection; call after ide_install_plugin (disabled by default) |
ide_refactor_rename | Rename a symbol or file and update all references across the project (all languages; use targetType for explicit file mode) |
ide_move_file | Move a file to a new directory, applying language-aware reference/package updates when the IDE provides a semantic move backend |
ide_reformat_code | Reformat code using project code style with import optimization (disabled by default) |
ide_optimize_imports | Optimize imports without reformatting code (disabled by default) |
ide_structural_search_replace | Pattern-based code search and transformation using IntelliJ's Structural Search and Replace engine, optionally restricted to path globs via paths (Java, Kotlin) (disabled by default) |
ide_create_file | Create a new source file with content, immediately indexed by IntelliJ — use instead of Write for .java, .kt, .ts, .tsx, .py files (disabled by default) |
ide_replace_text_in_file | Find and replace text in a file using IntelliJ's Document API — changes immediately visible to index and PSI without ide_sync_files (disabled by default) |
ide_change_signature | Change method signature with automatic caller updates (Java only) (disabled by default) |
ide_edit_member | Replace an entire member declaration (signature + body) with new content (Java, Kotlin) (disabled by default) |
ide_insert_member | Insert a new member at a structural position in a class or file (Java, Kotlin) (disabled by default) |
ide_replace_member | Replace a method body or field initializer only, preserving the signature (Java, Kotlin) (disabled by default) |
These tools activate based on available language plugins:
| Tool | Description | Languages |
|---|---|---|
ide_type_hierarchy | Get the complete type hierarchy (supertypes and subtypes) | Java, Kotlin, Python, JS/TS, Go, PHP, Rust |
ide_call_hierarchy | Analyze method call relationships (callers or callees) | Java, Kotlin, Python, JS/TS, Go, PHP, Rust |
ide_find_implementations | Find all implementations of an interface or abstract method | Java, Kotlin, Python, JS/TS, PHP, Rust |
ide_find_super_methods | Find the full inheritance hierarchy of methods that a method overrides/implements | Java, Kotlin, Python, JS/TS, PHP |
ide_file_structure | Get hierarchical file structure (similar to IDE's Structure view) with start and end line numbers for each element (disabled by default) | Java, Kotlin, Python, JS/TS, PHP, Markdown |
PHP file structure support requires the PHP plugin and is available in PhpStorm or IntelliJ IDEA Ultimate with the PHP plugin enabled.
| Tool | Description |
|---|---|
ide_list_tests | List all test methods/classes discovered by the IDE's test framework extension points (JUnit, TestNG, etc.) (disabled by default, requires Java plugin) |
ide_convert_java_to_kotlin | Convert Java files to Kotlin using IntelliJ's built-in converter (disabled by default, requires Java + Kotlin plugins) |
ide_refactor_safe_delete | Safely delete an element, checking for usages first (Java/Kotlin only) |
Note: Refactoring tools modify source files. All changes support undo via Ctrl/Cmd+Z.
ide_project_status is enabled by default. All other lifecycle tools are disabled by default — enable them in Settings → Tools → Index MCP Server.
| Tool | Description | Default |
|---|---|---|
ide_project_status | Combined snapshot: every open project and every managed project with open/managed/mode per row | Enabled |
ide_set_project_mode | Set a project's lifecycle mode: active, background, dormant, or closed | Disabled |
ide_get_project_modes | List all managed projects and their current modes, including closed ones | Disabled |
ide_set_all_project_modes | Set all managed projects to the same mode at once (active/background/dormant) | Disabled |
ide_enroll_all_projects | Enroll every currently open project in lifecycle management | Disabled |
ide_release_project | Unenroll a project from lifecycle management | Disabled |
ide_release_all_projects | Release every managed project (including closed ones) from lifecycle management | Disabled |
ide_lifecycle_log | Query recent lifecycle events from a ring buffer; each event has a trigger field explaining the cause | Disabled |
ide_set_lifecycle_log_file | Enable or disable writing lifecycle events to mcp-lifecycle.log | Disabled |
Lifecycle modes — transitions are automatic, driven by window focus and MCP activity:
| Mode | Power Save | Editors | PSI Cache | Auto-transition |
|---|---|---|---|---|
active | off | open | loaded | focus lost for N min → background |
background | on | open | loaded | N min idle → dormant |
dormant | on | closed (reopen on next focus) | freed | N min idle → closed |
closed | — | — | freed | next MCP call → background (auto-reopens) |
"Idle" means no MCP tool call: every call on a managed project restarts its background → dormant countdown, and the countdown only runs while the project window is unfocused (an active project has no countdown). A dormant transition closes the editor tabs but remembers them — across IDE restarts too — and reopens them the moment the window regains focus (or the project is released); an MCP wake leaves them closed, since the agent does not need them.
Timing thresholds are configurable in Settings. Lifecycle management is opt-in (disabled by default); once "Enable lifecycle management" is turned on in Settings → Tools → Index MCP Server, projects enroll automatically on first MCP use and auto-reopen when an MCP tool targets a closed project — existing tools require no changes.
MCP availability guarantee: the lifecycle manager never closes below the configurable minimum of open managed projects (default 4) — projects at the floor stay in dormant (memory mostly freed, MCP still reachable) instead of closing. If all projects are somehow closed (e.g., the user manually closes the last window), any MCP tool call without a project_path automatically reopens a managed-closed project to restore access.
Fully Tested:
| IDE | Universal | Navigation | Refactoring |
|---|---|---|---|
| IntelliJ IDEA | ✓ all universal tools | ✓ 6 tools | ✓ rename + move + reformat + optimize imports + safe delete + Java→Kotlin |
| Android Studio | ✓ all universal tools | ✓ 6 tools | ✓ rename + move + reformat + optimize imports + safe delete + Java→Kotlin |
| PyCharm | ✓ all universal tools | ✓ 6 tools | ✓ rename + move + reformat + optimize imports |
| WebStorm | ✓ all universal tools | ✓ 6 tools | ✓ rename + move + reformat + optimize imports |
| GoLand | ✓ all universal tools | ✓ 4 tools | ✓ rename + move + reformat + optimize imports |
| RustRover | ✓ all universal tools | ✓ 5 tools | ✓ rename + move + reformat + optimize imports |
| PhpStorm | ✓ all universal tools | ✓ 6 tools | ✓ rename + move + reformat + optimize imports |
May Work (Untested):
| IDE | Universal | Navigation | Refactoring |
|---|---|---|---|
| RubyMine | ✓ all universal tools | ✓ 2 Markdown tools | ✓ rename + move + reformat + optimize imports |
| CLion | ✓ all universal tools | ✓ 2 Markdown tools | ✓ rename + move + reformat + optimize imports |
| DataGrip | ✓ all universal tools | ✓ 2 Markdown tools | ✓ rename + move + reformat + optimize imports |
Note: Navigation tools activate when language plugins are present. Markdown adds heading search and file-structure support when the bundled Markdown plugin is enabled. Go and Rust do not expose
ide_find_super_methodsdue to language semantics, and Go does not exposeide_find_implementations. Rename, move, reformat, and optimize-imports tools work across all languages.ide_convert_java_to_kotlinis available only in IntelliJ IDEA and Android Studio, requires both Java and Kotlin plugins, and is disabled by default.
For detailed tool documentation with parameters and examples, see USAGE.md.
For Claude Code users: hooks that enforce IDE tool usage over bash/grep/sed fallbacks.
For agent-heavy workflows: recommended IDE settings that prevent modal dialogs from blocking headless MCP sessions.
When multiple projects are open in a single IDE window, you must specify which project to use with the project_path parameter:
If project_path is omitted:
The plugin supports workspace projects where a single IDE window contains multiple sub-projects as modules with separate content roots. The project_path parameter accepts:
When an error occurs, the response returns available_projects. By default this includes workspace sub-projects so AI agents can discover valid module content roots. If you want smaller error payloads, switch Project list in error responses to Compact in plugin settings to return only top-level project roots.
When you use the plugin across multiple projects simultaneously — common when an AI agent is working across a monorepo — open projects compete for memory even when they're not being actively used. Lifecycle management handles this, but it is opt-in: enable "Enable lifecycle management" in Settings → Tools → Index MCP Server (disabled by default).
Once enabled, projects enroll on their first MCP tool call and are notified via balloon. From that point, transitions happen based on focus and MCP activity:
background)dormant). Every MCP call restarts this countdown. The closed tabs come back when the window regains focusclosed)No changes are needed in existing MCP tools — ProjectResolver handles the reopen transparently. The auto-reopen typically takes 5–15 seconds on first open; subsequent opens are faster.
The lifecycle manager never closes below the configurable minimum of open managed projects (default 4): projects at the floor stay dormant (memory mostly freed, MCP still reachable) instead of closing. If all projects are closed by other means, any tool call automatically reopens one managed project to restore MCP access.
Use ide_project_status to see the current state of all projects at a glance, and ide_lifecycle_log to see what happened and why — useful when a project closed unexpectedly. Each log event has a trigger field: timer:inactivity, timer:close, focus_gained, mcp_call, auto_open, user, etc., and a detail where it helps — e.g. how long a project had no MCP call when the inactivity timer fired, or how many editor tabs a dormant transition closed.
Timing thresholds are configurable in Settings → Tools → Index MCP Server → Project Lifecycle Management.
The plugin adds an "Index MCP Server" tool window (bottom panel) that shows:
| Action | Description |
|---|---|
| Refresh | Refresh server status and command history |
| Copy URL | Copy the MCP server URL to clipboard |
| Clear History | Clear the command history |
| Export History | Export history to JSON or CSV file |
| Install on Coding Agents | Install MCP server on AI assistants (prominent button on right) |
| Code | Name | Description |
|---|---|---|
| -32700 | Parse Error | Failed to parse JSON-RPC request |
| -32600 | Invalid Request | Invalid JSON-RPC request format |
| -32601 | Method Not Found | Unknown method name |
| -32602 | Invalid Params | Invalid or missing parameters |
| -32603 | Internal Error | Unexpected internal error |
Since v5.0.0, tool-level failures (index not ready, file not found, symbol not found, refactoring conflicts) are returned as MCP tool results with isError: true and a descriptive message — not as custom JSON-RPC error codes. JSON-RPC error codes are reserved for transport-level protocol violations handled by the MCP SDK.
Configure the plugin at Settings > Tools > Index MCP Server:
| Setting | Default | Description |
|---|---|---|
| Server Port | IDE-specific | MCP server port (range: 1024-65535, auto-restart on change). See IDE-Specific Defaults |
| Server Host | 127.0.0.1 | Listening host. Change to 0.0.0.0 for remote/WSL access |
| Max History Size | 100 | Maximum number of commands to keep in history |
| Project List in Error Responses | Expanded | Controls available_projects detail for invalid/missing project_path errors. Expanded includes workspace sub-projects; Compact returns only top-level project roots |
| Sync External Changes | false | Sync external file changes before operations (WARNING: significant performance impact) |
| Response Format | JSON | Tool response serialization: JSON or TOON |
| Disabled Tools | Tool-specific | Per-tool enable/disable toggles on the Exposed Tools sub-page. Disabled tools stay hidden and cannot be called until enabled |
| Lifecycle Management | ||
| Enable lifecycle management | false | Master toggle for the automatic sleep/wake state machine — no automatic sleep/wake happens until this is enabled |
| Active → Background (minutes) | 2 | Focus-loss grace period before switching to Power Save Mode |
| Background → Dormant (minutes) | 2 | MCP-idle time before closing editors and freeing PSI caches |
| Dormant → Closed (minutes) | 10 | Idle time before fully closing the project window |
| Minimum open projects | 4 | Floor of managed projects kept open (1-20); projects at the floor stay dormant instead of closing |
| Event log buffer size | 500 | How many events ide_lifecycle_log retains in memory (100–10,000) |
Fully Tested:
May Work (Untested):
The plugin uses standard IntelliJ Platform APIs and should work on any IntelliJ-based IDE, but has only been tested on the IDEs listed above.
The plugin runs a custom embedded Ktor CIO HTTP server with dual MCP transports:
The plugin uses stateless Streamable HTTP for the primary MCP transport. It does not
issue Mcp-Session-Id headers, does not require session resumption, and does not
implement or advertise authentication capabilities.
This dual approach:
2025-03-262024-11-05Contributions are welcome! Please:
./gradlew testSee CONTRIBUTING.md for the test tiers and assertion rules.
This project is licensed under the MIT License - see the LICENSE file for details.
Plugin based on the IntelliJ Platform Plugin Template.