PTENES
MÓDULO 3.2

👋 Hello World MCP

Crea tu primer MCP Server funcional: una tool simple que devuelve "¡Hola, mundo!" y conéctalo a Claude Desktop.

6
Temas
30
Minutos
Intermedio
Nivel
Práctico
Tipo
1

🎯 El objetivo

En este módulo, vamos a crear el MCP Server más simple posible: una única tool que recibe un nombre y devuelve un saludo. El objetivo no es impresionar por su complejidad, sino entender cada línea de código y el flujo completo, desde el código Python hasta que Claude usa la tool. Si entiendes completamente el Hello World, construir servers complejos será solo cuestión de agregar más tools.

💎 Concepto principal

O Hello World MCP es un servidor con una única herramienta: hello(nome: str) que devuelve f"Olá, {nome}!". Es el equivalente al "Hello World" de cualquier lenguaje de programación: el programa funcional más pequeño posible. La diferencia es que, en lugar de imprimir en la terminal, esta función será llamada por una IA a través del protocolo MCP. El modelo decide cuándo llamar, pasa los parámetros y recibe el resultado.

💡 Consejo práctico

Resiste la tentación de agregar features adicionales a Hello World. El objetivo aquí es claridad total, funcionalidad. Cuando entiendas cada línea de este server mínimo, podrás construir cualquier cosa. Piensa en esto como aprender a caminar antes de correr: una base sólida ahora te ahorrará horas de depuración después.

2

📝 Cómo crear el proyecto

Vamos a usar el uv para crear y configurar el proyecto. uv se encarga de todo: inicializa el proyecto con pyproject.toml, crea el entorno virtual e instala las dependencias. En tres comandos, tendrás un proyecto Python listo para recibir el código del server.

💎 Concepto principal

La creación del proyecto usa tres comandos: uv init hello-mcp — crea el directorio con pyproject.toml; cd hello-mcp — entra en el directorio; y uv add fastmcp — agrega FastMCP como dependencia. Después, crea el archivo server.py donde estará el código del server. En menos de 30 segundos, tendrás un proyecto de Python completo y configurado.

📋 Paso a paso de la creación
Paso 1

Ejecuta uv init hello-mcp — crea el directorio del proyecto con pyproject.toml, .python-version y una estructura inicial.

Paso 2

Entra al directorio con cd hello-mcp — todos los comandos siguientes deben ejecutarse desde el proyecto.

Paso 3

Ejecuta uv add fastmcp — instala FastMCP y todas sus dependencias en el entorno virtual del proyecto.

Paso 4

Crea el archivo server.py en el directorio raíz del proyecto; aquí es donde escribiremos el código del MCP Server.

💡 Consejo práctico

Si ya tienes el uv instalado, puede hacerlo todo en una línea: uv init hello-mcp && cd hello-mcp && uv add fastmcp. uv es extremadamente rápido: la instalación de FastMCP y todas sus dependencias tarda solo unos segundos, mucho menos que con el pip tradicional.

3

💻 Escribiendo el código

Ahora viene la parte más satisfactoria: escribir el código del server. Son solo 10 líneas, pero cada una tiene un propósito preciso. No copies y pegues sin entender; lee cada línea y comprende qué hace. Este es el código que convierte una función común de Python en una capacidad a la que puede acceder cualquier IA compatible con MCP.

💎 Concepto principal

El código completo del Hello World MCP Server:

from fastmcp import FastMCP
# Crea la instancia del server
mcp = FastMCP("hello-mcp")
@mcp.tool()
def hello(nombre: str) -> str:
"""Saluda a la persona indicada."""
return f"Hola, {nome}!"
if __name__ == "__main__":
mcp.run()

Estas ~10 líneas conforman un MCP Server completo y funcional. FastMCP se encarga de todo el protocolo por debajo: JSON-RPC, transporte, negociación de capabilities y serialización. Tú solo tienes que preocuparte por la lógica de tu tool.

📊 Datos e investigación

Sin FastMCP, implementar el mismo server usando el protocolo MCP de bajo nivel exigiría más de 150 líneas de código — incluido el análisis de JSON-RPC, la gestión del transporte stdio, la negociación de capabilities, la serialización de schemas y el manejo de errores del protocolo. FastMCP lo reduce a ~10 líneas, una reducción de más del 90% en el código necesario. Esa es la ventaja de usar un framework bien diseñado.

4

⚙️ Configuración en Claude Desktop

Con el código listo, es hora de conectar el server a Claude Desktop. Esto se hace editando el archivo de configuración de Claude y agregando una entrada para tu server. Claude Desktop usará el uv para iniciar el server automáticamente cuando sea necesario.

💎 Concepto principal

Agrega al archivo claude_desktop_config.json de Claude Desktop:

{
"mcpServers": {
"hello-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/caminho/completo/hello-mcp",
"server.py"
]
}
}
}

Reemplaza /caminho/completo/hello-mcp por la ruta absoluta real de tu proyecto. Después, reinicia Claude Desktop para que detecte el nuevo server.

🚨 Alerta

La ruta en el --directory debe ser absoluto — las rutas relativas no funcionan. Usa la ruta completa, como /home/usuario/projetos/hello-mcp en Linux/Mac o C:\\Users\\usuario\\projetos\\hello-mcp en Windows. Una ruta incorrecta es la causa número 1 de que «el server no aparezca en Claude»: ¡revísala con cuidado!

❌ Evitar
  • •Usar una ruta relativa como "./hello-mcp"
  • •Olvidar reiniciar Claude Desktop
  • •Usar "python" en lugar de "uv" en command
  • •Cometer errores en la sintaxis del JSON (comas, comillas)
✅ Hacer
  • •Usar la ruta absoluta completa
  • •Reiniciar Claude Desktop después de editar la config
  • •Comprobar si uv está en el PATH del sistema
  • •Validar el JSON antes de guardarlo
5

🧪 Probando

Con el server configurado y Claude Desktop reiniciado, llega el momento mágico: probar si todo funciona. Abre una nueva conversación en Claude y pídele que use la tool. Si todo está correcto, Claude identificará la tool automáticamente, la llamará con los parámetros adecuados y mostrará el resultado. Así funciona MCP de principio a fin.

💎 Concepto principal

Para probar, abre Claude Desktop y escribe algo como "Saluda a María". Claude debe: (1) reconocer que tiene una tool hello disponible; (2) decidir usarla para atender la solicitud; (3) llamar a la herramienta con nome="Maria"; (4) recibir el resultado "Olá, Maria!"; e (5) presentar el resultado en la conversación. Si eso ocurre, ¡felicidades! Tu primer MCP Server está funcionando.

💡 Consejo práctico

Si la tool no aparece en Claude Desktop, revisa: (1) la ruta en config.json es correcta y absoluta; (2) uv está instalado y accesible; (3) Claude Desktop se reinició; (4) el archivo server.py no tiene errores de sintaxis. Puedes probar el server manualmente con uv run server.py en la terminal: si aparece un error, el problema está en el código.

📋 Flujo completo de la prueba
Paso 1

Abre Claude Desktop e inicia una conversación nueva.

Paso 2

Comprueba si aparece el ícono de herramientas (martillo): indica que hay MCP Servers conectados.

Paso 3

Escribe «Di hola a María» y envía el mensaje.

Paso 4

Claude te pedirá permiso para usar la tool "hello"; haz clic en "Allow" para autorizarla.

Paso 5

Comprueba que el resultado muestre "¡Hola, Maria!" — ¡tu MCP Server está funcionando!

6

🔍 Entendiendo cada línea

Ahora que el server funciona, volvamos al código y analicemos cada línea en detalle. Entender el «porqué» de cada elemento es lo que marca la diferencia entre copiar código y comprenderlo. Cada línea del Hello World cumple una función precisa en el funcionamiento del MCP Server, y ninguna es superflua.

💎 Concepto principal
  • Import: from fastmcp import FastMCP — incorpora el framework al código. Sin esto, Python no sabe qué es FastMCP.
  • Instancia: mcp = FastMCP("hello-mcp") — crea el objeto server. El nombre identifica el server en el client.
  • Decorator: @mcp.tool() — registra la función como una tool MCP. Sin el decorator, es solo una función normal de Python.
  • Función: def hello(nome: str) -> str — la lógica de la tool. El nombre de la función se convierte en el nombre de la tool.
  • Type hints: nome: str e -> str — definen el schema de la tool. El modelo sabe que debe enviar una cadena y recibirá una cadena.
  • Docstring: """Diz olá para a pessoa informada.""" — se convierte en la descripción de la tool que el modelo lee para decidir cuándo usarla.
📊 Datos e investigación

Cada elemento del código tiene una correspondencia directa en el protocolo MCP: el nombre de la función se convierte en el campo name de la tool; los type hints se convierten en el inputSchema (JSON Schema); la docstring se convierte en el campo description; e o retorno se convierte en el content de la respuesta. FastMCP hace esta traducción automáticamente: escribes Python idiomático y el framework genera el protocolo MCP correcto.

💡 Consejo práctico

Prueba cambiar algunas cosas y observa qué pasa: cambia la docstring y observa cómo Claude describe la tool; agrega un segundo parámetro y observa cómo Claude te pide la información adicional; cambia el nombre de la función y observa cómo aparece el nuevo nombre en Claude. Esta experimentación activa es la mejor forma de entender cómo se conecta cada parte del código con el comportamiento del MCP Server.

📝 Resumen del módulo

  • ✓ Creamos el MCP Server más sencillo posible: una tool hello que devuelve un saludo personalizado.
  • ✓ El proyecto se creó con uv init e uv add fastmcp — configuración completa en segundos.
  • ✓ El código completo tiene ~10 líneas: import, instancia, decorator, función con type hints y docstring, y punto de entrada.
  • ✓ La configuración en Claude Desktop usa el claude_desktop_config.json con ruta absoluta obligatoria.
  • ✓ Probamos pidiéndole a Claude "Saluda a María" y verificando que la tool devuelva "¡Hola, María!".
  • ✓ Cada línea del código corresponde directamente a elementos del protocolo MCP: nombre, schema, descripción y respuesta.

Siguiente Módulo: 3.3 — Entendiendo los decoradores y los esquemas