使用说明
项目简介
这是一个基于 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 服务器与客户端的通信通道。
安装步骤
- 环境准备: 确保已安装 JDK 17 或更高版本。
- 克隆仓库: 将 GitHub 仓库 'https://github.com/satai/mcp-micronaut-poc' 克隆到本地。
- 构建项目: 在项目根目录下运行 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 应用。
基本使用方法
-
定义工具: 创建一个 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" } } -
运行服务器: 在项目根目录下运行 './gradlew run' 命令启动 MCP 服务器。服务器将监听标准输入,并将结果输出到标准输出。
-
客户端调用: 使用 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 服务器。
信息
分类
开发者工具