返回市场
类型脚本MCP服务器

类型脚本MCP服务器

作者:mizchi416 星标更新:2025-10-27

项目介绍

lsmcp - Language Service Protocol MCP

CI Language Server Tests npm version License: MIT

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

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

请参阅 examples/ 中每个支持语言配置的工作示例。

要求

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

快速开始

# tsgo(推荐)
npm add -D @mizchi/lsmcp @typescript/native-preview
npx @mizchi/lsmcp init -p tsgo
claude mcp add lsmcp npx -- -y @mizchi/lsmcp -p tsgo

# 使用手动 --bin
claude mcp add lsmcp npx -- -y @mizchi/lsmcp --bin="<lsp-command>"
<details> <summary>📖 使用Claude的示例用法</summary>

推荐工作流程

🎯 核心流程:概览 → 搜索 → 细节

1. get_project_overview     # 了解代码库
2. search_symbols           # 找到你需要的内容
3. get_symbol_details       # 深入了解符号

📋 每个工具的使用时机

初始探索:

  • 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. mcp__lsmcp__get_project_overview
   → 了解结构、主要组件、统计数据
2. mcp__lsmcp__search_symbols --kind "class"
   → 查找项目中的所有类
3. m_ _lsmcp__get_symbol_details --symbol "MainClass"
   → 深入了解特定类的实现

2. 调查一个错误

1. mcp__lsmcp__search_symbols --name "problematicFunction"
   → 定位该函数
2. mcp__lsmcp__get_symbol_details --symbol "problematicFunction"
   → 了解其类型、实现和使用情况
3. mcp__lsmcp__lsp_find_references --symbolName "problematicFunction"
   → 查看所有调用的地方
4. mcp__lsmcp__lsp_get_diagnostics --relativePath "path/to/file.ts"
   → 检查错误

3. 重构代码

1. mcp__lsmcp__search_symbols --name "oldMethodName"
   → 查找需要重构的方法
2. mcp__lsmcp__get_symbol_details --symbol "oldMethodName"
   → 了解当前实现和使用情况
3. mcp__lsmcp__lsp_rename_symbol --symbolName "oldMethodName" --newName "newMethodName"
   → 安全地在整个代码库中重命名
4. mcp__lsmcp__lsp_format_document --relativePath "path/to/file.ts"
   → 清理格式

4. 添加新功能

1. mcp__lsmcp__get_project_overview
   → 了解现有架构
2. mcp__lsmcp__search_symbols --kind "interface"
   → 查找相关的接口来实现
3. mcp__lsmcp__get_symbol_details --symbol "IUserService"
   → 了解接口需求
4. mcp__lsmcp__lsp_get_completion --line 50
   → 编写新代码时获取建议

备用工具(仅在必要时使用):

  • ⚠️ 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 - 删除记忆文件

记忆包含有助于保持一致性的项目上下文、约定和指南。

</details>

可用预设

lsmcp 包含内置预设,适用于流行的语言服务器:

  • tsgo - TypeScript(推荐)
  • typescript - typescript-language-server
  • rust-analyzer - Rust 分析器
  • moonbit - MoonBit
  • fsharp - F#(fsautocomplete)
  • deno - Deno TypeScript/JavaScript
  • gopls - Go(官方Go语言服务器)
  • hls - Haskell 语言服务器(需要设置ghcup,参见 docs/HASKELL_SETUP.md
  • ocaml - OCaml 语言服务器

配置

.lsmcp/config.json

{
  "$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_diagnostics - 检查文件中的错误和警告
  • lsp_get_all_diagnostics - 获取整个项目的诊断信息
  • lsp_get_document_symbols - 列出文件中的所有符号
  • lsp_get_workspace_symbols - 在整个工作区搜索符号
  • lsp_get_completion - 获取代码补全建议
  • lsp_get_signature_help - 获取函数调用的参数提示
  • lsp_format_document - 使用语言服务器格式化整个文档
  • lsp_rename_symbol - 在整个代码库中重命名符号
  • lsp_get_code_actions - 获取可用的快速修复和重构
  • lsp_delete_symbol - 删除符号及其所有引用(可选)
  • lsp_check_capabilities - 检查支持的LSP特性

高级工具

  • get_project_overview - 快速项目结构和组件分析
  • search_symbols - 使用预先构建的索引快速搜索符号(如果需要,自动创建索引)
  • get_symbol_details - 获取符号的综合详情(悬停、定义、引用)

外部库工具

  • index_external_libraries - 索引来自node_modules的TypeScript声明文件
  • get_typescript_dependencies - 列出可用的TypeScript依赖项
  • search_external_library_symbols - 在已索引的外部库中搜索符号
  • resolve_symbol - 将符号解析为其在外部库中的定义
  • get_available_external_symbols - 获取从导入库中可用的符号
  • parse_imports - 解析和分析导入语句

代码编辑工具

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

文件系统工具

  • list_dir - 列出目录,支持gitignore
  • get_symbols_overview - 按文件提供符号的高层次概述

内存管理

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

性能优化

LSMCP 包含多项性能优化:

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

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

{
  "indexConcurrency": 5,
  "maxFileSize": 10485760,
  "enableWatchers": true,
  "memoryLimit": 1024
}

开发

请参见 CONTRIBUTING.md 以获取详细的开发设置、测试说明和贡献指南。

# 快速开始
pnpm install
pnpm build
pnpm test

# 带有内存监控运行
node --expose-gc dist/lsmcp.js

调试日志

LSMCP 有两个独立的日志系统,分别针对MCP服务器和LSP客户端:

MCP服务器日志

启用MCP服务器调试输出,可通过环境变量:

MCP_DEBUG=1 lsmcp       # 启用MCP服务器调试日志
LSMCP_DEBUG=1 lsmcp     # 另一种方式(向后兼容)

LSP客户端日志

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

LSP_DEBUG=1 lsmcp       # 启用LSP客户端调试日志

组合日志

同时启用MCP和LSP调试输出:

MCP_DEBUG=1 LSP_DEBUG=1 lsmcp

许可证

MIT - 详情请参见 LICENSE 文件。