Quarkus MCP服务器示例
一个全面的例子,演示如何构建 模型上下文协议(MCP)服务器 使用 夸库斯 将REST API操作公开为AI工具。这使得像Claude这样的大型语言模型能够通过自然语言使用 Goose命令行界面.
🎯 此示例演示了什么
该项目展示了三种强大技术的集成:
- 夸库斯:用于构建现代应用程序的超音速亚原子Java框架
- MCP(模型上下文协议):将人工智能助手连接到数据源和工具的开放标准
- Goose命令行界面:AI驱动的开发助手,可以与MCP服务器交互
📋 目录
🔗 什么是MCP?
模型上下文协议(MCP) 是一个开放标准,使人工智能助手能够安全地连接到各种数据源和工具并与之交互。MCP提供了一种通用协议,用于:
- 工具发现:AI助手可以发现可用的工具
- 工具执行:在外部系统上安全执行操作
- 数据访问:从各种来源检索和操作数据
- 标准化:一种实现方式适用于任何兼容MCP的AI助手
MCP优势
- 互操作性:可与任何兼容MCP的AI助手配合使用
- 安全:对外部资源的受控访问
- 可扩展性:易于添加新工具和功能
- 标准化:无需为每个AI助手定制集成
⚡ Quarkus是什么?
夸库斯 是一个专为现代应用程序开发而设计的Kubernetes原生Java框架:
- 快速启动:亚秒级启动时间
- 内存使用率低:针对容器化环境进行了优化
- 开发者喜悦:实时重新加载、统一配置和出色的工具
- 云原生:为Kubernetes、无服务器和微服务构建
- 基于标准:使用熟悉的Java标准(JAX-RS、CDI、JPA)
MCP的Quarkus
Quarkus是MCP服务器的理想选择,因为:
- 迅速发展:快速反馈循环,实时重新加载
- 轻量级:工具服务器的资源使用率最低
- 本地编译:使用GraalVM超快速启动
- 丰富的生态系统:数据库、REST客户端等的广泛扩展。
🦆 鹅是什么?
鹅 是一个基于人工智能的开发助手CLI,通过以下方式帮助开发人员:
- 自然语言接口:使用简单的英语与您的开发环境进行交互
- MCP集成:连接到MCP服务器以访问外部工具和数据
- 情境感知:了解你的项目结构和代码库
- 工具执行:可以执行命令、修改文件和与API交互
- 多模型支持:与各种法学硕士合作,包括Claude、GPT等。
带MCP的鹅
当与MCP服务器结合使用时,Goose可以:
- 通过自然语言查询数据库
- 无需手动curl命令即可与REST API交互
- 通过组合多种工具执行复杂的操作
- 根据您的应用程序数据提供智能见解
🏗️ 解决方案架构
┌─────────────────────────────────────────────────────────────────────────────┐
│ MCP Integration Flow │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ MCP Protocol ┌─────────────────┐ REST API ┌──────────────┐
│ │ (JSON-RPC over │ │ (HTTP/JSON) │ │
│ Goose │◄───────────────────►│ Quarkus MCP │◄──────────────►│ Quarkus │
│ CLI │ STDIO/SSE) │ Server │ │ Applications │
│ │ │ │ │ MS │
└─────────────┘ └─────────────────┘ └──────────────┘
│ │ │
│ │ │
┌──────▼──────┐ ┌─────▼─────┐ ┌───────▼───────┐
│ │ │ │ │ │
│ Claude │ │ MCP Tools │ │ PostgreSQL │
│ LLM │ │ │ │ Database │
│ │ │ • list │ │ │
└─────────────┘ │ • get │ └───────────────┘
│ • filter │
│ • add │
└───────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Data Flow │
└─────────────────────────────────────────────────────────────────────────────┘
1. User asks Goose: "Show me all applications from Spain"
↓
2. Goose sends MCP request to discover available tools
↓
3. MCP Server exposes tools: list_applications, get_applications_by_country, etc.
↓
4. Goose calls get_applications_by_country("Spain") tool
↓
5. MCP Server makes REST call to Applications MS
↓
6. Applications MS queries PostgreSQL database
↓
7. Results flow back through the chain to Goose
↓
8. Goose presents results to user in natural language组件责任
| 组件 | 用途 | 技术 |
|---|---|---|
| Goose命令行界面 | AI助手界面、自然语言处理 | Go、LLM集成 |
| Quarkus MCP服务器 | 协议桥、工具定义 | Quarkus、MCP协议 |
| Quarkus应用程序MS | 业务逻辑、数据操作 | Quarkus、JAX-RS、Hibernate |
| PostgreSQL | 数据持久性 | 关系数据库 |
先决条件
在运行此示例之前,请确保已安装以下内容:
- Java 21:Quarkus应用程序需要
- 梅文:Java项目的构建工具
- 波德曼/Docker:PostgreSQL数据库的容器运行时
- Goose命令行界面:AI辅助工具(安装指南)
安装Goose
# Using Go (requires Go 1.21+)
go install github.com/square/goose@latest
# Or download binary from releases
# https://github.com/square/goose/releases🚀 运行示例
第一步:构建项目
mvn clean package步骤2:启动PostgreSQL数据库
podman run -d --name db-server \
-e POSTGRES_USER=test \
-e POSTGRES_PASSWORD=test \
-e POSTGRES_DB=applications \
-p 5432:5432 \
postgres:16步骤3:启动应用程序微服务
cd quarkus-applications-ms && mvn quarkus:dev应用程序服务将于启动 http://localhost:8080
步骤4:(可选)添加示例数据
curl -i -X POST \
-F "name=Angel" \
-F "surname=Miralles" \
-F "personalId=12345R" \
-F "country=Spain" \
http://localhost:8080/application.html
curl -i -X POST \
-F "name=Juan" \
-F "surname=Garcia" \
-F "personalId=31234R" \
-F "country=Spain" \
http://localhost:8080/application.html
curl -i -X POST \
-F "name=Pedro" \
-F "surname=Rodriguez" \
-F "personalId=54321R" \
-F "country=Germany" \
http://localhost:8080/application.html步骤5:使用MCP服务器启动Goose
goose session --with-extension="java -jar quarkus-mcp-server/target/quarkus-mcp-server-1.0.0-SNAPSHOT.jar"💡 使用示例
一旦Goose与MCP服务器一起运行,您就可以使用自然语言与应用程序数据进行交互:
基本查询
> Show me all applications in the system
> List applications from Spain
> Get application with ID 1过滤查询
> Show me all applications from France with COMPLETED status
> List all STARTED applications
> Find applications from Germany数据管理
> Add a new application for John Doe from USA with ID 67890
> Create an application for Maria Garcia from Mexico可用的MCP工具
MCP服务器向Goose公开这些工具:
| 工具名称 | 描述 | 参数 |
|---|---|---|
list_applications | 列出所有应用程序 | 无 |
get_application_by_id | 获取特定应用 | id: Long |
get_applications_by_country | 按国家筛选 | countryName: String |
get_applications_by_country_and_status | 按国家和状态筛选 | countryName: String, status: ApplicationStatus |
add_application | 创建新应用程序 | application: Application |
应用程序状态值
STARTEDPREPROCESSEDPROCESSEDCOMPLETEDCANCELEDERROR
🔧 发展
开发模式
# Start applications service in dev mode (hot reload)
cd quarkus-applications-ms && mvn quarkus:dev
# Package MCP server for testing
cd quarkus-mcp-server && mvn package项目结构
quarkus-mcp-server-example/
├── quarkus-applications-ms/ # REST API microservice
│ ├── src/main/java/me/amiralles/applications/
│ │ ├── boundary/ApplicationsResource.java # REST endpoints
│ │ ├── entity/Application.java # JPA entity
│ │ └── control/ApplicationExceptionMapper.java
│ └── src/main/resources/application.properties
├── quarkus-mcp-server/ # MCP server
│ ├── src/main/java/me/amiralles/mcp/
│ │ ├── McpApplicationsServer.java # MCP tools definition
│ │ ├── client/ApplicationsClient.java # REST client
│ │ └── model/Application.java # Data models
│ └── src/test/java/
└── deployment/docker-compose/ # Monitoring stack🔗 参考文献
📄 许可证
本项目作为教育目的的示例提供。
