About Rmcp Postgres
Rmcp Postgres is an MCP server published by sqrew in the Data category: a PostgreSQL MCP (Model Context Protocol) server built with [rmcp] the Rust MCP SDK.
The repository has 2 stars and 0 forks, with the last commit 9 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.
Install
git clone https://github.com/sqrew/rmcp-postgresThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Ask AI
Ask AI about Rmcp Postgres
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
rmcp-postgres
A PostgreSQL MCP (Model Context Protocol) server built with [rmcp] https://github.com/modelcontextprotocol/rust-sdk, the Rust MCP SDK.
Provides comprehensive PostgreSQL database access through MCP tools for querying, inserting, updating, deleting, and inspecting database schemas.
Features
- Full CRUD Operations: Query, insert, update, and delete data
- Schema Inspection: List tables, describe schemas, check existence
- Relationship Discovery: Explore foreign key relationships
- Safety Limits: Built-in protections for bulk operations
- Configurable: Flexible database connection configuration
- Library + Binary: Use as a standalone server or integrate into your own Rust projects
Installation
From crates.io
cargo install rmcp-postgres
From source
git clone https://github.com/sqrew/rmcp-postgres
cd rmcp-postgres
cargo build --release
The binary will be at target/release/rmcp-postgres.
Usage
As a Standalone Server
Set your PostgreSQL connection string and run:
# Using environment variable
export POSTGRES_CONNECTION_STRING="host=localhost user=postgres dbname=mydb password=secret"
rmcp-postgres
# Using command line argument
rmcp-postgres --db-config "host=localhost user=postgres dbname=mydb password=secret"
As a Library
Add to your Cargo.toml:
[dependencies]
rmcp-postgres = "0.1"
rmcp = { version = "0.12", features = ["server"] }
tokio = { version = "1", features = ["full"] }
Use in your code:
use rmcp::service::ServiceExt;
use rmcp_postgres::PostgresServer;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Create server with connection string
let server = PostgresServer::new("host=localhost user=postgres dbname=mydb");
// Serve over stdio (for MCP)
let (stdin, stdout) = (tokio::io::stdin(), tokio::io::stdout());
server.serve((stdin, stdout)).await?;
Ok(())
}
Claude Desktop Configuration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"postgres": {
"command": "rmcp-postgres",
"env": {
"POSTGRES_CONNECTION_STRING": "host=localhost user=postgres dbname=mydb password=secret"
}
}
}
}
Or if installed from source:
{
"mcpServers": {
"postgres": {
"command": "/path/to/rmcp-postgres/target/release/rmcp-postgres",
"env": {
"POSTGRES_CONNECTION_STRING": "host=localhost user=postgres dbname=mydb"
}
}
}
}
Available Tools
Data Operations
- query_data - Execute SELECT queries and return JSON results
- insert_data - Insert rows into tables
- update_data - Update rows with WHERE conditions (safety limit: 1000 rows)
- delete_data - Delete rows with WHERE conditions (safety limit: 1000 rows)
- execute_raw_query - Execute any SQL query (use with caution)
Schema Inspection
- list_tables - List all tables in the database
- get_schema - Get column information for tables
- describe_table - Get detailed table info including indexes and constraints
- table_exists - Check if a table exists
- column_exists - Check if a column exists in a table
Utilities
- count_rows - Count rows in a table with optional WHERE conditions
- get_table_sample - Get sample rows from a table (default: 10, max: 100)
- get_relationships - Get foreign key relationships between tables
- get_connection_status - Test connection and get database version info
Connection String Format
PostgreSQL connection strings support multiple formats:
# Basic
"host=localhost user=postgres dbname=mydb"
# With password
"host=localhost user=postgres dbname=mydb password=secret"
# With port
"host=localhost port=5433 user=postgres dbname=mydb"
# Full URL format
"postgresql://postgres:secret@localhost:5432/mydb"
See the tokio-postgres documentation for all connection options.
Examples
Query data
{
"query": "SELECT * FROM users WHERE active = true LIMIT 10"
}
Insert data
{
"table_name": "users",
"data": {
"username": "alice",
"email": "alice@example.com",
"active": true
}
}
Update data
{
"table_name": "users",
"values": {
"active": false
},
"where_conditions": {
"username": "alice"
}
}
Get schema for a table
{
"table_name": "users"
}
Safety Features
- Update and delete operations have default limits (1000 rows)
- WHERE conditions required for updates and deletes
- Raw query execution requires explicit tool call
- Connection string passwords are sanitized in logs
Development
# Build
cargo build
# Run tests
cargo test
# Run with debug logging
RUST_LOG=rmcp_postgres=debug,rmcp=debug rmcp-postgres
Contributing
Contributions welcome! Please feel free to submit issues or pull requests.
License
MIT
Related Projects
- rmcp - Rust MCP SDK
- Model Context Protocol - The MCP specification
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.