PostgreSQL数据库工具服务

Spring AI MCP Server是一个集成了PostgreSQL的数据库工具服务,提供表查询和SQL执行功能。

  • by techslaves
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 techslaves/postgresql-mcp-server

使用说明

Spring AI MCP服务器详解

我已经成功地将该项目转换为具有PostgreSQL集成的Spring AI MCP服务器。

所做的更改

  • pom.xml:更新为使用Spring Boot 3.3.0和Spring AI 1.0.0-SNAPSHOT (MCP的实验支持)。
  • PostgresMcpServerApplication.java:创建了主Spring Boot应用程序类。
  • DatabaseService.java:实现了数据库服务和带注释的方法 @Tool 将其作为MCP工具公开。
  • application.properties:配置了具有环境变量覆盖的数据库连接设置。
  • 已删除:删除遗留内容 PostgresMcpServer.java.

如何跑步

先决条件

  • Java 17+
  • 梅文
  • PostgreSQL数据库

运行服务器

您可以使用Maven运行服务器。确保为数据库连接设置环境变量。

$env:DB_URL="jdbc:postgresql://localhost:5433/your_db"
$env:DB_USER="your_user"
$env:DB_PASSWORD="your_password"
mvn spring-boot:run

故障排除和修复

1.服务器立即断开连接

问题: 服务器连接到Claude Desktop后立即退出。 原因: 端口冲突(端口8080已在使用中)或丢失 server.port=0 配置。 修复:

  • 确保没有其他进程正在使用端口8080。
  • 添加 -Dserver.port=0 使用随机端口连接到Claude Desktop配置。
  • 确保 logging.level.root=INFO (不是 VERBOSE)in application.properties.

2.工具未出现

问题: 服务器已连接,但未显示任何工具。 原因: 缺失 spring-ai-core 依赖性和不正确的工具注册。 修复:

  • 添加 spring-ai-core 依赖于 pom.xml.
  • 创建 McpConfig.java 使用以下命令显式注册工具 ToolCallbacks.from(databaseService).

验证

  1. 构建: mvn clean package -DskipTests
  2. 运行: java -Dspring.main.banner-mode=off -Dserver.port=0 -jar target/postgres-mcp-server-0.0.1-SNAPSHOT.jar
  3. 检查日志: 验证 mcp-server.log 显示 Registered tools: 2.

MCP集成

服务器公开了以下工具:

  • listTables:列出数据库中的所有公用表。
  • executeQuery:执行只读SQL查询(仅限SELECT)。

这些工具由Spring AI的MCP自动配置自动注册。

测试Postgres MCP服务器

本指南提供了如何测试Spring AI MCP服务器的说明。

1.自动化单元测试

运行附带的JUnit测试以验证应用程序上下文和bean配置。

mvn test

2.使用MCP检验员进行测试

这 MCP检查员 是交互式测试服务器的最佳方式。

先决条件

  • 已安装Node.js(npx 命令可用)

步骤

  1. 启动服务器: 确保您的数据库正在运行,并且设置了环境变量。

    $env:DB_URL="jdbc:postgresql://localhost:5433/postgres"
    $env:DB_USER="admin"
    $env:DB_PASSWORD="password"
    mvn spring-boot:run
    

    服务器将在端口8080上启动。

  2. 运行检查器: 打开一个新终端并运行:

    npx @modelcontextprotocol/inspector
    
  3. 连接:

    • 在Inspector UI(通常在浏览器中打开)中,选择 上海证券交易所 (服务器发送事件)作为传输。
    • 输入URL: http://localhost:8080/sse (或 http://localhost:8080/mcp/sse 根据自动配置,检查日志)。
    • 点击 连接.
  4. 互动:

    • 你应该看看 listTables 和 executeQuery 在“工具”列表中。
    • 试着跑步 listTables.

3.使用克劳德桌面进行测试(标准模式)

要将此服务器与Claude Desktop一起使用,您需要以通过标准输入/输出(Stdio)进行通信的方式运行它。

配置

  1. 构建JAR:
    mvn clean package -DskipTests
    
  2. 在以下位置找到JAR target/postgres-mcp-server-0.0.1-SNAPSHOT.jar.

Claude桌面配置

编辑您的 %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "postgres": {
      "command": "java",
      "args": [
        "-Dspring.main.banner-mode=off",
        "-Dlogging.pattern.console=",
        "-Dserver.port=0",
        "-jar",
        "D:/DevOps/GenAI/postgres-mcp-server/target/postgres-mcp-server-0.0.1-SNAPSHOT.jar"
      ],
      "env": {
        "DB_URL": "jdbc:postgresql://localhost:5433/postgres",
        "DB_USER": "admin",
        "DB_PASSWORD": "password"
      }
    }
  }
}

注意:我们禁用web应用程序和控制台日志记录,以确保stdout上的JSON通信干净。

4.简单连接检查(SSE)

您可以使用 curl 验证服务器是否正在监听。

curl -v http://localhost:8080/sse

您应该看到已建立连接。