Introduce lsp_references tool for enhanced code navigation#14
Merged
Conversation
Co-authored-by: linw1995 <13523027+linw1995@users.noreply.github.com>
Co-authored-by: linw1995 <13523027+linw1995@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Resolve @linw1995/nvim-mcp/issues/11
Introduce lsp_references tool for enhanced code navigation
Aug 11, 2025
linw1995
reviewed
Aug 11, 2025
- Use unwrap_or_default() instead of unwrap_or_else(Vec::new) - Add missing newline at end of lsp_references.lua file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR implements the
lsp_referencestool as requested in issue #11, providing enhanced code navigation capabilities by exposing Neovim's LSPtextDocument/referencesfunctionality through the MCP interface.What's New
The new
lsp_referencestool allows clients to find all references to a symbol at a specific position in a buffer, following the LSP specification for textDocument/references.Tool Parameters
{ "connection_id": "string", "id": 123, "lsp_client_name": "rust_analyzer", "line": 10, "character": 5, "include_declaration": true }connection_id: Unique identifier for the target Neovim instanceid: Neovim Buffer IDlsp_client_name: Name of the LSP client to queryline/character: Zero-indexed position of the symbolinclude_declaration: Whether to include the symbol's declaration in resultsResponse Format
Returns an array of
Locationobjects:[ { "uri": "file:///path/to/file.rs", "range": { "start": {"line": 5, "character": 10}, "end": {"line": 5, "character": 15} } } ]Implementation Details
The implementation follows the established patterns in the codebase:
ReferenceParamsandReferenceContextstructs following LSP specificationNeovimClientTraitwithlsp_referencesmethodlsp_references.luafor making LSP requests to NeovimThe tool maintains consistency with existing LSP tools (
buffer_hover,document_symbols,workspace_symbols) and uses the same connection-aware architecture for multi-instance Neovim support.Usage Example
This enhancement enables AI assistants and other MCP clients to perform sophisticated code navigation tasks, making it easier to understand code relationships and dependencies across projects.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.