# Periscope

Gives your agent the same language servers, formatters and linters your editor uses. One config source instead of a second copy.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed
- Author: qompassai
- License: not stated · policy=link-only · description only; the file stays with the author
- Source: https://github.com/qompassai/periscope
- Updated: 2026-10-21
- HTML: https://affpapa.org/en/nevibecode/mcp/periscope

## What it 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.

## Requirements
- Needs: a prebuilt binary from the repository releases

## Install

### Claude Code (native platform)

**Install**
- The MCP registry has no launch command for it: see the repository README

## When to use it
- 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
- Run `get_diagnostics` on the current buffer
- Format this file with `run_format` and return the text, don't write it
- Publish my focus, then ask `attention_decide` about the partner agent

## Similar
- [golang-gopls](https://affpapa.org/en/nevibecode/skills/golang-gopls.md) — skill · 11000 installs
- [rust-symbol-analyzer](https://affpapa.org/en/nevibecode/skills/rust-symbol-analyzer.md) — skill · 3100 installs
- [platform-lsp-integrate](https://affpapa.org/en/nevibecode/skills/platform-lsp-integrate.md) — skill · 2600 installs
- [lsp-code-analysis](https://affpapa.org/en/nevibecode/skills/lsp-code-analysis.md) — skill · 920 installs
- [periscope-mcp](https://affpapa.org/en/nevibecode/mcp/periscope-mcp.md) — MCP server · ★ 10
- [surrealql-functions](https://affpapa.org/en/nevibecode/skills/surrealql-functions.md) — skill · 413 installs

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
