Skip to main content
Glama
work-samirk

google-workspace-mcp-server

by work-samirk
README.md
# Google Workspace MCP-Style Server (Python)

This project provides an HTTP-based Model Context Protocol (MCP) style server built in Python using FastAPI. It exposes tools to safely append reports to Google Docs and create drafts in Gmail, requiring interactive human-in-the-loop terminal confirmation before any modifications are executed.

---

## šŸ› ļø Project Structure
```text
google-mcp-server/
ā”œā”€ā”€ server.py          → FastAPI app exposing endpoints with approval prompts
ā”œā”€ā”€ auth.py            → Google API OAuth2 login & client token manager
ā”œā”€ā”€ docs_tool.py       → Google Docs append operation logic
ā”œā”€ā”€ gmail_tool.py      → Gmail draft creation logic
ā”œā”€ā”€ requirements.txt   → Python package dependencies
ā”œā”€ā”€ README.md          → Setup and execution instructions
ā”œā”€ā”€ credentials.json   → (Not Committed) Downloaded OAuth credentials
└── token.json         → (Not Committed) Authorized credentials token
```

---

## āš™ļø Prerequisites & Setup

### 1. Python Environment
Ensure Python 3.9+ is installed. Create and activate a virtual environment:
```bash
# Create venv
python3 -m venv venv

# Activate venv (macOS/Linux)
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt
```

### 2. Configure Google Cloud Credentials
To authorize access to Google Docs and Gmail APIs:
1. Go to the [Google Cloud Console](https://console.cloud.google.com/).
2. Create a project (or select an existing one).
3. Enable the **Google Docs API** and **Gmail API** under APIs & Services.
4. Go to **APIs & Services > Credentials**.
5. Click **Create Credentials > OAuth client ID**.
6. Set the Application Type to **Desktop app**.
7. Download the credentials JSON, rename it to `credentials.json`, and place it in the root of the `google-mcp-server` directory.

---

## šŸš€ Running the Server

Start the FastAPI server:
```bash
python server.py
```
* **First Run**: A web page will automatically open in your browser prompting you to log into your Google Account and authorize access for Google Docs (modify) and Gmail (compose drafts) scopes. Once authenticated, a `token.json` file is written, and future runs execute silently.

The server runs locally at: `http://localhost:8000`

---

## šŸ”Œ API Endpoints (Tools)

### 1. Append to Google Doc
Appends a formatted text block to the end of a Doc.
* **Endpoint**: `POST /append_to_doc`
* **Content-Type**: `application/json`
* **Request Body**:
  ```json
  {
    "doc_id": "your_google_doc_id_here",
    "content": "Verbatim text to append to the document body."
  }
  ```

### 2. Create Gmail Draft
Prepares a draft email in your mailbox.
* **Endpoint**: `POST /create_email_draft`
* **Content-Type**: `application/json`
* **Request Body**:
  ```json
  {
    "to": "stakeholders@example.com",
    "subject": "Weekly review pulse teaser",
    "body": " Teaser summary and deep link to the Google Doc."
  }
  ```

---

## šŸ”’ Security & Interactive Approvals

For safety, the server implements an **interactive human-in-the-loop gatekeeper**. 

When a POST request is sent to `/append_to_doc` or `/create_email_draft`, the FastAPI server will:
1. Print the pending action name and full payload details to the terminal console.
2. Wait/block for keyboard confirmation: `Approve action? (y/n): `
3. **If `y`**: Executes the Google Workspace operation and returns a `200 OK` JSON response.
4. **If `n` or invalid**: Aborts the operation and returns a `403 Forbidden` error response.