返回市场
巴勒里娜语言服务器MCP服务器

巴勒里娜语言服务器MCP服务器

作者:dan-niles2 星标更新:2025-09-05

项目介绍

Ballerina 语言服务器 MCP 服务器

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

安装

先决条件

  • Claude Desktop
  • Git(用于克隆仓库)
  • uv - 更轻松地运行 Python 脚本 :)

设置

  1. 克隆此仓库
  2. 安装依赖项:使用 uv
uv sync
  1. 更新 claude_desktop_config.json 文件以包含 MCP 服务器路径,以便与 Claude Desktop 一起使用此 MCP 服务器。该文件应位于:
/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 语言服务器代码库。您可以通过点击 搜索和工具 按钮并观察菜单中的 ballerina-language-server MCP 服务器来验证 Claude Desktop 是否识别该 MCP 服务器。

<img width="429" height="460" alt="image" src="https://gips3.baidu.com/it/u=187184085,2501289949&fm=3081&app=3081&f=PNG?w=858&h=920" />

可用的 MCP 工具

核心搜索与分析工具

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

通过代码库进行增强的模糊搜索,并带有相关性评分和多词匹配。

示例:

查询: "completion provider"
返回: 排序结果,包括与完成相关的类和方法

2. get_class_info(class_name: str)

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

示例:

查询: "CompletionProvider"
返回: 完整的类定义、方法和上下文

3. get_repository_stats()

获取关于已索引存储库的综合统计信息。

返回:

  • 文件数量及其分布
  • 按类数量排名的顶级包
  • 按行数排名的最大类
  • 索引健康度量

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

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

示例:

查询: "getCompletion"
返回: getCompletion, getCompletions, findCompletion 等

LSP 协议分析工具

5. find_lsp_protocol_implementations(protocol_method: str = "")

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

示例:

查询: "textDocument/hover"
返回: 所有与悬停相关的实现

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)

查找给定类依赖的类/方法以及依赖于它的类。

示例:

查询: "DocumentSymbolProvider"
返回: 引用或使用此提供者的类

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 解析,确保可靠的代码分析
    • 备用: Tree-sitter AST 解析,适用于复杂场景
    • 提取类、方法、字段和导入语句,附带完整的元数据
    • 将结构化数据存储在 SQLite 中,并进行适当的索引
  2. ServerConfig: 配置管理系统

    • 处理环境变量并进行验证
    • 默认值管理和类型安全
    • 存储库路径和数据库配置
  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 中的解析逻辑

相关项目