Gemini CLI · Servidor MCP
Servidor MCP para Gemini CLI: mensajería, email y calendario
Un solo comando gemini mcp add conecta el Servidor MCP de Unipile. Después, su agente construye funciones de LinkedIn, WhatsApp, email y calendario en su proyecto.
Prueba gratis de 7 días, sin tarjeta.
Gemini CLI · booking-app
Unipile MCP conectado
Añade la agenda de citas a mi app de reservas.
Leer endpointGET /v2/{account_id}/calendarsesquema cargado
Se han añadido la ruta de disponibilidad y la ruta de reserva. Los eventos se crean en el calendario que conectó el usuario.
Describa la próxima función…
El objetivo
Lo que quiere conseguir
Añadir una conexión de LinkedIn, WhatsApp, email o calendario a su producto. Eso implica leer una referencia de API, elegir los endpoints adecuados, conectar Hosted Auth y sus callbacks, y conservar los IDs correctos desde la búsqueda hasta el mensaje. Con el servidor MCP de Unipile en Gemini CLI, el agente hace esa lectura por usted y escribe el código en su stack, desde el terminal.
Conecte el servidor MCP de Unipile a Gemini CLIUnipile MCP conectado
Seleccione los canales que quiere conectar
developer.unipile.com/mcpConectar todos los canales9 canales
↑↓navegar espacioseleccionar ↵conectaruna URL, una cabecera
Sin ello
Pestañas, conjeturas y código pegamento
Gemini CLI adivina nombres de endpoints y payloads a partir de sus datos de entrenamiento, y se equivoca con los IDs.
Usted pega esquemas de la referencia en el chat, un endpoint cada vez.
La primera llamada real ocurre en producción, después de la revisión de código.
Con el servidor MCP de Unipile
El resultado en su aplicación
Una ruta de conexión y un botón en Settings: cada usuario vincula su propia cuenta mediante Hosted Auth.
Un receptor de webhooks y una bandeja que muestra los mensajes y los emails según llegan.
Todas las peticiones ya ejecutadas una vez en su aplicación de Development antes de que revise el diff.
settings.json, de usuario o de proyecto
Añada el servidor MCP de Unipile a Gemini CLI
El servidor es remoto: una URL sobre streamable HTTP y una cabecera. Sin npx, sin proceso local. Un solo comando escribe la entrada en settings.json, de usuario o de proyecto, y Gemini CLI conecta en el siguiente arranque.
Gemini CLI instalado (npm i -g @google/gemini-cli) y con sesión iniciada, en una carpeta que haya marcado como de confianza.
Una aplicación de Development en el dashboard de Unipile, con un Scope y una clave Account API con scope.
Al menos una cuenta de prueba conectada a ese Scope mediante Hosted Auth, para que el agente pueda ejecutar peticiones reales.
gemini mcp add, una líneaescribe settings.json por usted
Ajustes de usuario~/.gemini/settings.json
Ajustes de proyecto.gemini/settings.json (scope por defecto)
Clave desde una variable de entorno$UNIPILE_API_KEY en headers
?
¿De usuario o de proyecto?El comando usa por defecto el scope de proyecto, que escribe .gemini/settings.json en la carpeta actual. Pase --scope user para todos los proyectos de la máquina. Los ajustes de proyecto tienen prioridad sobre los de usuario, y ambos necesitan una carpeta de confianza para cargarse.
# Registre el servidor MCP alojado de Unipile para todos los proyectos (scope user)
gemini mcp add --transport http --scope user \
--header "X-API-KEY: your-scoped-api-key" \
unipile "https://developer.unipile.com/mcp?branch=v2.0"
# MCP server "unipile" added to user settings. (http)
# Verifique, o escriba /mcp dentro de una sesión
gemini mcp list
# ✓ unipile: https://developer.unipile.com/mcp?branch=v2.0 (http) - Connected
{
"mcpServers": {
"unipile": {
"url": "https://developer.unipile.com/mcp?branch=v2.0",
"type": "http",
"headers": { "X-API-KEY": "your-scoped-api-key" }
}
}
}
{
"mcpServers": {
"unipile": {
"url": "https://developer.unipile.com/mcp?branch=v2.0",
"type": "http",
"headers": { "X-API-KEY": "$UNIPILE_API_KEY" }
}
}
}
// Versionado con el repositorio: mantenga la clave en el entorno, no en el archivo.
{
"mcpServers": {
"unipile": {
"url": "https://developer.unipile.com/mcp?branch=v2.0",
"type": "http",
"headers": { "X-API-KEY": "${{UNIPILE_API_KEY}}" }
}
}
}
// export UNIPILE_API_KEY=your-scoped-api-key antes de lanzar gemini
Guarde el archivo y lance gemini en una carpeta de confianza. gemini mcp list muestra unipile como Connected, y /mcp dentro de una sesión lista el servidor. Verificado en gemini-cli 0.60.0.
Qué hace cada flag, verificado en gemini-cli 0.60.0
--transport httpObligatorio: el valor por defecto es stdio, un proceso local. El servidor de Unipile es remoto sobre streamable HTTP. La CLI lo escribe como "type": "http".--scope userEscribe ~/.gemini/settings.json. Sin él, la entrada va a .gemini/settings.json en la carpeta actual, el scope de proyecto.--header "X-API-KEY: …"Repetible. Su clave Account API con scope, nunca una clave Service ni una Account global. Funciona en cualquier posición del comando.unipile "https://developer.unipile.com/mcp?branch=v2.0"El nombre lo elige usted. Entrecomille la URL: el signo de interrogación es un carácter glob en zsh."$UNIPILE_API_KEY"En settings.json, $VAR o ${VAR} se lee del entorno al arrancar, así que un archivo de proyecto se puede versionar sin ningún secreto.--timeout 30000Opcional, en milisegundos. Súbalo solo si el primer handshake falla en una red lenta o detrás de un proxy.La parte específica de Gemini CLI
httpUrl, url, confianza y su clave de API
Tres detalles de settings.json que deciden si el servidor conecta, y que ningún otro cliente tiene en esta forma.
1httpUrl o urlLa documentación asocia httpUrl a streamable HTTP y url a SSE. El comando gemini mcp add escribe url junto con "type": "http", y ambas formas conectan. Si escribe el archivo a mano, use httpUrl: una url sin type se interpreta como SSE, la causa más citada de un estado Disconnected."httpUrl": "https://developer.unipile.com/mcp?branch=v2.0"
2$VAR dentro de headersGemini CLI expande $NAME y ${NAME} en settings.json, cabeceras incluidas. El archivo de proyecto se puede versionar sin ningún secreto, y cada desarrollador exporta su propia clave Account API con scope."headers": { "X-API-KEY": "$UNIPILE_API_KEY" }
export UNIPILE_API_KEY=your-scoped-api-key
3Una carpeta de confianza, y trust sin definirEn una carpeta sin confianza, todos los servidores aparecen como Disabled, incluidos los de nivel de usuario. Marque la carpeta como de confianza en el primer aviso o con el comando trust. Deje sin definir la opción trust del servidor: se saltaría la confirmación antes de cada acción.gemini trust
Verificación
Verifique la conexión
Tres comprobaciones: en la CLI, dentro de una sesión y luego con un prompt que solo lee la especificación. Ninguna toca una cuenta conectada.
1Desde el terminallist imprime una fila por servidor con su transporte y su estado. Una marca de verificación y Connected significan que el handshake funcionó; un círculo y Disabled, que la carpeta no es de confianza.gemini mcp list
# ✓ unipile: … (http) - Connected
2Dentro de una sesiónEscriba /mcp para ver todos los servidores configurados con su estado: Connected, Disconnected o Disabled. El servidor de Unipile aparece con sus acciones listas para llamarse./mcp
# o /mcp desc para ver la descripción de cada acción
3En un chat, sin tocar ninguna cuentaPida algo que solo lea la especificación de la API. Si el agente responde con rutas y parámetros reales, el servidor está conectado.Con el MCP de Unipile, lista los endpoints de búsqueda de personas en LinkedIn y sus parámetros obligatorios.
Prompts, no código de pegamento
Dé el prompt a su agente
Tres tareas de integración, cada una con el prompt exacto para pegar en Gemini CLI, los endpoints de Unipile que el agente lee y ejecuta y lo que llega a su proyecto. Las rutas están completas, sobre la URL base de la API
https://api.unipile.com, con su clave con scope en la cabecera X-API-KEY .Añade la programación de citas a mi app de reservas: lee la disponibilidad de cada usuario durante una semana y crea la reunión en el calendario que conectó, Google u Outlook.
Leer endpointGET /v2/{account_id}/calendars/{calendar_id}/eventsesquema cargado
Ejecutar peticiónPOST /v2/{account_id}/calendars/{calendar_id}/events201 Created
Se han añadido
GET /api/availability (eventos en la ventana solicitada, franjas ocupadas calculadas en el servidor) y POST /api/bookings, que crea el evento con sus asistentes en el calendario del usuario y guarda el ID de evento devuelto. Las zonas horarias se toman del calendario. Evento de prueba creado en la app de Development.Disponibilidad y creación de eventos en el calendario que conectó su usuario
Google Calendar y Outlook Calendar comparten las mismas rutas de calendario. Gemini CLI lee los esquemas de calendario, evento y asistente a través del servidor, escribe el cálculo de disponibilidad y la ruta de reserva, y crea un evento en un calendario de prueba antes de que usted revise el diff.
Endpoints que usa el agente
GET/v2/{account_id}/calendarsGET/v2/{account_id}/calendars/{calendar_id}/eventsPOST/v2/{account_id}/calendars/{calendar_id}/events
Error frecuente: Calcular la disponibilidad en la zona horaria del navegador. Use la zona horaria del calendario que indica la respuesta de la API, o la franja se desplazará varias horas para un asistente remoto.
Ver todos los canales del servidor MCP de Unipile
Nuestra bandeja ya sincroniza LinkedIn y WhatsApp con Unipile. Añade Instagram y Telegram con el mismo modelo de hilos y el mismo endpoint de respuesta.
Buscar endpoints"chats messages attendees"3 resultados
Ejecutar peticiónGET /v2/{account_id}/chats200 OK
Sin modelo nuevo: los chats de Instagram y Telegram pasan por las mismas rutas de chats y mensajes, así que el job de sincronización recorre ahora todas las cuentas conectadas sea cual sea el proveedor, y el endpoint de respuesta envía desde la cuenta propia del chat. Se han añadido las dos etiquetas de proveedor y se ha ejecutado la sincronización en la app de Development con una cuenta de prueba de Instagram y otra de Telegram.
Mismas rutas, dos canales más, ningún modelo nuevo
Como todos los proveedores de mensajería se exponen con las mismas rutas de chat, ampliar una bandeja consiste en conectar cuentas mediante Hosted Auth y dejar que la sincronización las cubra. El agente revisa en los esquemas los campos específicos de cada proveedor, como los identificadores de asistentes, y mantiene intacto el modelo de hilos.
Endpoints que usa el agente
GET/v2/accountsGET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Error frecuente: Codificar el proveedor en la sincronización. Recorra la ruta de cuentas y deje que el campo provider de cada cuenta determine la etiqueta, no la ruta del código.
Construir una bandeja unificada con un agente
Revisa mi integración actual de Unipile en busca de ID incorrectos, reintentos inseguros y llamadas que deberían ser webhooks, y propón las correcciones.
Leer endpointPOST /v2/{account_id}/chats/{chat_id}/messages/sendesquema cargado
Leer endpointPOST /v2/webhooks/endpoints/esquema cargado
Tres problemas encontrados: la llamada de envío usaba la primera cuenta del workspace en lugar de la cuenta del chat; el wrapper de reintentos reenviaba mensajes tras un timeout; la bandeja consultaba la ruta de chats cada 30 segundos. Parches propuestos: ID de cuenta tomado del chat, reintentos limitados a las lecturas, un endpoint de webhook para los eventos de mensajes. Aplicados y verificados en la app de Development.
Una auditoría frente al contrato real, no frente a la memoria
El agente compara su código con los esquemas de petición y respuesta que lee a través del servidor: qué campo lleva la cuenta, qué llamadas son idempotentes, qué bucles de polling sustituyen los eventos de webhook. La revisión llega como un diff que puede aplicar, probado en su aplicación de Development.
Endpoints que usa el agente
GET/v2/accounts/{account_id}POST/v2/{account_id}/chats/{chat_id}/messages/sendPOST/v2/webhooks/endpoints/GET/v2/webhooks/conversations/
Error frecuente: Aceptar una corrección que reintenta una escritura. Un mensaje o un email sale una sola vez; el reintento seguro está del lado de la lectura, con el webhook como fuente de verdad.
Conecte webhooks con un agente
De Development a producción
Pruebe primero en una aplicación de Development
El dashboard de Unipile separa una aplicación de Development de otra de Production. Dé a Gemini CLI una clave con scope de la aplicación de Development, con una o dos cuentas de prueba conectadas mediante Hosted Auth. El agente ejecuta peticiones reales sobre esas cuentas, en nombre del usuario autenticado que las vinculó, dentro de los límites de cada proveedor, y nada toca las cuentas de sus usuarios hasta que publique. Deje
trust sin definir en la entrada del servidor mientras construye, para que la CLI pregunte antes de cada acción de escritura.Valide el flujo de conexión de extremo a extremo: enlace de autenticación creado en el servidor, ID de cuenta guardado en el usuario.
Valide una lectura y una escritura por funcionalidad: listar chats, enviar un mensaje desde la cuenta de prueba.
Valide una entrega de webhook y un estado de reconexión o de checkpoint antes de cambiar la clave a Production.
crm-app · DevelopmentUsada por Gemini CLI
Scopedev-tests · 2 cuentas
Clave
scoped Account API keyCuentasCuenta de prueba LinkedIn, buzón de prueba Gmail
Webhooks1 endpoint · eventos de mensaje
crm-app · ProductionSin tocar
Scopeuno por workspace
Clave
scoped keys, in your backend onlyCuentaslas cuentas propias de sus usuarios, vía Hosted Auth
Resolución de problemas
Errores habituales y qué significan
Lo que muestran gemini mcp list y /mcp cuando una entrada no está bien, y cómo se corrige cada caso. Casi siempre se reduce a la clave de transporte, al scope, a la confianza de la carpeta o a la clave de API.
No MCP servers configured.
gemini mcp list no encuentra ninguna entrada desde la carpeta actual.
SoluciónEl archivo debe ser ~/.gemini/settings.json o .gemini/settings.json en la raíz de la carpeta desde la que lanzó gemini, con mcpServers en el nivel superior del JSON. Una coma de más hace que se ignore el archivo entero.
Disconnected
El servidor aparece con una cruz y el estado Disconnected.
SoluciónCompruebe primero la clave de transporte: httpUrl para streamable HTTP, o url con "type": "http" tal como lo escribe el comando. Una url sin más se interpreta como SSE. Después la propia URL, con ?branch=v2.0, y cualquier proxy corporativo.
Disabled, carpeta sin confianza
Todos los servidores, incluidos los de nivel de usuario, aparecen con un círculo y el estado Disabled, con un aviso sobre la carpeta.
SoluciónGemini CLI carga los servidores MCP solo en una carpeta de confianza. Acepte el aviso en el primer arranque o ejecute gemini trust en el proyecto, y vuelva a listar.
Añadido en el sitio equivocado
La entrada funciona en un proyecto y falta en otro.
Solucióngemini mcp add usa por defecto el scope de proyecto y escribe .gemini/settings.json en la carpeta actual. Añada --scope user para todos los proyectos, y recuerde que un archivo de proyecto tiene prioridad sobre el de usuario para el mismo nombre de servidor.
401 Unauthorized en las peticiones
El servidor aparece como Connected, el agente lee la especificación, pero ejecutar una acción falla.
SoluciónConnected no comprueba la clave. Falta la cabecera, la variable indicada en headers no está exportada en el shell que lanzó gemini, hay un espacio de más alrededor del valor, o la clave es una Service o una Account global en lugar de una clave Account API con scope.
Timed out
El handshake o una acción superan el límite.
SoluciónEl valor por defecto de timeout es 600000 ms. El servidor es remoto y no hay ningún proceso que arrancar: un timeout al arrancar apunta a la red, a un proxy o a la URL. Defina timeout en la entrada solo después de descartar esos tres.
6000+
Empresas que innovan con Unipile
La confianza de los líderes del sector
1 API
Racionalizar las operaciones de los principales canales de comunicación
2 días
Rápida integración en directo con una configuración mínima
30%
Reducción de los esfuerzos y recursos de mantenimiento
Seguridad y conformidad integradas
Protección de nivel empresarial para sus datos y flujos de trabajo Más información sobre nuestra seguridad
SOC 2 Tipo II
Certificado
Controles de seguridad auditados de forma independiente que garantizan la protección de datos y la integridad operativa.
GDPR
Conforme
Pleno cumplimiento de la normativa europea de protección de datos para la privacidad de los usuarios.
99.9%
Tiempo de actividad de la plataforma en los últimos 24 meses
24/7
Asistencia global con API de alto rendimiento
FAQ del servidor MCP en Gemini CLI
Las preguntas que la gente escribe de verdad: httpUrl o url, dónde vive settings.json, un comando en lugar de JSON, cómo mantener la clave fuera del archivo, Disconnected, No MCP servers configured, la extensión de VS Code y las claves.
La documentación define
httpUrl como el endpoint streamable HTTP y url como un endpoint SSE. El comando gemini mcp add --transport http escribe url junto con "type": "http", y ambas formas conectan en las versiones actuales. Si escribe el archivo a mano, use httpUrl: una url sin type se interpreta como SSE, la causa más citada de un servidor Disconnected.Los ajustes de usuario en
~/.gemini/settings.json, los de proyecto en .gemini/settings.json en la raíz de su proyecto, ambos bajo la clave mcpServers , y los de proyecto tienen prioridad sobre los de usuario. Ojo con el valor por defecto del comando: gemini mcp add escribe en el scope de proyecto salvo que pase --scope user.Sí, y es la vía recomendada:
gemini mcp add --transport http --scope user --header "X-API-KEY: your-scoped-api-key" unipile "https://developer.unipile.com/mcp?branch=v2.0". El flag --header es repetible y puede ir en cualquier posición del comando. Verificado en gemini-cli 0.60.0.Escriba el valor de la cabecera como
"$UNIPILE_API_KEY" o "${UNIPILE_API_KEY}". Gemini CLI expande las variables de entorno en settings.json, cabeceras incluidas, así que el archivo de proyecto se puede versionar sin ningún secreto y cada desarrollador exporta su propia clave Account API con scope antes de lanzar gemini.Por orden: la clave de transporte (
httpUrl para streamable HTTP, o url con "type": "http"), un settings.json de proyecto que sobrescriba el suyo o al revés, la confianza de la carpeta (una carpeta sin confianza desactiva todos los servidores) y, por último, un estado Disconnected mientras las acciones funcionan, que viene de un ping opcional de la especificación. Ejecute gemini mcp list, y después /mcp dentro de una sesión.Gemini CLI no ha encontrado ninguna entrada
mcpServers en la configuración que lee desde la carpeta actual. Compruebe que el archivo está en ~/.gemini/ o en .gemini/ en la raíz del proyecto, que mcpServers está en el nivel superior del JSON y que el JSON es válido: una coma de más basta para que se ignore el archivo.Esta página cubre Gemini CLI en el terminal, y la configuración descrita aquí es el settings.json que lee la CLI. La extensión tiene sus propios ajustes MCP en VS Code; consulte su documentación antes de dar por hecho que el archivo es compartido.
El servidor responde sin clave cuando el agente solo lee la especificación de la API. Para ejecutar peticiones reales, cree un Scope en su aplicación de Development, asigne las cuentas de prueba y genere una clave Account API con scope para ese Scope. Nunca dé a un cliente MCP una clave Service ni una clave Account global.