Java MCP SQL Server
一个用Java编写的非常简单的MCP(模型上下文协议)服务器,用于查询和检查SQL数据库(PostgreSQL、Oracle、SQL server、MySQL、MariaDB、SQLite)。
特性
- 支持PostgreSQL、Oracle、SQL Server、MySQL、MariaDB和SQLite
- 列出模式和表
- 检查表结构(列、类型、主键)
- 查询表数据
- 执行自定义SQL查询(默认情况下仅限SELECT,设置
JMCP_QUERY_SELECT_ONLY=false允许插入、更新、删除等) - 两种连接模式:Stdio(直接启动)和HTTP/SSE(远程连接)
需求
- Java 21或更高版本
- Maven 3.6+
- 访问PostgreSQL、Oracle、SQL Server、MySQL、MariaDB或SQLite数据库
构建
mvn clean package配置
设置以下环境变量:
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
JMCP_JDBC_URL | 是 | - | JDBC连接URL |
JMCP_DB_USERNAME | 是 | - | 数据库用户名 |
JMCP_DB_PASSWORD | 是 | - | 数据库密码 |
JMCP_MODE | 没有 | stdio | 服务器模式: stdio 或 http |
JMCP_HTTP_PORT | 没有 | 3000 | HTTP服务器端口(仅适用于 http 模式) |
JMCP_QUERY_SELECT_ONLY | 没有 | true | 如果 true,只允许SELECT查询。如果 false,允许INSERT、UPDATE、DELETE等操作。 |
JDBC URL示例
PostgreSQL:
jdbc:postgresql://localhost:5432/mydb神谕:
jdbc:oracle:thin:@localhost:1521:ORCLSQL服务器:
jdbc:sqlserver://localhost:1433;databaseName=mydbMySQL:
jdbc:mysql://localhost:3306/mydbMariaDB:
jdbc:mariadb://localhost:3306/mydbSQLite:
jdbc:sqlite:/path/to/database.db运行并连接到MCP服务器
构建服务器后,您需要配置MCP客户端以连接到它。有两种连接模式:
模式1:Stdio(直接发射)
MCP客户端将服务器作为子进程启动,从stdin读取JSON-RPC消息并将响应写入stdout。这是Claude Desktop和其他直接启动服务器的MCP客户端使用的默认模式。
Claude桌面配置
将以下内容添加到您的Claude Desktop配置文件中:
窗户: %APPDATA%\Claude\claude_desktop_config.json\ macOS: ~/Library/Application Support/Claude/claude_desktop_config.json\ Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"java-mcp-sql-server": {
"command": "java",
"args": [
"-jar",
"C:\\path\\to\\java-mcp-sql-server-1.0.0.jar"
],
"env": {
"JMCP_JDBC_URL": "jdbc:postgresql://localhost:5432/mydb",
"JMCP_DB_USERNAME": "postgres",
"JMCP_DB_PASSWORD": "password"
}
}
}
}Visual Studio代码配置(副本)
将以下内容添加到VS代码设置文件中(settings.json):
窗户: %APPDATA%\Code\User\settings.json\ macOS: ~/Library/Application Support/Code/User/settings.json\ Linux: ~/.config/Code/User/settings.json
{
"github.copilot.chat.mcp.enabled": true,
"github.copilot.chat.mcp.servers": {
"java-mcp-sql-server": {
"command": "java",
"args": [
"-jar",
"C:\\path\\to\\java-mcp-sql-server-1.0.0.jar"
],
"env": {
"JMCP_JDBC_URL": "jdbc:postgresql://localhost:5432/mydb",
"JMCP_DB_USERNAME": "postgres",
"JMCP_DB_PASSWORD": "password"
}
}
}
}重要提示: 替换 C:\\path\\to\\java-mcp-sql-server-1.0.0.jar 使用编译的JAR文件的实际路径(使用双反斜杠 \\ 在Windows上)。
模式2:HTTP/SSE(远程连接)
服务器启动一个支持SSE(服务器发送事件)的HTTP服务器,允许MCP客户端连接到正在运行的实例,而不是启动新进程。
步骤1:以HTTP模式启动服务器
export JDBC_URL="jdbc:postgresql://localhost:5432/mydb"
export DB_USERNAME="postgres"
export DB_PASSWORD="password"
export MCP_MODE="http"
export MCP_HTTP_PORT="3000"
java -jar target/java-mcp-sql-server-1.0.0.jar或使用提供的脚本(run_http.sh 或 run_http.ps1).
服务器将在以下时间可用 http://localhost:3000 具有以下端点:
/mcp-MCP协议的SSE端点/health-健康检查端点
步骤2:配置MCP客户端
将以下内容添加到您的Claude Desktop配置文件中:
{
"mcpServers": {
"java-mcp-sql-server": {
"url": "http://localhost:3000/mcp"
}
}
}或者,对于Visual Studio代码(副本):
{
"github.copilot.chat.mcp.enabled": true,
"github.copilot.chat.mcp.servers": {
"java-mcp-sql-server-http": {
"url": "http://localhost:3000/mcp"
}
}
}验证连接
配置并重新启动MCP客户端后:
- 该服务器应出现在可用MCP服务器列表中
- 您应该看到列出的可用工具
- 尝试使用
list_schemas用于验证连接是否正常工作的工具
可用工具
- list_schemas:列出数据库中的所有架构
- list_tables:列出架构中的所有表
- get_table_structure:获取表的结构
- 查询表:从具有可选限制的表中查询数据
- execute_query:执行自定义SQL查询(默认情况下仅限SELECT,设置
JMCP_QUERY_SELECT_ONLY=false允许插入、更新、删除等)
许可证
麻省理工学院
