CURSO MCP CRASH COURSE: CONTEXT MODEL PROTOCOL
Basado en los siguientes recursos:
- https://github.com/emarco177/mcp-crash-course
- https://modelcontextprotocol.io/docs/getting-started/intro
Sección 1: Introducción a MCP
Sección 2:
- Usar MCP Server existentes con Claude/VSCODE
https://github.com/modelcontextprotocol/quickstart-resources/tree/main/weather-server-typescript
Sección 3 y 4:
Documentación dinámica usando llms.txt y llms_full.txt: https://github.com/langchain-ai/mcpdoc -> instalar MCP
crear entorno virtual, instalar dependencias y ejecutar: Con el entorno activado:
uvx --from mcpdoc mcpdoc --urls "LangGraph:https://langchain-ai.github.io/langgraph/llms.txt" "LangChain:https://python.langchain.com/llms.txt" --transport sse --port 8082 --host localhostEn otra terminal (tener instalado npm):
npx @modelcontextprotocol/inspectorPara agregar el MCP:
{
"mcpServers": {
"langgraph-docs-mcp": {
"command": "uvx",
"args": [
"--from",
"mcpdoc",
"mcpdoc",
"--urls",
"LangGraph:https://langchain-ai.github.io/langgraph/llms.txt LangChain:https://python.langchain.com/llms.txt",
"--transport",
"stdio"
]
}
}
}Sección 5: MCP para administrar archivos del pc
Configuración del entorno con uv:
uv init shellserver
uv venv
".venv\Scripts\activate"
uv add fastmcpAgregar páginas a los docs de Cursor: https://github.com/modelcontextprotocol/python-sdk y https://modelcontextprotocol.io/ Crear carpeta .cursor rules con el archivo rules.md para las reglas de Cursor. y usar plantillas en https://cursor.directory/fastapi-python-cursor-rules
Para ejecutar el MCP server en Docker, dentro de la carpeta de shellserver se crea el Dockerfile y se ejecuta:
docker build -t shellserver-app .
docker run -it --rm shellserver-appHasta ahora el JSON de Claude corría todo este MCP Server con uv:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\quickstart-resources\\weather-server-python",
"run",
"weather.py"
]
},
"langgraph-docs-mcp": {
"command": "uvx",
"args": [
"--from",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\mcpdoc",
"mcpdoc",
"--urls",
"LangGraph:https://langchain-ai.github.io/langgraph/llms.txt LangChain:https://python.langchain.com/llms.txt",
"--transport",
"stdio"
]
},
"shell": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\MCP_Crash_Course_Udemy\\05-seccion_MCP_local\\shellserver",
"run",
"server.py"
]
}
},
"preferences": {
"coworkWebSearchEnabled": true,
"coworkScheduledTasksEnabled": false,
"ccdScheduledTasksEnabled": false,
"sidebarMode": "chat"
}
}Pero para que se pueda ejecutar usando el contenedor de Docker:
},
"docker-shell": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"shellserver-app"
]
}Completo hasta sección 5:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\quickstart-resources\\weather-server-python",
"run",
"weather.py"
]
},
"langgraph-docs-mcp": {
"command": "uvx",
"args": [
"--from",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\mcpdoc",
"mcpdoc",
"--urls",
"LangGraph:https://langchain-ai.github.io/langgraph/llms.txt LangChain:https://python.langchain.com/llms.txt",
"--transport",
"stdio"
]
},
"shell": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\MCP_Crash_Course_Udemy\\05-seccion_MCP_local\\shellserver",
"run",
"server.py"
]
},
"docker-shell": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"shellserver-app"
]
}
},
"preferences": {
"coworkWebSearchEnabled": true,
"coworkScheduledTasksEnabled": false,
"ccdScheduledTasksEnabled": false,
"sidebarMode": "chat"
}
}Sección 6 y 8: Conexión con clientes LLM - "tool calling mechanisms" y MCP
1. Práctica: langchain + MCP Adapters
https://github.com/langchain-ai/langchain-mcp-adapters
Crear nuevamente la carpeta del proyecto, iniciar uv init, crear entorno con uv venv, activar y configurar:
uv add python-dotenv langchain langchain-mcp-adapters langgraph langchain-google-genai langchain-ollama isort richPara hacer tracing se deben usar las variables de entorno para el proyecto en LangSmith (se necesita que el entorno sea python >= 3.11):
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
LANGSMITH_API_KEY=aqui_va_la_api_key
LANGSMITH_PROJECT="nombre_del_proyecto_creado_en_langsmith"uv add langgraph-cli --dev
uv add "langgraph-cli[inmem]" --dev2. Práctica: Multi Server Client
Se ajustó el weather_server.py para enviarle el nombre de una ciudad y que obtenga su latitud y longitud usando geopy, y luego con esa información obtener el clima de esa ciudad usando la API de Open-Meteo.
Se debe ejecutar weather_server.py con el transport en SSE y luego en otra terminal el langchain_client.py
## Sección 7: Prompts y Resources
### 1. Práctica Prompts
https://github.com/emarco177/mcp-crash-course/tree/project/prompts
Crear nuevamente la carpeta del proyecto, iniciar uv init, crear entorno con uv venv, activar y configurar:uv add fastmcp
Luego de tener el main.py, se configura en Claude (solo sirve con transport STDIO):, "research-prompt-mcp": { "command": "c:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\MCP_Crash_Course_Udemy\\07-seccion_prompts\\prompts\\.venv\\Scripts\\python.exe", "args": ["C:\\Users\\lftob\\Documents\\PROYECTOS_ESTUDIO\\ML_Engineer\\MCP_Udemy\\MCP_Crash_Course_Udemy\\07-seccion_prompts\\prompts\\main.py"] }
Probar desde MCP Inspector con transport HTTP:
Ejecuta el main.py de prompt con el transport en HTTP y luego en otra terminal el MCP inspector:uv run main.py npx @modelcontextprotocol/inspector

### 2. Practica Resources
Cada tipo de resource tiene una forma estándar de definirse en MCP (FastMCP): https://modelcontextprotocol.info/docs/concepts/resources/
- file:///home/user/documents/report.pdf
- postgres://database/customers/schema
- screen://localhost/display1
Se verán recursos **Estáticos** y **Dinámicos**:
Configurar entorno con uv, instalar dependencias y ejecutar:uv init uv venv ".venv/Scripts/activate" uv add fastmcp
#### OBJETIVO DEL main.py:Mini Pokédex Lite - Demostración de Recursos FastMCP 2.0 (Versión Asíncrona)
Este demo enseña recursos de MCP proporcionando una interfaz simple de Pokédex. Demuestra:
- Listado estático de recursos con @mcp.resource (async)
- Plantillas dinámicas de recursos con parámetros URI (async)
- Integración con API externa usando PokeAPI (async httpx)
- Manejo de errores y respuestas JSON
- Patrones adecuados de async/await
Uso: python main.py
Recursos de MCP proporcionados:
- poke://pokemon/1 (Bulbasaur)
- poke://pokemon/4 (Charmander)
- poke://pokemon/7 (Squirtle)
- poke://pokemon/{id} (Cualquier Pokémon por ID)
Claude Desktop no soporta recursos con transport HTTP, por lo que se debe usar el transport STDIO para probarlo. Además, sólo soporta recursos estáticos.
Cursor tampoco.
**NOTA:** En el curso usan claude code que sí soporta recursos dinámicos. Como no tengo Claude Code decidí convertir los resources en toolsConfiguración del entorno:
Configuración:
uv init
uv venv
".venv/Scripts/activate"
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
uv add ipykernel --dev
uv add grandalf --dev
uv add fastapi[standard]
uv add langgraph-checkpoint-postgres
uv add psycopg psycopg-binary
uv add langchain langgraph langchain-community langchain-google-genai langchain-ollama langchain-experimental langchain-openai python-dotenv pypdf chromadb langchain-chroma "onnxruntime==1.19.2" Jinja2 También se necesatia el debugger propio de LangGraph, que puede ser instalado con ("--dev" indica que es una dependencia de desarrollo, no necesaria para producción):
uv add langgraph-cli --dev
uv add "langgraph-cli[inmem]" --devLo que se haya instalado con uv add se reflejará en el archivo pyproject.toml, y lo que se haya instalado con uv pip install no. ``uv pip install -e``
Se debe crear un archivo de configuración *"langgraph.json"*.
PARA FEBRERO DE 2026 AHORA LA VISUALIZACIÓN YA NO ES OPENSOURCE - ES CON LANGSMITH Y CUESTA
- *Crear cuenta en langsmith:*
- *Crear API de LangSmith*:
- Colocar la API Key en el archivo .env:
Ejecutar ```langgraph dev``` o con ```uv run langgraph dev```

## Clase 3: Ajuste de estructura del proyecto para uso de varios agentes
notebooks/ notebook.ipynb src/ agents/ __init__.py main.py api/ __init__.py
En el .toml se debe indicar que los paquetes se encuentran en la carpeta src, y que se deben incluir todos los archivos:
where = ["src"] include = ["*"]
Para aplicar los cambios, se debe ejecutar ```uv pip install -e .```
Para ejecutar con fastapi se debe iniciar el contenedor docker con docker compose, con el comando:
Luego lanzar con fastapi dev ruta/al/src/api/main.py
