# pi-google-services

Google Calendar & Gmail MCP server for Pi. Lets your Pi agent manage your calendar and emails through natural language.

## Setup

```bash
pi-google-services login    # Opens browser → authorize with Google
pi-google-services serve    # Start MCP server (done automatically by Pi)
```

## Calendar tools

### `list-events`
Show events in a date range.

Examples:
- "mostrame los eventos de mañana"
- "qué tengo esta semana?"
- "eventos del 20 al 25 de junio"

Arguments:
- `timeMin` (ISO 8601) — start of range (default: today 00:00)
- `timeMax` (ISO 8601) — end of range (default: today 23:59)
- `calendarId` — calendar to query (default: primary)
- `maxResults` — max events (default: 50)

### `create-event`
Create a new calendar event with optional attendees and Google Meet.

Examples:
- "creá una reunión mañana a las 15"
- "agendá una llamada con juan@gmail.com el jueves a las 10"
- "creá un evento 'Cumpleaños' el 25/12 todo el día"
- "creá un meet virtual mañana a las 16 con Meet"

Arguments:
- `summary` (required) — event title
- `startTime` (required) — ISO 8601 start
- `endTime` (required) — ISO 8601 end
- `attendees` — comma-separated emails to invite
- `withMeet` (boolean) — add Google Meet link
- `description` — event description
- `location` — event location
- `calendarId` — target calendar (default: primary)

### `update-event`
Modify an existing event.

Examples:
- "cambiá la reunión de mañana a las 16"
- "renombrá el evento de la cena a 'Cena con amigos'"

Arguments:
- `eventId` (required) — event to modify
- `summary`, `startTime`, `endTime` — fields to update
- `calendarId` — target calendar (default: primary)

### `delete-event`
Remove an event.

Examples:
- "borrá el evento de prueba del viernes"
- "eliminá la reunión de las 15"

Arguments:
- `eventId` (required) — event to delete
- `calendarId` — target calendar (default: primary)

### `search-events`
Search events by text.

Examples:
- "buscá eventos de 'reunión'"
- "encontrá cuando hablé de 'presentación'"

Arguments:
- `query` (required) — text to search
- `maxResults` — max results (default: 50)

### `list-calendars`
List all available calendars.

Examples:
- "mostrame mis calendarios"
- "qué calendarios tengo?"

### `get-freebusy`
Check availability across calendars.

Examples:
- "estoy libre mañana a las 15?"
- "qué horarios tengo ocupados esta semana?"

Arguments:
- `timeMin`, `timeMax` — range to check
- `calendarIds` — comma-separated calendar IDs

## Gmail tools

### `list-inbox`
List recent inbox messages.

Examples:
- "mostrame mis emails"
- "qué hay en mi bandeja de entrada?"
- "mostrame los últimos 5 emails de LinkedIn"

Arguments:
- `maxResults` — max emails (default: 20)
- `query` — optional Gmail search filter

### `get-email`
Read a full email by ID.

Examples:
- "leé el primer email de la lista"
- "mostrame el contenido completo del mail de belo"

Arguments:
- `id` (required) — email message ID

### `search-emails`
Search emails with Gmail syntax.

Examples:
- "buscá emails de belo"
- "encontrá mails sobre 'Uber' de esta semana"
- "mostrame los no leídos"

Arguments:
- `query` (required) — Gmail search query
- `maxResults` — max results (default: 20)

### `send-email`
Send a new email with optional file attachments.

Examples:
- "enviále un mail a lucsk94@gmail.com con asunto 'Prueba' y cuerpo 'Hola, esto es una prueba'"
- "mandále un email a juan@mail.com diciendo que la reunión se pasó al viernes"
- "enviále un email a maria@work.com con el PDF /home/user/reporte.pdf adjunto"

Arguments:
- `to` (required) — recipient email
- `subject` (required) — email subject
- `body` — email body text
- `attachments` — array of files to attach. Each item can have `localPath` (local file) or `driveFileId` (Google Drive file ID)

### `reply-to-email`
Reply to an existing thread with optional file attachments.

Examples:
- "respondé el mail de Natalia aceptando la invitación"
- "contestále al de belo que ya lo vi"
- "respondé al mail de ventas adjuntando /home/user/cotizacion.pdf"

Arguments:
- `threadId` (required) — thread to reply to
- `to` (required) — recipient email
- `subject` (required) — reply subject
- `body` — reply body text
- `attachments` — array of files to attach. Each item can have `localPath` (local file) or `driveFileId` (Google Drive file ID)

## Tasks tools

### `list-tasklists`
Show all task lists.

Examples:
- "mostrame mis listas de tareas"

### `list-tasks`
List tasks (pending, completed, or all).

Examples:
- "mostrame mis tareas pendientes"
- "qué tareas tengo para hacer?"
- "mostrame las tareas completadas"

Arguments:
- `taskListId` — task list ID (default: @default)
- `status` — filter: pending, completed, or '' for all
- `maxResults` — max results (default: 50)

### `create-task`
Create a new task.

Examples:
- "creá una tarea para comprar leche"
- "agendá 'llamar al dentista' para mañana"

Arguments:
- `title` (required) — task title
- `taskListId` — target list (default: @default)
- `notes` — optional description
- `dueDate` — due date (YYYY-MM-DD)

### `complete-task`
Mark a task as done.

Examples:
- "marcá como hecha la tarea de la leche"
- "completá la tarea del dentista"

Arguments:
- `taskId` (required) — task to complete
- `taskListId` — target list (default: @default)

### `delete-task`
Delete a task.

Examples:
- "borrá la tarea de prueba"

Arguments:
- `taskId` (required) — task to delete
- `taskListId` — target list (default: @default)
