Asistentes de IA (MCP)
Conecta Claude, ChatGPT, Cursor, VS Code, un bot de chat o un asistente propio a tu cuenta de WeShipYou por MCP y OAuth.
WeShipYou tiene un servidor Model Context Protocol (MCP), para que un asistente de IA use WeShipYou en nombre de un usuario que inició sesión. El asistente nunca ve una contraseña: el usuario lo aprueba en una página de WeShipYou o en la app de WeShipYou, el asistente recibe su propio token OAuth y la conexión se puede revocar en cualquier momento.
Direcciones del servidor
| Dirección | Para |
|---|---|
https://weshipyou.com/api/mcp/account | Clientes. Tu casillero, envíos, pedidos de la tienda, billetera y direcciones guardadas, en todas las cuentas a las que puedes cambiar. |
https://weshipyou.com/api/mcp | Miembros del equipo de WeShipYou que compran pedidos de personal shopper para los clientes. Cualquier otro usuario es rechazado en su página de aprobación. |
https://weshipyou.com/api/mcp/support | Miembros del equipo de soporte de WeShipYou que dan seguimiento a los envíos retenidos en aduana. Su guía paso a paso está en el área de administración, en Soporte → Asistente de soporte. Cualquier otro usuario es rechazado en su página de aprobación. |
Todo lo demás (dónde iniciar sesión, cómo registrarse) se descubre a partir de la dirección. No hay clave de API ni secreto de cliente que pegar en ningún sitio.
Qué puede hacer un asistente de cliente
Con el servidor de cuenta, un asistente puede responder preguntas como "¿dónde está mi paquete?", "¿qué hay en mi casillero?" o "¿cuánto tengo en la billetera?", y puede prepararte esto:
- pagar un envío que espera el pago;
- cancelar un envío;
- aprobar y pagar un pedido de la tienda que espera tu aprobación;
- enviar paquetes que están en tu casillero (a un destinatario guardado, si lo indicas).
Deja que un asistente termine acciones por ti
Si prefieres no abrir la app cada vez, puedes dejar que un asistente termine algunas acciones por su cuenta. En la app, abre Configuración → Asistentes conectados y activa, para ese asistente, cualquiera de:
- Pagar envíos;
- Enviar paquetes del casillero a destinatarios guardados (un destinatario nuevo siempre se agrega en la app);
- Aprobar y pagar pedidos de la tienda;
- Cancelar envíos que aún no se entregaron al transportista (un envío que ya tiene el transportista siempre va a la app).
Activar una pide tu Face ID, tu huella o el código del teléfono. Después, el asistente igual te dice en el chat qué va a hacer y cuánto cuesta, y lo hace solo después de tu sí. Paga solo con tu billetera (saldo y puntos, nunca con tarjeta). Si la billetera no alcanza, o el precio subió respecto a lo que aceptaste, la solicitud llega a la app. Cada acción que termina te envía un comprobante y aparece en Hecho por tus asistentes. Puedes desactivar cada acción cuando quieras, sin ninguna verificación.
Paga menos por tus envíos
El asistente también te ayuda a elegir antes de enviar:
- cotiza tus paquetes del casillero a un destinatario guardado con cada servicio, después de los cupones que aplican;
- compara enviarlos juntos con enviarlos uno por uno;
- te avisa cuando un poco más de peso desbloquea un cupón, y qué paquete listo de tu casillero lo agrega;
- revisa lo que permite el destino en un envío (peso y valor por bulto, cantidades por categoría, puntos de aduana donde aplican);
- lista los cupones que puedes usar.
Estas respuestas no cambian nada en tu cuenta. Algunos destinos también limitan lo que un destinatario puede recibir en un período; eso se revisa al crear el envío.
El asistente nunca te pide tu contraseña ni números de tarjeta, y no puede cambiar tu perfil, tus direcciones ni tus métodos de pago. Para ver o desconectar tus asistentes, abre Configuración → Asistentes conectados en la app, o Cuenta → Asistentes conectados en el sitio web.
Asistentes con pantalla de conectores
En ChatGPT, Claude (web, escritorio o móvil), Gemini o Grok, añade un conector personalizado (también llamado app personalizada, plugin o servidor MCP), pega la dirección y elige OAuth si te lo pregunta. Deja vacíos los campos de ID y secreto de cliente. Se abre una página de WeShipYou: comprueba que muestra tu usuario y pulsa Conectar.
Asistentes sin navegador (código de acceso)
Un bot de chat (por ejemplo en Telegram) o un asistente que corre en un servidor no puede abrirte una página de inicio de sesión. En su lugar te muestra un código como BCDF-GHJK y un enlace:
- Abre el enlace, o en la app de WeShipYou ve a Configuración → Asistentes conectados → Conectar con un código.
- Comprueba el nombre del asistente y lo que podrá hacer.
- Pulsa Aprobar. El asistente sigue solo.
Apps que se configuran con un archivo
Las apps de escritorio y de línea de comandos leen el servidor de un archivo JSON o de un comando. La primera vez que se conectan abren la página de aprobación de WeShipYou en tu navegador. Los ejemplos usan el servidor de cuenta; el equipo de personal shopper usa https://weshipyou.com/api/mcp.
Cursor (~/.cursor/mcp.json, o .cursor/mcp.json en un proyecto):
{
"mcpServers": {
"weshipyou": {
"url": "https://weshipyou.com/api/mcp/account"
}
}
}VS Code (.vscode/mcp.json):
{
"servers": {
"weshipyou": {
"type": "http",
"url": "https://weshipyou.com/api/mcp/account"
}
}
}Claude Code:
claude mcp add --transport http weshipyou https://weshipyou.com/api/mcp/accountClaude Desktop con su archivo de configuración (claude_desktop_config.json), que necesita Node.js para el puente mcp-remote. Si añades el servidor en Ajustes → Conectores no necesitas instalar nada:
{
"mcpServers": {
"weshipyou": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://weshipyou.com/api/mcp/account"]
}
}
}Construir tu propio cliente
Cualquier cliente MCP que soporte el transporte Streamable HTTP y OAuth 2.1 puede conectarse. El flujo es el que describe la especificación de MCP:
- Llama al servidor sin token. Responde
401con la cabeceraWWW-Authenticate: Bearer resource_metadata="…". - Lee los metadatos del recurso protegido (RFC 9728) que indica, por ejemplo
https://weshipyou.com/.well-known/oauth-protected-resource/api/mcp/account. Nombran el servidor de autorización,https://weshipyou.com/api. - Lee los metadatos del servidor de autorización (RFC 8414) en
https://weshipyou.com/.well-known/oauth-authorization-server/api: los endpoints de autorización, token, registro, revocación y autorización de dispositivo. - Registra tu cliente (RFC 7591, registro dinámico de clientes) con
POST https://weshipyou.com/api/oauth/register. Es un cliente público: sin secreto,token_endpoint_auth_methodesnone. - Envía al usuario al endpoint de autorización con PKCE (
code_challenge_method=S256, obligatorio) yresourcecon la dirección del servidor (RFC 8707), por ejemploresource=https://weshipyou.com/api/mcp/account. El usuario inicia sesión y aprueba en una página de WeShipYou. - Canjea el código en el endpoint de token (envía el mismo
redirect_uriyresource) y llama al servidor conAuthorization: Bearer <access_token>.
Una solicitud de registro:
{
"client_name": "My assistant",
"redirect_uris": ["http://127.0.0.1:8765/callback"]
}URI de redirección
El registro conserva solo las URI de redirección que WeShipYou acepta y rechaza la solicitud si no queda ninguna:
- Loopback (
http://127.0.0.1,http://localhost,http://[::1]) para apps de escritorio y de línea de comandos. El puerto puede cambiar entre inicios de sesión; el host y la ruta deben ser los registrados. - Esquemas de app que WeShipYou ha permitido, como
cursor://. - Callbacks https de asistentes que WeShipYou ha permitido (asistentes alojados como ChatGPT y Claude). Para añadir un asistente alojado, escribe a soporte con su URL de callback.
Acceso con código de dispositivo (RFC 8628)
Un cliente sin navegador ni callback (un bot en un servidor) usa la concesión de autorización de dispositivo en lugar de los pasos 5 y 6.
Regístralo solo con la concesión de dispositivo; no necesita URI de redirección:
{
"client_name": "My bot",
"grant_types": ["urn:ietf:params:oauth:grant-type:device_code"]
}Pide los códigos con un POST https://weshipyou.com/api/oauth/device_authorization en formulario (client_id, y resource con la dirección del servidor). La respuesta:
{
"device_code": "wsyd_…",
"user_code": "BCDF-GHJK",
"verification_uri": "https://weshipyou.com/agent-connect",
"verification_uri_complete": "https://weshipyou.com/agent-connect?code=BCDF-GHJK",
"expires_in": 600,
"interval": 5
}Muestra al usuario el user_code y el enlace verification_uri_complete, y consulta el endpoint de token con grant_type=urn:ietf:params:oauth:grant-type:device_code, device_code y client_id, como mucho cada interval segundos:
| Error | Significado |
|---|---|
authorization_pending | El usuario aún no decidió. Sigue consultando. |
slow_down | Consultaste demasiado rápido. Espera más entre consultas. |
access_denied | El usuario lo rechazó. Detente. |
expired_token | El código venció (10 minutos), o la aprobación no se canjeó en 10 minutos. Empieza de nuevo. |
invalid_grant | Código desconocido o ya usado: un código da una sola conexión. |
La respuesta tras la aprobación es el mismo par de tokens del paso 6.
Tokens
| Token | Dura | Notas |
|---|---|---|
| Código de autorización | 60 segundos | De un solo uso, aunque el canje falle. |
| Token de acceso | 1 hora | Abre solo el servidor indicado en resource. |
| Token de actualización | 30 días | Se rota en cada uso; un reintento dentro de 30 segundos recibe el mismo par nuevo. |
Actualiza con grant_type=refresh_token y guarda solo el token de actualización más reciente: usar uno antiguo pasados esos 30 segundos revoca toda la conexión. Cuando la conexión se revoca, o el usuario ya no tiene acceso, el servidor responde 401 y el cliente debe llevar al usuario otra vez a la página de aprobación.
Transporte
El servidor no guarda estado: envía cada mensaje JSON-RPC con POST a la dirección del servidor y lee la respuesta JSON. No hay id de sesión ni flujo de eventos, así que GET y DELETE responden 405. Llama a tools/list para obtener las herramientas y sus esquemas de entrada; las herramientas se describen solas, así que no fijes sus argumentos en el código.
En el servidor de cuenta, las herramientas request_* devuelven un id de solicitud y envían una notificación al usuario; get_request_status dice si el usuario la abrió, la rechazó o ya la hizo, leído del propio envío o pedido. Dile al usuario que confirme en la app; nunca le pidas datos de tarjeta.
get_automatic_actions lista las acciones que el usuario dejó terminar a tu cliente. Para esas, dile al usuario qué vas a hacer y cuánto cuesta, y después de su sí llama a la herramienta request_* con confirmedInChat: true y confirmedTotal (el monto en USD que aceptó). La respuesta trae entonces automatic: { ran: true, … } con lo cobrado, o ran: false con el motivo por el que fue a la app (la billetera no alcanza, un envío ya entregado al transportista, …). Un precio mayor que confirmedTotal se rechaza; vuelve a cotizar y pregunta. sendToApp: true siempre envía la solicitud a la app. Nunca envíes confirmedInChat sin el sí del usuario a esa acción exacta.
quote_shipping, optimize_shipment, check_destination_limits y find_coupons son de solo lectura: cotizan con los cupones de la cuenta, comparan enviar junto con uno por uno, encuentran el peso que falta para un cupón y revisan los límites del destino.