41  MCP - Model Context Protocol

Author

Diego Saavedra GarcΓ­a

42 πŸ”Œ MCP

42.1 Model Context Protocol


42.2 πŸ“‹ DescripciΓ³n

MCP es un protocolo abierto que estandariza cΓ³mo las IAs se conectan a herramientas, APIs y datos. Es como USB para IA: un estΓ‘ndar universal.

42.3 πŸ—οΈ Arquitectura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      IA CLIENT                         β”‚
β”‚                    (Claude, GPT, etc.)                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            β”‚ MCP Protocol
                            β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    MCP SERVER                          β”‚
β”‚                                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚   Tools     β”‚  β”‚  Resources  β”‚  β”‚   Prompts   β”‚   β”‚
β”‚  β”‚             β”‚  β”‚             β”‚  β”‚             β”‚   β”‚
β”‚  β”‚ - Ejecutar  β”‚  β”‚ - Leer      β”‚  β”‚ - Templates β”‚   β”‚
β”‚  β”‚   cΓ³digo    β”‚  β”‚   archivos  β”‚  β”‚   predefs   β”‚   β”‚
β”‚  β”‚ - Llamar    β”‚  β”‚ - Acceder   β”‚  β”‚ - Sistemas  β”‚   β”‚
β”‚  β”‚   APIs      β”‚  β”‚   BDs       β”‚  β”‚   prompts   β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

42.4 πŸ”§ ImplementaciΓ³n

42.4.1 Servidor MCP BΓ‘sico

from mcp import Server
from mcp.types import Tool, TextContent

server = Server("mi-servidor")

@server.tool("calcular")
async def calcular(expression: str) -> list[TextContent]:
    """Calcula una expresiΓ³n matemΓ‘tica"""
    try:
        result = eval(expression)  # Β‘Cuidado con seguridad!
        return [TextContent(text=f"Resultado: {result}")]
    except Exception as e:
        return [TextContent(text=f"Error: {str(e)}")]

if __name__ == "__main__":
    server.run()

42.4.2 Cliente MCP

from mcp import Client

async def main():
    async with Client("http://localhost:8000") as client:
        # Listar herramientas disponibles
        tools = await client.list_tools()
        
        # Ejecutar una herramienta
        result = await client.call_tool("calcular", {"expression": "2 + 2"})
        print(result)

42.5 πŸ”’ Seguridad

Riesgo MitigaciΓ³n
EjecuciΓ³n de cΓ³digo Sandbox + whitelist
Acceso a archivos Permisos granulares + chroot
InyecciΓ³n de prompts ValidaciΓ³n estricta de inputs
ExfiltraciΓ³n de datos Logging + rate limiting

42.6 πŸ”— Recursos