Skip to main content
Glama
anshulpatre

Redshift MCP Server

by anshulpatre
README.md
# 🚀 Redshift MCP Server

**A plug-and-play Model Context Protocol (MCP) server for Amazon Redshift. Instantly connect LLMs and AI agents (Claude, ChatGPT, etc.) to your Redshift data — securely, safely, and with zero hassle.**

---

## 🌟 Features
- **Production-ready**: Secure, robust, and easy to deploy
- **MCP Standard**: Exposes Redshift as standardized tools for LLMs/AI
- **Strict Access Modes**: `readonly`, `readwrite`, `admin` (enforced by env var)
- **Auto-connect**: Use environment variables or a `.env` file for seamless startup
- **No code changes needed**: Just configure and run
- **Extensible**: Add new tools or business logic easily
- **Works with Claude Desktop, ChatGPT, and any MCP client**

---

## âš¡ Quickstart

1. **Clone & Install**
   ```bash
   git clone <repo-url>
   cd my-redshift-mcp
   python3 -m venv venv
   source venv/bin/activate
   pip install -r requirements.txt
   ```
2. **Configure** (recommended: create a `.env` file):
   ```env
   REDSHIFT_HOST=your-cluster.region.redshift.amazonaws.com
   REDSHIFT_DATABASE=mydb
   REDSHIFT_USER=myuser
   REDSHIFT_PASSWORD=mypassword
   REDSHIFT_PORT=5439
   DB_MCP_MODE=readonly
   ```
3. **Run the server**
   ```bash
   ./scripts/run_server.sh
   ```
4. **Connect from your LLM/MCP client** (e.g., Claude Desktop)

---

## 🔗 What is Redshift MCP Server?

Redshift MCP Server is an open-source bridge between Amazon Redshift and modern AI assistants. It lets LLMs securely query, explore, and (optionally) modify your Redshift data using the [Model Context Protocol (MCP)](https://github.com/anthropic-ai/model-context-protocol). Perfect for:
- Data teams enabling AI-powered analytics
- Building AI workflows and automations
- Secure, auditable LLM access to production data

---

## About This Project

This repository provides a **minimal, production-ready MCP server for Amazon Redshift** using the FastMCP framework. It allows LLMs and AI agents to:
- Query Redshift databases (with strict access controls)
- List schemas and tables
- Describe table structures
- (Optionally) insert/update data, depending on configured mode

**Key features:**
- Three access modes: `readonly`, `readwrite`, `admin` (see below)
- Environment variable and `.env` support for easy configuration
- Secure by default: starts in `readonly` mode
- Compatible with Claude Desktop, ChatGPT, and any MCP client
- Easy to extend with new tools or business logic

---

## Features

This MCP server provides the following tools for Redshift database operations:

- **connect_db**: Establish connection to a Redshift cluster (supports environment variables)
- **query**: Execute SELECT queries with optional parameter binding
- **execute**: Run INSERT, UPDATE, DELETE, or DDL statements
- **list_schemas**: List all schemas in the database
- **list_tables**: List tables in a specific schema
- **describe_table**: Get detailed structure of a table
- **disconnect**: Close the database connection

### Auto-Connection Support

The server supports automatic connection on startup using environment variables. If all required environment variables are set, the server will connect automatically when it starts.

---

## Access Modes and Query Safety

The server supports three access modes, controlled by the `DB_MCP_MODE` environment variable:

### 1. **readonly** (default)
- **Allows:** `SELECT`, `SHOW`, `DESCRIBE`, etc.
- **Blocks:** `INSERT`, `UPDATE`, `DELETE`, `DROP`, `TRUNCATE`, `ALTER`, `CREATE`, `GRANT`, `REVOKE`, `COMMENT`, `SET`, `COPY`, `UNLOAD`, `VACUUM`, `ANALYZE`, `MERGE`

### 2. **readwrite**
- **Allows:** `SELECT`, `INSERT`, `UPDATE`, `CREATE`, etc.
- **Blocks:** `DELETE`, `DROP`, `TRUNCATE`, `ALTER`, `GRANT`, `REVOKE`, `COMMENT`, `SET`, `COPY`, `UNLOAD`, `VACUUM`, `ANALYZE`, `MERGE`

### 3. **admin**
- **Allows everything** (no restrictions)

**If a forbidden statement is detected, the server will return a clear error message.**

#### How to Set the Mode
- **Environment variable:** `DB_MCP_MODE=readonly` (or `readwrite`, `admin`)
- **Claude Desktop config:**
  ```json
  "env": {
    "DB_MCP_MODE": "readwrite",
    ...
  }
  ```
- **Shell/local:**
  ```bash
  export DB_MCP_MODE=readonly
  ./run_server.sh
  ```

---

## Installation

1. Clone or download this repository
2. Install dependencies:

```bash
pip install -r requirements.txt
```

## Usage

### Running the Server

Run the server directly:

```bash
python src/redshift_mcp_server.py
```

Or use the provided scripts:

```bash
./scripts/run_server.sh
# or on Windows:
scripts\run_server.bat
```

By default, the server runs using STDIO transport, which is suitable for integration with MCP clients like Claude Desktop.

### Configuration for Claude Desktop

To use this server with Claude Desktop, add the following configuration to your Claude Desktop config file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

#### Option 1: With Environment Variables (Recommended)

```json
{
  "mcpServers": {
    "redshift": {
      "command": "/Users/anshulpatre/Desktop/DB-mcp/my-redshift-mcp/venv/bin/python",
      "args": ["/Users/anshulpatre/Desktop/DB-mcp/my-redshift-mcp/src/redshift_mcp_server.py"],
      "env": {
        "REDSHIFT_HOST": "your-cluster.region.redshift.amazonaws.com",
        "REDSHIFT_DATABASE": "mydb",
        "REDSHIFT_USER": "myuser",
        "REDSHIFT_PASSWORD": "mypassword",
        "REDSHIFT_PORT": "5439",
        "DB_MCP_MODE": "readonly"
      }
    }
  }
}
```

With this configuration, the server will automatically connect to your Redshift database on startup. You won't need to use the `connect_db` tool manually.

#### Option 2: Without Environment Variables

```json
{
  "mcpServers": {
    "redshift": {
      "command": "/Users/anshulpatre/Desktop/DB-mcp/my-redshift-mcp/venv/bin/python",
      "args": ["/Users/anshulpatre/Desktop/DB-mcp/my-redshift-mcp/src/redshift_mcp_server.py"]
    }
  }
}
```

With this configuration, you'll need to use the `connect_db` tool to establish a connection.

### Environment Variables

The server supports the following environment variables:

- `REDSHIFT_HOST`: Redshift cluster endpoint
- `REDSHIFT_DATABASE`: Database name
- `REDSHIFT_USER`: Username
- `REDSHIFT_PASSWORD`: Password
- `REDSHIFT_PORT`: Port number (default: 5439)
- `DB_MCP_MODE`: Access mode (`readonly`, `readwrite`, `admin`)

When these environment variables are set, the server will:
1. Automatically connect on startup
2. Use them as defaults for the `connect_db` tool if no parameters are provided
3. Enforce query/statement restrictions based on the selected mode

---

### Available Tools

#### 1. connect_db
Connect to a Redshift database cluster. If environment variables are set, parameters are optional.

```python
# With explicit parameters
{
  "tool": "connect_db",
  "arguments": {
    "host": "your-cluster.region.redshift.amazonaws.com",
    "database": "mydb",
    "user": "myuser",
    "password": "mypassword",
    "port": 5439
  }
}

# With environment variables set
{
  "tool": "connect_db",
  "arguments": {}
}
```

#### 2. query
Execute SELECT queries to retrieve data.

```python
{
  "tool": "query",
  "arguments": {
    "sql": "SELECT * FROM users WHERE created_at > %s",
    "params": ["2024-01-01"]
  }
}
```

#### 3. execute
Execute data modification or DDL statements.

```python
{
  "tool": "execute",
  "arguments": {
    "sql": "INSERT INTO users (name, email) VALUES (%s, %s)",
    "params": ["John Doe", "john@example.com"]
  }
}
```

#### 4. list_schemas
List all user-created schemas.

```python
{
  "tool": "list_schemas",
  "arguments": {}
}
```

#### 5. list_tables
List tables in a specific schema.

```python
{
  "tool": "list_tables",
  "arguments": {
    "schema": "public"
  }
}
```

#### 6. describe_table
Get detailed information about a table's structure.

```python
{
  "tool": "describe_table",
  "arguments": {
    "table": "users",
    "schema": "public"
  }
}
```

#### 7. disconnect
Close the database connection.

```python
{
  "tool": "disconnect",
  "arguments": {}
}
```

---

## Security Considerations

- **Credentials**: The recommended approach is to use environment variables in the MCP configuration file. This keeps credentials out of your code and tool calls.
- **Permissions**: Use database users with minimal required permissions.
- **Query Safety**: The server uses parameterized queries to prevent SQL injection. Query/statement type is checked and blocked according to the selected mode.
- **Network Security**: Ensure your Redshift cluster is properly secured with VPC and security groups.

## Development

To extend this server:

1. Add new tools using the `@mcp.tool()` decorator
2. Follow the FastMCP documentation for advanced features
3. Test thoroughly with your Redshift cluster

## Troubleshooting

### Connection Issues
- Verify your Redshift cluster endpoint and credentials
- Check network connectivity and security group settings
- Ensure the cluster is active and accepting connections

### Import Errors
- If `redshift-connector` is not available, the server falls back to `psycopg2`
- Install the appropriate connector based on your needs

## License

MIT

## Contributing

Feel free to submit issues or pull requests to improve this MCP server.

---

## 👤 Maintainer

This Redshift MCP Server is maintained and deployed by **Anshul**.