插件化MCP服务器

一个基于Quarkus的MCP服务器,支持通过插件系统扩展外部工具,适用于需要动态加载和执行工具的开发场景。

  • by s3rvy
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 s3rvy/servy-mcp

使用说明

servy mcp

基于Quarkus的MCP服务器,支持外部工具插件。

建筑

此MCP服务器结合了两个强大的功能:

  1. 用于核心MCP协议实现的Quarkus MCP服务器SSE扩展
  2. 一个插件系统,允许在外部开发工具并通过Java的ServiceLoader加载

快速开始

在开发模式下构建和运行:

./gradlew quarkusDev

服务器公开了两个MCP端点:

  • /mcp -流式HTTP端点(推荐)
  • /mcp/sse -服务器发送事件端点

您可以使用MCP检查器与服务器交互:

npx @modelcontextprotocol/inspector

外部工具开发

工具可以作为单独的模块/JAR开发,并添加到MCP服务器中。方法如下:

  1. 创建一个新的Java项目并添加Tool API依赖项:
dependencies {
    implementation 'com.servy:mcp-tool-api:1.0.0'  // The Tool interface
}
  1. 实现工具界面:
public class MyTool implements Tool {
    @Override
    public String name() {
        return "mytool";
    }

    @Override
    public String description() {
        return "Description of what my tool does";
    }

    @Override
    public ToolResult execute(String input) {
        return ToolResult.builder()
            .toolName(name())
            .success(true)
            .output("Result: " + input)
            .build();
    }
}
  1. 通过注册您的工具 META-INF/services: 创建 src/main/resources/META-INF/services/tool.de.floydkretschmar.mcp.Tool 包含:
com.example.MyTool
  1. 将您的工具构建为JAR并将其添加到MCP服务器的类路径中。

工作原理

  1. 启动时,MCP服务器:

    • 通过ServiceLoader发现外部工具
    • 在Quarkus MCP的ToolManager中注册每个工具
    • 处理适当的生命周期和执行上下文
  2. 当调用工具时:

    • 请求通过MCP协议传入
    • ToolManager将路由到相应的处理程序
    • 外部工具在执行时进行了适当的错误处理
    • 结果通过MCP协议返回

建筑

构建项目:

./gradlew build

运行测试:

./gradlew test

后续步骤

  • 添加示例外部工具模块
  • 添加动态插件加载(JAR的热重新加载)
  • 添加指标和监控
  • 添加身份验证/授权