Skip to main content
Glama

Food MCP Server

Food MCP Server - StreamableHTTP Architecture with Structured Output

A Model Context Protocol (MCP) server providing comprehensive food hierarchy and nutrition data with structured output using Pydantic schemas, served over StreamableHTTP transport.

๐Ÿ—๏ธ Architecture

This server uses the MCP Python SDK with StreamableHTTP transport for web-based access, providing structured output through Pydantic schemas that ensure consistent data validation and serialization.

Key Features

  • Structured Output: All tool responses use Pydantic schemas for validation and serialization

  • StreamableHTTP Transport: Web-accessible MCP server with StreamableHTTP transport

  • MongoDB Atlas Integration: Cloud-based data storage for scalability

  • Docker Support: Containerized deployment with optimized builds

  • Comprehensive Tools: 11 tools covering food hierarchy and nutrition data

๐Ÿ› ๏ธ Available Tools

Food Hierarchy Tools

  1. get_all_food_hierarchy - Complete food hierarchy dataset

  2. get_categories - List all food categories

  3. get_subcategories - Subcategories for a category

  4. get_food_items - Food items in category/subcategory

  5. search_food - Search food items by keyword

  6. find_food_category - Find category for specific food

  7. list_all_foods - All unique food names

  8. food_stats - Dataset statistics

Food Nutrition Tools

  1. list_food_names - Foods with nutrition data

  2. get_food_nutrition - Complete nutrition info for food

  3. search_food_nutrition - Search nutrition by keyword

๐Ÿ“Š Structured Output Schemas

All tools return structured data using Pydantic schemas:

Food Hierarchy Schemas (schemas/food_hierarchy.py)

  • FoodHierarchyResponse - Complete hierarchy data

  • FoodCategoriesResponse - Category listings

  • FoodSearchResponse - Search results with context

  • FoodStats - Dataset statistics

Food Nutrition Schemas (schemas/food_item.py)

  • FoodNutritionResponse - Complete nutrition data

  • FoodNutrition - Detailed nutrition with serving sizes

  • ServingInfo - Structured serving size information

๐Ÿš€ Quick Start

Local Development

  1. Set up environment:

    pip install -r requirements.txt cp .env.example .env # Add your MONGODB_URI
  2. Test the schemas:

    python3 test_server.py
  3. Run the server:

    python3 run_server.py # Server will start on http://localhost:8000
  4. Test with MCP Inspector:

    npx @modelcontextprotocol/inspector http://localhost:8000/mcp
  5. Access endpoints:

    • MCP StreamableHTTP endpoint: http://localhost:8000/mcp

    • The server includes CORS headers for browser access

    • The server will log startup information including the listening address

Docker Deployment

  1. Build the image:

    docker build -t food-mcp-server .
  2. Run with environment:

    docker run -e MONGODB_URI="your_mongodb_uri" -p 8000:8000 food-mcp-server
  3. Use docker-compose:

    docker-compose up --build

๐Ÿ”ง Configuration

Set the following environment variables:

  • MONGODB_URI - MongoDB Atlas connection string (required)

  • PYTHONPATH - Set to /app in container

  • PYTHONUNBUFFERED - Set to 1 for real-time logging

๐Ÿ“‹ Example Tool Responses

Structured Categories Response

{ "categories": ["Vegetables", "Fruits", "Proteins"], "total_count": 3 }

Structured Nutrition Response

{ "requested_name": "Apple", "found": true, "nutrition": { "name": "Apple", "display_portion_calories": 95, "display_portion_size": "1 medium", "nutrients": { "calories": 95, "protein_g": 0.5, "carbs_g": 25.0, "fiber_g": 4.0 } } }

๐Ÿ”„ Migration from FastMCP

This server replaces the previous FastMCP implementation with several advantages:

  1. Better Control: Low-level server provides complete control over MCP protocol

  2. Structured Output: Pydantic schemas ensure consistent response format

  3. Type Safety: Full type checking and validation

  4. Better Debugging: Direct access to MCP internals for troubleshooting

  5. Production Ready: Designed for production deployment scenarios

๐Ÿงช Testing

Run the test suite to verify everything works:

python3 test_server.py

Tests cover:

  • Pydantic schema validation

  • JSON schema generation for tool definitions

  • Structured data serialization

  • Response format consistency

๐Ÿ“š Development

Project Structure

โ”œโ”€โ”€ server.py # Main MCP server implementation โ”œโ”€โ”€ run_server.py # Entry point script โ”œโ”€โ”€ schemas/ # Pydantic response schemas โ”‚ โ”œโ”€โ”€ food_hierarchy.py # Hierarchy tool schemas โ”‚ โ””โ”€โ”€ food_item.py # Nutrition tool schemas โ”œโ”€โ”€ services/ # Business logic services โ”œโ”€โ”€ utils/ # Database and utilities โ”œโ”€โ”€ test_server.py # Test suite โ”œโ”€โ”€ Dockerfile # Container configuration โ””โ”€โ”€ docker-compose.yml # Simple deployment config

Adding New Tools

  1. Define Pydantic schema in schemas/

  2. Add tool definition in handle_list_tools()

  3. Implement handler in handle_call_tool()

  4. Return CallToolResult with structured content

  5. Add tests in test_server.py

๐Ÿš€ Production Deployment

The server is production-ready with:

  • Security: Non-root user in Docker container

  • Logging: Structured logging with appropriate levels

  • Error Handling: Comprehensive error responses

  • Health Checks: Docker health check configuration

  • Resource Management: Multi-stage Docker builds for smaller images

๐Ÿ“– MCP Protocol Compliance

This server fully implements the MCP specification:

  • stdio Transport: Standard input/output communication

  • Tool Discovery: Dynamic tool listing with schemas

  • Structured Responses: Consistent response format

  • Error Handling: Proper error response structure

  • Lifecycle Management: Proper initialization and cleanup

๐Ÿค Contributing

  1. Follow the existing Pydantic schema patterns

  2. Add comprehensive tests for new features

  3. Ensure Docker builds pass

  4. Update documentation for new tools

-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Provides comprehensive food hierarchy and nutrition data through structured tools that enable searching foods, browsing categories, and retrieving detailed nutritional information from a MongoDB Atlas database.

  1. ๐Ÿ—๏ธ Architecture
    1. Key Features
  2. ๐Ÿ› ๏ธ Available Tools
    1. Food Hierarchy Tools
    2. Food Nutrition Tools
  3. ๐Ÿ“Š Structured Output Schemas
    1. Food Hierarchy Schemas (schemas/food_hierarchy.py)
    2. Food Nutrition Schemas (schemas/food_item.py)
  4. ๐Ÿš€ Quick Start
    1. Local Development
    2. Docker Deployment
  5. ๐Ÿ”ง Configuration
    1. ๐Ÿ“‹ Example Tool Responses
      1. Structured Categories Response
      2. Structured Nutrition Response
    2. ๐Ÿ”„ Migration from FastMCP
      1. ๐Ÿงช Testing
        1. ๐Ÿ“š Development
          1. Project Structure
          2. Adding New Tools
        2. ๐Ÿš€ Production Deployment
          1. ๐Ÿ“– MCP Protocol Compliance
            1. ๐Ÿค Contributing

              MCP directory API

              We provide all the information about MCP servers via our MCP API.

              curl -X GET 'https://glama.ai/api/mcp/v1/servers/MacroSense-AI/dietician-mcp'

              If you have feedback or need assistance with the MCP directory API, please join our Discord server