A Model Context Protocol (MCP) server for tracking food consumption, analyzing nutrition, and managing dietary restrictions.
Food Tracker MCP integrates with the OpenFoodFacts database to provide a comprehensive food tracking system with the following features:
- Search for food products by barcode or keyword
- Analyze nutritional content of food products
- Create meal plans based on specific nutrition goals and dietary restrictions
- Track food consumption with meal logging
- Manage dietary restrictions and allergies
- Check product compatibility with user restrictions
- View food logs and nutrition summaries
- Python 3.8 or higher
pip(Python package manager)
- Clone the repository or download the
food_tracker.pyfile:
# Option 1: Clone the repository (if available)
git clone https://github.com/yourusername/food-tracker-mcp.git
cd food-tracker-mcp
# Option 2: Create a new directory and save the file there
mkdir food-tracker-mcp
cd food-tracker-mcp
# Copy food_tracker.py into this directory- Create a virtual environment (recommended):
python -m venv venv- Activate the virtual environment:
# On Windows
venv\Scripts\activate
# On macOS/Linux
source venv/bin/activate- Install the required dependencies:
pip install httpx fastmcp pydantic- Ensure the data directories are created (the script will do this automatically on first run):
mkdir -p data/users data/logsRun the server using:
python food_tracker.pyThe server will start and be ready to receive commands.
To use this MCP with Claude, you'll need to register it with the Claude platform. Here's how to do it:
-
Follow Anthropic's documentation to register your MCP:
- Visit https://console.anthropic.com/mcps or the relevant section in your Anthropic account
- Register the food-tracker MCP by providing the necessary information and endpoint
-
Once registered, you can interact with the Food Tracker through Claude by invoking the MCP's tools.
Example prompts to use with Claude:
- "Scan this barcode to see nutrition information: 3270190119357"
- "Add a peanut allergy to my dietary restrictions"
- "Log that I had a granola bar for breakfast"
- "Search for products containing 'oatmeal'"
- "Check if this product is compatible with my dietary restrictions"
- "Show me my food log for today"
This MCP provides the following tools that Claude can access:
Get detailed information about a food product using its barcode.
Parameters:
barcode: The product barcode (EAN, UPC, etc.)
Search for food products by name or description.
Parameters:
query: The search querypage: Page number for pagination (default: 1)page_size: Number of results per page (default: 10)
Manage a user's dietary restrictions.
Parameters:
user_id: The user's unique identifieraction: The action to perform (get, add, remove, update)restriction_type: Type of restriction (allergen, diet, ingredient, medical, preference)restriction_value: The specific restriction value (e.g., "peanuts", "vegetarian")severity: How severe the restriction is (avoid, limit, fatal)notes: Additional notes about the restriction
Check if a product is compatible with a user's dietary restrictions.
Parameters:
user_id: The user's unique identifierbarcode: The product barcode to check
Analyze the nutritional content of a food product.
Parameters:
barcode: The product barcode
Log food consumption for a user.
Parameters:
user_id: The user's unique identifierbarcode: The product barcodequantity: Amount consumed (default: 1 serving)meal_type: Type of meal (breakfast, lunch, dinner, snack)
Get a user's food log for a specific date.
Parameters:
user_id: The user's unique identifierdate: Date in YYYY-MM-DD format (defaults to today)
- Add a gluten allergy:
manage_user_restrictions(
user_id="user123",
action="add",
restriction_type="allergen",
restriction_value="gluten",
severity="avoid",
notes="Avoid all wheat products"
)
- Add a vegetarian diet:
manage_user_restrictions(
user_id="user123",
action="add",
restriction_type="diet",
restriction_value="vegetarian"
)
- Scan a product and log it:
# First get product info
product = get_product_by_barcode(barcode="3270190119357")
# Then log consumption
log_food_consumption(
user_id="user123",
barcode="3270190119357",
quantity=1,
meal_type="breakfast"
)
- Check compatibility with restrictions:
check_product_compatibility(
user_id="user123",
barcode="3270190119357"
)
- Get detailed nutrition analysis:
analyze_nutrition(barcode="3270190119357")
- View food log and nutrition totals:
get_user_food_log(user_id="user123")
The Food Tracker MCP stores data locally in JSON files:
- User profiles:
./data/users/{user_id}.json - Food logs:
./data/logs/{user_id}_{date}.json
You can extend the MCP by:
- Adding new nutritional analysis features
- Implementing more detailed diet plans and goals
- Adding recipe suggestions based on available ingredients
- Creating reports and visualizations of nutrition data
- Implementing social features for sharing progress
- If you encounter connection issues, ensure you have internet access as the MCP connects to the OpenFoodFacts API
- If product information is incomplete, this may be due to limitations in the OpenFoodFacts database
- For any data persistence issues, check the permissions on the data directory