mcpField
P
PostgreSQL MCP Server

PostgreSQL MCP Server

本地服务
github.com/SwanHtetAungPhyo数据库173 周前更新

关于 PostgreSQL MCP Server

这是一个 Go 编写的 PostgreSQL MCP 服务,供 AI 助手通过标准化接口读取和管理数据库。它按操作类型区分查询、DDL 和数据修改,并对 SQL 进行校验以限制危险操作。

主要功能

  1. 01执行 SELECT 查询
  2. 02创建或修改数据库结构
  3. 03插入、更新和删除记录
  4. 04按工具类型校验 SQL
  5. 05阻止危险管理操作
  6. 06支持 PostgreSQL SSL 连接

适用场景

  1. 01查询业务数据并生成分析
  2. 02查看用户或库存情况
  3. 03调整表结构与数据记录

MCP 相关

服务通过 MCP 向客户端提供 execute_query、ddl_query 和 modify_query 工具,分别用于读取、结构管理和数据修改。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

PostgreSQL MCP 服务

Go PostgreSQL MCP License Go Report Card

作者:Swan Htet Aung Phyo

AGH 计算机科学专业学生(后端开发者)

一个安全高效的 MCP 服务,可让 AI 助手通过简洁、标准化的接口与 PostgreSQL 数据库交互。

是否曾希望让 AI 助手查询数据库,同时不用担心安全问题?这个 MCP 服务正是你需要的。它为 AI 模型提供了与 PostgreSQL 数据库交互的安全方式,同时保护你的数据。

这是什么?

模型上下文协议(MCP)正在成为 AI 助手连接外部数据源的标准方式。此服务专为 PostgreSQL 数据库实现了 MCP,提供三种主要功能:

  • 查询数据 - 让 AI 助手运行 SELECT 查询以查找信息
  • 管理架构 - 按需创建、修改或删除数据库结构
  • 更新数据 - 通过适当的验证插入、更新或删除记录

最棒的是?所有操作都会经过验证和限制,以防止危险操作。这里不会意外执行 DROP DATABASE 命令!

开始使用

所需条件
  • 机器上已安装 Go 1.19 或更高版本
  • PostgreSQL 数据库(建议使用 13+ 版本)
  • 大约 5 分钟即可完成设置
安装

首先,创建项目:

mkdir postgresql-mcp-server
cd postgresql-mcp-server
go mod init postgresql-mcp-server

现在,获取依赖项:

go get github.com/metoro-io/mcp-golang
go get github.com/metoro-io/mcp-golang/transport/stdio
go get gorm.io/driver/postgres
go get gorm.io/gorm

将主服务代码复制到 main.go,然后更新数据库连接:

const dbConn = "host=localhost user=postgres password=yourpassword dbname=yourdb port=5432 sslmode=disable"

构建并运行:

go build -o postgresql-mcp-server
./postgresql-mcp-server

就是这样!你的服务应该已经运行并准备好接受连接。

使用方法

该服务提供三种主要工具,分别用于特定类型的数据库操作:

读取数据(execute_query)

这可能是你最常用的工具。它可以运行 SELECT 查询来检索信息:

-- Find all active users
SELECT name, email FROM users WHERE active = true;

-- Get sales summary for the last month
SELECT 
    product_name,
    SUM(quantity) as total_sold,
    AVG(price) as avg_price
FROM sales 
WHERE created_at >= '2024-01-01'
GROUP BY product_name
ORDER BY total_sold DESC;

结果会以整齐的格式返回,方便 AI 助手理解和处理你的数据。

管理数据库结构(ddl_query)

需要创建表或修改架构?此工具可处理 DDL 操作:

-- Create a new table
CREATE TABLE blog_posts (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    author_id INTEGER REFERENCES users(id),
    published_at TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Add an index for better performance
CREATE INDEX idx_posts_author ON blog_posts(author_id);

-- Modify existing table
ALTER TABLE users ADD COLUMN last_login TIMESTAMP;
修改数据(modify_query)

需要插入、更新或删除数据时:

-- Add new records
INSERT INTO users (name, email, active) 
VALUES ('Alice Johnson', '[email protected]', true);

-- Update existing data
UPDATE products 
SET price = price * 0.9 
WHERE category = 'electronics' AND stock > 100;

-- Clean up old data
DELETE FROM logs WHERE created_at < NOW() - INTERVAL '90 days';

安全功能

构建此服务时,安全性是重要考量。以下是保护数据安全的方式:

查询验证:每条查询在执行前都会经过检查。每个工具只允许执行特定类型的 SQL 语句。你无法通过查询工具意外运行 DROP TABLE 命令。

禁止危险操作:TRUNCATE、GRANT 等命令及其他管理功能会被完全阻止。

连接安全:使用标准 PostgreSQL 连接安全机制,包括 SSL 支持。

输入清理:所有查询都会通过 GORM 内置的 SQL 注入防护机制。

配置选项

数据库连接

连接字符串采用标准 PostgreSQL 格式:

host=localhost user=myuser password=mypass dbname=mydb port=5432 sslmode=require

对于生产环境,请考虑使用以下安全设置:

// Production example
const dbConn = "host=db.example.com user=mcp_user password=secure_password dbname=production_db port=5432 sslmode=require"
环境变量

为了提高安全性,你可以使用环境变量,而不是将凭据硬编码:

import "os"

func getDBConnection() string {
    host := os.Getenv("DB_HOST")
    user := os.Getenv("DB_USER")
    password := os.Getenv("DB_PASSWORD")
    dbname := os.Getenv("DB_NAME")
    port := os.Getenv("DB_PORT")
    
    return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=require", 
        host, user, password, dbname, port)
}

连接到 MCP 客户端

Claude Desktop

将以下内容添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "postgresql": {
      "command": "/path/to/your/postgresql-mcp-server",
      "args": []
    }
  }
}
其他 MCP 客户端

大多数 MCP 客户端使用类似的配置格式:

{
  "servers": [
    {
      "name": "postgresql-db",
      "transport": "stdio", 
      "command": ["/path/to/postgresql-mcp-server"]
    }
  ]
}

实际应用示例

以下是一些使用此服务的实际方式:

商业智能查询
-- Monthly revenue trend
SELECT 
    DATE_TRUNC('month', order_date) as month,
    SUM(total_amount) as revenue,
    COUNT(*) as order_count
FROM orders 
WHERE order_date >= '2024-01-01'
GROUP BY month
ORDER BY month;
用户分析
-- Active users by registration date
SELECT 
    DATE(created_at) as signup_date,
    COUNT(*) as new_users,
    SUM(COUNT(*)) OVER (ORDER BY DATE(created_at)) as cumulative_users
FROM users 
WHERE created_at >= '2024-01-01'
GROUP BY signup_date
ORDER BY signup_date;
库存管理
-- Low stock alert
SELECT 
    product_name,
    current_stock,
    min_stock_level,
    (min_stock_level - current_stock) as shortage
FROM inventory 
WHERE current_stock < min_stock_level
ORDER BY shortage DESC;

常见问题及解决方案

连接问题:如果无法连接到数据库,请仔细检查连接字符串。确保 PostgreSQL 正在运行,并在指定端口上接受连接。

权限错误:数据库用户需要具备执行所需操作的相应权限。对于只读访问,SELECT 权限已足够。要使用全部功能,则需要 CREATE、INSERT、UPDATE 和 DELETE 权限。

查询被阻止:如果查询遭到拒绝,请检查是否使用了正确的工具。SELECT 查询使用 execute_query,而 CREATE/ALTER/DROP 使用 ddl_query。

性能问题:对于大型数据集,可考虑在查询中添加 LIMIT 子句。服务不会自动限制结果集,因此返回数百万行的查询可能会很慢。

性能提示

  • 对经常查询的列使用索引
  • 为大型数据集添加 LIMIT 子句
  • 考虑使用 EXPLAIN 优化复杂查询
  • 使用 ANALYZE 保持 PostgreSQL 统计信息为最新

贡献

发现错误或想添加功能?欢迎贡献!操作步骤如下:

  1. Fork 此仓库
  2. 创建功能分支(git checkout -b feature/cool-new-feature)
  3. 修改代码
  4. 充分测试
  5. 提交修改(git commit -am 'Add cool new feature')
  6. 推送到分支(git push origin feature/cool-new-feature)
  7. 创建 Pull Request

请确保代码遵循 Go 规范,并包含适当的错误处理。

许可证

本项目采用 MIT License 发布。详情请参阅 LICENSE 文件。

标签

#mcp #postgresql #golang #ai #database #model-context-protocol #sql #gorm #claude #assistant #server #api #data #query #secure #open-source


有疑问? 请在 GitHub 上提交 issue 或发起讨论。我们很乐意提供帮助!

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。