Google Calendar

Interactúa con Google Calendar para listar eventos, crear reuniones y encontrar espacios de tiempo libres.

Documentación

Servidor MCP de Google Calendar

Este servidor MCP permite que Claude interactúe con tu Google Calendar, habilitando capacidades como listar eventos, crear reuniones y encontrar espacios de tiempo libres.

Requisitos previos

  • Node.js (v16 o superior)
  • Aplicación de escritorio de Claude
  • Un proyecto de Google Cloud
  • API de Google Calendar habilitada
  • Credenciales OAuth 2.0

Instrucciones de configuración

1. Crear un proyecto de Google Cloud

  1. Ve a la Consola de Google Cloud
  2. Crea un nuevo proyecto o selecciona uno existente
  3. Habilita la API de Google Calendar:
    • Ve a "APIs y servicios" > "Biblioteca"
    • Busca "Google Calendar API"
    • Haz clic en "Habilitar"

2. Configurar la pantalla de consentimiento de OAuth

  1. Ve a "APIs y servicios" > "Pantalla de consentimiento de OAuth"
  2. Selecciona el tipo de usuario "Externo" (a menos que tengas una organización de Google Workspace)
  3. Completa la información requerida:
    • Nombre de la aplicación
    • Correo electrónico de soporte al usuario
    • Información de contacto del desarrollador
  4. Agrega los siguientes alcances:
    • https://www.googleapis.com/auth/calendar
    • https://www.googleapis.com/auth/calendar.events
  5. Agrega tu dirección de correo electrónico como usuario de prueba

3. Crear credenciales OAuth 2.0

  1. Ve a "APIs y servicios" > "Credenciales"
  2. Haz clic en "Crear credenciales" > "ID de cliente de OAuth"
  3. Selecciona "Aplicación de escritorio" como tipo de aplicación
  4. Nombra tu cliente (por ejemplo, "Cliente MCP de Calendar")
  5. Haz clic en "Crear"
  6. Descarga el archivo de configuración del cliente (necesitarás el ID de cliente y el secreto de cliente)

4. Obtener el token de actualización

  1. Crea un nuevo archivo llamado getToken.js:
const { google } = require('googleapis');
const http = require('http');
const url = require('url');

// Replace these with your OAuth 2.0 credentials
const CLIENT_ID = 'your-client-id';
const CLIENT_SECRET = 'your-client-secret';
const REDIRECT_URI = 'http://localhost:3000/oauth2callback';

// Configure OAuth2 client
const oauth2Client = new google.auth.OAuth2(
  CLIENT_ID,
  CLIENT_SECRET,
  REDIRECT_URI
);

// Define scopes
const scopes = [
  'https://www.googleapis.com/auth/calendar',
  'https://www.googleapis.com/auth/calendar.events'
];

async function getRefreshToken() {
  return new Promise((resolve, reject) => {
    try {
      // Create server to handle OAuth callback
      const server = http.createServer(async (req, res) => {
        try {
          const queryParams = url.parse(req.url, true).query;
          
          if (queryParams.code) {
            // Get tokens from code
            const { tokens } = await oauth2Client.getToken(queryParams.code);
            console.log('\n=================');
            console.log('Refresh Token:', tokens.refresh_token);
            console.log('=================\n');
            console.log('Save this refresh token in your configuration!');
            
            // Send success response
            res.end('Authentication successful! You can close this window.');
            
            // Close server
            server.close();
            resolve(tokens);
          }
        } catch (error) {
          console.error('Error getting tokens:', error);
          res.end('Authentication failed! Please check console for errors.');
          reject(error);
        }
      }).listen(3000, () => {
        // Generate auth url
        const authUrl = oauth2Client.generateAuthUrl({
          access_type: 'offline',
          scope: scopes,
          prompt: 'consent'  // Force consent screen to ensure refresh token
        });

        console.log('1. Copy this URL and paste it in your browser:');
        console.log('\n', authUrl, '\n');
        console.log('2. Follow the Google authentication process');
        console.log('3. Wait for the refresh token to appear here');
      });

    } catch (error) {
      console.error('Server creation error:', error);
      reject(error);
    }
  });
}

// Run the token retrieval
getRefreshToken().catch(console.error);
  1. Instala la dependencia requerida:
npm install googleapis
  1. Actualiza el script con tus credenciales OAuth:

    • Reemplaza your-client-id con tu ID de cliente real
    • Reemplaza your-client-secret con tu secreto de cliente real
  2. Ejecuta el script:

node getToken.js
  1. Sigue las instrucciones en la consola:
    • Copia la URL proporcionada
    • Pégala en tu navegador
    • Completa el proceso de autenticación de Google
    • Copia el token de actualización que aparece en la consola

5. Configurar Claude Desktop

  1. Abre tu archivo de configuración de Claude Desktop:

Para MacOS:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json

Para Windows:

code %AppData%\Claude\claude_desktop_config.json
  1. Agrega o actualiza la configuración:
{
    "mcpServers": {
        "google-calendar": {
            "command": "node",
            "args": [
                "/ABSOLUTE/PATH/TO/YOUR/build/index.js"
            ],
            "env": {
                "GOOGLE_CLIENT_ID": "your_client_id_here",
                "GOOGLE_CLIENT_SECRET": "your_client_secret_here",
                "GOOGLE_REDIRECT_URI": "http://localhost",
                "GOOGLE_REFRESH_TOKEN": "your_refresh_token_here"
            }
        }
    }
}
  1. Guarda el archivo y reinicia Claude Desktop

Configuración inicial del proyecto

  1. Crea un nuevo directorio para tu proyecto:
mkdir google-calendar-mcp
cd google-calendar-mcp
  1. Inicializa un nuevo proyecto npm:
npm init -y
  1. Instala las dependencias:
npm install @modelcontextprotocol/sdk googleapis google-auth-library zod
npm install -D @types/node typescript
  1. Crea un archivo tsconfig.json:
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "outDir": "./build",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
  1. Actualiza package.json:
{
  "type": "module",
  "scripts": {
    "build": "tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\""
  }
}
  1. Crea tu directorio de código fuente:
mkdir src
  1. Crea un archivo .env para desarrollo local (no lo subas al control de versiones):
GOOGLE_CLIENT_ID=your_client_id_here
GOOGLE_CLIENT_SECRET=your_client_secret_here
GOOGLE_REDIRECT_URI=http://localhost
GOOGLE_REFRESH_TOKEN=your_refresh_token_here

Compilación y ejecución

  1. Compila el servidor:
npm run build
  1. El servidor se iniciará automáticamente cuando abras Claude Desktop

Herramientas disponibles

El servidor proporciona las siguientes herramientas:

  1. list_events: Lista eventos del calendario dentro de un rango de tiempo especificado
  2. create_event: Crea un nuevo evento de calendario
  3. update_event: Actualiza un evento de calendario existente
  4. delete_event: Elimina un evento de calendario
  5. find_free_time: Encuentra espacios de tiempo disponibles en el calendario

Ejemplo de uso en Claude

Después de la configuración, puedes usar comandos como:

  • "Muéstrame mis eventos del calendario para la próxima semana"
  • "Programa una reunión con [email_id] mañana a las 2 PM por 1 hora"
  • "Encuentra un espacio libre de 30 minutos esta tarde"
  • "Actualiza mi reunión de las 3 PM a las 4 PM"
  • "Cancela mi reunión con ID [event_id]"

Solución de problemas

Problemas comunes

  1. Las herramientas no aparecen en Claude:

    • Revisa los registros de Claude Desktop: tail -f ~/Library/Logs/Claude/mcp*.log
    • Verifica que todas las variables de entorno estén configuradas correctamente
    • Asegúrate de que la ruta a index.js sea absoluta y correcta
  2. Errores de autenticación:

    • Verifica que tus credenciales OAuth sean correctas
    • Comprueba si el token de actualización es válido
    • Asegúrate de que los alcances requeridos estén habilitados
  3. Problemas de conexión del servidor:

    • Comprueba si el servidor se compiló correctamente
    • Verifica los permisos de archivo en build/index.js (debe ser 755)
    • Intenta ejecutar el servidor directamente: node /path/to/build/index.js

Ver registros

Para ver los registros del servidor:

# For MacOS/Linux:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log

# For Windows:
Get-Content -Path "$env:AppData\Claude\Logs\mcp*.log" -Wait -Tail 20

Variables de entorno

Si recibes errores de variables de entorno, verifica cada una:

  1. GOOGLE_CLIENT_ID: Debe comenzar con algo como "123456789-..."
  2. GOOGLE_CLIENT_SECRET: Generalmente termina en ".apps.googleusercontent.com"
  3. GOOGLE_REDIRECT_URI: Debe ser "http://localhost"
  4. GOOGLE_REFRESH_TOKEN: Una cadena larga que no expira

Consideraciones de seguridad

  • Mantén tus credenciales OAuth seguras
  • No subas credenciales al control de versiones
  • Usa variables de entorno para datos sensibles
  • Rota los tokens de actualización regularmente
  • Supervisa el uso de la API en la Consola de Google Cloud

Licencia

Licencia MIT - Consulta el archivo LICENSE para más detalles.

Soporte

Si encuentras algún problema:

  1. Revisa la sección de solución de problemas anterior
  2. Revisa los registros de Claude Desktop
  3. Abre un problema en GitHub
  4. Contacta al mantenedor