Quarkus MCP服务器
基于Quarkus的通用MCP(模型上下文协议)服务器。通过单个JAR支持JDBC数据库,文件系统,Docker容器等。
🚀 快速设置
1.安装JDK 17
该项目需要 JDK 17。使用自动脚本下载并配置:
# Setup automatico JDK 17
./setup-jdk17.shLo脚本:
- 自动检测架构(x64、aarch64)和操作系统(Linux、macOS)
- 从 Eclipse Temurin 下载 JDK 17
- 设置 JAVA_HOME 和 PATH 环境变量
- 创建配置文件
jdk17/jdk-env.sh用于未来的再利用
安装后,加载 JDK 环境:
source jdk17/jdk-env.sh2. 汇编
配置 JDK 17 后,编译项目:
# Compila tutti i moduli (senza test per velocità)
./build-no-tests.sh该命令将在:
jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar-服务器JDBCfilesystem/target/mcp-server-filesystem-999-SNAPSHOT.jar-服务器文件系统containers/target/mcp-server-containers-999-SNAPSHOT.jar-服务器容器jvminsight/target/mcp-server-jvminsight-999-SNAPSHOT.jar-服务器JVM洞察
🐳 使用 Docker
建立 Docker 映像
# Builda l'immagine Docker con tutti i server
./docker-mcp.sh build服务器JDBC
# Oracle (richiede Oracle su localhost:1521)
./docker-mcp.sh oracle
# Oracle in modalità read-only (solo lettura)
./docker-mcp.sh run jdbc --jdbc.url="jdbc:oracle:thin:@localhost:1521:xe" --jdbc.user="ORACLEUSR" --jdbc.password="ORACLEUSR" --jdbc.readonly=true
# H2 in memoria
./docker-mcp.sh h2
# Server JDBC generico
./docker-mcp.sh run jdbc --jdbc.url="jdbc:postgresql://localhost:5432/mydb" --jdbc.user="user" --jdbc.password="pass"
# MySQL in modalità read-only
./docker-mcp.sh run jdbc --jdbc.url="jdbc:mysql://localhost:3306/mydb" --jdbc.user="root" --jdbc.password="toor" --jdbc.readonly=true
# PostgreSQL in modalità read-only
./docker-mcp.sh run jdbc --jdbc.url="jdbc:postgresql://localhost:5432/mydb" --jdbc.user="postgres" --jdbc.password="postgres" --jdbc.readonly=true
# Server JDBC in modalità read-only
./docker-mcp.sh run jdbc --jdbc.url="jdbc:postgresql://localhost:5432/mydb" --jdbc.user="user" --jdbc.password="pass" --jdbc.readonly=true服务器文件系统
# Monta /tmp come directory condivisa
./docker-mcp.sh filesystem /tmp
# Directory personalizzata
./docker-mcp.sh filesystem /path/to/directory其他服务器
# Container Docker
./docker-mcp.sh run containers
# JVM Insights
./docker-mcp.sh run jvminsight⚙️ MCP 配置
自动生成
自动生成 Claude Desktop 的 MCP 配置:
./docker-mcp.sh config这将创建文件 mcp-docker-config.json 配置为:
- 服务器JDBC Oracle
- 服务器JDBC H2
- 服务器文件系统
- 服务器容器
- 服务器JVM洞察
Claude Desktop 手动配置
Linux/macOS
将生成的文件内容复制到:
~/.config/claude/claude_desktop_config.json视窗
%APPDATA%/Claude/claude_desktop_config.jsonDocker 配置
Docker 配置示例:
{
"mcpServers": {
"jdbc-oracle-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--network", "host",
"mcp-servers:latest", "jdbc",
"--jdbc.url=jdbc:oracle:thin:@localhost:1521:xe",
"--jdbc.user=ORACLEUSR",
"--jdbc.password=ORACLEUSR",
"--jdbc.readonly=false"
]
},
"jdbc-oracle-readonly": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--network", "host",
"mcp-servers:latest", "jdbc",
"--jdbc.url=jdbc:oracle:thin:@localhost:1521:xe",
"--jdbc.user=ORACLEUSR",
"--jdbc.password=ORACLEUSR",
"--jdbc.readonly=true"
]
},
"jdbc-h2-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm", "-p", "3000:3000",
"mcp-servers:latest", "jdbc",
"--jdbc.url=jdbc:h2:mem:testdb",
"--jdbc.user=sa",
"--jdbc.password=",
"--jdbc.readonly=false"
]
},
"jdbc-mysql-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"host",
"mcp-servers:latest",
"jdbc",
"--jdbc.url=jdbc:mysql://localhost:3306/mydb",
"--jdbc.user=root",
"--jdbc.password=toor",
"--jdbc.readonly=true"
]
},
"jdbc-postgres-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"host",
"mcp-servers:latest",
"jdbc",
"--jdbc.url=jdbc:postgresql://localhost:5432/mydb",
"--jdbc.user=postgres",
"--jdbc.password=postgres",
"--jdbc.readonly=true"
]
},
"filesystem-docker": {
"command": "docker",
"args": [
"run", "-i", "--rm", "-v", "/tmp:/mnt/shared",
"mcp-servers:latest", "filesystem", "/mnt/shared"
]
}
}
}配置本地运行(无 Docker)
在没有 Docker 的情况下在本地运行服务器时,请使用以下配置:
{
"mcp": {
"servers": {
"jdbc-oracle": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar",
"--jdbc.url=jdbc:oracle:thin:@localhost:1521:xe",
"--jdbc.user=ORACLEUSR",
"--jdbc.password=ORACLEUSR",
"--jdbc.readonly=false"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/jdbc"
},
"jdbc-oracle-readonly": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar",
"--jdbc.url=jdbc:oracle:thin:@localhost:1521:xe",
"--jdbc.user=ORACLEUSR",
"--jdbc.password=ORACLEUSR",
"--jdbc.readonly=true"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/jdbc"
},
"jdbc-h2": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar",
"--jdbc.url=jdbc:h2:mem:testdb",
"--jdbc.user=sa",
"--jdbc.password=",
"--jdbc.readonly=false"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/jdbc"
},
"jdbc-mysql": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar",
"--jdbc.url=jdbc:mysql://localhost:3306/mydb",
"--jdbc.user=root",
"--jdbc.password=toor",
"--jdbc.readonly=true"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/jdbc"
},
"jdbc-postgres": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar",
"--jdbc.url=jdbc:postgresql://localhost:5432/mydb",
"--jdbc.user=postgres",
"--jdbc.password=postgres",
"--jdbc.readonly=true"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/jdbc"
},
"filesystem-local": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/filesystem/target/mcp-server-filesystem-999-SNAPSHOT.jar",
"/tmp"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/filesystem"
},
"containers-local": {
"type": "stdio",
"command": "/workspace/db-ready/quarkus-mcp-servers/jdk17/bin/java",
"args": [
"-jar",
"/workspace/db-ready/quarkus-mcp-servers/containers/target/mcp-server-containers-999-SNAPSHOT.jar"
],
"cwd": "/workspace/db-ready/quarkus-mcp-servers/containers"
}
}
}
}📋 可用订单
安装程序-jdk17.sh
./setup-jdk17.sh # Setup automatico JDK 17
./setup-jdk17.sh --help # Mostra opzioni disponibili
./setup-jdk17.sh --force # Forza reinstallazione anche se esistedocker-mcp.sh
./docker-mcp.sh build # Builda immagine Docker
./docker-mcp.sh oracle # Server JDBC Oracle
./docker-mcp.sh h2 # Server JDBC H2
./docker-mcp.sh filesystem [path] # Server Filesystem
./docker-mcp.sh config # Genera configurazione MCP
./docker-mcp.sh help # Mostra aiuto🗄️ 支持的数据库
JDBC 服务器支持所有带有 JDBC 驱动程序的数据库:
- 甲骨文 -
jdbc:oracle:thin:@host:port:sid - PostgreSQL -
jdbc:postgresql://host:port/database - MySQL -
jdbc:mysql://host:port/database - 氢 -
jdbc:h2:mem:testdb(为纪念)ojdbc:h2:file:/path/to/db - 数据库 -
jdbc:sqlite:/path/to/database.db - SQL Server -
jdbc:sqlserver://host:port;databaseName=db - MariaDB -
jdbc:mariadb://host:port/database
🔒 JDBC 服务器只读模式
JDBC 服务器支持一种模式 只读的 它可以探索和查询数据库,而不会发生意外更改。
只读模式功能
✅ 允许的操作:
read_query执行 SELECT 查询list_tables- 表格显示describe_table- 表结构描述database_info数据库信息(包括只读状态)
❌ 被阻止的操作:
write_query-插入、更新、删除create_table- 创建表格
如何启用只读模式
Docker:
./docker-mcp.sh run jdbc \
--jdbc.url="jdbc:oracle:thin:@localhost:1521:xe" \
--jdbc.user="ORACLEUSR" \
--jdbc.password="ORACLEUSR" \
--jdbc.readonly=true本地执行 :
java -jar jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar \
--jdbc.url="jdbc:h2:mem:testdb" \
--jdbc.user="sa" \
--jdbc.password="" \
--jdbc.readonly=true只读状态检查
使用工具 database_info 检查状态:
{
"database_product_name": "Oracle",
"mcp_server_readonly_mode": "true",
"read_only": "false",
...
}注: mcp_server_readonly_mode 指定MCP服务器模式,而 read_only 指定数据库本身是否只读。
🔧 本地运行(无 Docker)
服务器JDBC
source jdk17/jdk-env.sh
# Modalità standard (read/write)
java -jar jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar \
--jdbc.url="jdbc:h2:mem:testdb" \
--jdbc.user="sa" \
--jdbc.password="" \
--jdbc.readonly=false
# Modalità read-only (solo lettura)
java -jar jdbc/target/mcp-server-jdbc-universal-999-SNAPSHOT.jar \
--jdbc.url="jdbc:h2:mem:testdb" \
--jdbc.user="sa" \
--jdbc.password="" \
--jdbc.readonly=true服务器文件系统
source jdk17/jdk-env.sh
java -jar filesystem/target/mcp-server-filesystem-999-SNAPSHOT.jar /tmp🔍 测试
测试服务器区域设置
# Test JDBC H2
./run-server.sh jdbc --jdbc.url="jdbc:h2:mem:testdb" --jdbc.user="sa"
# Test Filesystem
./run-server.sh filesystem /tmp测试Docker
# Test setup Docker
./test-docker-setup.sh📁 项目结构
quarkus-mcp-servers/
├── setup-jdk17.sh # Setup automatico JDK 17
├── docker-mcp.sh # Script Docker per MCP
├── build-no-tests.sh # Build senza test
├── run-server.sh # Esecuzione server locale
├── jdbc/ # Server JDBC
├── filesystem/ # Server Filesystem
├── containers/ # Server Container Docker
├── jvminsight/ # Server JVM Insights
├── jdk17/ # JDK 17 (creato da setup)
├── mcp-configs/ # Configurazioni MCP
└── mcp-docker-config.json # Config generata per Docker🚨 故障排除
JDK 17非trovato
# Reinstalla JDK 17
./setup-jdk17.sh --force
# Carica ambiente
source jdk17/jdk-env.sh
# Verifica versione
java -versionDocker镜像非trovata
# Rebuilda immagine
./docker-mcp.sh build数据库连接错误
- 检查数据库是否正在运行
- Controlla URL、用户名和密码
- 对于 Oracle,请确保位于 localhost:1521
Docker桌面问题
# Su Linux, assicurati che Docker sia in esecuzione
sudo systemctl start docker
# Aggiungi utente al gruppo docker
sudo usermod -aG docker $USER
# Poi fai logout/login📚 附加文件
🤝 贡献
- Fork del存储库
- Crea功能分支(
git checkout -b feature/amazing-feature) - 变革(Commitment of Change)
git commit -m 'Add amazing feature') - Push al分支(
git push origin feature/amazing-feature) - Apri拉取请求
📝 许可证
这个项目是MIT许可的。查看文件 许可证 为了细节。
