Claude Code untuk JetBrains: Plugin dan MCP Server-nya

Tidak. Plugin menjalankan perintah claude di terminal bawaan IDE Anda lalu menyambung ke sana, jadi kedua bagiannya dipasang terpisah. Kalau CLI-nya tidak ada di PATH, plugin menampilkan notifikasi Cannot launch Claude Code — setel path lengkapnya di setting Claude command milik plugin.
Sebuah MCP server lokal yang dijalankan plugin JetBrains selama aktif. Lewat itulah CLI membuka diff di penampil bawaan, membaca seleksi Anda untuk at-mention, dan membiarkan Claude membaca diagnostik inspeksi. Ia disembunyikan dari /mcp karena tidak ada yang perlu dikonfigurasi, tetapi Anda perlu tahu keberadaannya kalau organisasi Anda mengizinkan tool MCP lewat PreToolUse hook.
Tepat satu hal: memanggil mcp__ide__getDiagnostics, tool read-only yang mengembalikan error dan peringatan inspeksi IDE. Server-nya menampung tool lain, tetapi itu panggilan internal yang dipakai CLI untuk antarmukanya sendiri dan disaring keluar sebelum daftar tool-nya sampai ke Claude. Plugin ini tidak mengekspos tool eksekusi kode ke model.
Ya. Berjalan di mode acceptEdits di dalam IDE JetBrains bisa membuat Claude Code mampu mengubah file konfigurasi IDE yang dieksekusi IDE secara otomatis, dan itu bisa melangkahi permission prompt untuk eksekusi bash. Pertimbangkan Manual mode untuk pengeditan, karena baik acceptEdits maupun auto mode menyetujui edit di dalam working directory tanpa bertanya.
Tambahkan Read deny rule untuk path-nya. Selama tersambung, CLI menyertakan seleksi editor Anda saat itu dan path file aktif sebagai konteks pada setiap prompt, dan deny rule yang cocok memblokir baik teks terseleksi maupun pemberitahuan file terbuka untuk file tersebut.

Ringkasan Utama
Plugin Claude Code untuk JetBrains tidak membundel CLI-nya — ia menjalankan perintah claude di terminal bawaan IDE lalu menyambung ke sana. Selama tersambung ia menjalankan MCP server lokal bernama ide, yang membuka diff di penampil bawaan dan membaca seleksi Anda, serta mengekspos tepat satu tool ke model: pembaca diagnostik yang bersifat read-only.
Saya mengira plugin ini adalah Claude Code, sebagaimana ekstensi VS Code biasanya. Bukan: ia sebuah jembatan. Ia meluncurkan CLI yang sudah Anda punya di terminal IDE, lalu berbicara dengannya lewat socket lokal — dan itulah sebabnya hal pertama yang dikatakannya ketika CLI-nya tidak ada adalah bahwa ia tidak bisa meluncurkan Claude Code, dan kenapa memasang plugin saja tidak membawa Anda ke mana-mana.
Memahami arsitektur itu menjelaskan sebagian besar perilaku plugin-nya, termasuk bagian yang akan ditanyakan sebuah tinjauan keamanan. Tulisan ini membahas cara menyambung dari dalam dan luar IDE, apa yang sebenarnya diberikan integrasinya, MCP server lokalnya dan persis apa yang diekspos ke model, konteks seleksi yang ikut terkirim pada tiap prompt, dan satu catatan keamanan yang berlaku khusus untuk JetBrains dan bukan untuk sesi terminal.
Pasang CLI-nya dulu dan plugin-nya kemudian, karena plugin itu menjalankan perintahnya alih-alih mengirimkannya. Kalau perintahnya berada di tempat yang tidak bisa ditemukan IDE Anda, plugin punya setting untuk path lengkapnya, dan setting yang sama itulah yang dipakai pengguna WSL untuk mengarahkannya ke distribusi mereka.
# The plugin does NOT bundle the CLI. It runs the claude
# command in the IDE's integrated terminal and connects to it,
# so both pieces have to be installed.
# From the IDE's own terminal — all features active:
claude
# From an external terminal:
/ide
# -> "Connected to IntelliJ IDEA."
# If it finds a running IDE without the plugin, /ide installs
# the plugin and asks you to restart.
# Cmd+Esc / Ctrl+Esc open Claude Code from the editor
# Cmd+Option+K
# Alt+Ctrl+K insert a file reference such as
# @src/auth.ts#L1-99
# Settings -> Tools -> Claude Code [Beta]
# Claude command e.g. /usr/local/bin/claude, or for WSL:
# wsl -d Ubuntu -- bash -lic "claude"Ada dua cara untuk tersambung. Menjalankan CLI dari terminal bawaan IDE mengaktifkan semuanya secara otomatis. Dari terminal eksternal, satu perintah menyambung ke IDE yang sedang berjalan, dan kalau ia menemukan IDE tanpa plugin ia menawarkan memasangkannya untuk Anda. Bagaimanapun caranya, mulailah dari root proyek kalau Anda ingin Claude melihat file yang sama dengan yang dilihat IDE.
Ada empat hal, dan yang keempat lebih terbatas daripada dugaan orang:
Inilah bagian yang layak diketahui secara presisi, karena ia layanan jaringan lokal yang berjalan di mesin Anda dan cepat atau lambat seorang peninjau akan menanyakannya. Ia sengaja disembunyikan dari daftar MCP karena memang tidak ada yang perlu dikonfigurasi, dan itu berarti orang yang paling perlu tahu keberadaannya justru paling kecil kemungkinannya menemukannya.
# The plugin runs a local MCP server the CLI connects to. It is
# named "ide" and hidden from /mcp because there is nothing to
# configure — but if your organisation allowlists MCP tools in
# a PreToolUse hook, you need to know it exists.
# Transport and auth:
# ephemeral OS-assigned port, not configurable
# unencrypted ws:// — on loopback, anything that could
# capture the traffic can also read the token, so TLS
# would add nothing against a local attacker
# a fresh random token per IDE start, written to
# ~/.claude/ide/<port>.lock
# the CLI presents it as
# X-Claude-Code-Ide-Authorization
# Tools the MODEL can see: exactly one.
mcp__ide__getDiagnostics read-only; the IDE's inspection
errors and warnings
# The rest are internal RPC the CLI uses for its own UI —
# opening diffs, reading selections — and are filtered out
# before the tool list reaches Claude. The JetBrains plugin
# exposes NO code-execution tool to the model.Keputusan desain yang layak dihargai adalah filter tool-nya. Server itu menampung beberapa tool, tetapi hanya pembaca diagnostik yang read-only yang terlihat oleh model — sisanya panggilan internal yang dipakai CLI untuk menggerakkan antarmukanya sendiri, disaring keluar sebelum daftar tool-nya sampai ke Claude. Plugin JetBrains sama sekali tidak mengekspos tool eksekusi kode ke model, dan itu permukaan yang jauh lebih kecil daripada yang disiratkan kemampuan integrasinya.
Selama tersambung, CLI melampirkan seleksi editor Anda saat itu dan path file yang aktif ke setiap prompt yang Anda kirim, dan transkripnya menampilkan baris yang menyatakan hal tersebut. Itu fitur yang bekerja sesuai desain, sekaligus aliran data yang sebaiknya Anda sikapi dengan sadar — file yang kebetulan terbuka saat Anda bertanya soal lain ikut terkirim bersamanya.
# While connected, the CLI includes your current editor
# selection and the active file's path as context on EVERY
# prompt you send. The transcript shows:
#
# ⧉ Selected 12 lines from src/auth.ts
#
# To stop a sensitive file reaching Claude this way, add a Read
# deny rule for its path. A matching rule blocks BOTH the
# selected text and the open-file notice.
{
"permissions": {
"deny": ["Read(./.env)", "Read(./config/secrets.yml)"]
}
}
# The same deny rules also stop the plugin sharing those files
# through the selection-context channel, which is the part
# people forget when they audit what leaves the machine.Yang satu ini tidak berlaku pada sesi terminal biasa dan mudah terlewat. Ketika Claude Code berjalan di dalam IDE JetBrains pada mode accept-edits, ia bisa jadi mampu mengubah file konfigurasi IDE yang dieksekusi IDE itu sendiri secara otomatis. Itu jalur untuk menjalankan kode tanpa melewati permission prompt untuk eksekusi shell, karena eksekusinya milik IDE, bukan milik Claude.
Konsekuensi praktisnya, accept-edits dan auto mode adalah pemberian yang lebih besar di dalam IDE daripada di luarnya. Keduanya menyetujui edit di dalam working directory Anda tanpa bertanya, selain pada path terlindungi, dan di dalam proyek JetBrains direktori itu memuat file bersemantik eksekusi. Manual mode untuk pengeditan adalah pilihan konservatif di sini, dan itu pilihan yang bisa dipertahankan alasannya, bukan paranoia.
Empat masalah menjelaskan sebagian besar hal yang bisa keliru, dan masing-masing punya penyebab spesifik alih-alih umum.
Gejala ke penyebab:
| Gejala | Penyebab lazimnya |
|---|---|
| Escape tidak menghentikan Claude Code | Terminal IDE mengikat Escape untuk memindahkan fokus ke editor — lepaskan di setelan terminal |
| Tidak ada IDE terdeteksi di WSL2 | Jaringan NAT WSL2 atau Windows Firewall memblokir koneksi ke IDE di host |
| Fitur hilang di Remote Development | Plugin dipasang di klien lokal alih-alih di remote host |
| Command not found saat mengklik ikonnya | CLI tidak ada di path IDE — setel path lengkapnya di setelan plugin |
Untuk kasus WSL2, lebih baik berpindah ke mirrored networking daripada membuka aturan firewall bila memungkinkan. Mirrored networking berbagi antarmuka loopback Windows dengan VM Linux, yang membuat socket-nya bisa tetap di loopback — dan itu menjauhkan Anda dari opsi plugin untuk menerima koneksi dari semua antarmuka jaringan, yaitu setting yang sungguh sebaiknya Anda hindari.
Plugin bisa mengikat MCP server-nya ke semua antarmuka jaringan alih-alih hanya loopback, dan opsi itu ada untuk kasus nyata ketika CLI tidak bisa menjangkau IDE lewat loopback. Ia tetap setting yang paling perlu dipikirkan matang sebelum diaktifkan, karena sifat transport-nya.
Koneksinya tetap membutuhkan token autentikasi dari lock file, bagaimanapun. Tetapi transport-nya tidak terenkripsi, jadi dengan setting itu menyala, baik lalu lintas sesi maupun token tersebut melintasi jaringan lokal Anda dalam bentuk teks polos. Di loopback itu bukan masalah — apa pun yang bisa menangkap lalu lintasnya toh bisa membaca lock file-nya — dan di jaringan bersama itu proposisi yang sama sekali berbeda.
Plugin ini jembatan, bukan aplikasi, dan hampir setiap pertanyaan tentangnya selesai begitu Anda memegang bentuk itu: CLI yang mengerjakan pekerjaannya, plugin yang meminjamkan penampil diff, seleksi, dan diagnostik milik IDE, dan sebuah socket lokal kecil yang menyatukan keduanya. Dua hal yang layak diputuskan dengan sadar adalah permission mode mana yang Anda jalankan, karena direktori IDE memuat file yang mengeksekusi dirinya sendiri, dan apakah socket itu perlu keluar dari loopback. Jawaban yang kedua hampir selalu tidak.
Sumber & bacaan lanjutan