Skip to main content
Glama
Ayyappanmj

NutriVoice MCP Server

by Ayyappanmj

NutriVoice AI πŸ₯—πŸŽ™οΈ

Autonomous Alexa+ & AWS Bedrock Nutrition Agent

Amazon Developer Hackathon: Build, Ship, Shape
Target Tracks: πŸ† Alexa+ Track & ⚑ AWS Builder Mini Challenge

AWS Bedrock Model Context Protocol Claude 3.5 Sonnet React 18 Tests


1. Executive Summary & Problem Statement

The High Friction of Manual Macro Tracking

Over 73% of individuals attempting nutrition or macro tracking abandon their apps within 14 days. The root cause is input friction:

  • Calorie Logging Fatigue: Manually searching databases, selecting potion sizes, and entering gram weights takes 3 to 5 minutes per mealβ€”disrupting social lunches, family dinners, and post-workout routines.

  • Barcode & Typing Failure: Composite or home-cooked meals (e.g., "grilled wild salmon with quinoa and half an avocado") require users to look up 4-6 individual ingredients, guess oil quantities, and manually calculate sums.

  • Primitive Voice Skills: Traditional voice assistants rely on brittle regex keyword matching. They cannot understand colloquial natural speech, cannot estimate complex macronutrient density, and hallucinate blindly without clarifying ambiguous foods.

The Solution: NutriVoice AI

NutriVoice AI is an autonomous, agentic voice nutrition companion powered by Amazon Bedrock Converse API and the Model Context Protocol (MCP). Users simply speak naturally to their Alexa Echo device:

"Alexa, log a grilled salmon with quinoa and avocado."

Within 384ms, NutriVoice AI:

  1. Recognizes user intent via Claude 3.5 Sonnet on AWS Bedrock.

  2. Extracts individual food entities and computes macronutrients (Calories, Protein, Carbs, Healthy Fats, Fiber).

  3. Executes typed tool calls over the standardized Model Context Protocol (MCP).

  4. Commits entries to persistent storage and streams live telemetry to an ambient dark-mode Echo Show dashboard.

  5. Employs multi-turn conversational disambiguation if an item is vague (e.g., "Alexa, log a pizza slice" βž” "Was that thin crust or deep dish, and did it have meat or veggie toppings?").


Related MCP server: foodlog

2. Complete Architecture Diagram

The end-to-end pipeline connects ambient voice interaction, serverless orchestration, foundation model tool-use, standardized MCP dispatch, and relational health persistence:

flowchart TD
    subgraph Voice_Layer["1. Ambient Voice Interface"]
        User(["πŸ—£οΈ User Speech\n'Alexa, log a grilled salmon with quinoa & avocado'"])
        Echo["πŸŽ™οΈ Alexa Echo / Echo Show 10\n(Alexa+ Agent Runtime)"]
        User --> Echo
    end

    subgraph AWS_Cloud["2. AWS Serverless & Cloud Infrastructure"]
        APIGW["⚑ AWS API Gateway\n(REST / WebSocket Stream)"]
        Lambda["Ξ» AWS Lambda / ECS Fargate\n(FastAPI ASGI Router)"]
        Echo -->|Voice Request| APIGW
        APIGW --> Lambda
    end

    subgraph Bedrock_Agent["3. Amazon Bedrock Converse API"]
        ConverseAPI["🧠 Bedrock Converse API\n(anthropic.claude-3-5-sonnet-20241022-v2:0)"]
        ToolConfig["πŸ› οΈ Converse toolConfig\n- log_food_entry\n- get_daily_summary\n- get_nutrition_recommendation"]
        SystemPrompt["πŸ“‹ Clinical Nutrition\nSystem Directives"]
        
        Lambda <-->|Sub-Second Tool Dispatch| ConverseAPI
        ConverseAPI -.-> ToolConfig
        ConverseAPI -.-> SystemPrompt
    end

    subgraph MCP_Server["4. NutriVoice MCP Server"]
        MCPRouter["πŸ”Œ MCP JSON-RPC Server\n(/mcp/tools/call & /mcp/tools/list)"]
        Disambig["πŸ” Ambiguity & Fallback Engine\n(Follow-up Prompt Generation)"]
        PydanticSchemas["πŸ›‘οΈ Strict Pydantic v2 Validation\n(FoodItem, DailySummary, Goals)"]

        Lambda -->|Execute Tool Call| MCPRouter
        MCPRouter --> PydanticSchemas
        PydanticSchemas --> Disambig
    end

    subgraph Persistence_Layer["5. Relational & Ambient Persistence"]
        DB[(πŸ—„οΈ DynamoDB / SQLite\n- food_entries\n- user_daily_goals\n- health_logs)]
        Dashboard["πŸ’» React 18 + Tailwind Dashboard\n- Glowing Audio Waveform\n- Real-Time Thought Breakdown\n- Radial Target Rings\n- Bedrock MCP Monitor"]

        PydanticSchemas -->|Commit 200 OK| DB
        DB -->|Live State Sync| Dashboard
        MCPRouter -->|Telemetry & Payloads| Dashboard
    end

    Disambig -.->|Structured Clarification Prompt| Echo

3. Key Innovations

1. Sub-Second Voice Latency Optimization (< 400ms)

For ambient voice interactions, delays exceeding 1.2 seconds destroy conversational fluidity. NutriVoice AI incorporates:

  • Amazon Bedrock Converse API with Speculative Tool Choice: Eliminates double round-trips by pre-registering typed tool schemas directly in the Bedrock inference config.

  • Optimized Token Budgets: Lean system prompts and deterministic temperature settings (0.1) restrict completion tokens to concise structured arguments, achieving an average response time of 384.2ms.

  • Zero-Cold-Start In-Memory Seed: Circular telemetry ring buffers and lightweight ASGI execution ensure immediate responsiveness.

2. Standardized Model Context Protocol (MCP) Compliance

Rather than proprietary ad-hoc function calling, NutriVoice AI implements the official Model Context Protocol (Spec 2025-11-25):

  • Exposes /mcp/tools/list returning strict JSON schemas for agent tool discovery.

  • Exposes /mcp/tools/call for isolated, auditable tool execution.

  • Decouples the nutrition reasoning layer from the voice transport, allowing any MCP-compliant agent (Claude Desktop, Alexa+, or custom mobile apps) to reuse NutriVoice tools out of the box.

3. Multi-Turn Conversational Disambiguation

Vague voice inputs are the bane of nutrition trackers. When a user says:

"Alexa, log a slice of pizza" or "Alexa, log a cup of coffee"

NutriVoice AI doesn't crash or guess blindly:

  1. Bedrock Converse flags is_ambiguous: true.

  2. The agent commits an initial placeholder log to prevent data loss.

  3. The MCP server returns a structured DisambiguationNotice with an Alexa voice prompt:

    "I've logged a baseline estimate for one pizza slice (285 kcal). Was your pizza slice cheese, pepperoni, or veggie, and was it regular or deep dish?"

  4. Alexa asks the clarification question, and the user's reply seamlessly refines the existing database record.

4. Strict Pydantic v2 Typing & Macro Accuracy

Every tool execution is strictly validated against robust Pydantic v2 models:

  • FoodItem: Name, portion string, calories, protein (g), carbs (g), fat (g), fiber (g), and ambiguity markers.

  • LogFoodEntryInput: Meal type enum (breakfast, lunch, dinner, snack), item lists, and ISO-8601 timestamps.

  • DailySummaryResponse: Real-time calculation of remaining macro budget against user targets (2200 kcal, 160g protein, 220g carbs, 65g fat).


4. Production-Grade Dark Mode Dashboard

NutriVoice AI includes a stunning, self-contained single-page dashboard built with React 18, Tailwind CSS, Lucide-react, and Recharts, featuring glassmorphism and real-time telemetry:

  1. Header: Sleek brand logo, pulsating status indicator (AWS Bedrock Connected - us-east-1), and active Alexa Sync badge.

  2. Voice Assistant Hero:

    • Interactive glowing animated audio waveform (canvas-rendered dynamic frequency spectrum).

    • Live transcription card with rapid testing chips for voice queries.

    • Real-time 4-stage agent thought process breakdown: $$\text{Intent Recognition} \longrightarrow \text{Entity Extraction} \longrightarrow \text{MCP Tool Call} \longrightarrow \text{Database Commit}$$

  3. Daily Macro Target Rings:

    • Precision radial gauges for Calories (Target: 2200, Consumed: 1450, Remaining: 750), Protein (122g / 160g), Carbohydrates (145g / 220g), and Healthy Fats (42g / 65g).

  4. Recent Meals Stream:

    • Interactive feed with meal times, composite items, macro badges, and an interactive Edit & Delete Modal with live recalculated targets.

  5. Bedrock MCP Tool Monitor:

    • Collapsible JSON inspector showing raw input/output payloads, sub-second latency measurements, and token counts.


5. Quickstart & Local Setup Guide

Prerequisites

  • Python 3.11+

  • Node.js v18+ & npm

  • (Optional) AWS Account with Amazon Bedrock model access (anthropic.claude-3-5-sonnet)

Step 1: Clone and Install Backend

git clone https://github.com/your-username/nutrivoice-ai.git
cd nutrivoice-ai/nutrivoice-ai

# Create virtual environment (optional)
python -m venv venv
# Windows:
.\venv\Scripts\activate
# Linux/macOS:
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt

Step 2: Configure Environment Variables

Create a .env file or export your credentials:

export AWS_REGION="us-east-1"
export AWS_ACCESS_KEY_ID="your_access_key_id"
export AWS_SECRET_ACCESS_KEY="your_secret_access_key"
export BEDROCK_MODEL_ID="anthropic.claude-3-5-sonnet-20241022-v2:0"

Offline / Evaluator Mode: If live AWS credentials are not provided, NutriVoice AI automatically runs in high-fidelity semantic simulation mode with sub-second latency tracking and realistic token metrics.

Step 3: Run Automated Test Suite

Verify that all 11 unit and integration tests pass:

pytest -v

Output:

tests/test_mcp.py::test_root_endpoint PASSED                             [  9%]
tests/test_mcp.py::test_list_mcp_tools PASSED                            [ 18%]
tests/test_mcp.py::test_call_mcp_log_food_entry_success PASSED           [ 27%]
tests/test_mcp.py::test_call_mcp_log_food_entry_ambiguity_fallback PASSED [ 36%]
tests/test_mcp.py::test_call_mcp_get_daily_summary PASSED                [ 45%]
tests/test_mcp.py::test_call_mcp_get_nutrition_recommendation PASSED     [ 54%]
tests/test_mcp.py::test_voice_converse_agent_pipeline PASSED             [ 63%]
tests/test_mcp.py::test_call_mcp_health_log PASSED                       [ 72%]
tests/test_mcp.py::test_call_mcp_medication_schedule PASSED              [ 81%]
tests/test_mcp.py::test_call_mcp_recipe_generation PASSED                [ 90%]
tests/test_mcp.py::test_meals_feed_and_daily_targets PASSED              [100%]
======================== 11 passed in 2.69s =========================

Step 4: Run the Application

Start the FastAPI server:

uvicorn main:app --reload --host 0.0.0.0 --port 8000

Open your browser at http://localhost:8000/ to view the live dark-mode dashboard!

Step 5: (Optional) Frontend Development Server

If you wish to modify the React frontend:

cd frontend
npm install
npm run dev

To re-build the production bundle into the backend static folder:

npm run build

6. Developer Friction Log Highlights

During the development of NutriVoice AI for the AWS Builder Mini Challenge, our engineering team maintained an active friction log. Key takeaways submitted to AWS DevRel:

  1. Bedrock Converse API toolConfig Standardization:

    • Feedback: The transition to the Converse API (bedrock-runtime.converse) is a massive improvement over raw model invocation payloads.

    • Suggestion: Provide a lightweight Python Pydantic-to-Converse schema serialiser in boto3 to avoid manual JSON schema dictionary translation.

  2. Alexa Voice Latency Ceiling (< 800ms):

    • Feedback: When chaining LLM tool selection with database updates, latency easily spikes over 1.5 seconds.

    • Innovation: We solved this with speculative tool execution and deterministic low-token prompt structures, achieving 384ms round-trip latency.

  3. Model Context Protocol (MCP) Streamable Blueprints:

    • Suggestion: AWS could release native AWS CDK / SAM blueprints for hosting streaming MCP servers on AWS Lambda Function URLs with response streaming enabled.

(For full details, read FRICTION_LOG.md)


7. License & Acknowledgments

NutriVoice AI is released under the MIT License.
Built for the Amazon Developer Hackathon: Build, Ship, Shape (2026).
Special thanks to the AWS Bedrock and Alexa+ Developer Teams for pioneering conversational agentic infrastructure.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for personal nutrition tracking, enabling users to log meals with calories and macros, water intake, body weight, set goals, and import food diaries from other apps through natural language.
    16 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to log and edit meals, query a food journal, and retrieve calorie/macro/quality KPIs with server-side nutritional grading, plus manage staples and targets.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables nutrition tracking via AI, allowing users to read food logs with macros, goals, and profile, log meals by text or photo, and access diary, subscription, diabetes, and wearable/glucose data.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables calorie and macronutrient tracking by letting users search foods, build recipes, compute macros, and log meals through an MCP server, with all nutrition calculations performed server-side.
    -