En este tutorial, exploramos el Protocolo de contexto de modelo avanzado (MCP) y demostramos cómo usarlo para abordar uno de los desafíos más singulares de los sistemas de IA modernos: permitir la interacción en tiempo real entre modelos de IA y datos o herramientas externos. Los modelos tradicionales operan de forma aislada, limitados a sus datos de entrenamiento, pero a través de MCP, creamos un puente que permite a los modelos acceder a recursos en vivo, ejecutar herramientas especializadas y adaptarse dinámicamente a contextos cambiantes. Analizamos la construcción de un servidor y un cliente MCP desde cero y mostramos cómo cada componente contribuye a este poderoso ecosistema de colaboración inteligente. Consulta los CÓDIGOS COMPLETOS aquí.
manejador: Opcional[Callable] = Ninguno @dataclass clase Mensaje: rol: str contenido: str marca de tiempo: str = Ninguno def __post_init__(self): si no self.timestamp: self.timestamp = datetime.now().isoformat()
Comenzamos definiendo los componentes fundamentales de MCP: recursos, herramientas y mensajes. Diseñamos estas estructuras de datos para representar cómo fluye la información entre los sistemas de IA y sus entornos externos de una manera limpia y estructurada. Consulta los CÓDIGOS COMPLETOS aquí.
if tool.handler: return await tool.handler(**argumentos) return {“status”: “ejecutado”, “tool”: nombre_herramienta, “args”: argumentos} def list_resources(self) -> Lista[Dict[str, str]]: devolver [{“uri”: r.uri, “name”: r.name, “description”: r.description} for r in self.resources.values()]
def list_tools(self) -> Lista[Dict[str, Any]]: devolver [{“name”: t.name, “description”: t.description, “parameters”: t.parameters} for t in self.tools.values()]
Implementamos el servidor MCP que administra recursos y herramientas mientras maneja operaciones de ejecución y recuperación. Nos aseguramos de que admita la interacción asincrónica, lo que la hace eficiente y escalable para aplicaciones de IA del mundo real. Consulta los CÓDIGOS COMPLETOS aquí.
print(f”n ✓ Cliente MCP ‘{client_id}’ inicializado”) def connect_server(self, servidor: MCPServer) -> Ninguno: self.connected_servers[server.name] = servidor print(f” → Conectado al servidor: {server.name}”) async def query_resources(self, server_name: str) -> Lista[Dict[str, str]]: si nombre_servidor no está en self.connected_servers: aumente ValueError(f”No conectado al servidor: {server_name}”) devuelva self.connected_servers[server_name].list_resources() async def fetch_resource(self, server_name: str, uri: str) -> Opcional[Resource]: si nombre_servidor no está en self.connected_servers: aumente ValueError(f”No conectado al servidor: {server_name}”) servidor = self.connected_servers[server_name]
recurso = await server.get_resource(uri) if recurso: self.add_to_context(Message(role=”system”, content=f”Recurso obtenido: {resource.name}”)) return recurso async def call_tool(self, nombre_servidor: str, nombre_herramienta: str, **kwargs) -> Cualquiera: si nombre_servidor no está self.connected_servers: elevar ValueError(f”No conectado al servidor: {server_name}”) servidor = self.connected_servers[server_name]
resultado = await server.execute_tool(tool_name, kwargs) self.add_to_context(Message(role=”system”, content=f”Tool ‘{tool_name}’ ejecutado”)) devolver resultado def add_to_context(self, mensaje: Mensaje) -> Ninguno: self.context.append(message) def get_context(self) -> Lista[Dict[str, Any]]: devolver [asdict(msg) for msg in self.context]
Creamos el cliente MCP que se conecta al servidor, consulta recursos y ejecuta herramientas. Mantenemos una memoria contextual de todas las interacciones, lo que permite una comunicación continua y con estado con el servidor. Consulta los CÓDIGOS COMPLETOS aquí.
return {“texto”: texto, “sentimiento”: aleatorio.choice(sentimientos), “confianza”: round(random.uniform(0.7, 0.99), 2)} async def resume_text(texto: str, max_length: int = 100) -> Dict[str, str]: espera asyncio.sleep(0.15) resumen = texto[:max_length] + “…” if len(texto) > max_length else text return {“original_length”: len(texto), “summary”: resumen, “compression_ratio”: round(len(summary) / len(texto), 2)} async def search_knowledge(consulta: str, top_k: int = 3) -> Lista[Dict[str, Any]]: espera asyncio.sleep(0.25) simulacro_resultados = [{“title”: f”Result {i+1} for ‘{query}'”, “score”: round(random.uniform(0.5, 1.0), 2)} for i in range(top_k)]
retorno ordenado (mock_results, clave = lambda x: x[“score”]reverso=Verdadero)
Definimos un conjunto de controladores de herramientas asincrónicas, que incluyen análisis de sentimientos, resúmenes de texto y búsqueda de conocimientos. Los usamos para simular cómo el sistema MCP puede ejecutar diversas operaciones a través de herramientas modulares conectables. Consulta los CÓDIGOS COMPLETOS aquí.
Reunimos todo en una demostración completa donde el cliente interactúa con el servidor, obtiene datos, ejecuta herramientas y mantiene el contexto. Somos testigos de todo el potencial de MCP, ya que integra perfectamente la lógica de la IA con el conocimiento y la computación externos.
En conclusión, la singularidad del problema que resolvemos aquí radica en romper los límites de los sistemas estáticos de IA. En lugar de tratar los modelos como cajas cerradas, diseñamos una arquitectura que les permite consultar, razonar y actuar sobre datos del mundo real de manera estructurada y basada en el contexto. Esta interoperabilidad dinámica, lograda a través del marco MCP, representa un cambio importante hacia la inteligencia modular aumentada por herramientas. Al comprender e implementar MCP, nos posicionamos para construir la próxima generación de sistemas de IA adaptativos que puedan pensar, aprender y conectarse más allá de sus límites originales.
Consulta los CÓDIGOS COMPLETOS aquí. No dude en consultar nuestra página de GitHub para tutoriales, códigos y cuadernos. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 100.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.
Asif Razzaq es el director ejecutivo de Marktechpost Media Inc.. Como emprendedor e ingeniero visionario, Asif está comprometido a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, Marktechpost, que se destaca por su cobertura en profundidad del aprendizaje automático y las noticias sobre aprendizaje profundo que es técnicamente sólida y fácilmente comprensible para una amplia audiencia. La plataforma cuenta con más de 2 millones de visitas mensuales, lo que ilustra su popularidad entre el público.
🙌 Siga MARKTECHPOST: agréguenos como fuente preferida en Google.