Extentos MCP
oficialExtentos es una plataforma de desarrollo multivendedor para agregar capacidades de gafas inteligentes a aplicaciones existentes de iOS y Android. La analogía más simple es Stripe para gafas inteligentes.
¿Qué puedes hacer con Extentos MCP?
-
Scaffold a smart-glasses app — Pídele a tu agente que ejecute
generateConnectionModulepara iniciar el módulo de iOS/Android con la configuración de Gradle/SPM, permisos y manifiesto de una sola vez. -
Get canonical code patterns — Usa
getCodeExamplepara obtener implementaciones completas en Kotlin/Swift para asistentes de voz, transcripción en vivo, descripción de fotos y otras capacidades del SDK. -
Validate integration correctness — Ejecuta
validateIntegrationpara verificar manifiestos, permisos, dependencias y llamadas de arranque antes de probar, detectando problemas de forma temprana. -
Drive simulator sessions — Crea y opera sesiones basadas en navegador con
createSimulatorSession, inyecta transcripciones o botones de hardware, y verifica llamadas a herramientas para pruebas E2E impulsadas por agentes. -
Debug with event traces — Obtén registros estructurados mediante
getEventLogfiltrados por errores, voz, cámara, pantalla o IA para diagnosticar problemas en sesiones en vivo. -
Check production readiness — Ejecuta
getProductionChecklistpara una auditoría personalizada previa al lanzamiento que cubra credenciales, permisos y requisitos de listado en la tienda.
Documentación
MCP server
El servidor MCP de Extentos (@extentos/mcp-server\) es un paquete npm que un agente de IA (Claude Code, Cursor, Windsurf, Cline) instala una vez y luego utiliza para añadir capacidades de gafas inteligentes Meta Ray-Ban a una aplicación nativa de iOS o Android. Expone un conjunto reducido de herramientas deterministas en 10 categorías — descubrimiento, generación, configuración de agentes, credenciales, analíticas, orientación, validación, simulación, preparación para producción y documentación — además de una CLI para vincular cuentas, consentimiento de telemetría y comprobaciones de actualización. Este es el manual de operación del agente.
El servidor MCP es cómo un agente de IA — Claude Code, Cursor, Windsurf, Cline o cualquier host compatible con Model Context Protocol — opera Extentos. El agente invoca herramientas deterministas; el servidor prepara al agente sobre qué capacidades exponen las gafas, devuelve patrones de código SDK canónicos en Kotlin y Swift, genera el andamiaje del proyecto, gestiona sesiones de simulador y consulta trazas de depuración. El servidor en sí no tiene herramienta de planificación — los agentes son mejores planificadores que los paquetes de regex. Las herramientas son primitivas tipadas que el agente compone en secuencia.
Esta página es el aterrizaje de la sección — qué es el servidor, las herramientas de un vistazo, el flujo canónico impulsado por el agente, los parámetros de configuración, la CLI y cómo funciona el modelo de autenticación. Las subpáginas cubren cada tema en profundidad.
Instalación
claude mcp add extentos -- npx -y @extentos/mcp-server@latest
Para hosts que no sean Claude Code, consulta las rutas de instalación del prompt de agente o JSON manual. Referencia completa de instalación en /docs/mcp-server/install.
Las herramientas, por categoría
El servidor expone una superficie de herramientas determinista (verificada en mcp-server/src/tools/definitions.ts), organizada en 10 categorías. Las categorías son el mapa mental del agente; un agente que entiende en qué categoría vive una herramienta puede decidir cuándo llamarla. El catálogo completo siempre actualizado es la referencia de herramientas generada.
1. Descubrimiento y referencia SDK (4 herramientas)
Las primeras llamadas en cualquier tarea nueva. Económicas, todas locales, sin efectos secundarios.
| Herramienta | Qué hace |
|---|---|
getPlatformInfo | Devuelve el catálogo estático de la plataforma — versión de la librería, la lista de capacidades SDK que exponen las gafas, niveles por proveedor. Siempre es la primera llamada correcta. |
getCapabilityGuide | Uso mínimo por funcionalidad en Kotlin + Swift — forma de la llamada, argumentos de configuración, advertencias. Se combina con getPlatformInfo (que nombra las funcionalidades) para indicar al agente cómo invocar cada una. |
getCodeExample | Composiciones canónicas completas en ambos lenguajes. Comienza con assistant_agent_loop (el flujo canónico de asistente de voz de Fase 4) y agent_driven_e2e_full_loop (la prueba E2E impulsada por el agente). También cubre voice_qa_assistant, barge_in_speak, photo_describe_voice, live_transcription_ui, voice_notes, connection_page_setup, byok_anthropic, display_browse_detail, display_media_gallery y video_frames_ml. Extrae de estas al escribir código de manejadores. La lista completa enumerada se genera en /docs/reference/mcp-tools. |
getMigrationGuide | Para aplicaciones ya construidas sobre Meta DAT sin procesar — devuelve un mapa clave por tus símbolos DAT existentes hacia las primitivas Extentos que los reemplazan, más un plan de migración ordenado. |
2. Configuración y generación
| Herramienta | Qué hace |
|---|---|
generateConnectionModule | Andamiaje de una sola vez — módulo bootstrap, configuración de Gradle/SPM, dependencias, permisos, manifiesto. Flujo de dos llamadas: la primera llamada sin placement devuelve una pregunta sobre dónde debería vivir ExtentosConnectionPage; la segunda llamada con la ubicación elegida devuelve el conjunto completo de archivos. |
getConnectionPageConfig / setConnectionPageConfig | Leer / escribir la configuración de la página de conexión por proyecto (tokens de tematización + visibilidad de secciones) que mantienen el panel y el servidor. |
regenerateConnectionPageFile / adoptConnectionPageFile | Sincronizar el extentos.connection-page.json confirmado con la configuración del servidor — regenerar (servidor→archivo) o adoptar (archivo→servidor). |
Después del andamiaje, el agente escribe sus propias clases de manejadores contra las primitivas SDK expuestas por getCapabilityGuide / getCodeExample. El código de los manejadores es la superficie de autoría del cliente — no hay paso de initSpec ni de población de DSL.
3. Configuración y uso del agente (5 herramientas)
Limitadas a la cuenta — requieren una cuenta vinculada y están restringidas por proyecto mediante la concesión de acceso MCP (por defecto Lectura+Escritura).
| Herramienta | Qué hace |
|---|---|
getAssistantConfig / setAssistantConfig | Leer o cambiar la configuración de asistente gestionada por el panel de un proyecto — el modelo OpenAI Realtime, la voz, el modelo de memoria (compactación) y el modo de memoria dentro de la sesión. set es una actualización parcial, valida cada valor contra el catálogo y muestra el impacto de coste de un cambio de modelo. |
getGatewayUsage | Leer el uso de la pasarela gestionada del proyecto y el coste exacto en una ventana reciente — recuentos de tokens y USD a precio de lista del libro de facturación, desglosado por modelo. Solo metadatos, nunca transcripciones ni contenido. |
4. Credenciales (2 herramientas)
Limitadas a la cuenta + restringidas por proyecto. Escritura sin conocimiento — el secreto nunca pasa por el agente.
| Herramienta | Qué hace |
|---|---|
getCredentialStatus | Leer si la identidad de compilación Meta DAT de un proyecto está establecida — solo una pista enmascarada y la fecha de actualización, nunca el valor. |
setCredential | Iniciar la entrada de una credencial con escritura sin conocimiento — devuelve un enlace al panel donde el propietario con sesión iniciada pega el secreto directamente en la bóveda cifrada. No acepta argumento de secreto por diseño. |
5. Analíticas (1 herramienta)
| Herramienta | Qué hace |
|---|---|
getProjectAnalytics | Leer las analíticas de producción de un proyecto — telemetría agregada de instalaciones enviadas de App Store / Play Store (eventos, instalaciones activas, por evento / día / proveedor / plataforma). Solo metadatos, limitado a la cuenta, con verificación de propiedad, restringido por la concesión de Analíticas. Vacío hasta que la aplicación se publique y envíe eventos atestiguados de producción (usa getEventLog para el flujo en vivo de desarrollo/simulador). |
6. Orientación de implementación (2 herramientas)
Herramientas de misión secundaria que el agente llama durante la composición.
| Herramienta | Qué hace |
|---|---|
getVoiceCommandGuidance | Analizar frases propuestas de activación / comando para detectar problemas de UX (colisiones, ambigüedad, palabras difíciles de reconocer, conflictos con la palabra de activación de Meta) antes de conectarlas a un consumidor de glasses.audio.transcriptions(). |
getPermissions | Derivar los permisos exactos de la plataforma, los requisitos de Meta DAT y las necesidades de servicio en primer plano a partir de la lista de capacidades. Ejecutar al añadir o eliminar una primitiva de tu manejador. |
7. Validación (2 herramientas)
Puertas de corrección. Ejecutar después de cambios estructurales (nueva capacidad declarada, dependencia actualizada, manifiesto editado).
| Herramienta | Qué hace |
|---|---|
inspectIntegration | Instantánea de solo lectura del proyecto — manifiesto, hashes de archivos generados, lista de dependencias, configuración de la página de conexión. Ejecutar antes de ediciones manuales para entender el estado actual. |
validateIntegration | Comprobación de corrección de todo el proyecto — manifiesto, archivos generados, dependencia declarada, permisos que cubren las capacidades declaradas, bootstrap que llama a ExtentosGlasses.create(...), versiones de la cadena de herramientas, sugerencias de servicio en primer plano para flujos de captura continua. La puerta previa a la prueba. |
8. Simulación
Aprovisionar y operar sesiones de simulador basadas en navegador, además de las herramientas de prueba impulsadas por el agente que cierran el bucle de extremo a extremo sin un humano.
| Herramienta | Qué hace |
|---|---|
createSimulatorSession | Obtener o crear una sesión en modo navegador en extentos.com/s. Devuelve el simulador guardado para este proyecto si existe (status: "resumed"), o crea uno nuevo (status: "active"). Adjunta automáticamente la aplicación en ejecución mediante el puente local cuando es accesible; de lo contrario, emite un fragmento BuildConfig.EXTENTOS_SESSION_URL (Android) o una carga útil extentos.session.plist (iOS). Rotar el sessionId es deleteSimulatorSession y luego crear — no hay indicador de fuerza-nuevo. |
ensureSimulatorBrowser | Abrir y confirmar una pestaña de navegador de simulador conectada — la condición previa para los flujos de cámara e inyección. |
completeAuthLink | Después de que createSimulatorSession devuelva status: "auth_required" (la instalación anónima necesita vincularse para crear sesiones), consulta el backend hasta que el usuario termine el registro, luego persiste el token de portador en ~/.extentos/auth.json. |
getEventLog | Obtener trazas de eventos estructuradas de una sesión. Valores de filtro: all (sin filtro) más los siete chips errors, voice, camera, display, ai, lifecycle, custom — un chip por evento, con errors absorbiendo severidad≥warn independientemente de la modalidad. Además cursor, follow, limit para el alcance a nivel de traza. La herramienta de depuración principal. |
getSimulatorStatus | Leer el estado actual de una sesión en vivo — fase, hardware listo, roles adjuntos, flujos de capacidad activos, valores de alternancia actuales. |
injectTranscript / injectAssistantUtterance / assertToolCalled | Impulsar una frase de activación o un turno de asistente, luego afirmar qué herramienta llamó el modelo — el bucle E2E impulsado por el agente, sin necesidad de humano. |
injectHardwareButton | Pulsar el botón de captura de hardware de las gafas simuladas — tocar pausa/reanuda un flujo de cámara en vivo, mantener detiene — para que el agente pueda ejercitar los gestos de privacidad del portador (y probar el CaptureError.StreamPaused resultante) sin humano. |
setSimVideo / setSimDevice | Enviar un video de prueba a la cámara simulada; cambiar el modelo de dispositivo simulado (por ejemplo, rayban_display para ejercitar la ruta de visualización). |
getDisplayState / injectInput | Leer el árbol de visualización actualmente renderizado + impulsar la entrada de visualización (select / navigate / back). |
9. Producción (2 herramientas)
Comprobaciones previas al lanzamiento.
| Herramienta | Qué hace |
|---|---|
getProductionChecklist | Lista de verificación personalizada de preparación para producción basada en las capacidades declaradas + nombres de manejadores — cableado de credenciales, auditoría de permisos, requisitos de servicio en primer plano (cuando se usa captura continua), eliminación de URL de simulador de las compilaciones de lanzamiento, preparación de la ficha de la tienda. |
getCredentialGuide | Configuración de credenciales paso a paso para proveedores de IA de producción — anthropic, openai, google_cloud_vision, google_translate, google_gemini, deepl, azure_cognitive, aws_bedrock, huggingface o custom — además del registro de Meta DAT. |
10. Documentación y búsqueda (1 herramienta)
| Herramienta | Qué hace |
|---|---|
searchDocs | Buscar documentación de Extentos por tema o palabra clave. Para asistentes de voz, lee assistant_runtime primero. Otros temas alineados: voice_integration, agent_e2e_testing, managed_gateway, conversation_memory, display, más el conjunto conceptual estable — getting_started, custom_handlers (el documento canónico de composición SDK), simulator_browser_mode, simulator_session_lifecycle, event_log_schema, toggles, library_api, permissions, multi_platform_projects. Los IDs de tema son estables; la entrada de herramienta en vivo es la autoritativa. |
Referencia completa por herramienta con esquemas de entrada, formas de respuesta y ejemplos trabajados: /docs/mcp-server/tools.
El flujo canónico impulsado por el agente
En un proyecto nuevo, el agente invoca las herramientas en este orden:
1. getPlatformInfo({ sections: ["version", "capabilities"], glasses: "meta_rayban" })
2. getCodeExample({ pattern: "assistant_agent_loop" }) // Phase-4 voice assistant; or whatever pattern fits
3. getCapabilityGuide({ feature: "<each primitive the handler will use>" })
4. generateConnectionModule({ platform, glasses, appPackage })
→ returns "needs_placement" question
5. generateConnectionModule({ ... placement: "<chosen>" })
→ writes scaffold files (ExtentosBootstrap, manifest, etc.)
6. <agent writes handler class(es)> against the SDK primitives
<agent updates extentos.manifest.json's \`capabilities\` array>
7. validateIntegration()
→ ✓ all good (or returns structured errors to fix)
8. createSimulatorSession({ glasses })
→ returns sessionId; auto-opens browser at extentos.com/s/<id>
→ if running app is reachable via local bridge, it auto-attaches
9. <developer interacts with the simulator; capability events flow into the backend>
10. getEventLog({ sessionId, filter: "errors" }) → debug
getSimulatorStatus({ sessionId }) → status
Para iteración: editar código de manejador → reconstruir y reinstalar → la aplicación se adjunta automáticamente a la misma sesión de simulador (sin recrear, la URL es estable). Antes de publicar: getProductionChecklist y getCredentialGuide.
Configuración
El servidor MCP lee estas variables de entorno (verificadas en mcp-server/src/):
| Variable | Predeterminado | Qué hace |
|---|---|---|
EXTENTOS_BACKEND_URL | Backend de producción | Anular la URL del backend (tools/util/backendClient.ts). Para desarrollo local de Extentos en sí. |
EXTENTOS_CONFIG_DIR | ~/.extentos | Anular el directorio de configuración/autenticación (telemetry/consent.ts). |
EXTENTOS_TELEMETRY | no establecido (consentimiento por defecto) | Establecer a 0 para rechazar telemetría sin ejecutar el comando de consentimiento de la CLI. |
EXTENTOS_NO_AUTO_OPEN | no establecido | Establecer a 1 para deshabilitar la apertura automática del navegador al crear sesiones de simulador (útil en entornos sin interfaz gráfica). |
Referencia completa de configuración: /docs/mcp-server/configuration.
Subcomandos de la CLI
Ejecutar npx @extentos/mcp-server@latest sin argumentos inicia el servidor MCP a través de stdio (la ruta que usa el agente). Con un subcomando, actúa como una CLI de desarrollo:
| Subcomando | Qué hace |
|---|---|
login | Vincula esta instalación a una cuenta de Extentos mediante el flujo de código de dispositivo (proactivo: útil antes de la primera sesión del simulador, o después de logout para volver a vincular). |
logout | Borra ~/.extentos/auth.json. La instalación vuelve al nivel anónimo; la siguiente llamada de sesión del simulador volverá a activar el flujo de código de dispositivo. |
whoami | Aún no implementado (stub de Fase 0). Imprimirá installId, accountId (si está vinculado), nivel, caducidad de autenticación. |
setup | Verifica previamente el entorno de compilación local: comprueba el PAT de GitHub Packages (read:packages) que necesitan los artefactos de Meta DAT, para aplicaciones que dependen de com.extentos:glasses-meta, además de otros requisitos previos de dependencias. |
accept-privacy | Registra el consentimiento de privacidad (habilita la carga de telemetría). |
decline-privacy | Registra el rechazo de privacidad (deshabilita la carga de telemetría). |
status | Imprime el estado de consentimiento, ID de instalación, cuenta vinculada, versiones de MCP/biblioteca. |
update | Comprueba actualizaciones del servidor MCP (sin operación en instalaciones npx @latest). |
Referencia completa de la CLI: /docs/mcp-server/auth.
Modelo de autenticación
El servidor MCP es anónimo primero. El descubrimiento, las guías de capacidades, los ejemplos de código, la validación, la búsqueda de documentación, la simulación en el dispositivo y las pruebas en hardware real funcionan sin necesidad de iniciar sesión. Tres cosas vinculan una cuenta gratuita: la creación de sesiones del simulador de navegador (createSimulatorSession, HTTP 402), el paso de andamiaje generateConnectionModule (genera tu clave de proyecto vinculada a la cuenta — mismo flujo de código de dispositivo 402; la primera llamada informativa es anónima), y las herramientas de proyecto con ámbito de cuenta (configuración del asistente, credenciales, escrituras en la página de conexión, analíticas — HTTP 401).
El flujo de código de dispositivo: la primera llamada restringida devuelve status: "auth_required" con una URL de verificación. El agente llama a completeAuthLink para consultar el backend; el desarrollador se registra con una cuenta gratuita solo de correo electrónico en la URL (Google o correo + contraseña, sin pago); el backend emite un token; la llamada de herramienta original se reintenta automáticamente. Después de vincular, las sesiones del simulador son ilimitadas.
Las herramientas de Extentos, la generación de código, la validación, el SDK y el simulador de navegador son gratuitos: no hay tarifa por asiento ni suscripción para construir y publicar. La única superficie que mide el uso es la puerta de enlace de IA gestionada detrás del asistente de voz de Fase 4. Modelo de autenticación completo: /docs/mcp-server/auth; precios: /docs/resources/pricing.
Privacidad y telemetría
En la primera ejecución, el servidor MCP inyecta un aviso de privacidad único en la respuesta. La telemetría es anónima (etiquetada con installId, sin código fuente ni datos personales) y se descarta al continuar por defecto — mismo patrón que Vercel CLI, Astro, Vite. Puedes rechazarla en cualquier momento:
npx @extentos/mcp-server@latest decline-privacy
# or
EXTENTOS_TELEMETRY=0 (env var, persistent for the shell)
El contenido del aviso de privacidad está en mcp-server/src/index.ts (constante PRIVACY_NOTICE). El aviso se muestra una vez por instalación mediante claimFirstPrivacyNotice — nunca se repite.
Hosts MCP compatibles
Verificado para funcionar con:
- Claude Code — objetivo principal. Instalación en una línea mediante
claude mcp add. - Cursor — configuración JSON en
~/.cursor/mcp.json. - Windsurf — configuración JSON en
~/.codeium/windsurf/mcp_config.json. - Cline — configuración JSON en la configuración MCP de Cline.
- Cualquier host compatible con MCP — coloca el bloque JSON estándar
mcpServers.extentos.
El servidor MCP habla el protocolo MCP estándar a través de stdio (@modelcontextprotocol/sdk); no existen rutas de código específicas por host en el lado del servidor. Pasos de instalación por host: /docs/mcp-server/agents.
El puente local — bucle de desarrollo de vinculación automática
Cuando el servidor se inicia, abre un listener HTTP 127.0.0.1:31337/whoami (mcp-server/src/localBridge.ts). La biblioteca de Extentos en la aplicación del desarrollador sondea este endpoint en tiempo de ejecución para conocer el installId de su host MCP. El resultado: cada llamada createSimulatorSession del agente adjunta automáticamente la aplicación en ejecución a la nueva sesión — sin recompilar, sin pegar URL.
Rutas de alcance:
- Emulador de Android:
http://10.0.2.2:31337/whoami(alias NAT de loopback del host) - Simulador de iOS:
http://localhost:31337/whoami(comparte el espacio de nombres de red del host) - Teléfono Android físico por USB:
adb reverse tcp:31337 tcp:31337una vez, luegolocalhost:31337desde el dispositivo - Teléfono celular o agente alojado en la nube: el sondeo agota el tiempo de espera. El agente usa la ruta de horneado de URL en su lugar —
createSimulatorSessiondevuelve un fragmentoBuildConfig.EXTENTOS_SESSION_URL(Android) o un payloadextentos.session.plist(iOS) que el desarrollador pega, y luego recompila la aplicación una vez. Menos elegante que la vinculación automática, pero funciona en cualquier topología.
Vinculado solo a 127.0.0.1. El installId no es un secreto — es el mismo valor que el MCP envía a api.extentos.com en cada llamada de herramienta. No se necesita autenticación en esta capa.
Si el puerto 31337 está en uso (raro; otra instancia de MCP ya en ejecución), el inicio registra una advertencia y continúa. La vinculación automática falla silenciosamente para esa sesión; el desarrollador usa la ruta de horneado de URL hasta que el puerto se libere.
Estado
- Paquete:
@extentos/mcp-serveren npm (licencia MIT) - Motores: Node.js 20+
- Pre-1.0 — las API pueden cambiar entre versiones menores hasta que se cierre el bucle de pruebas de hardware. Fija una versión exacta si necesitas reproducibilidad entre sesiones.
Relacionados
- Inicio rápido con un agente de IA — instala el servidor y recorre un bucle de desarrollo real
- Referencia de herramientas — API completa por herramienta
- Configuración — variables de entorno, archivos de configuración, ajustes de instalación
- Autenticación — flujo de código de dispositivo, vinculación de cuentas, comandos CLI de autenticación
- Agentes compatibles — instrucciones de instalación por host
- Arquitectura — cómo encaja el servidor MCP en el sistema más amplio de Extentos
- Transporte vs. simulación de aplicaciones — qué hace realmente el simulador que el MCP gestiona
[
Alibaba Qianwen AI Glasses
Alibaba Qianwen AI Glasses para desarrolladores de terceros — la plataforma de Skills del 千问AI硬件开放平台, integración de herramientas MCP, modelo de aplicación, distribución, capacidades e IA, y su lugar en el panorama de gafas inteligentes de 2026.
](https://extentos.com/docs/ecosystem/platforms/alibaba-qianwen)[
Instalar el servidor MCP
Cómo instalar el servidor MCP de Extentos (@extentos/mcp-server) en cualquier agente de codificación de IA compatible con MCP — Claude Code, Cursor, Windsurf, Cline y otros. Comandos de instalación por host, ubicaciones de archivos de configuración, fragmentos JSON copiables, pasos de reinicio y verificación, fijación de versiones, actualización, solución de errores comunes e instrucciones de desinstalación. Rutas de instalación verificadas para cada host compatible.