Guía Completa del Model Context Protocol (MCP): Conectando LLMs a Herramientas
Respuesta rápida
MCP es un protocolo abierto que permite que un asistente de IA use herramientas y datos externos (bases de datos, APIs, archivos) a través de servidores MCP, sin una integración a medida por cada herramienta. En esta guía lo construyes en Python y TypeScript, y la sección final explica cómo se aplica lo mismo en .NET con C#.
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.
Respuesta rápida
El Model Context Protocol (MCP) es un protocolo cliente-servidor que permite a un asistente de IA llamar herramientas, leer datos y usar prompts de servidores que tú defines, en lugar de adivinar. Un servidor solo expone lo que registras. Para construir uno en Python desde cero, sigue la guía paso a paso (en inglés): How to Build an MCP Server in Python from Scratch.
1. ¿Qué es el 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.
MCP en .NET: lo mismo, en C#
Respuesta directa: sí, MCP también funciona en .NET. Existe un SDK oficial para .NET con el que se crean servidores y clientes MCP en C#, y la arquitectura no cambia respecto a lo que esta guía enseña en Python y TypeScript: un host ejecuta al asistente, un cliente MCP mantiene la conexión y un servidor MCP expone herramientas, recursos y prompts.
En la práctica, el trabajo es el mismo: defines qué herramientas expone tu servidor (por ejemplo, consultar una base de datos o leer un archivo), el cliente las descubre y el asistente decide cuándo llamarlas. Lo único que cambia es el SDK: en lugar de FastMCP en Python, usas las clases del SDK de .NET para registrar esas mismas herramientas en C#.
Dos reglas que aplican igual en .NET: el servidor solo expone lo que el desarrollador define explícitamente, y las operaciones sensibles (escrituras o consultas con efectos) deben ir detrás de permisos y validación, no abiertas por defecto.
Para seguir en C# dentro de este sitio: categoría C#, APIs mínimas en .NET y programación con IA.
Ejemplo mínimo en C#, con carácter ilustrativo: muestra la forma de una herramienta, no una configuración completa verificada. Revisa la documentación del SDK de .NET que instales, porque los nombres de tipos y métodos pueden cambiar entre versiones.
// Ejemplo ilustrativo en C# (adaptar al SDK de .NET instalado).
// Un servidor MCP expone herramientas con nombre, descripción y
// parámetros; el cliente las descubre y el asistente decide cuándo llamarlas.
public sealed class NotesTools
{
// Herramienta: buscar notas que contengan una palabra clave.
public string[] SearchNotes(string keyword)
{
// Aquí iría la lectura real (archivo, base de datos, API interna).
return Array.Empty<string>();
}
}
La idea es la misma que en Python: una función, una descripción clara y una validación de entrada, registradas como herramienta. Lo que cambia es el SDK, no la arquitectura.
MCP en Python para principiantes: un primer servidor en minutos
Si ya viste la teoría, este es el paso práctico más corto. Con FastMCP puedes exponer una sola herramienta sin escribir todo el protocolo a mano. Revisa siempre la documentación oficial de la versión que instales, porque la API puede cambiar entre versiones.
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("demo")
@mcp.tool()
def saludar(nombre: str) -> str:
return f"Hola, {nombre}"
if __name__ == "__main__":
mcp.run()Este ejemplo expone una herramienta, saludar, que recibe un nombre y devuelve un saludo. A partir de aquí, el siguiente paso es añadir una segunda herramienta con datos reales, por ejemplo buscar archivos, y probarla con un prompt real en tu cliente antes de añadir más.
Para seguir: revisa la chuleta de servidores MCP, la guía de Claude Code y la guía paso a paso de MCP.
Preguntas frecuentes
¿Qué hacen los MCP?
Los MCP permiten que una aplicación de IA se conecte a herramientas y datos externos siguiendo un protocolo común. En lugar de una integración distinta por cada herramienta, el cliente y el servidor hablan el mismo idioma.
¿Cuál es la diferencia entre una API y un MCP?
Una API es la interfaz concreta de un servicio, con sus propios endpoints. MCP es un protocolo que estandariza cómo se describen, se listan y se llaman las herramientas, para que un cliente pueda trabajar con muchos servidores sin aprender una interfaz nueva cada vez.
¿Puedes darme un ejemplo de MCP?
Un servidor de búsqueda de archivos es un ejemplo sencillo: expone una herramienta que recibe una consulta y devuelve los archivos que coinciden. El cliente la llama cuando el usuario pide buscar un archivo, en lugar de que el modelo adivine nombres.
Construye tu propio servidor, desde cero
Esta guía explica el protocolo. Para una implementación completa y copiable en Python, lee How to Build an MCP Server in Python from Scratch (en inglés): un servidor de notas con tres herramientas, cómo probarlo con el MCP Inspector, cómo funcionan los servidores remotos y los errores que conviene revisar primero. También útil: la chuleta de servidores MCP.
Más preguntas, respondidas
¿Qué es un ejemplo de servidor MCP en Python?
Un programa pequeño que expone funciones como herramientas que un asistente puede llamar. El servidor de notas de la guía paso a paso es un ejemplo completo: tres herramientas, add_note, list_notes y search_notes, definidas con decoradores y puestas en marcha con una sola llamada.
¿Cómo construyo un servidor MCP en Python desde cero?
Crea una carpeta de proyecto, instala un SDK de MCP para Python como FastMCP, define una herramienta a la vez con nombre, descripción y tipos claros, ejecuta el servidor en local y pruébalo con el MCP Inspector antes de conectarlo a un cliente asistente.
¿Qué es un servidor MCP remoto?
Un servidor MCP que funciona por HTTP para que clientes de otras máquinas puedan alcanzarlo. Expone las mismas herramientas que uno local, pero necesita autenticación, validación de entradas, registro de llamadas y límites de permisos, porque es un servicio de red.