使用说明

项目简介

这是一个基于 Micronaut 框架构建的 Model Context Protocol (MCP) 服务器的概念验证 (PoC) 项目。它演示了如何将 Micronaut Bean 暴露为 MCP 工具,并允许 MCP 客户端通过标准输入/输出调用这些工具。

请注意: 这只是一个 PoC 示例应用,功能不完整,仅供学习和演示 MCP 工具功能集成到 Micronaut 框架中使用。

主要功能点

  • 工具注册与发现: 允许开发者通过简单的注解 ('@Tool', '@ToolArg') 将 Micronaut Bean 中的方法注册为 MCP 工具。服务器启动时自动扫描并注册这些工具。
  • 工具调用: 支持通过 MCP 协议 (JSON-RPC over Stdio) 接收客户端的工具调用请求并执行相应的 Micronaut Bean 方法。
  • 参数和返回值类型转换: 支持基本数据类型(int, boolean, number, string)及其数组作为工具的参数和返回值,并进行 MCP 协议类型与 Java 类型的转换。
  • 标准输入/输出通信: 使用标准输入/输出 (Stdio) 作为 MCP 服务器与客户端的通信通道。

安装步骤

  1. 环境准备: 确保已安装 JDK 17 或更高版本。
  2. 克隆仓库: 将 GitHub 仓库 'https://github.com/satai/mcp-micronaut-poc' 克隆到本地。
  3. 构建项目: 在项目根目录下运行 Gradle 命令 './gradlew build' 进行项目构建。

服务器配置

MCP 客户端需要配置以下 JSON 信息以连接到此 MCP 服务器:

{
  "serverName": "micronaut-mcp-poc",
  "command": "./gradlew",
  "args": ["run"]
}

配置参数说明:

  • 'serverName': MCP 服务器的名称,可以自定义,用于客户端标识。 例如 "micronaut-mcp-poc-server"。
  • 'command': 启动 MCP 服务器的命令。 这里使用 Gradle Wrapper 启动,所以命令为 './gradlew'。 请确保在项目根目录下运行客户端,或者将 './gradlew' 替换为 Gradle 可执行文件的完整路径。
  • 'args': 启动命令的参数。 这里使用 'run' 参数来运行 Gradle 应用。

基本使用方法

  1. 定义工具: 创建一个 Micronaut '@Singleton' Bean,并在需要暴露为 MCP 工具的方法上添加 '@Tool' 注解。使用 '@ToolArg' 注解描述工具方法的参数。

    import jakarta.inject.Singleton
    import cz.nekola.micronaut.mcp.Tool
    import cz.nekola.micronaut.mcp.ToolArg
    
    @Singleton
    class MyTool {
        @Tool(
            name = "myTool",
            description = "一个示例工具,用于演示 MCP 工具的创建"
        )
        fun doSomething(
            @ToolArg(description = "字符串参数") param1: String,
            @ToolArg(description = "整数参数") param2: Int
        ): String {
            return "工具执行结果: $param1, $param2"
        }
    }
  2. 运行服务器: 在项目根目录下运行 './gradlew run' 命令启动 MCP 服务器。服务器将监听标准输入,并将结果输出到标准输出。

  3. 客户端调用: 使用 MCP 客户端,根据上述服务器配置连接到该服务器。客户端可以使用 JSON-RPC 协议通过标准输入发送工具调用请求。具体的请求格式请参考 MCP 协议文档。服务器会将工具执行结果以 JSON-RPC 响应的形式通过标准输出返回给客户端。

示例工具调用 (JSON-RPC request 通过标准输入发送给服务器):

{
  "jsonrpc": "2.0",
  "method": "callTool",
  "params": {
    "toolName": "myTool",
    "arguments": {
      "param1": "hello",
      "param2": 123
    }
  },
  "id": "1"
}

服务器响应 (JSON-RPC response 通过标准输出返回给客户端):

{
  "jsonrpc": "2.0",
  "result": "工具执行结果: hello, 123",
  "id": "1"
}

局限性:

  • 仅为 PoC 示例,功能不完整。
  • 目前仅支持通过标准输入/输出 (Stdio) 进行通信。
  • 仅实现了工具 (Tools) 功能,资源 (Resources) 和 Prompt 模板 (Prompts) 功能未实现。
  • 参数类型和返回值类型支持有限,仅支持 int, boolean, number, string 及其一维或多维数组。
  • 工具方法的返回值目前仅支持 String 类型,不支持图片、音乐等复杂类型。
  • 服务器配置功能有限。

尽管存在局限性,此项目仍然提供了一个关于如何使用 Micronaut 框架构建 MCP 工具服务器的清晰示例。开发者可以参考此 PoC 项目,扩展其功能,构建更完善的 MCP 服务器。

信息

分类

开发者工具