语言服务协议MCP

一个统一的MCP服务器,通过语言服务器协议集成,为多种编程语言提供高级代码操作和分析能力。

作者 By mizchi
本地部署 代码分析 多语言支持
GitHub

lsmcp-语言服务协议MCP

一个统一的MCP(模型上下文协议)服务器,通过语言服务器协议集成为多种编程语言提供高级代码操作和分析功能。

  • 🌍 多语言支持
  • 🔍 语义代码分析
  • 🤖 AI优化

看 示例/ 查看每种支持的语言配置的工作示例。

需求

  • Node.js 22.0.0或更高版本(内置SQLite支持所需)

快速开始

BASH``` 1 2 3 4 5 6# tsgo (reccommended) npm add -D @mizchi/lsmcp @typescript/native-preview npx @mizchi/lsmcp init -p tsgo claude mcp add lsmcp npx — -y @mizchi/lsmcp -p tsgo

with manual —bin

claude mcp add lsmcp npx — -y @mizchi/lsmcp —bin=""



📖 Example Usage with Claude
## 推荐工作流程


### 🎯 核心流:概述→ 搜索→ 详情

1 2 31. get_project_overview # Understand the codebase 2. search_symbols # Find what you need
3. get_symbol_details # Deep dive into symbols


### 📋 何时使用每种工具


**初步探索:**


- `get_project_overview` -理解任何代码库的第一个工具
- `list_dir` -浏览目录结构
- `get_symbols_overview` -文件符号的高级视图


**查找代码:**


- `search_symbols` -主要搜索函数、类、接口
- `lsp_get_document_symbols` -列出特定文件中的所有符号
- `lsp_get_workspace_symbols` -工作区范围内的替代搜索


**理解代码:**


- `get_symbol_details` -一次通话完成信息(推荐)
- `lsp_get_definitions` -跳转到定义(使用 `includeBody: true` 完整代码)
- `lsp_find_references` -查找所有用法
- `lsp_get_hover` -快速类型信息


**代码质量:**


- `lsp_get_diagnostics` -检查错误
- `lsp_get_code_actions` -获取可用的修复程序


**代码修改:**


- `lsp_rename_symbol` -跨代码库安全重命名
- `lsp_format_document` -格式代码
- `replace_range` / `replace_regex` -文本替换


### 示例工作流


**1.探索新的代码库**

1 2 3 4 5 61. mcp__lsmcp__get_project_overview → Understand structure, main components, statistics 2. mcp__lsmcp__search_symbols —kind “class” → Find all classes in the project 3. mcp__lsmcp__get_symbol_details —symbol “MainClass” → Deep dive into specific class implementation


**2.调查一个BUG**

1 2 3 4 5 6 7 81. mcp__lsmcp__search_symbols —name “problematicFunction” → Locate the function 2. mcp__lsmcp__get_symbol_details —symbol “problematicFunction” → Understand its type, implementation, and usage 3. mcp__lsmcp__lsp_find_references —symbolName “problematicFunction” → See all places it’s called 4. mcp__lsmcp__lsp_get_diagnostics —relativePath “path/to/file.ts” → Check for errors


**3.重构代码**

1 2 3 4 5 6 7 81. mcp__lsmcp__search_symbols —name “oldMethodName” → Find the method to refactor 2. mcp__lsmcp__get_symbol_details —symbol “oldMethodName” → Understand current implementation and usage 3. mcp__lsmcp__lsp_rename_symbol —symbolName “oldMethodName” —newName “newMethodName” → Safely rename across codebase 4. mcp__lsmcp__lsp_format_document —relativePath “path/to/file.ts” → Clean up formatting


**4.添加新功能**

1 2 3 4 5 6 7 81. mcp__lsmcp__get_project_overview → Understand existing architecture 2. mcp__lsmcp__search_symbols —kind “interface” → Find relevant interfaces to implement 3. mcp__lsmcp__get_symbol_details —symbol “IUserService” → Understand interface requirements 4. mcp__lsmcp__lsp_get_completion —line 50 → Get suggestions while writing new code


**回退工具(仅在必要时使用):**


- ⚠️ `Read` -仅当您需要查看非代码文件或LSMCP工具失败时
- ⚠️ `Grep` -用于文件中的文本模式搜索
- ⚠️ `Glob` -仅当LSMCP文件查找不起作用时
- ⚠️ `LS` -仅在LSMCP失败时用于基本目录列表
- ⚠️ `Bash` 命令-仅用于非代码操作或故障排除


### 何时使用回退工具


仅在以下情况下使用标准工具:


1. **非代码文件**:README、文档、配置文件
2. **LSMCP工具故障**:当LSMCP工具返回错误或无结果时
3. **调试**:在排除LSMCP工具不工作的原因时
4. **特殊文件格式**:LSMCP不支持的文件
5. **快速验证**:需要时仔细检查LSMCP结果


## 存储器系统


您可以访问存储在中的项目记忆 `.lsmcp/memories/`.使用这些工具:


- `mcp__lsmcp__list_memories` -列出可用内存文件
- `mcp__lsmcp__read_memory` -读取特定内存内容
- `mcp__lsmcp__write_memory` -创建或更新记忆
- `mcp__lsmcp__delete_memory` -删除内存文件


记忆包含重要的项目背景、惯例和指导方针,有助于保持一致性。



## 预置模式


lsmcp包括流行语言服务器的内置预设:


- **`tsgo`** -TypeScript(推荐)
- **`typescript`** -打字语言服务器
- **`rust-analyzer`** -锈蚀分析仪
- **`moonbit`** -MoonBit
- **`fsharp`** -F#(fsautocomplete)
- **`deno`** -Deno Types/JavaScript
- **`gopls`** -Go(官方Go语言服务器)
- **`hls`** -Haskell语言服务器(需要ghcup设置,请参阅 docs/HASKELL_SETUP.md)
- **`ocaml`** -OCaml语言服务器


### 配置


`.lsmcp/config.json`


JSON```
1
2
3
4
5
6
7
8{
  "$schema": "../node_modules/@mizchi/lsmcp/lsmcp.schema.json",
  "preset": "tsgo",
  "settings": {
    "autoIndex": true,
    "indexConcurrency": 10
  }
}

有关完整的配置示例,请参阅 examples/full-lsmcp-config.json.

工具

lsmcp为代码分析和操作提供了全面的MCP工具:

注意:下面列出的工具名称是原始MCP工具名称(snake_case,例如get_hover)。一些客户端使用服务器限定前缀显示它们(例如mcplsmcpget_hover)。有关命名约定和模块边界,请参见 docs/TOOL_REFERENCE.md.

核心LSP工具

  • lsp_get_hover -获取符号的类型信息和文档
  • lsp_find_references -在代码库中查找对符号的所有引用
  • lsp_get_definitions -导航到具有可选代码体的符号定义
  • lsp_get_诊断学 -检查文件中的错误和警告
  • lsp_get_all_诊断 -获取整个项目的诊断信息
  • lsp_get_document_symbols -列出文件中的所有符号
  • lsp_get_workspace_symbols -在整个工作空间中搜索符号
  • lsp_get_完成 -获取代码完成建议
  • lsp_get_签名_帮助 -获取函数调用的参数提示
  • lsp_format_document -使用语言服务器格式化整个文档
  • lsp_rename_符号 -在整个代码库中重命名符号
  • lsp_get_code_actions -获取可用的快速修复和重构
  • lsp_delete_symbol -删除符号及其所有引用(可选)
  • lsp_check_功能 -检查支持的LSP功能

高级工具

  • get_project_overview -快速项目结构和组件分析
  • 搜索_符号 -使用预构建索引进行快速符号搜索(必要时自动创建索引)
  • 获取_符号_详细信息 -获取有关符号的全面详细信息(悬停、定义、引用)

外部库工具

  • 索引_外部库 -从node_modules索引TypeScript声明文件
  • get_typescript_dependency -列出可用的TypeScript依赖项
  • 搜索_外部库_符号 -在已索引的外部库中搜索符号
  • resolve_符号 -将符号解析为外部库中的定义
  • 获取可用外部符号 -从导入的库中获取可用的符号
  • parse_imports -解析和分析导入语句

代码编辑工具

  • replace_range -替换文件中的特定文本范围
  • replace_regex -基于正则表达式的高级替换

文件系统工具

  • list_dir -列出支持gitignore的目录
  • get_symbols _概述 -按文件列出的高级符号概述

内存管理

  • list_memories -列出项目记忆
  • read_memory -读取特定内存内容
  • write_memory -创建或更新记忆
  • 删除记忆 -删除记忆

性能优化

LSMCP包括几个性能优化:

  • 增量索引:只有修改过的文件才会重新索引
  • 内存监控:内存使用率高时自动垃圾回收
  • 批处理:高效的并发文件处理
  • 智能缓存:对频繁访问的数据进行15分钟缓存

中的配置选项 .lsmcp/config.json:

JSON``` 1 2 3 4 5 6{ “indexConcurrency”: 5, “maxFileSize”: 10485760, “enableWatchers”: true, “memoryLimit”: 1024 }


## 发展


看 贡献.md 有关详细的开发设置、测试说明和贡献指南。


BASH```
1
2
3
4
5
6# Quick start
pnpm install
pnpm build
pnpm test
# Run with memory monitoring
node --expose-gc dist/lsmcp.js

调试日志记录

LSMCP为MCP服务器和LSP客户端提供了单独的日志记录系统,可以独立控制:

MCP服务器日志记录

使用以下任一环境变量启用MCP服务器调试输出:

BASH``` 1 2MCP_DEBUG=1 lsmcp # Enable MCP server debug logging LSMCP_DEBUG=1 lsmcp # Alternative (backward compatible)


#### LSP客户端日志记录


单独启用LSP客户端调试输出:


BASH```
1LSP_DEBUG=1 lsmcp       # Enable LSP client debug logging

组合测井

启用MCP和LSP调试输出:

BASH``` 1MCP_DEBUG=1 LSP_DEBUG=1 lsmcp


## 许可证


麻省理工学院-参见 许可证 文件以获取详细信息。