Los recursos en los servidores MCP te permiten exponer datos a los clientes, de manera similar a los manejadores de solicitudes GET en un servidor HTTP típico. Son perfectos para escenarios en los que necesitas obtener información en lugar de realizar acciones.
Entendiendo los recursos
Piensa en los recursos como endpoints de solo lectura que pueden devolver cualquier tipo de dato: cadenas de texto, JSON, archivos binarios, etc. Estableces un 'mime_type' para darle al cliente una pista sobre qué tipo de datos estás devolviendo.

Los recursos funcionan exponiendo datos a través de URIs (esencialmente direcciones). Cuando un cliente necesita datos, envía una ReadResourceRequest con la URI específica, y tu servidor responde con la información solicitada.
Dos tipos de recursos
Hay dos tipos principales de recursos que puedes crear:
- Recursos directos - Tienen URIs estáticas que no contienen ningún parámetro (como
docs://documents) - Recursos con plantilla - Incluyen parámetros en sus URIs (como
docs://documents/{doc_id})

Para los recursos con plantilla, el SDK de Python analiza automáticamente los parámetros de la URI y los pasa como argumentos de palabra clave a tu función. El nombre del parámetro en la URI se convierte en el nombre del argumento en tu función.
Implementando recursos
Crear recursos es sencillo usando el decorador @mcp.resource(). Así es como se implementan ambos tipos:
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())
@mcp.resource(
"docs://documents/{doc_id}",
mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]El SDK de Python de MCP serializa automáticamente lo que devuelvas. No necesitas convertir manualmente los datos a cadenas JSON; simplemente devuelve la estructura de datos de Python apropiada.
Probando tus recursos
Puedes probar los recursos usando la herramienta MCP Inspector. Inicia tu servidor con uv run mcp dev mcp_server.py y navega a la interfaz web.

El inspector separa los recursos directos de los recursos con plantilla. Los recursos directos aparecen en la sección principal "Resources", mientras que los recursos con plantilla aparecen bajo "Resource Templates". Puedes hacer clic en cualquier recurso para probarlo y ver la estructura exacta de la respuesta que devuelve tu servidor.
Casos de uso prácticos
Los recursos son ideales para:
- Proporcionar datos de autocompletado (como listas de documentos)
- Obtener contenido de archivos o registros de bases de datos
- Exponer datos de configuración
- Servir cualquier información de solo lectura que tu cliente necesite
La ventaja clave es que los recursos permiten a los clientes obtener datos de forma proactiva sin depender de herramientas o interacciones complejas. Esto los hace perfectos para funciones como las menciones de documentos, donde quieres inyectar automáticamente contenido en los prompts basándote en las referencias del usuario.