openidea-claude-bridge
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
openidea-claude-bridge
Projeto da comunidade, não afiliado nem endossado pela Anthropic nem pelo projeto openIDEA. "Claude" e "openIDEA" pertencem aos respectivos donos.
Faz o openIDEA aparecer para o Claude Code como IDE (/ide), como a extensão do VSCode faz. Duas peças:
sidecar (
src/, Node ≥ 20): servidor MCP sobre WebSocket em127.0.0.1com token por sessão. Publica~/.claude/ide/<porta>.locke recebe o estado do editor emPOST /bridge/state.plugin (
plugin/, Rust → WASM): roda dentro do openIDEA e empurra pastas abertas, arquivos vistos e a seleção para o sidecar. Plugins são sandboxed (sem listener nem arquivos), por isso o sidecar existe.
Só Linux por enquanto (systemd para o serviço, caminhos POSIX no lockfile).
Instalação
git clone <este repositório> && cd openidea-claude-bridge
npm ci
node src/cli.js --print-token # mostra o segredo e a chave que o plugin vai usar (cria os arquivos, 0600)
node src/cli.js # sobe o sidecar na porta 38911 (--port, BRIDGE_PORT; BRIDGE_DEBUG=1 loga o protocolo)
# ou, para subir no login e reiniciar se cair:
scripts/install-service.sh # --uninstall removePlugin (precisa da ferramenta openidea-plugin, anexada às releases do openIDEA; Rust via rustup, ou mise x rust@stable -- …; o build instala o alvo wasm32-wasip2 sozinho):
openidea-plugin build plugin # gera plugin/dist/plugin.wasm e valida como o IDE faria
openidea-plugin link plugin # carrega a pasta no IDE (use `unlink` para desfazer)No openIDEA, em Settings › Plugins › Claude Code Bridge:
aprove as capabilities (
net:127.0.0.1esecretssão de risco médio; veja abaixo por quê);defina o segredo
bridge-tokene a configuraçãoserverKeycom os dois valores de--print-token.
Por fim, faça o claude aceitar o sidecar. Em terminal reconhecido como IDE o CLI só aceita o lockfile se o PID for ancestral dele ou se a porta bater com CLAUDE_CODE_SSE_PORT. No perfil do shell, só para o terminal do openIDEA, para não capturar outras IDEs:
[ "$TERM_PROGRAM" = OpenIDEA ] && export CLAUDE_CODE_SSE_PORT=38911Depois, no claude, /ide → openIDEA. No editor, selecione um trecho e rode Claude Code Bridge: Send Selection to Claude.
Related MCP server: Cursor MCP Server
O que funciona (verificado contra claude 2.1.319 e plugin API 1.2 / openIDEA 0.1.38)
/idedetecta e conecta; handshake MCP completo.Send Selection to Claude →
@arquivo#Lx-yno prompt do Claude.getWorkspaceFolders,getOpenEditors,getCurrentSelection.getOpenEditorsé a lista de arquivos vistos desde que o plugin ativou, não as abas abertas: a API não tem evento de fechar arquivo, e o IDE recolhe a instância do plugin depois de uns minutos parada (a lista recomeça vazia).isDirtyé semprefalse.
O que a API de plugins do openIDEA não permite (e o que fazemos)
Sem evento de mudança de seleção: a seleção só chega por comando, nunca ao vivo.
Sem leitura de diagnósticos do LSP:
getDiagnosticsnão é anunciado.Sem tela de diff:
openDiffnão é anunciado, então o CLI usa o diff do terminal. Anunciá-lo sem uma tela de aprovação auto-aprovaria edições.openFiletambém não é anunciado: o plugin não tem como abrir arquivo no editor.
O sidecar só anuncia as tools que o host realmente cumpre, para o Claude nunca tratar "não sei" como "sem erros".
Segurança e modelo de ameaça
Pensado para uma máquina de um único usuário.
O servidor só escuta em
127.0.0.1. O WebSocket exige o token da sessão (no lockfile, 0600, em diretório 0700). Página web aberta no navegador não consegue conectar: exigiria um header customizado.O canal do plugin (
POST /bridge/state) usa outro token, persistente (~/.config/openidea-claude-bridge/control-token, 0600), e o sidecar valida o estado recebido (a @-menção só vale dentro do workspace).Porta fixa pode ser ocupada por outro processo. Para ele não receber o token, o plugin pede ao sidecar uma prova antes de enviá-lo: um HMAC de um nonce novo com a
serverKey. Quem só ocupou a porta não conhece a chave e nada sai do plugin. O segredo é injetado pelo IDE no header; o código do plugin nunca o lê.Em máquina multiusuário, containers com
--network=hostou projeto aberto por SSH em host compartilhado, outros usuários alcançam o loopback. A prova acima cobre o roubo do token, mas não troque a porta por uma previsível nem compartilhe o~/.config/openidea-claude-bridge.BRIDGE_DEBUG=1grava no log o protocolo e os nomes de campo do estado (nunca tokens nem o texto selecionado).Para rotacionar: apague
~/.config/openidea-claude-bridge/{control-token,server-key}, rode--print-tokene atualize o segredo e a configuração no plugin.
Testes
npm test # sidecar (protocolo, lockfile, segredos, CLI)
cd plugin && cargo test # plugin, contra o host simulado do SDKLicença
Apache-2.0 (veja LICENSE e NOTICE).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Share context and questions between Claude instances — VS Code, claude.ai web, and mobile.
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Give Claude, Cursor, or another AI assistant direct access to your QuickSnip library.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Codex to retrieve the currently selected file, line numbers, and code snippets from JetBrains IDEs. It leverages the official Claude Code plugin to provide real-time IDE context to the AI.53MIT
- FlicenseNot gradedqualityDmaintenanceTurns Claude Desktop into a Cursor-like assistant for code browsing, editing, searching, linting, formatting, and version control.-
- AlicenseNot gradedqualityDmaintenanceEnables Claude.ai to interact with the Cursor editor to read files, write code, get selections, and more.14 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude Code CLI to interact with Obsidian by reading selections, opening files, showing diffs, and running an embedded terminal.MIT