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:

  1. search_foods: Buscar alimentos usando palabras clave con filtros opcionales por tipo de datos, marca, rango de fechas, etc.
  2. get_food_details: Obtener información nutricional y de ingredientes completa para un alimento específico por ID de FDC
  3. get_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

  1. Instala uv si no lo tienes:

    pip install uv
    
  2. Clona este repositorio:

    git clone https://github.com/FelipeAdachi/mcp-food-data-central.git
    cd food-data-central-mcp
    
  3. Crea un entorno virtual:

    uv venv
    
  4. Instala las dependencias:

    uv pip install -e .
    
  5. Crea un archivo .env basado en env.example:

    cp env.example .env
    
  6. Configura tus variables de entorno en el archivo .env (consulta la sección de Configuración)

Usando Docker (Recomendado)

  1. Construye la imagen de Docker:

    docker build -t food-data-central-mcp --build-arg PORT=8050 .
    
  2. Crea un archivo .env basado en env.example y configura tus variables de entorno

Configuración

Las siguientes variables de entorno se pueden configurar en tu archivo .env:

VariableDescripciónEjemplo
USDA_API_KEYTu clave de API de FoodData Central del USDAyour_api_key_here
TRANSPORTProtocolo de transporte (sse o stdio)sse
HOSTHost al que vincularse al usar transporte SSE0.0.0.0
PORTPuerto para escuchar al usar transporte SSE8050

Cómo Obtener Tu Clave de API

  1. Visita la Guía de API de FoodData Central del USDA
  2. Regístrate para obtener una clave de API gratuita
  3. Agrega la clave a tu archivo .env como USDA_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 serverUrl en lugar de url en 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.