gyzhang/mcp-mysql
3.2
If you are the rightful owner of mcp-mysql and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This is an MCP (Model Controller Protocol) Server based on Spring Boot, designed to provide MySQL database access capabilities for agents.
Tools
2
Resources
0
Prompts
0
MCP MySQL Server
这是一个基于Spring Boot的MCP (Model Controller Protocol) Server,用于提供MySQL数据库访问能力给智能体调用。
功能特性
- 提供数据库连接池配置
- 通过MCP接口提供SQL查询功能
- 通过MCP接口提供SQL执行功能(INSERT、UPDATE、DELETE)
快速开始
配置数据库连接
在 src/main/resources/application.properties
文件中配置数据库连接信息:
spring.datasource.url=jdbc:mysql://10.62.79.13:3309/agentdev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=agentdev
spring.datasource.password=Gientech6998
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
启动应用
使用Maven命令启动应用:
mvn spring-boot:run
或者构建并运行JAR文件:
mvn clean package
java -jar target/mcp-mysql-0.0.1-SNAPSHOT.jar
MCP工具使用说明
应用启动后,智能体可以通过MCP协议调用以下工具:
1. queryDatabase工具
功能:执行SQL SELECT查询语句,返回查询结果
参数:
sql
:要执行的SELECT SQL查询语句
返回值:查询结果列表,每行数据以Map形式返回
示例:
{
"tool_name": "queryDatabase",
"parameters": {
"sql": "SELECT * FROM users LIMIT 10"
}
}
2. executeSql工具
功能:执行SQL INSERT、UPDATE或DELETE语句,返回受影响的行数
参数:
sql
:要执行的SQL语句,可以是INSERT、UPDATE或DELETE
返回值:受影响的行数
示例:
{
"tool_name": "executeSql",
"parameters": {
"sql": "INSERT INTO users (username, email) VALUES ('testuser', 'test@example.com')"
}
}
项目结构
src/main/java/com/gientech/ail/mcp/mysql/
├── McpMysqlApplication.java # 应用主类
├── config/
│ └── DatabaseConfig.java # 数据库配置类
├── data/
│ └── DataSourceConfig.java # 数据源配置类(连接池配置)
├── service/
│ └── DatabaseService.java # 数据库服务类(实现SQL操作)
└── tool/
└── DatabaseTool.java # MCP工具类(暴露给智能体的接口)
技术栈
- Spring Boot 3.5.6
- Spring AI MCP Server
- Spring JDBC
- MySQL Connector/J
- Tomcat JDBC Connection Pool
配置说明
数据库连接池配置
在 DataSourceConfig.java
中配置了数据库连接池的相关属性:
- 初始连接数:5
- 最大活动连接数:20
- 最大空闲连接数:10
- 最小空闲连接数:5
- 最大等待时间:10000ms
- 验证查询:SELECT 1
- 其他连接池参数已根据最佳实践配置
注意事项
-
SQL语句验证:
queryDatabase
工具只接受以SELECT开头的SQL语句executeSql
工具只接受以INSERT、UPDATE或DELETE开头的SQL语句
-
安全性:
- 当前实现不包含SQL注入防护措施,建议在生产环境中添加参数化查询功能
- 建议在生产环境中配置适当的权限控制
-
错误处理:
- 执行SQL过程中的异常会被包装为RuntimeException并抛出
- 调用方需要适当处理这些异常