{
  "markdown": "# lsp-mcp-rs\r\n\r\nMCP server that bridges to any LSP. One binary, multiple language servers.\r\n\r\n## Build\r\n\r\n```\r\ncargo build --release\r\n```\r\n\r\nBinary: `target/release/lsp-mcp-rs.exe`\r\n\r\n## Configure\r\n\r\nCreate `config.toml` next to the binary:\r\n\r\n```toml\r\n[servers.lua]\r\ncommand = \"C:/path/to/lua-language-server.exe\"\r\nargs = [\"--stdio\"]\r\nextensions = [\".lua\"]\r\n\r\n[servers.rust]\r\ncommand = \"rust-analyzer\"\r\nargs = []\r\nextensions = [\".rs\"]\r\n\r\n[servers.python]\r\ncommand = \"pyright-langserver\"\r\nargs = [\"--stdio\"]\r\nextensions = [\".py\"]\r\n```\r\n\r\nAdd to Claude Desktop config (`claude_desktop_config.json`):\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"lsp\": {\r\n      \"command\": \"X:\\\\path\\\\to\\\\lsp-mcp-rs.exe\",\r\n      \"args\": []\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n## Tools\r\n\r\n| Tool | Description |\r\n|------|-------------|\r\n| `lsp_hover` | Get docs/type at position |\r\n| `lsp_definition` | Go to definition |\r\n| `lsp_references` | Find all references |\r\n| `lsp_symbols` | List symbols in file |\r\n| `lsp_diagnostics` | Get errors/warnings |\r\n| `lsp_servers` | List configured servers |\r\n\r\nAll position arguments are 0-indexed.\r\n\r\n## How it works\r\n\r\n1. MCP request comes in with a file path\r\n2. File extension maps to configured LSP server\r\n3. LSP spawns on first use, stays running\r\n4. Request forwarded to LSP, response returned via MCP\r\n\r\n## License\r\n\r\nMIT\r\n\r\n## Authors\r\n\r\nDC, KALIC, Stryk9190\r\n",
  "bytes": 1370,
  "sha": "4911cc2c47dd06d3ef36f28b6038c50f3936d50e484bbc0c200f0ec3b5a0d8f1",
  "repo_slug": "stryk91/lsp-mcp-rs",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_stryk91_lsp_mcp_rs_c3ef21f6/readme"
}