¡Muy contento de que haya tanto interés en este trabajo!
Para explicar un poco más, aquí tienes un esquema de un conjunto que funciona con el protocolo MCP
Por lo tanto, hay el host que contiene el cliente MCP. Hoy en día, suelen ser agentes bien conocidos como Claude desktop, ChatGPT… que integran este cliente. Como decía, en el vídeo de demostración de arriba, es el agente presente en VSCode con Github Copilot.
Su trabajo será, por un lado, comunicarse con el llm (a menudo Claude Sonnet o GPT-4) que se encargará de entender las solicitudes y analizar los datos, y por otro lado, con el servidor MCP.
El servidor MCP se encarga de declarar funciones que el cliente MCP puede llamar para interactuar con el recurso (en nuestro caso, el recurso es Gladys, pero podría ser una base de datos, Google Drive, Slack… cualquier herramienta local o remota). En nuestro caso, actualmente 4 funciones:
device.get-state para obtener los datos de los sensores
camera.get-image para recuperar las imágenes de la cámara
light.turn-(on|off) para encender/apagar las luces de una habitación
scene.start para iniciar una escena
Ahora, si miramos más de cerca, pero manteniéndolo simple, el funcionamiento de la parte host, cuando usamos, por ejemplo, Claude Desktop, esto es lo que se hará:
- Al inicio, Claude Desktop pedirá a todos los servidores MCP a los que está conectado las funciones disponibles que cada uno ofrece (en nuestro caso
device.get-state, camera.get-image…)
- Cuando el usuario le pide algo a Claude Desktop (digamos « Dime la temperatura del salón ») enviará al llm la pregunta especificando en el contexto de la solicitud que tiene acceso a varias funciones y que, si la solicitud del usuario lo requiere, se puede hacer una llamada a estas funciones
- El llm responde a Claude Desktop, « Necesito que uses
device.get-state con el parámetro de la habitación salon »
- Claude Desktop llama a la función del servidor MCP de Gladys
device.get-state(salon) y devuelve el dato solicitado al llm
- el llm construye la respuesta con este nuevo dato y la envía a Claude Desktop que te la muestra
Hay que entender bien que no es Gladys quien responde aquí, Gladys solo devuelve un estado y el llm construye la respuesta. No sé si usas Google Home, Homekit/Siri o Amazon Alexa con Gladys, pero creo que podemos hacer una comparación para entenderlo bien. Tenemos un servicio Gladys que expone dispositivos a través de un protocolo, y el cliente Claude Desktop (que podríamos comparar con la app Google Home, Apple Maison o incluso Siri) hace consultas a este servicio para obtener información. La ventaja con respecto a estas soluciones propietarias es que el MCP es un protocolo abierto e implementable por cualquiera (ya sea cliente o servidor). Por lo tanto, para responder a tu pregunta:
se puede imaginar perfectamente un cliente MCP, integrado con un modelo STT (ya sea en la nube o local) y comunicándose con Gladys a través de MCP.
Para responder a tu otra pregunta:
Respuesta corta el servidor MCP ya está integrado en Gladys a través del servicio que he desarrollado, la conexión que tendrás que realizar es entre el agente/cliente MCP y el servidor MCP (cf tutorial al final de este post).
La respuesta larga será un poco técnica, pero para explicar al mejor el porqué de hacerlo un servicio y entender los tutoriales de abajo, es interesante.
Para la conexión entre el cliente MCP y el servidor MCP tenemos 2 medios de comunicación posibles:
- ya sea en stdio (entrada/salida estándar)
- ya sea en HTTP (a través de la red)
El stdio es el medio de comunicación original del MCP, el cliente MCP lanzará un subproceso que ejecuta el servidor y escucha las entradas/salidas del proceso (esquematizando mucho, es como si tuviera un teclado para escribir y leía los registros del terminal para comunicarse). Hay más agentes compatibles que con el http, pero como el servidor debe ejecutarse en la misma máquina que el agente, esto implica desarrollar y gestionar un nuevo proyecto en paralelo a Gladys.
El HTTP permite hacer que el cliente MCP y el servidor MCP se comuniquen a través de la red cuando no están en la misma máquina. Esto da la posibilidad de agrupar el servidor MCP y el recurso en el mismo lugar. Integrar el servidor MCP en un servicio Gladys tiene varias ventajas
- a nivel de código, es lo que me ha parecido más simple, para tener fácil acceso a todos los datos y funciones de Gladys
- a nivel de estructura del proyecto, evita tener que mantener un segundo proyecto MCP-servidor-Gladys además de Gladys
- si un día los clientes MCP salen en teléfonos (o altavoces como tú pides), hay muchas posibilidades de que se haga en HTTP, ya que instalar un servidor MCP en este tipo de dispositivos será necesariamente más complicado
- si el agente que usas no es compatible con MCP a través de HTTP, puedes usar mcp-proxy que se encarga de hacer una pasarela entre stdio y HTTP (te lo explico abajo cómo usarlo).
Para los tutoriales de conexión, aquí tienes algunas explicaciones para VSCode (directamente en HTTP), Claude Desktop y Perplexity (uso de mcp-proxy porque Claude Desktop y Perplexity son hoy en día únicamente compatibles con stdio). Si tienes otros agentes, podemos verlo juntos.
VSCode con GitHub Copilot
Inicias el Chat Copilot.
Abajo, selecciona bien Agent y haz clic en el icono de la llave inglesa
En la lista desplegable que se abre, al final, elige « Add more Tools… »
« Add MCP Server »
« HTTP »
Finalmente, introduce esta URL http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy reemplazando GLADYS_IP_ADDRESS por la dirección IP de tu Gladys.
Elige un nombre y listo, deberías poder usar en tu Agent Copilot
Para más información: Add and manage MCP servers in VS Code
Claude Desktop y Perplexity aún no admiten servidores MCP (han anunciado que lo harán pronto), por lo tanto, es necesario pasar por mcp-proxy
Para la instalación, todo está indicado aquí GitHub - sparfenyuk/mcp-proxy: A bridge between Streamable HTTP and stdio MCP transports · GitHub
Claude Desktop
Una vez instalado mcp-proxy, inicia Claude Desktop
En Configuración → Desarrollador → MCP Locales, haz clic en « Modificar la Config »
En un editor de texto, modifica el archivo claude_desktop_config.json para que se parezca a
{
"mcpServers": {
"mcp-proxy": {
"command": "FULL_PATH/mcp-proxy",
"args": [
"http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
"--transport",
"streamablehttp"
],
"env": {}
}
}
}
Para encontrar FULL_PATH, en una terminal de comandos escriba where mcp-proxy (en macOS/Linux, para Windows escriba where.exe mcp-proxy) y reemplace FULL_PATH por la ruta obtenida.
También reemplace GLADYS_IP_ADDRESS por la IP de su Gladys
Guarde la configuración y reinicie Claude, si todo ha ido bien, debería poder acceder a las funciones MCP en el chat
Perplexity
Una vez mcp-proxy instalado, inicie Perplexity
En Configuración → Conectores → Agregar un conector
Seleccione la pestaña « Avanzado »
Ponga un nombre « Gladys »
Modifique la configuración para que se parezca a
{
"args" : [
"http://GLADYS_IP_ADDRESS/api/v1/service/mcp/proxy",
"--transport",
"streamablehttp"
],
"command" : "FULL_PATH/mcp-proxy",
"env" : {}
}
Para encontrar FULL_PATH, en una terminal de comandos escriba where mcp-proxy (en macOS/Linux, para Windows escriba where.exe mcp-proxy) y reemplace FULL_PATH por la ruta obtenida.
También reemplace GLADYS_IP_ADDRESS por la IP de su Gladys
Guarde la configuración y espere a que Perplexity detecte correctamente todas las funciones, si todo ha ido bien, debería poder acceder a las funciones MCP en el chat.
Para más información: https://www.perplexity.ai/help-center/en/articles/11502712-local-and-remote-mcps-for-perplexity
He intentado ser lo más completo y claro posible, espero que esto haya respondido a tus preguntas. Aunque el protocolo ya tiene algunos meses, aún está en sus inicios, es muy prometedor, especialmente viendo a todos los gigantes de la IA implementarlo. Por lo tanto, si la configuración de la conexión le parece complicada, no dude en pedir ayuda y esto permitirá mejorar los tutoriales según los comentarios de los usuarios.