FoodData Central
Accede a la base de datos FoodData Central del USDA para obtener información completa sobre alimentos y nutrientes.
Documentación
Food Data Central MCP Server
Un servidor de Model Context Protocol (MCP) para acceder a la base de datos FoodData Central del USDA. Este servidor proporciona a los agentes de IA la capacidad de buscar alimentos, obtener información nutricional detallada y acceder a datos completos de alimentos de la base de datos del USDA.
Descripción general
Este proyecto demuestra cómo construir un servidor MCP que permite a los agentes de IA acceder a la API de FoodData Central del USDA. Permite buscar alimentos, recuperar información nutricional detallada y acceder a datos completos de alimentos mediante búsqueda por palabras clave y consultas estructuradas.
Este proyecto se basa en el excelente proyecto MCP-Mem0 de Cole Medin y en el Servidor MCP de Food Data Central de jlfwong.
Características
El servidor proporciona tres herramientas esenciales de acceso a datos de alimentos:
search_foods: Buscar alimentos usando palabras clave con filtros opcionales por tipo de datos, marca, rango de fechas, etc.get_food_details: Obtener información nutricional y de ingredientes completa para un alimento específico por ID de FDCget_multiple_foods: Recuperar información detallada para múltiples alimentos a la vez (hasta 20 elementos)
Requisitos previos
- Python 3.12+
- Clave de API del USDA (gratuita en FoodData Central)
- Docker si se ejecuta el servidor MCP como contenedor (recomendado)
Instalación
Usando uv
-
Instala uv si no lo tienes:
pip install uv -
Clona este repositorio:
git clone https://github.com/FelipeAdachi/mcp-food-data-central.git cd food-data-central-mcp -
Crea un entorno virtual:
uv venv -
Instala las dependencias:
uv pip install -e . -
Crea un archivo
.envbasado enenv.example:cp env.example .env -
Configura tus variables de entorno en el archivo
.env(consulta la sección de Configuración)
Usando Docker (Recomendado)
-
Construye la imagen de Docker:
docker build -t food-data-central-mcp --build-arg PORT=8050 . -
Crea un archivo
.envbasado enenv.exampley configura tus variables de entorno
Configuración
Las siguientes variables de entorno se pueden configurar en tu archivo .env:
| Variable | Descripción | Ejemplo |
|---|---|---|
USDA_API_KEY | Tu clave de API de FoodData Central del USDA | your_api_key_here |
TRANSPORT | Protocolo de transporte (sse o stdio) | sse |
HOST | Host al que vincularse al usar transporte SSE | 0.0.0.0 |
PORT | Puerto para escuchar al usar transporte SSE | 8050 |
Cómo Obtener Tu Clave de API
- Visita la Guía de API de FoodData Central del USDA
- Regístrate para obtener una clave de API gratuita
- Agrega la clave a tu archivo
.envcomoUSDA_API_KEY
Ejecutar el Servidor
Usando uv
Transporte SSE
# Set TRANSPORT=sse in .env then:
uv run src/main.py
El servidor MCP se ejecutará esencialmente como un endpoint de API al que puedes conectarte con la configuración que se muestra a continuación.
Transporte Stdio
Con stdio, el propio cliente MCP puede iniciar el servidor MCP, por lo que no hay nada que ejecutar en este punto.
Usando Docker
Transporte SSE
docker run --env-file .env -p 8050:8050 food-data-central-mcp
El servidor MCP se ejecutará esencialmente como un endpoint de API dentro del contenedor al que puedes conectarte con la configuración que se muestra a continuación.
Transporte Stdio
Con stdio, el propio cliente MCP puede iniciar el contenedor del servidor MCP, por lo que no hay nada que ejecutar en este punto.
Integración con Clientes MCP
Configuración SSE
Una vez que tengas el servidor ejecutándose con transporte SSE, puedes conectarte a él usando esta configuración:
{
"mcpServers": {
"food-data-central": {
"transport": "sse",
"url": "http://localhost:8050/sse"
}
}
}
Nota para usuarios de Windsurf: Usa
serverUrlen lugar deurlen tu configuración:{ "mcpServers": { "food-data-central": { "transport": "sse", "serverUrl": "http://localhost:8050/sse" } } }
Nota para usuarios de n8n: Usa host.docker.internal en lugar de localhost, ya que n8n debe alcanzar fuera de su propio contenedor hacia la máquina host:
Entonces la URL completa en el nodo MCP sería: http://host.docker.internal:8050/sse
Asegúrate de actualizar el puerto si estás usando un valor diferente al predeterminado de 8050.
Python con Configuración Stdio
Agrega este servidor a tu configuración MCP para Claude Desktop, Windsurf o cualquier otro cliente MCP:
{
"mcpServers": {
"food-data-central": {
"command": "your/path/to/food-data-central-mcp/.venv/Scripts/python.exe",
"args": ["your/path/to/food-data-central-mcp/src/main.py"],
"env": {
"TRANSPORT": "stdio",
"USDA_API_KEY": "YOUR-API-KEY"
}
}
}
}
Docker con Configuración Stdio
{
"mcpServers": {
"food-data-central": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "TRANSPORT",
"-e", "USDA_API_KEY",
"food-data-central-mcp"],
"env": {
"TRANSPORT": "stdio",
"USDA_API_KEY": "YOUR-API-KEY"
}
}
}
}
Ejemplos de Uso
Buscar Alimentos
# Search for cheese products
search_foods(query="cheddar cheese", page_size=10)
# Search for branded foods from a specific company
search_foods(query="yogurt", data_type=["Branded"], brand_owner="Dannon")
# Search with date filtering
search_foods(query="organic apple", start_date="2023-01-01", end_date="2023-12-31")
Obtener Detalles de un Alimento
# Get full details for a specific food item
get_food_details(fdc_id=534358)
# Get abridged details with specific nutrients only
get_food_details(fdc_id=534358, format_type="abridged", nutrients=[203, 204, 205])
Obtener Múltiples Alimentos
# Get details for multiple foods at once
get_multiple_foods(fdc_ids=[534358, 373052, 616350])
Referencia de la API
El servidor proporciona acceso a los endpoints de la API de FoodData Central del USDA:
- Buscar Alimentos (
/v1/foods/search) - Detalles de Alimentos (
/v1/food/{fdcId}) - Múltiples Alimentos (
/v1/foods)
Todos los datos devueltos siguen el esquema oficial de la API de FoodData Central del USDA e incluyen información nutricional completa, ingredientes, tamaños de porción y más.
Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENSE para más detalles.