Ballerina语言服务器MCP服务器

一个智能模型上下文协议(MCP)服务器,用于查询和分析Java语言服务器代码库,专为Ballerina语言服务器项目设计。

  • by dan-niles
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 dan-niles/ballerina-ls-mcp-server

使用说明

Ballerina语言服务器MCP服务器

一个智能模型上下文协议(MCP)服务器,用于查询和分析Java语言服务器代码库,专门为Ballerina语言服务器项目设计。

安装

先决条件

  • 克劳德桌面
  • Git(用于克隆存储库)
  • 紫外线 -运行Python脚本的更简单方法:)

设置

  1. 克隆此存储库
  2. 安装依赖项:使用uv
uv sync
  1. 更新 claude_desktop_config.json 包括MCP服务器路径、将此MCP服务器与Claude Desktop一起使用。它应该位于:
/Users/[your_username]/Library/Application Support/Claude/claude_desktop_config.json
  1. 在中添加以下条目 claude_desktop_config.json:
{
  "mcpServers": {
    "ballerina-language-server": {
      "command": "uv",
      "args": [
        "--directory",
        "<PATH_TO_BALLERINA_LS_MCP_SERVER>",
        "run",
        "--active",
        "run.py"
      ],
      "env": {
        "BALLERINA_REPO_PATH": "<PATH_TO_BALLERINA_LANGUAGE_SERVER_REPO>"
      }
    }
  }
}
  1. 重新启动Claude Desktop以应用更改。

用法

设置后,您可以使用带有Claude Desktop的MCP服务器查询和分析Ballerina语言服务器代码库。您可以通过单击以下按钮验证Claude Desktop是否识别MCP服务器 Search and tools 按钮并观察 ballerina-language-server 菜单中列出了MCP服务器。

可用的MCP工具

核心搜索和分析工具

1. search_code(query: str, limit: int = 10)

通过相关性评分和多词匹配增强了对代码库的模糊搜索。

例子:

Query: "completion provider"
Returns: Ranked results for completion-related classes and methods

2. get_class_info(class_name: str)

获取特定类的详细信息,包括所有方法和字段。

例子:

Query: "CompletionProvider"
Returns: Full class definition, methods, and context

3. get_repository_stats()

获取有关索引存储库的全面统计信息。

退货:

  • 文件计数和分布
  • 按类别计数的顶级套餐
  • 按行数计算的最大类
  • 对健康指标进行索引

4. find_similar_methods(method_name: str, limit: int = 5)

使用语音匹配算法查找名称相似的方法。

例子:

Query: "getCompletion"
Returns: getCompletion, getCompletions, findCompletion, etc.

LSP协议分析工具

5. find_lsp_protocol_implementations(protocol_method: str = "")

查找特定LSP协议方法的实现或搜索常见的LSP模式。

例子:

Query: "textDocument/hover"
Returns: All hover-related implementations

6. analyze_lsp_capabilities(limit: int = 10)

分析服务器中实现了哪些LSP功能。

退货:

  • 已实施的LSP功能列表
  • 相应的实现类
  • 覆盖率分析

7. find_protocol_handlers(limit: int = 10)

查找处理LSP协议消息的类(处理程序、提供者、服务、管理器)。

代码结构和质量工具

8. analyze_dependencies(class_name: str, limit: int = 15)

找出给定类所依赖的类/方法以及依赖于它的内容。

例子:

Query: "DocumentSymbolProvider"
Returns: Classes that reference or use this provider

9. find_design_patterns(pattern_type: str = "", limit: int = 15)

识别代码库中的常见设计模式。

支持的模式:

  • factory:工厂、创建者、构建者模式
  • observer:观察者、监听器、事件、处理程序模式
  • singleton:单例模式实现
  • adapter:适配器、包装图案
  • decorator:装饰图案
  • visitor:访问者模式实现
  • strategy:战略、政策模式
  • command:命令、动作、执行模式

10. get_method_hierarchy(method_name: str)

查找方法重写、实现和继承层次结构。

11. analyze_configuration()

查找配置文件、属性和设置代码。

12. get_file_structure_overview(limit: int = 15)

获取存储库文件结构和包组织的概述。

13. analyze_code_complexity()

分析代码复杂性指标,包括方法大小和控制结构。

14. find_error_handling_patterns()

在整个代码库中查找错误处理模式和异常使用情况。

存储库管理工具

15. reindex_repository()

重新索引存储库以获取新的更改。

建筑

组件

  1. JavaCodeIndexer:采用混合解析方法的核心索引引擎

    • 主要的,重要的:基于正则表达式的Java解析,用于可靠的代码分析
    • 后备方案:用于复杂场景的树型AST解析
    • 提取带有完整元数据的类、方法、字段和导入
    • 使用适当的索引在SQLite中存储结构化数据
  2. 服务器配置:配置管理系统

    • 环境变量处理与验证
    • 默认值管理和类型安全
    • 存储库路径和数据库配置
  3. FastMCP工具:综合工具套件(15+工具)

    • 搜索工具:通过相关性评分增强模糊搜索
    • 分析工具:存储库度量、复杂性分析、依赖关系映射
    • LSP工具:协议发现、能力分析、处理程序检测
    • 质量工具:设计模式识别、错误处理分析
    • 管理工具:重新编制索引和维护存储库
  4. 输出管理:智能响应处理

    • 大型结果集的分页
    • 可配置的限制,以防止压倒性的反应
    • 截断指标和汇总统计
    • 基于相关性的结果排名

数据库模式

服务器使用SQLite和以下主表:

  • files:文件元数据和内容
  • classes:类定义和层次结构
  • methods:方法签名和实现
  • fields:字段声明
  • imports:导入语句和依赖项

性能注意事项

索引性能

  • 初始索引时间:取决于存储库大小(对于大型存储库,通常为30-60秒)
  • 增量更新:仅重新处理更改的文件
  • 基于哈希的变化检测:高效的文件修改跟踪
  • 数据库迁移:自动更新架构以实现兼容性

查询性能

  • 索引搜索:快速查找名称、内容和元数据
  • 基于相关性的排名:带评分的多词模糊搜索
  • 可配置的结果限制:防止压倒性的反应(默认10-15个结果)
  • LRU查询缓存:经常访问的数据缓存在内存中
  • 分页支持:高效处理大型结果集

内存使用

  • SQLite存储:高效的基于磁盘的索引,内存占用最小
  • 正则表达式解析:与完全AST解析相比,内存使用率更低
  • 输出截断:长内容通过指示器自动缩短
  • 流媒体结果:增量处理大型查询

响应优化

  • 输出长度管理:自动分页和截断
  • 智能摘要:答复中强调的关键信息
  • 进度指标:对结果完整性的明确反馈
  • 错误边界:对解析和查询错误的巧妙处理

故障排除

常见问题

  1. “存储库未索引”错误

    • 确保 BALLERINA_REPO_PATH 设置正确
    • 检查路径是否存在并包含Java文件
    • 验证目录的读取权限
  2. 索引速度慢

    • 大型存储库最初可能需要几分钟的时间进行索引
    • 如果不需要,考虑排除测试目录
    • 监视SQLite数据库的磁盘空间
  3. 缺少搜索结果

    • 尝试使用重新索引 reindex_repository()
    • 检查文件是否最近被修改过
    • 验证是否支持文件扩展名(.java)
  4. 刀具输出太长

    • 所有工具现在都有内置的分页和输出限制
    • 使用 limit 控制结果计数的参数
    • 响应会自动截断,并带有明确的指示符
  5. 解析错误

    • 服务器使用基于正则表达式的健壮解析作为主要方法
    • 复杂代码结构的自动回退处理
    • 数据库架构会自动迁移以实现兼容性

日志记录

服务器使用Python的标准日志模块。设置日志级别:

import logging
logging.getLogger("ballerina-mcp").setLevel(logging.DEBUG)

发展

添加新的搜索功能

  1. 扩展 JavaCodeIndexer 类与新方法
  2. 添加相应的MCP工具功能
  3. 如果需要,更新数据库架构
  4. 添加新功能的测试

扩展语言支持

  1. 添加新的Tree sitter语言解析器
  2. 更新 ServerConfig.supported_extensions
  3. 修改中的解析逻辑 JavaCodeIndexer

相关项目