mcp-postgres-full-access-extended

mcp-postgres-full-access-extended

Enables full read-write access to PostgreSQL databases with transaction management and safety controls, allowing LLMs to query and modify database content.

Category
访问服务器

README

PostgreSQL Full Access MCP Server

Model Context Protocol MIT License

This project is an independently maintained and extended fork of the original mcp-postgres-full-access by Syahiid Kamil.

A powerful Model Context Protocol server providing full read-write access to PostgreSQL databases. Unlike the read-only official MCP PostgreSQL server, this enhanced implementation allows Large Language Models (LLMs) to both query and modify database content with proper transaction management and safety controls.

Table of Contents

🌟 Features

Full Read-Write Access

  • Safely execute DML operations (INSERT, UPDATE, DELETE)
  • Create, alter, and manage database objects with DDL
  • Transaction management with explicit commit
  • Safety timeouts and automatic rollback protection

Rich Schema Information

  • Detailed column metadata (data types, descriptions, max length, nullability)
  • Primary key identification
  • Foreign key relationships
  • Index information with type and uniqueness flags
  • Table row count estimates
  • Table and column descriptions (when available)

Advanced Safety Controls

  • SQL query classification (DQL, DML, DDL, DCL, TCL)
  • Enforced read-only execution for safe queries
  • All operations run in isolated transactions
  • Automatic transaction timeout monitoring
  • Configurable safety limits
  • Two-step transaction commit process with explicit user confirmation

🔧 Tools

  • execute_query

    • Execute read-only SQL queries (SELECT statements)
    • Input: sql (string): The SQL query to execute
    • All queries are executed within a READ ONLY transaction
    • Results include execution time metrics and field information
  • execute_dml_ddl_dcl_tcl

    • Execute data modification operations (INSERT, UPDATE, DELETE) or schema changes (CREATE, ALTER, DROP)
    • Input: sql (string): The SQL statement to execute
    • Automatically wrapped in a transaction with configurable timeout
    • Returns a transaction ID for explicit commit
    • Important safety feature: The conversation will end after execution, allowing the user to review the results before deciding to commit or rollback
  • execute_maintenance

    • Execute maintenance commands like VACUUM, ANALYZE, or CREATE DATABASE outside of transactions
    • Input: sql (string): The SQL statement to execute - must be VACUUM, ANALYZE, or CREATE DATABASE
    • Returns a result object with execution time metrics
  • execute_commit

    • Explicitly commit a transaction by its ID
    • Input: transaction_id (string): ID of the transaction to commit
    • Safely handles cleanup after commit or rollback
    • Permanently applies changes to the database
  • execute_rollback

    • Explicitly rollback a transaction by its ID
    • Input: transaction_id (string): ID of the transaction to rollback
    • Safely discards all changes and cleans up resources
    • Useful when reviewing changes and deciding not to apply them
  • list_tables

    • Get a comprehensive list of all tables in the database
    • Includes column count and table descriptions
    • No input parameters required
  • describe_table

    • Get detailed information about a specific table structure
    • Input: table_name (string): Name of the table to describe
    • Returns complete schema information including primary keys, foreign keys, indexes, and column details
  • list_schemas

    • Get a list of all schemas in the database
    • No input parameters required
    • Returns an array of schemas with their names, owners, and table counts

📊 Resources

The server provides enhanced schema information for database tables:

  • Table Schemas (postgres://<host>/<table>/schema)
    • Detailed JSON schema information for each table
    • Includes complete column metadata, primary keys, and constraints
    • Automatically discovered from database metadata

🚀 Using with Claude Desktop

Claude Desktop Integration

To use this server with Claude Desktop, follow these steps:

  1. First, ensure you have Node.js installed on your system

  2. Install the package using npx or add it to your project

  3. Configure Claude Desktop by editing claude_desktop_config.json (typically found at ~/Library/Application Support/Claude/ on macOS):

{
  "mcpServers": {
    "postgres-full": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-postgres-full-access-extended",
        "postgresql://username:password@localhost:5432/database"
      ],
      "env": {
        "TRANSACTION_TIMEOUT_MS": "60000",
        "MAX_CONCURRENT_TRANSACTIONS": "5",
        "PG_STATEMENT_TIMEOUT_MS": "30000"
      }
    }
  }
}
  1. Replace the database connection string with your actual PostgreSQL connection details
  2. Restart Claude Desktop completely

Important: Using "Allow Once" for Safety

When Claude attempts to commit changes to your database, Claude Desktop will prompt you for approval:

Allow Once Dialog

Always review the SQL changes carefully before approving them!

Best practices for safety:

  • Always click "Allow once" (not "Always allow") for commit operations
  • Review the transaction SQL carefully before approving
  • Consider using a database user with limited permissions
  • Use a testing database if possible when first trying this server

This "Allow once" approach gives you full control to prevent unwanted changes to your database while still enabling Claude to help with data management tasks when needed.

⚙️ Environment Variables

You can customize the server behavior with environment variables in your Claude Desktop config:

"env": {
  "TRANSACTION_TIMEOUT_MS": "60000",
  "MAX_CONCURRENT_TRANSACTIONS": "5"
}

Key environment variables:

  • TRANSACTION_TIMEOUT_MS: Transaction timeout in milliseconds (default: 15000)

    • Increase this if your transactions need more time
    • Transactions exceeding this time will be automatically rolled back for safety
  • MAX_CONCURRENT_TRANSACTIONS: Maximum concurrent transactions (default: 10)

    • Lower this number for more conservative operation
    • Higher values allow more simultaneous write operations
  • ENABLE_TRANSACTION_MONITOR: Enable/disable transaction monitor ("true" or "false", default: "true")

    • Monitors and automatically rolls back abandoned transactions
    • Rarely needs to be disabled
  • PG_STATEMENT_TIMEOUT_MS: SQL query execution timeout in ms (default: 30000)

    • Limits how long any single SQL statement can run
    • Important safety feature to prevent runaway queries
  • PG_MAX_CONNECTIONS: Maximum PostgreSQL connections (default: 20)

    • Important to stay within your database's connection limits
  • MONITOR_INTERVAL_MS: How often to check for stuck transactions (default: 5000)

    • Usually doesn't need adjustment

🔄 Using Full Database Access with Claude

This server enables Claude to both read from and write to your PostgreSQL database with your approval. Here are some example conversation flows:

Example: Creating a New Table and Adding Data

You: "I need a new products table with columns for id, name, price, and inventory"

Claude: Analyzes your database and creates a query

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    inventory INTEGER DEFAULT 0
);

Claude Desktop will prompt you to approve this operation

You: Review and click "Allow once"

Claude: "I've created the products table. Would you like me to add some sample data?"

You: "Yes, please add 5 sample products"

Claude: Creates INSERT statements and prompts for approval You review and approve with "Allow once"

Example: Data Analysis with Safe Queries

You: "What are my top 3 products by price?"

Claude: Executes a read-only query automatically Shows you the results

Safety Workflow

The key safety feature is the two-step approach for any operation that modifies your database:

  1. Claude analyzes your request and prepares SQL
  2. For read-only operations (SELECT), Claude executes automatically
  3. For write operations (INSERT, UPDATE, DELETE, CREATE, etc.):
    • Claude executes the SQL in a transaction and ends the conversation
    • You review the results
    • In a new conversation, you respond with "Yes" to commit or "No" to rollback
    • Claude Desktop shows you exactly what will be changed and asks for permission
    • You click "Allow once" to permit the specific operation
    • Claude executes the operation and returns results

This gives you multiple opportunities to verify changes before they're permanently applied to the database.

⚠️ Security Considerations

When connecting Claude to your database with write access:

Database User Permissions

IMPORTANT: Create a dedicated database user with appropriate permissions:

-- Example of creating a restricted user (adjust as needed)
CREATE USER claude_user WITH PASSWORD 'secure_password';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_user;
GRANT INSERT, UPDATE, DELETE ON TABLE table1, table2 TO claude_user;
-- Only grant specific permissions as needed

Best Practices for Safe Usage

  1. Always use "Allow once" to review each write operation

    • Never select "Always allow" for database modifications
    • Take time to review the SQL carefully
  2. Connect to a testing database when first exploring this tool

    • Consider using a database copy/backup for initial testing
  3. Limit database user permissions to only what's necessary

    • Avoid using a superuser or admin account
    • Grant table-specific permissions when possible
  4. Implement database backups before extensive use

  5. Never share sensitive data that shouldn't be exposed to LLMs

  6. Verify all SQL operations before approving them

    • Check table names
    • Verify column names and data
    • Confirm WHERE clauses are appropriate
    • Look for proper transaction handling

Docker

The server can be easily run in a Docker container:

# Build the Docker image
docker build -t mcp-postgres-full-access .

# Run the container
docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host:5432/database"

For Docker on macOS, use host.docker.internal to connect to the host network:

docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host.docker.internal:5432/database"

📄 License

This MCP server is licensed under the MIT License.

💡 Comparison with Official PostgreSQL MCP Server

Feature This Server Official MCP PostgreSQL Server
Read Access ✅ ✅
Write Access ✅ ❌
Schema Details Enhanced Basic
Transaction Support Explicit with timeouts Read-only
Index Information ✅ ❌
Foreign Key Details ✅ ❌
Row Count Estimates ✅ ❌
Table Descriptions ✅ ❌

Author

Created by Syahiid Nur Kamil (@syahiidkamil)

Extended by kamusis (@kamusis)


Copyright © 2025 kamusis. All rights reserved.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选