Ballerina语言服务器MCP服务器
一个智能模型上下文协议(MCP)服务器,用于查询和分析Java语言服务器代码库,专门为Ballerina语言服务器项目设计。
安装
先决条件
- 克劳德桌面
- Git(用于克隆存储库)
- 紫外线 -运行Python脚本的更简单方法:)
设置
- 克隆此存储库
- 安装依赖项:使用uv
uv sync- 更新
claude_desktop_config.json包括MCP服务器路径、将此MCP服务器与Claude Desktop一起使用。它应该位于:
/Users/[your_username]/Library/Application Support/Claude/claude_desktop_config.json- 在中添加以下条目
claude_desktop_config.json:
{
"mcpServers": {
"ballerina-language-server": {
"command": "uv",
"args": [
"--directory",
"
",
"run",
"--active",
"run.py"
],
"env": {
"BALLERINA_REPO_PATH": "
"
}
}
}
}- 重新启动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 methods2. get_class_info(class_name: str)
获取特定类的详细信息,包括所有方法和字段。
例子:
Query: "CompletionProvider"
Returns: Full class definition, methods, and context3. 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 implementations6. 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 provider9. 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()
重新索引存储库以获取新的更改。
建筑
组件
- JavaCodeIndexer:采用混合解析方法的核心索引引擎
- 主要的,重要的:基于正则表达式的Java解析,用于可靠的代码分析 - 后备方案:用于复杂场景的树型AST解析 - 提取带有完整元数据的类、方法、字段和导入 - 使用适当的索引在SQLite中存储结构化数据
- 服务器配置:配置管理系统
- 环境变量处理与验证 - 默认值管理和类型安全 - 存储库路径和数据库配置
- FastMCP工具:综合工具套件(15+工具)
- 搜索工具:通过相关性评分增强模糊搜索 - 分析工具:存储库度量、复杂性分析、依赖关系映射 - LSP工具:协议发现、能力分析、处理程序检测 - 质量工具:设计模式识别、错误处理分析 - 管理工具:重新编制索引和维护存储库
- 输出管理:智能响应处理
- 大型结果集的分页 - 可配置的限制,以防止压倒性的反应 - 截断指标和汇总统计 - 基于相关性的结果排名
数据库模式
服务器使用SQLite和以下主表:
files:文件元数据和内容classes:类定义和层次结构methods:方法签名和实现fields:字段声明imports:导入语句和依赖项
性能注意事项
索引性能
- 初始索引时间:取决于存储库大小(对于大型存储库,通常为30-60秒)
- 增量更新:仅重新处理更改的文件
- 基于哈希的变化检测:高效的文件修改跟踪
- 数据库迁移:自动更新架构以实现兼容性
查询性能
- 索引搜索:快速查找名称、内容和元数据
- 基于相关性的排名:带评分的多词模糊搜索
- 可配置的结果限制:防止压倒性的反应(默认10-15个结果)
- LRU查询缓存:经常访问的数据缓存在内存中
- 分页支持:高效处理大型结果集
内存使用
- SQLite存储:高效的基于磁盘的索引,内存占用最小
- 正则表达式解析:与完全AST解析相比,内存使用率更低
- 输出截断:长内容通过指示器自动缩短
- 流媒体结果:增量处理大型查询
响应优化
- 输出长度管理:自动分页和截断
- 智能摘要:答复中强调的关键信息
- 进度指标:对结果完整性的明确反馈
- 错误边界:对解析和查询错误的巧妙处理
故障排除
常见问题
- “存储库未索引”错误
- 确保 BALLERINA_REPO_PATH 设置正确 - 检查路径是否存在并包含Java文件 - 验证目录的读取权限
- 索引速度慢
- 大型存储库最初可能需要几分钟的时间进行索引 - 如果不需要,考虑排除测试目录 - 监视SQLite数据库的磁盘空间
- 缺少搜索结果
- 尝试使用重新索引 reindex_repository() - 检查文件是否最近被修改过 - 验证是否支持文件扩展名(.java)
- 刀具输出太长
- 所有工具现在都有内置的分页和输出限制 - 使用 limit 控制结果计数的参数 - 响应会自动截断,并带有明确的指示符
- 解析错误
- 服务器使用基于正则表达式的健壮解析作为主要方法 - 复杂代码结构的自动回退处理 - 数据库架构会自动迁移以实现兼容性
日志记录
服务器使用Python的标准日志模块。设置日志级别:
import logging
logging.getLogger("ballerina-mcp").setLevel(logging.DEBUG)发展
添加新的搜索功能
- 扩展
JavaCodeIndexer类与新方法 - 添加相应的MCP工具功能
- 如果需要,更新数据库架构
- 添加新功能的测试
扩展语言支持
- 添加新的Tree sitter语言解析器
- 更新
ServerConfig.supported_extensions - 修改中的解析逻辑
JavaCodeIndexer
相关项目
- FastMCP -MCP服务器框架
- 树保姆 -代码解析库
- Ballerina语言服务器 -目标语言服务器
