mcpField
P
PostgreSQL MCP Server

PostgreSQL MCP Server

Local
github.com/habuvoDatabases2Updated 79w ago

About PostgreSQL MCP Server

PostgreSQL MCP Server provides an interface for MCP clients to interact with and inspect PostgreSQL databases. It supports parameterized SQL, multi-statement transactions, and table schema retrieval.

Key features

  1. 01Execute parameterized SQL queries
  2. 02Perform inserts, updates, and deletes
  3. 03Run multi-statement transactions
  4. 04Retrieve table schema information
  5. 05Handle query parameters securely

Use cases

  1. 01Query PostgreSQL data with filters
  2. 02Perform multiple database writes in a transaction
  3. 03Inspect table columns and types

MCP support

The server exposes SQL execution, query, transaction, and schema tools over MCP for PostgreSQL access.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

PostgreSQL MCP Server

This is a Model Context Protocol (MCP) server that provides an interface to interact with PostgreSQL databases. It allows you to execute queries, perform database operations, and manage transactions through a standardized API.

Features

  • Execute SQL queries with parameterized inputs
  • Perform database operations (INSERT, UPDATE, DELETE)
  • Execute transactions with multiple statements
  • Retrieve database schema information
  • Secure parameter handling to prevent SQL injection

Installation

  1. Clone the repository:

    git clone https://github.com/yourusername/postgres-mcp.git
    cd postgres-mcp
    
  2. Install dependencies:

    go mod download
    
  3. Configure your database connection:

    cp .env.example .env
    

    Edit the .env file with your PostgreSQL database credentials.

  4. Build the server:

    go build -o postgres-mcp
    
  5. Run the server:

    ./postgres-mcp
    

Usage

The server exposes the following MCP tools:

1. execute_tool

Executes a single SQL statement.

Request:

{
  "statement": "INSERT INTO users(name, email) VALUES($1, $2)",
  "arguments": ["Jane Doe", "[email protected]"]
}

Response:

{
  "rows affected": 1
}
2. query_tool

Executes a SELECT query and returns the results.

Request:

{
  "statement": "SELECT * FROM users WHERE id = $1",
  "arguments": [1]
}

Response:

{
  "rows": [
    {
      "id": 1,
      "name": "John Doe",
      "email": "[email protected]"
    }
  ],
  "columns": ["id", "name", "email"],
  "rowCount": 1
}
3. transaction_tool

Executes multiple statements in a transaction.

Request:

{
  "statements": [
    "INSERT INTO users(name, email) VALUES($1, $2)",
    "INSERT INTO user_roles(user_id, role) VALUES($1, $2)"
  ],
  "arguments": [
    ["Alice", "[email protected]"],
    [1, "admin"]
  ]
}

Response:

{
  "results": [
    {
      "statement": 0,
      "rowsAffected": 1
    },
    {
      "statement": 1,
      "rowsAffected": 1
    }
  ]
}
4. schema_tool

Retrieves schema information for a table.

Request:

{
  "table_name": "users"
}

Response:

{
  "table": "users",
  "columns": [
    {
      "name": "id",
      "type": "integer",
      "nullable": false,
      "default": "nextval('users_id_seq'::regclass)"
    },
    {
      "name": "name",
      "type": "character varying",
      "nullable": false,
      "default": null
    },
    {
      "name": "email",
      "type": "character varying",
      "nullable": false,
      "default": null
    }
  ]
}

Client Example

Here's an example of how to use the MCP client to interact with the server:

package main

import (
 "encoding/json"
 "fmt"
 "log"

 "github.com/mark3labs/mcp-go/client"
)

func main() {
 // Create a new MCP client
 c := client.NewClient("http://localhost:8080")

 // Prepare a query request
 queryReq := map[string]interface{}{
  "statement": "SELECT * FROM users WHERE id = $1",
  "arguments": []interface{}{1},
 }

 // Execute the query
 resp, err := c.Execute("query_tool", queryReq)
 if err != nil {
  log.Fatalf("Failed to execute query: %v", err)
 }

 // Print the response
 prettyJSON, _ := json.MarshalIndent(resp.Data, "", "  ")
 fmt.Println(string(prettyJSON))
}

Security Considerations

  • Always use parameterized queries to prevent SQL injection attacks
  • Limit database user permissions to only what is necessary
  • Use SSL/TLS for database connections in production
  • Implement proper authentication and authorization for the MCP server

License

This project is licensed under the MIT License.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.