Skip to main content
Glama
yv12

Google MCP Server

by yv12
README.md
# Google MCP Server

A Python-based FastAPI server that provides tools for appending text to Google Docs and creating Gmail drafts. It uses Google OAuth 2.0 for authentication and includes a manual approval step in the terminal before performing actions.

## Prerequisites

1. Python 3.8+
2. A Google Cloud Platform (GCP) project.

## Setup Instructions

### 1. Configure Google Cloud

1. Go to the [Google Cloud Console](https://console.cloud.google.com/).
2. Create a new project (or select an existing one).
3. Navigate to **APIs & Services > Library**.
4. Search for and enable the **Google Docs API**.
5. Search for and enable the **Gmail API**.
6. Navigate to **APIs & Services > OAuth consent screen**.
   - Choose "External" (or "Internal" if you have a Google Workspace).
   - Fill out the required App information.
   - Add the following scopes:
     - `https://www.googleapis.com/auth/documents`
     - `https://www.googleapis.com/auth/gmail.compose`
   - Add yourself as a Test User.
7. Navigate to **APIs & Services > Credentials**.
8. Click **Create Credentials > OAuth client ID**.
   - Application type: **Desktop app**.
   - Name: Google MCP Server (or whatever you prefer).
9. Click **Create**, then click **Download JSON**.
10. Rename the downloaded file to `credentials.json` and place it in the root directory of this project (`google-mcp-server/`).

### 2. Install Dependencies

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

### 3. Run the Server

```bash
uvicorn server:app --reload
```

On the first run, when an endpoint is hit, a browser window will open asking you to authenticate with your Google account. After successful login, a `token.json` file will be generated locally. Subsequent runs will use this token directly.

## Usage

The server runs on `http://127.0.0.1:8000`.

### Endpoints

#### `POST /append_to_doc`
Appends content to a Google Doc.
**Payload:**
```json
{
  "doc_id": "YOUR_GOOGLE_DOC_ID",
  "content": "Text to append"
}
```

#### `POST /create_email_draft`
Creates a draft in Gmail.
**Payload:**
```json
{
  "to": "recipient@example.com",
  "subject": "Hello",
  "body": "This is a draft email body."
}
```

### Manual Approval
Whenever an endpoint is invoked, the terminal running the server will prompt:
```
Action: append_to_doc
Payload: {'doc_id': '...', 'content': '...'}
Approve? (y/n):
```
You must type `y` to allow the action to proceed.