¿Cómo se crea un servidor MCP en Python?
Respuesta corta: instala el SDK oficial con uv add "mcp[cli]" (o pip install "mcp[cli]"), crea un MCPServer, convierte tus funciones de Python en herramientas con @mcp.tool() y llama a mcp.run(). Después conéctalo a Claude Code con claude mcp add. Un servidor completo cabe en unas 20 líneas:
from mcp.server import MCPServer
mcp = MCPServer("Notas")
notas: dict[str, str] = {}
@mcp.tool()
def guardar_nota(titulo: str, texto: str) -> str:
"""Guarda una nota con un título."""
notas[titulo] = texto
return f"Nota '{titulo}' guardada"
@mcp.tool()
def buscar_notas(consulta: str) -> list[str]:
"""Devuelve los títulos de las notas que contienen la consulta."""
q = consulta.lower()
return [t for t, cuerpo in notas.items() if q in t.lower() or q in cuerpo.lower()]
if __name__ == "__main__":
mcp.run()Las anotaciones de tipo (titulo: str) se convierten en el esquema de entrada de la herramienta y el docstring en su descripción: la IA lee las dos cosas para decidir cuándo usarla. Este código usa la versión 2 del SDK (mcp 2.3.0, probado con Python 3.13).
Crea el proyecto, añade el SDK, conecta el servidor a Claude Code y comprueba que está conectado.
Qué es un servidor MCP
MCP (Model Context Protocol) es un estándar abierto que deja que aplicaciones de IA como Claude Code, Claude Desktop o Cursor usen tu código. Un servidor MCP puede ofrecer tres cosas:
| Qué ofrece | Para qué sirve | En Python |
|---|---|---|
| Herramientas (tools) | Acciones que la IA puede ejecutar: buscar, guardar, llamar a una API | @mcp.tool() |
| Recursos (resources) | Datos que la IA puede leer, por URI | @mcp.resource("notas://{titulo}") |
| Prompts | Plantillas de prompt reutilizables | @mcp.prompt() |
La aplicación de IA es el cliente: arranca tu servidor, le pregunta qué herramientas tiene y las llama cuando le sirven para la tarea.
Paso 1: crea el proyecto
Necesitas Python 3.10 o superior. El SDK recomienda uv para gestionar el proyecto:
uv init mcp-notas
cd mcp-notas
uv add "mcp[cli]"Con pip, dentro de un entorno virtual:
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install "mcp[cli]"El extra cli añade el comando mcp (mcp dev, mcp run, mcp install). Compruébalo con uv run mcp version:
MCP version 2.3.0Si todavía no tienes Python, mira cómo instalar Python.
Paso 2: escribe el servidor
Crea server.py con el código del principio de esta página. Puedes añadir un recurso para que la IA lea una nota por su URI:
@mcp.resource("notas://{titulo}")
def leer_nota(titulo: str) -> str:
"""Lee una nota por su título."""
return notas.get(titulo, "No existe esa nota")Tres reglas para que las herramientas funcionen bien:
- Pon tipo a cada parámetro. Sin tipos, la IA no sabe qué enviar.
- Escribe un docstring claro. Es lo que lee la IA para elegir la herramienta.
- Devuelve datos simples: texto, números, listas o diccionarios. El SDK los convierte en el resultado MCP.
mcp.run() usa por defecto el transporte stdio: el cliente arranca server.py como un proceso y habla con él por stdin y stdout. No uses print() en un servidor stdio, porque escribe en ese canal; usa logging, que escribe en stderr.
