这是一个基于 Model Context Protocol (MCP) 构建的后端服务,旨在让大型语言模型(LLM)或其他 MCP 客户端能够与 SDKMAN 工具交互,从而管理和查询各种开发工具包(SDK)。
项目简介
SDKMAN! MCP 后端服务将常用的 SDKMAN 命令行操作封装成 MCP 协议可识别的工具(Tools)和资源(Resources),使得 LLM 可以通过结构化的方式调用这些功能,例如列出可用 SDK、安装特定版本、查询当前配置等,而无需直接解析命令行输出或与交互式界面打交道。
主要功能点
- 管理多种 SDK:支持通过调用工具来列出、安装、卸载 Java, Kotlin, Gradle, Maven 等所有通过 SDKMAN 管理的候选软件。
- 查询版本信息:提供工具和资源来获取特定 SDK 的可用版本列表、当前使用的版本以及安装路径。
- 配置 SDKMAN:提供工具来执行 SDKMAN 的维护操作,例如更新候选列表、切换离线模式、刷新本地缓存等。
- 通过 MCP 协议暴露能力:将 SDKMAN 的功能封装为标准化的 MCP 工具和资源,供任何兼容的 LLM 或客户端调用。
安装步骤
- 前提条件:
- 确保您的系统已安装 Python 3.6 或更高版本。
- 确保您的系统已安装 SDKMAN 工具,并且 SDKMAN 环境变量已正确配置(通常是通过 '.bashrc', '.zshrc' 等文件 'source $HOME/.sdkman/bin/sdkman-init.sh')。
- 克隆仓库:将本项目的代码克隆到您的本地机器上。
git clone https://github.com/ocean-zhc/sdkman-mcp.git cd sdkman-mcp - 安装依赖:在仓库根目录下,使用 pip 安装本项目及其依赖。
(注意:如果开发环境,可以使用 'pip install -e .' 进行可编辑安装)pip install .
服务器配置(供 MCP 客户端使用)
本服务是作为一个后台进程运行,供 MCP 客户端(通常集成在您的 LLM 框架或应用中)连接使用的。MCP 客户端需要知道如何启动此服务进程并与其建立通信。典型的 MCP 客户端配置会包含服务的名称、启动服务的命令行及其参数。
根据本仓库的结构,启动 SDKMAN MCP 服务的标准命令是通过 Python 的模块执行方式。因此,供 MCP 客户端使用的配置信息大致如下:
- 服务名称 (name): SDKMAN
- 启动命令 (command): python (或者您的 Python 解释器完整路径,例如 '/usr/bin/env python3')
- 参数 (args): '["-m", "src.sdkman_mcp.main"]' (这是告诉 Python 解释器作为模块运行 'src.sdkman_mcp.main' 文件)
- 描述 (description): SDKMAN! SDK Manager for managing parallel versions of multiple SDKs (或其他描述)
这些信息会整合到 MCP 客户端的配置文件中,例如一个可能的 JSON 格式配置片段可能看起来像这样(请注意,具体格式取决于您使用的 MCP 客户端实现):
{ "servers": [ { "name": "SDKMAN", "command": "python", "args": ["-m", "src.sdkman_mcp.__main__"], "description": "SDKMAN! SDK Manager for managing parallel versions of multiple SDKs", "transport": "stdio" // 或其他支持的传输协议,例如 sse, websocket // 客户端可能需要其他配置,如超时时间等 } // 如果有其他 MCP 服务,会在此处列出 ] }
MCP 客户端会读取此类配置,并在需要时启动 'command' 中指定的进程,将自身作为该进程的标准输入/输出(如果使用 stdio 传输),然后通过 JSON-RPC 协议进行通信。
基本使用方法
一旦 MCP 客户端成功连接到 SDKMAN MCP 服务,LLM 就可以通过调用服务暴露的工具和访问资源来间接执行 SDKMAN 操作。LLM 通常会根据用户的指令,通过客户端框架自动调用相应的工具或访问资源。
例如:
- 用户:“列出所有可用的 Java 版本。” LLM 通过客户端调用 'sdk_list_versions' 工具,参数 'candidate="java"'。
- 用户:“安装 Java 21 的最新版本。” LLM 通过客户端调用 'sdk_install_version' 工具,参数 'candidate="java"', 'version="21"'(或者具体的版本标识符)。
- 用户:“现在使用的是哪个版本的 Gradle?” LLM 通过客户端调用 'sdk_current_version' 工具,参数 'candidate="gradle"',或者访问 'sdkman://current' 资源并解析结果。
- 用户:“获取 Java 17 的安装路径。” LLM 通过客户端调用 'sdk_get_home' 工具,参数 'candidate="java"', 'version="17"'。
具体的工具和资源名称、参数、返回格式等详细信息,LLM 客户端可以在连接服务后,通过标准的 MCP 能力声明(Capabilities)机制获取。
信息
分类
开发者工具