PostgreSQL数据库连接服务

一个基于FastMCP的服务,使语言模型能够连接并与PostgreSQL数据库交互,支持模式探索、表检查、数据库查询等功能。

  • by Tibiritabara
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 Tibiritabara/postgres-mcp

使用说明

MCP PostgreSQL演示

FastMCP服务器,使LLM能够连接PostgreSQL数据库并与之交互。这个项目演示了如何使用模型上下文协议(MCP)来允许语言模型查询和探索数据库模式和表。

特性

  • 模式探索:检索有关数据库架构的元数据
  • 台板检验:获取有关表结构的详细信息
  • 数据库查询:对数据库执行SQL查询
  • YAML格式:结果以YAML格式返回,便于LLM使用

资源

服务器公开以下MCP资源:

  • database://{schema} -获取架构中所有表的信息
  • database://{schema}/tables/{table} -获取特定表格的详细信息

工具

  • query_database -对数据库执行SQL查询(仅限SELECT查询)

提示

服务器包括以下预定义提示:

  • prompt_schema_description -请求数据库模式的描述
  • prompt_table_description -要求提供特定表格的描述
  • prompt_query_database -从特定表中请求数据

先决条件

  • Python 3.12或更高版本
  • PostgreSQL数据库
  • UV包管理器(推荐)

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd mcp-demo
    
  2. 创建虚拟环境:

    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. 安装UV(如果尚未安装):

    pip install uv
    
  4. 使用UV安装依赖项:

    uv sync
    
  5. 配置环境变量:

    • 复制 .env.example 向 .env
    • 根据PostgreSQL配置更新值

配置

使用环境变量配置应用程序:

变量 描述 默认值
APP_NAME 应用程序名称 mcp演示
DB_HOST PostgreSQL主机 本地主机
DB_PORT PostgreSQL端口 5432
DB_USER PostgreSQL用户名 postgres
DB_PASSWORD PostgreSQL密码 postgres
DB_NAME PostgreSQL数据库名称 postgres

用法

  1. 首先,取消注释run函数 src/main.py 通过删除文件底部这些行中的注释:

    # if __name__ == "__main__":
    #     print("Starting FastMCP server...")
    #     mcp.run()
    
  2. 启动FastMCP服务器:

    python -m src.main
    
  3. 该服务器将可供LLM连接并查询您的PostgreSQL数据库。随着服务器的运行,MCP可以加载到客户端应用程序中进行交互。

客户端配置

要在客户端应用程序中使用此MCP,请将以下配置添加到客户端的MCP配置文件中(例如。, .cursor/mcp.json):

{
  "mcpServers": {
    "postgres-mcp-server": {
      "command": "/path/to/your/venv/bin/mcp",
      "args": ["run", "/path/to/your/postgres-mcp/src/main.py"],
      "env": {
        "APP_NAME": "mcp-demo",
        "DB_HOST": "localhost",
        "DB_PORT": "5432",
        "DB_USER": "postgres",
        "DB_PASSWORD": "postgres",
        "DB_NAME": "postgres"
      }
    }
  }
}

确保用虚拟环境和项目目录的实际路径替换路径,并更新环境变量以匹配PostgreSQL配置。

发展

使用UV安装开发依赖项:

uv pip install -e ".[dev]"

开发工具包括:

  • JupyterLab笔记本电脑
  • 用于型式检验的Pyright
  • 绒布

码头工人

使用Docker运行应用程序:

  1. 构建Docker镜像:

    docker build -t mcp-demo .
    
  2. 运行容器:

    docker run --env-file .env.docker -p 8000:8000 mcp-demo
    

示例用法

获取架构信息

from mcp.client import get_client

client = get_client("http://localhost:8000")
schema_info = client.get_resource("database://public")
print(schema_info)

获取表格详细信息

table_info = client.get_resource("database://public/tables/users")
print(table_info)

执行查询

result = client.invoke_tool("query_database", {"query": "SELECT * FROM users LIMIT 10"})
print(result)

许可证

[在此处添加您的许可证信息]

贡献者