ES
Claude Code · Servidor MCP

Servidor MCP para Claude Code: mensajería y email en su app

Un solo comando claude mcp add conecta el Servidor MCP de Unipile. Después, Claude Code construye funciones de LinkedIn, WhatsApp y email en su proyecto.
Prueba gratis de 7 días, sin tarjeta.
Claude Code · crm-app
Unipile MCP conectado
Sarah
Añade la conexión de cuentas de LinkedIn a mi CRM.
Leer endpointPOST /v2/auth/linkesquema cargado
Se han añadido la ruta de conexión y el botón en Ajustes. El ID de la cuenta se guarda en el usuario.
3 archivos modificados · probado en la app de Development
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 Claude Code, el agente hace esa lectura por usted y escribe el código en su stack, desde el terminal o desde la extensión del IDE.
Conecte el servidor MCP de Unipile a Claude CodeUnipile MCP conectado
Seleccione los canales que quiere conectardeveloper.unipile.com/mcp
Conectar todos los canales9 canales
LinkedInLinkedIn/v2/{account_id}/chats
WhatsAppWhatsApp/v2/{account_id}/chats
InstagramInstagram/v2/{account_id}/chats
TelegramTelegram/v2/{account_id}/chats
GmailGmail/v2/{account_id}/emails
OutlookOutlook/v2/{account_id}/emails
IMAPIMAP/v2/{account_id}/emails
Google CalendarGoogle Calendar/v2/{account_id}/calendars
Outlook CalendarOutlook Calendar/v2/{account_id}/calendars
↑↓navegar espacioseleccionar ↵conectaruna URL, una cabecera
Sin ello Pestañas, conjeturas y código pegamento
Claude Code 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.
claude mcp add, tres scopes

Añada el servidor MCP de Unipile a Claude Code

El servidor es remoto: una URL sobre streamable HTTP y una cabecera. Sin npx, sin proceso local. Un solo comando lo registra; el scope que elija decide dónde se carga y si su equipo también lo recibe. Comando y JSON verificados con la documentación oficial de Claude Code.
Claude Code instalado (CLI o extensión del IDE), con sesión iniciada y ejecutado desde la carpeta de su proyecto.
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.
U
Scope user--scope user · todos los proyectos, privado para usted
P
Scope project.mcp.json en la raíz del repositorio, compartido
L
Scope local (por defecto)solo este proyecto, privado, en ~/.claude.json
?
¿Qué scope elegir?User cuando construye varias integraciones de Unipile desde una misma máquina. Project cuando todo el equipo debe recibir el servidor desde el repositorio, con la clave de cada desarrollador en una variable de entorno. Local para una prueba puntual. Cuando un nombre existe en varios scopes, local gana a project, y project gana a user.
terminal
# Scope user: todos los proyectos de esta máquina, privado para usted claude mcp add --transport http --scope user \ unipile "https://developer.unipile.com/mcp?branch=v2.0" \ --header "X-API-KEY: your-scoped-api-key" # Claude Code muestra "Added …" y después: claude mcp list
// Scope project: versionado en la raíz del repositorio, compartido con el equipo { "mcpServers": { "unipile": { "type": "http", "url": "https://developer.unipile.com/mcp?branch=v2.0", "headers": { "X-API-KEY": "${UNIPILE_API_KEY}" } } } } // "type": "http" es obligatorio; cada desarrollador exporta UNIPILE_API_KEY
# Scope local (por defecto): solo este proyecto, privado, en ~/.claude.json claude mcp add --transport http \ unipile "https://developer.unipile.com/mcp?branch=v2.0" \ --header "X-API-KEY: your-scoped-api-key"
Verificado en Claude Code 2.1: "Added …" y después ✔ Connected en claude mcp list. Mantenga la URL entre comillas (zsh trata el ? como un patrón) y ponga --header al final, después de la URL, porque acepta varios valores.
claude mcp addRegistra un servidor en el scope que elija e imprime "Added …" una vez escrito.
--transport httpEl servidor de Unipile es un servidor remoto streamable HTTP. Sin comando, sin npx, sin proceso local.
--scope userTodos los proyectos de esta máquina, privado para usted. Omítalo para local (solo este proyecto), o use --scope project para escribir .mcp.json.
unipileEl nombre que verá en claude mcp list, claude mcp get y /mcp.
"https://developer.unipile.com/mcp?branch=v2.0"La URL única del servidor, entre comillas. El parámetro ?branch=v2.0 selecciona la API v2.
--header "X-API-KEY: …"Su clave Account API con scope. Va al final porque el flag acepta varias cabeceras.
Verificación

Verifique la conexión

Tres comprobaciones: desde el terminal, dentro de una sesión y luego en un chat. Ninguna toca una cuenta conectada.
1Desde el terminalLa lista muestra un estado de salud junto a cada servidor: ✔ Connected es lo que busca; ✘ Failed to connect apunta a la URL, ! Needs authentication a la cabecera, y ⏸ Pending approval a un servidor de proyecto aún sin aprobar.claude mcp list claude mcp get unipile
2Dentro de una sesiónEscriba el comando de barra en Claude Code para ver el estado del servidor y, en el caso de un .mcp.json con scope de proyecto, aprobarlo la primera vez que abra la carpeta./mcp
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 Claude Code, 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 .
Claude Code · support-consoleApp de Development
Añade la mensajería de WhatsApp a nuestra consola de soporte: sincroniza las conversaciones de cada agente y permite responder desde el ticket.
Buscar endpoints"chats messages send"3 resultados
Ejecutar peticiónGET /v2/{account_id}/chats9 chats
Se ha creado whatsapp/chat-sync.ts (chats y mensajes guardados en el ticket, paginación por cursor) y POST /tickets/:id/reply que llama a la ruta de envío con la cuenta propia del chat. Sincronización ejecutada en la app de Development: 9 chats, 41 mensajes.3 archivos modificados · probado en la app de Development

Una bandeja de entrada de WhatsApp en su producto, con un solo prompt

Claude Code lee los contratos de chats y mensajes a través del servidor, escribe el job de sincronización y el endpoint de respuesta en su stack y lanza las primeras peticiones en su aplicación de Development. LinkedIn, Instagram y Telegram usan las mismas rutas de chat, así que el segundo canal requiere un prompt más corto que el primero.
Endpoints que usa el agente
GET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Error frecuente: Mezclar los ID. Un mensaje siempre se envía desde la cuenta propietaria del chat; mantenga account_id y chat_id juntos desde la llamada de listado hasta la de envío.
API de WhatsApp
Claude Code · crm-appApp de Development
Permite a los usuarios enviar emails desde la ficha del contacto con su propio buzón de Gmail u Outlook, y agrupa las respuestas en hilos en el contacto.
Leer endpointPOST /v2/{account_id}/emails/sendesquema cargado
Ejecutar peticiónGET /v2/{account_id}/emails200 OK
Se ha añadido POST /contacts/:id/email que llama a la ruta de envío en la cuenta de buzón del usuario, la opción de responder en el hilo con el ID del hilo y la sincronización entrante que asocia las respuestas al contacto. Email de prueba enviado desde el buzón de la app de Development: la respuesta aparece en el hilo.4 archivos modificados · envío e hilos probados de principio a fin

Email desde el propio buzón del usuario, en hilos dentro de su CRM

Gmail, Outlook e IMAP comparten un mismo esquema de email. El agente lee los contratos de envío y de listado, conecta la acción de envío al buzón que el usuario vinculó mediante Hosted Auth y conserva el ID del hilo para que las respuestas lleguen al contacto correcto.
Endpoints que usa el agente
POST/v2/{account_id}/emails/sendGET/v2/{account_id}/emailsGET/v2/{account_id}/threads/{thread_id}
Error frecuente: Enviar desde un buzón técnico compartido. Cada email sale de la cuenta del usuario que la conectó, para que la respuesta llegue a su bandeja de entrada.
API de email
Claude Code · saas-backendApp de Development
Cada workspace de mi SaaS tiene varios usuarios con sus propias cuentas de LinkedIn y email. Aíslalos: un Scope y una clave con scope por workspace.
Buscar endpoints"scopes api-keys"4 resultados
Ejecutar peticiónPOST /v2/scopes/201 · scope
Al crear un workspace, el backend crea ahora un Scope y una clave Account API con scope, guardada cifrada en el workspace, y cada cuenta que conecta un miembro se asigna a ese Scope. Todas las llamadas de cuenta usan la clave del workspace. Probado con dos workspaces en la app de Development.5 archivos modificados · aislamiento verificado

Muchos usuarios, muchas cuentas, un límite por tenant

Los Scopes son el límite de acceso de la API de Unipile: una clave con scope solo ve las cuentas asignadas a su Scope. El agente lo convierte en su modelo de tenants, de modo que la lógica multicuenta vive en la API y no en su código.
Endpoints que usa el agente
POST/v2/scopes/POST/v2/api-keys/GET/v2/accounts/
Error frecuente: Usar una única clave de cuenta global para todos los tenants. La clave global se queda en su backend para la administración; cada tenant recibe su propia clave con scope.
Cuentas, Scopes y claves
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 Claude Code 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.
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 Claude Code
Scopedev-tests · 2 cuentas
Clavescoped Account API key
CuentasCuenta de prueba LinkedIn, buzón de prueba Gmail
Webhooks1 endpoint · eventos de mensaje
crm-app · ProductionSin tocar
Scopeuno por workspace
Clavescoped keys, in your backend only
Cuentaslas cuentas propias de sus usuarios, vía Hosted Auth
Resolución de problemas

Errores habituales y qué significan

Los estados y avisos que muestra Claude Code cuando una entrada MCP no está bien, tal como los imprimen claude mcp list y /mcp, y cómo se corrige cada uno.
✘ Failed to connect
claude mcp list muestra el servidor, pero la comprobación de estado falla. SoluciónEl url debe ser exactamente https://developer.unipile.com/mcp?branch=v2.0 con --transport http. Claude Code reintenta tres veces un error transitorio, pero nunca un not-found ni un error de autenticación: corrija la URL o la cabecera y ejecute después claude mcp get unipile.
⏸ Pending approval
Un servidor de scope project definido en .mcp.json aparece listado pero no conectado. SoluciónEjecute claude en la carpeta, acepte el diálogo de confianza del workspace y apruebe después el servidor desde /mcp. Un repositorio clonado no puede aprobar sus propios servidores desde ajustes versionados.
401 en las peticiones
El servidor está conectado, pero ejecutar una petición falla. SoluciónFalta la clave en la cabecera, el nombre de la cabecera no es X-API-KEY, o ha usado una clave Service o una clave Account global en lugar de una clave Account API con scope de su aplicación de Development.
Aviso de variable ausente
claude mcp list indica que ${UNIPILE_API_KEY} no está definida. SoluciónExporte la variable en el shell que arranca Claude Code, o añada un valor por defecto con la sintaxis ${UNIPILE_API_KEY:-} . Las variables sin definir en url o headers pueden leerse como vacías, lo que acaba en un 401.
Espacios ocultos en headers.X-API-KEY
Un token pegado con un salto de línea al final. SoluciónClaude Code nombra el campo en claude mcp list y /mcp sin mostrar el valor. Vuelva a añadir el servidor con la clave recortada; Claude Code usa los valores exactamente como están escritos.
El mismo nombre en varios scopes
unipile existe en scope user y en scope project con ajustes distintos. SoluciónClaude Code conecta una sola vez, con la definición de mayor precedencia (local, luego project, luego user) y avisa del conflicto. Elimine el duplicado con claude mcp remove unipile --scope user o mantenga un solo scope por máquina.
MCP endpoint not found at
Un 404 en la URL: la ruta es incorrecta. SoluciónLa URL completa es https://developer.unipile.com/mcp?branch=v2.0, con el parámetro branch incluido. Compruébela con curl -I desde su máquina, y después claude mcp get unipile.
/mcp muestra No MCP servers configured
El archivo que ha editado no es uno de los que lee Claude Code. SoluciónClaude Code lee ~/.claude.json y .mcp.json solo en la raíz del proyecto, nunca ~/.claude/mcp.json, ~/.claude/.mcp.json o ~/.claude/config/mcp.json. Reinicie también la sesión: .mcp.json se lee al arrancar.
El shell rechaza la URL, o falta branch
zsh interpreta el ? de ?branch=v2.0 como un patrón. SoluciónEntrecomille siempre la URL en claude mcp add. Sin comillas, zsh responde "no matches found" y bash puede descartar el parámetro, lo que le conecta a la versión equivocada de la API.
Arranque lento o timeout
El servidor tarda más que los 30 s por defecto al arrancar. SoluciónSuba el límite para esa sesión: MCP_TIMEOUT=60000 claude. Si rechazó un servidor de proyecto en el aviso de aprobación, claude mcp reset-project-choices vuelve a mostrarlo.
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
SOC 2 Tipo II
Certificado
Controles de seguridad auditados de forma independiente que garantizan la protección de datos y la integridad operativa.
GDPR
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 Claude Code

Las preguntas que la gente escribe de verdad: scopes, dónde vive la configuración, claves fuera del repositorio, cabeceras personalizadas, Failed to connect, comillas en la URL, cambios en .mcp.json y claves de API.
Local es el valor por defecto: se guarda en ~/.claude.json bajo el proyecto actual, es privado y se limita a ese proyecto. Project escribe .mcp.json en la raíz del repositorio y se comparte por control de versiones. User escribe ~/.claude.json bajo la clave raíz mcpServers y se aplica a todos sus proyectos. La precedencia es local, luego project, luego user. Para Unipile: --scope user para su clave de desarrollo personal, --scope project cuando todo el equipo trabaja en la misma integración.
En ~/.claude.json (en Windows %USERPROFILE%\.claude.json) para los scopes local y user, y en .mcp.json en la raíz del proyecto para el scope project. Claude Code no lee ~/.claude/.mcp.json, ~/.claude/config/mcp.json, ~/.claude/mcp.json o %APPDATA%\Claude\mcp.json. claude mcp get unipile le dice en qué scope vive cada entrada.
Claude Code expande ${VAR} y ${VAR:-default} en command, args, env, url y headers. Escriba "X-API-KEY": "${UNIPILE_API_KEY}" en .mcp.json, versione el archivo, y cada desarrollador aporta su propia clave con scope desde su entorno. Si la variable no está definida y no hay valor por defecto, la configuración se carga igualmente y claude mcp list muestra un aviso.
Sí: --header "X-API-KEY: your-scoped-api-key", repetible para varias cabeceras, en forma corta -H. Póngala después de la URL, porque el flag acepta varios valores. El servidor de Unipile es un servidor HTTP remoto: nada que instalar en local, sin npx, sin Node que gestionar.
Ejecute claude mcp get unipile para ver el detalle (estado HTTP y texto del error), revise los avisos de espacios al principio o al final que imprime claude mcp list tras pegar una clave, y confirme que la URL responde desde su máquina con curl -I. Un 404 imprime MCP endpoint not found at <origin>: la ruta es incorrecta, la URL completa es https://developer.unipile.com/mcp?branch=v2.0, con el parámetro branch incluido.
La URL contiene un ?, que zsh interpreta como carácter de patrón. Entrecomille siempre la URL en claude mcp add. Sin comillas, zsh responde "no matches found" y bash puede descartar el parámetro branch , lo que le conecta a la versión equivocada del servidor.
Claude Code lee .mcp.json al iniciar la sesión: salga y vuelva a lanzarlo. Una entrada mal formada se ignora en silencio, y claude mcp list imprime el aviso de análisis con el campo defectuoso. Si rechazó el servidor en el aviso de aprobación del proyecto, ejecute claude mcp reset-project-choices.
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 solo las cuentas implicadas 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.