Guía Completa del Model Context Protocol (MCP): Conectando LLMs a Herramientas
Lo Que Dominarás en Este Tutorial
- Understand the MCP client-server protocol and JSON-RPC 2.0 transport.
- Build a production MCP server in Python using FastMCP.
- Expose secure database queries and file readers as agent tools.
- Configure Cursor, Windsurf, and Claude Desktop to consume custom MCP servers.
1. What is Model Context Protocol (MCP)?
Model Context Protocol (MCP) is an open standard introduced by Anthropic that standardizes how AI applications connect to external data sources, developer tools, and proprietary environments. Think of MCP as the USB-C port for AI agents.
from mcp.server.fastmcp import FastMCP
# Initialize MCP Server
mcp = FastMCP("PostgresTools")
@mcp.tool()
def run_read_only_query(query: str) -> str:
"""Execute a safe SELECT query against the staging database."""
if not query.strip().lower().startswith("select"):
raise ValueError("Only read-only SELECT queries are permitted.")
# Execute query against database pool
return "Query executed: 24 records returned."
if __name__ == "__main__":
mcp.run(transport="stdio")
Evaluación Rápida: Pon a Prueba tus Conocimientos
Preguntas Frecuentes
Profundizando: los servidores MCP en la práctica
Construir el servidor FastMCP de este tutorial es el primer paso; operarlo con seguridad es la práctica que sigue. La guardia de solo lectura del ejemplo (rechazar cualquier consulta que no empiece por SELECT) es el patrón a generalizar en todo lo que expongas: cada herramienta debería hacer una sola cosa, validar sus entradas como si el modelo fuera un llamador no confiable y devolver resultados acotados y con forma. El transporte sigue al despliegue. Un servidor por stdio encaja con herramientas locales que consumen Cursor, Windsurf o Claude Desktop en tu propia máquina, mientras un servidor remoto sobre SSE sirve a todo un equipo, y eleva en consecuencia el listón de la autenticación. Construye según el estándar, y un solo servidor servirá a todos los clientes MCP.
Errores comunes
- Exponer acceso de escritura por defecto. La herramienta de ejemplo del tutorial impone deliberadamente consultas SELECT de solo lectura. Una herramienta genérica de «ejecuta cualquier SQL» le entrega al modelo tu base de datos entera, DROP incluidos: delimita cada herramienta al mínimo que necesita.
- Devolver resultados sin límite a la ventana de contexto. Una herramienta de consulta capaz de devolver una tabla completa inunda el contexto del modelo y entierra las filas relevantes. Limita el número de filas, selecciona columnas concretas y resume donde sea posible.
- Escribir las credenciales a fuego dentro del servidor. Las contraseñas de bases de datos y las claves de API pertenecen a variables de entorno o a la configuración que el servidor lee al arrancar, nunca al código de las herramientas que confirmas, compartes o pegas en documentación.
- Construir para un único cliente. MCP es un protocolo estándar sobre JSON-RPC 2.0, y la sección de preguntas del tutorial confirma que Cursor, Windsurf, Claude Desktop y el VS Code moderno consumen servidores personalizados desde un JSON de ajustes. Un servidor que solo funciona en un cliente suele ser un error de configuración, no una limitación.
Preguntas frecuentes
¿Qué estandariza exactamente MCP?
Cómo se conectan las aplicaciones de IA a fuentes de datos y herramientas externas: un protocolo cliente-servidor, presentado por Anthropic, que corre sobre JSON-RPC 2.0 por stdio o HTTP con SSE. La analogía del tutorial es acertada: MCP es el puerto USB-C de los agentes de IA, una sola forma de conector para muchos dispositivos.
¿En qué lenguaje de programación debería construir mi servidor MCP?
El tutorial usa Python con FastMCP, donde un decorador convierte una función ordinaria en una herramienta invocable por un agente. En la práctica, elige el SDK que encaje con los sistemas que expones: el protocolo es independiente del lenguaje, así que el servidor debería vivir cerca de los datos a los que sirve.
¿Mi servidor MCP debería correr en local o en remoto?
En local sobre stdio para herramientas personales de desarrollo: arranca con el cliente y hereda los permisos de tu máquina. En remoto sobre SSE cuando un equipo comparte un mismo servidor, pero añade antes autenticación y validación de entradas, porque un puerto escuchando en la red es una exposición muy distinta de un subproceso local.