使用说明

项目简介

Quarkus MCP Server是 Model Context Protocol (MCP) 的一个实现,它基于流行的Java云原生框架Quarkus构建。该项目旨在为开发者提供一个易于使用、高效且可扩展的平台,用于构建MCP服务器,从而帮助LLM应用更好地管理和利用外部上下文信息和功能。通过使用Quarkus MCP Server,开发者可以专注于业务逻辑的实现,而无需过多关注底层协议和框架的细节。

主要功能点

  • 资源 (Resources) 管理: 允许开发者托管和管理各种类型的数据资源,并通过标准化的URI进行访问,为LLM应用提供结构化或非结构化数据。
  • 工具 (Tools) 注册与执行: 支持将外部功能注册为工具,并允许LLM客户端通过MCP协议远程调用这些工具,扩展LLM的能力边界,例如调用API、执行计算或访问特定服务。
  • Prompt 模板 (Prompts) 定义与渲染: 提供Prompt模板的定义和管理功能,支持参数化Prompt,使得LLM交互更加灵活和可定制,可以根据不同的上下文和需求生成不同的Prompt。
  • 基于注解的API: 采用声明式的注解 ('@Tool', '@Prompt', '@Resource' 等) 简化服务器端点的开发,开发者只需在CDI Bean的方法上添加注解即可快速发布MCP功能。
  • 多种传输协议支持: 默认支持HTTP/SSE协议,同时通过依赖项切换,也支持STDIO协议,满足不同应用场景的需求。
  • JSON-RPC通信: 遵循MCP协议规范,使用JSON-RPC协议与客户端进行通信,保证了互操作性和标准化。
  • 会话管理和能力声明: 服务器端负责管理客户端会话,并在初始化时向客户端声明自身提供的能力,方便客户端了解服务器的功能。

安装步骤

  1. 添加Maven依赖: 在您的Quarkus项目的 'pom.xml' 文件中,添加Quarkus MCP Server扩展的依赖。您可以根据需要选择SSE或STDIO传输方式:

    SSE (Server-Sent Events) 传输 (推荐用于Web应用)

    <dependency>
        <groupId>io.quarkiverse.mcp</groupId>
        <artifactId>quarkus-mcp-server-sse</artifactId>
        <version>${quarkus.platform.version}</version>
    </dependency>

    STDIO 传输 (适用于命令行工具或本地集成)

    <dependency>
        <groupId>io.quarkiverse.mcp</groupId>
        <artifactId>quarkus-mcp-server-stdio</artifactId>
        <version>${quarkus.platform.version}</version>
    </dependency>

    注意: '${quarkus.platform.version}' 需要替换为您实际使用的Quarkus平台版本。建议使用最新版本以获得最佳体验。

  2. 创建服务器功能类: 创建一个Java类(例如 'ServerFeatures.java'),并将其注册为CDI Bean ('@Singleton')。在该类中,使用'@Tool', '@Prompt', '@Resource' 等注解来声明您的MCP服务器功能。参考示例代码:

    import jakarta.inject.Inject;
    import jakarta.inject.Singleton;
    import io.quarkiverse.mcp.server.BlobResourceContents;
    import io.quarkiverse.mcp.server.Prompt;
    import io.quarkiverse.mcp.server.PromptArg;
    import io.quarkiverse.mcp.server.PromptMessage;
    import io.quarkiverse.mcp.server.Tool;
    import io.quarkiverse.mcp.server.Resource;
    import io.quarkiverse.mcp.server.RequestUri;
    import io.quarkiverse.mcp.server.TextContent;
    
    @Singleton
    public class ServerFeatures {
    
        @Inject
        CodeService codeService; // 假设您有一个CodeService
    
        @Tool(description = "将字符串值转换为小写")
        String toLowerCase(String value) {
            return value.toLowerCase();
        }
    
        @Prompt(name = "code_assist")
        PromptMessage codeAssist(@PromptArg(name = "lang") String language) {
            return PromptMessage.withUserRole(new TextContent(codeService.assist(language)));
        }
    
        @Resource(uri = "file:///project/alpha")
        BlobResourceContents alpha(RequestUri uri) throws IOException{
            // 实际读取文件内容逻辑
            byte[] content = "dummy content".getBytes(); // 替换为实际文件读取
            return BlobResourceContents.create(uri.value(), content);
        }
    }

    注意: 示例代码中的 'CodeService' 仅为演示目的,您需要根据实际业务逻辑实现相应的服务。 '@Resource' 注解中的 'file:///project/alpha' URI 和文件读取部分也需要根据您的实际资源进行调整。

  3. 运行Quarkus应用: 使用Quarkus CLI 或 Maven 命令运行您的应用。

    ./mvnw quarkus:dev   # 开发模式
    ./mvnw package -Dnative  # 构建本地可执行程序
    java -jar ./target/quarkus-app/quarkus-run.jar  # 运行打包后的程序

服务器配置

MCP客户端需要配置服务器的启动命令和参数才能连接。以下是Quarkus MCP Server的典型配置信息 (JSON 格式),请根据您选择的传输协议和实际部署情况进行调整。

SSE 传输配置示例 (用于MCP客户端配置)

{
  "serverName": "Quarkus-MCP-SSE-Server",  //  服务器名称,可自定义
  "command": "java",   //  运行命令,通常为java
  "args": [
    "-jar",
    "./target/quarkus-app/quarkus-run.jar" //  Quarkus应用JAR包路径,根据实际打包路径调整
  ],
  "transport": "sse",   //  指定传输协议为SSE
  "baseUrl": "http://localhost:8080"  //  服务器基础URL,Quarkus默认端口为8080,可根据实际情况调整
}

STDIO 传输配置示例 (用于MCP客户端配置)

{
  "serverName": "Quarkus-MCP-STDIO-Server",  // 服务器名称,可自定义
  "command": "java",   // 运行命令,通常为java
  "args": [
    "-jar",
    "./target/quarkus-app/quarkus-run.jar"  // Quarkus应用JAR包路径,根据实际打包路径调整
  ],
  "transport": "stdio"   // 指定传输协议为STDIO
}

注意:

  • 'serverName' 字段用于标识您的MCP服务器,可以自定义。
  • 'command' 和 'args' 字段指定了启动Quarkus MCP Server的命令。请根据您的打包方式 (JAR 或 Native Image) 和实际路径进行调整。
  • 'transport' 字段指定了MCP客户端与服务器通信的传输协议 ('sse' 或 'stdio'),需要与您在 'pom.xml' 中添加的依赖项以及服务器实际运行配置保持一致。
  • SSE 配置示例中,'baseUrl' 指定了服务器的根URL。 请确保端口与您的Quarkus应用配置一致 (默认 8080)。 STDIO 传输不需要 'baseUrl'。

基本使用方法

  1. 定义MCP功能: 通过在CDI Bean的方法上添加 '@Tool', '@Prompt', '@Resource', '@ResourceTemplate' 和相关的参数注解 ('@ToolArg', '@PromptArg', '@ResourceTemplateArg') 来声明服务器提供的工具、Prompt模板和资源。
  2. 实现业务逻辑: 在注解方法中编写具体的业务逻辑代码,例如数据查询、外部API调用、Prompt生成等。
  3. 运行服务器: 启动您的Quarkus MCP Server应用。
  4. 配置MCP客户端: 在您的MCP客户端应用中,配置上面生成的服务器连接信息 (JSON)。
  5. 客户端调用: 使用MCP客户端API,根据MCP协议规范,向Quarkus MCP Server发送请求 (例如调用工具、获取Prompt、读取资源),并处理服务器返回的响应。

详细的API和功能使用方法,请参考项目提供的完整文档: https://quarkiverse.github.io/quarkiverse-docs/quarkus-mcp-server/dev/index.html.

信息

分类

开发者工具