Periscope — Claude Code MCP server: LSP, linters and DAP from Neovim
Gives your agent the same language servers, formatters and linters your editor uses. One config source instead of a second copy.
Open on GitHubWhat Periscope does
Periscope ships as a single Rust binary. On the client side it speaks MCP over stdio; on the editor side it talks msgpack-RPC. In the default managed mode it launches its own headless Neovim instance with a temp socket and the workspace as its directory. Your setup loads the way it does when you open the editor yourself, and the interactive session stays untouched. Project-local config is blocked with --cmd "set noexrc". Attach mode takes --attach <socket> and connects to an editor already started with --listen; the broker never signals or closes a process it did not create.
Tools run as small Lua snippets inside Neovim through nvim_exec_lua and lean on native APIs only. Every per-server option in your lsp/*.lua files carries over, including deliberate choices such as disabling rust-analyzer's built-in diagnostics in favour of bacon-ls. The read side covers broker_status, get_hover, get_definition, get_references, get_diagnostics, get_document_symbols, list_servers, list_formatters, list_linters and list_dap. Two tools execute work: run_format and run_lint. Formatting edits the brokered buffer and hands the text back; the file on disk stays as it was and written is always false. Linting reads only.
Four more tools, the attention_* group, back a coordination board between agents using the MATE protocol. An agent advertises an ordered focus, reads a partner's, then asks for an overlap score or a decision.
What it helps with
- ask the agent for diagnostics from the same linters your editor runs
- format a file with your Neovim pipeline and get text back, no disk write
- pull the LSP server list and DAP modules straight from the config tree
- keep multiple agents aligned on a shared focus
- attach to a Neovim that is already running instead of starting another
Example prompts for the agent
- Run
get_diagnosticson the current buffer - Format this file with
run_formatand return the text, don't write it - Publish my focus, then ask
attention_decideabout the partner agent
How to install Periscope
Install
The MCP registry has no launch command for it: see the repository README
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Periscope
How do I install Periscope in Claude Code?
You start the periscope binary and register it wherever you register MCP servers. There is no config file to pass in; you supply the command and its arguments, for instance --workspace /path/to/project.
What does Periscope do?
It relays MCP client calls into a real Neovim carrying your config, returning LSP, diagnostics, symbols, formatter, linter and DAP data. It also runs your pipelines through run_format and run_lint.
Can Periscope modify files in the project?
No. No tool writes, renames or starts a debug session. run_format alters only the brokered buffer and returns the result as text, and the temp socket is removed once the server exits.