Skip to main content
Glama

Gmail & PostgreSQL MCP Server

by marouanemkm

MCP Gmail & PostgreSQL Server

A unified Model Context Protocol (MCP) server that provides AI agents with read and write access to Gmail and PostgreSQL databases.

šŸš€ Two Modes Available

1. stdio Mode (for Claude Desktop)

  • Direct integration with Claude Desktop

  • Uses standard input/output

  • No network configuration needed

2. HTTP/SSE Mode (for n8n, remote agents)

  • HTTP server with Server-Sent Events (SSE)

  • Can be deployed to VPS

  • Accessible via URL

  • Perfect for n8n AI Agent with MCP Client connector

Features

  • Gmail Integration: Send emails, read emails, list emails, and manage labels

  • PostgreSQL Integration: Execute queries, read/write operations, and schema inspection

  • Modular Architecture: Cleanly separated services for easy maintenance

  • Environment-based Configuration: Secure credential management via .env file

Prerequisites

  • Node.js 18+

  • npm or yarn

  • Gmail API credentials (Google Cloud Console)

  • PostgreSQL database

Installation

  1. Clone and install dependencies:

npm install
  1. Build the project:

npm run build

Configuration

Step 1: Create .env file

Copy the example file and fill in your credentials:

cp .env.example .env

Step 2: Configure Gmail

Get Gmail API Credentials

  1. Go to Google Cloud Console

  2. Create a new project or select an existing one

  3. Enable the Gmail API:

    • Navigate to "APIs & Services" > "Library"

    • Search for "Gmail API" and click "Enable"

  4. Create OAuth 2.0 credentials:

    • Go to "APIs & Services" > "Credentials"

    • Click "Create Credentials" > "OAuth client ID"

    • Choose "Desktop app" as application type

    • Download the credentials JSON file

  5. Get your Client ID and Client Secret from the credentials

  6. Get a Refresh Token:

    • Run this script to authorize and get a refresh token:

    node scripts/get-gmail-token.js
    • Or use Google's OAuth 2.0 Playground:

      1. Go to https://developers.google.com/oauthplayground/

      2. Click the gear icon (āš™ļø) and check "Use your own OAuth credentials"

      3. Enter your Client ID and Client Secret

      4. In the left panel, select "Gmail API v1" and check the scopes:

        • https://www.googleapis.com/auth/gmail.readonly

        • https://www.googleapis.com/auth/gmail.send

        • https://www.googleapis.com/auth/gmail.modify

      5. Click "Authorize APIs" and sign in

      6. Click "Exchange authorization code for tokens"

      7. Copy the "Refresh token" value

  7. Add to .env:

GMAIL_CLIENT_ID=your_client_id_from_step_5 GMAIL_CLIENT_SECRET=your_client_secret_from_step_5 GMAIL_REFRESH_TOKEN=your_refresh_token_from_step_6

Step 3: Configure PostgreSQL

Add your PostgreSQL connection details to .env:

POSTGRES_HOST=localhost # or your database host POSTGRES_PORT=5432 # default PostgreSQL port POSTGRES_DATABASE=your_db_name # your database name POSTGRES_USER=your_db_user # your database user POSTGRES_PASSWORD=your_password # your database password POSTGRES_SSL=false # set to true if using SSL

Usage

For n8n (HTTP Mode) - RECOMMENDED

Start the HTTP server:

# Development npm run dev:http # Production npm run build npm run start:http

Server will be available at: http://localhost:3000/sse

See

For Claude Desktop (stdio Mode)

# Development npm run dev # Production npm start

Configure in Claude Desktop's config file (see Configuration section below).

Available Tools

Gmail Tools

  • gmail_list_emails: List emails from inbox with optional filters

    • Parameters: query, maxResults, labelIds

  • gmail_read_email: Read a specific email by message ID

    • Parameters: messageId, format

  • gmail_send_email: Send an email

    • Parameters: to, subject, body, htmlBody (optional), cc (optional), bcc (optional)

  • gmail_get_labels: Get all Gmail labels

PostgreSQL Tools

  • postgres_query: Execute SELECT queries (read-only)

    • Parameters: query, params (optional array)

  • postgres_execute: Execute write operations (INSERT, UPDATE, DELETE)

    • Parameters: query, params (optional array)

  • postgres_get_tables: List all tables in the database

    • Parameters: schema (optional, default: 'public')

  • postgres_get_table_schema: Get schema information for a table

    • Parameters: tableName, schema (optional, default: 'public')

Deployment to VPS

  1. Transfer files to your VPS:

scp -r . user@your-vps-ip:/path/to/mcp-server/
  1. SSH into your VPS and install:

ssh user@your-vps-ip cd /path/to/mcp-server npm install npm run build
  1. Create with your credentials

  2. Run as a service (using PM2 or systemd):

With PM2:

npm install -g pm2 pm2 start npm --name "mcp-server" -- start pm2 save

With systemd, create /etc/systemd/system/mcp-server.service:

[Unit] Description=MCP Gmail & PostgreSQL Server After=network.target [Service] Type=simple User=your-user WorkingDirectory=/path/to/mcp-server Environment=NODE_ENV=production ExecStart=/usr/bin/node dist/index.js Restart=always [Install] WantedBy=multi-user.target

Then:

sudo systemctl enable mcp-server sudo systemctl start mcp-server

Project Structure

. ā”œā”€ā”€ src/ │ ā”œā”€ā”€ index.ts # Main server entry point │ └── services/ │ ā”œā”€ā”€ gmail.service.ts # Gmail integration │ └── postgres.service.ts # PostgreSQL integration ā”œā”€ā”€ dist/ # Compiled JavaScript ā”œā”€ā”€ .env # Environment variables (not in git) ā”œā”€ā”€ .env.example # Example environment file ā”œā”€ā”€ package.json ā”œā”€ā”€ tsconfig.json └── README.md

Security Notes

  • Never commit .env file to version control

  • Use strong database passwords

  • Keep Gmail OAuth credentials secure

  • Consider using environment-specific credentials for production

  • Regularly rotate refresh tokens and passwords

Troubleshooting

Gmail not working

  • Verify your refresh token is valid and not expired

  • Check that all required OAuth scopes are granted

  • Ensure GMAIL_CLIENT_ID and GMAIL_CLIENT_SECRET are correct

PostgreSQL connection issues

  • Verify database credentials are correct

  • Check if PostgreSQL is running and accessible

  • For remote connections, ensure firewall rules allow connections

  • If using SSL, set POSTGRES_SSL=true in .env

License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marouanemkm/gmail-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server