LeoWalker's picture
mcp_prompts: lean, tool-first prompts; remove schema helpers; unify registration; normalize ASCII arrows
a4e6b6b
"""FoodWise MCP Server - Minimal FastMCP Implementation.
This follows FastMCP best practices for simplicity and maintainability.
Configuration is handled via environment variables or CLI arguments.
Usage:
# Basic usage
python -m foodwise.mcp_server
# With custom log level
MCP_LOG_LEVEL=DEBUG python -m foodwise.mcp_server
# Using FastMCP CLI with different transports
fastmcp run src/foodwise/mcp_server/main.py
fastmcp run src/foodwise/mcp_server/main.py --transport http --port 8080
"""
import os
import sys
from pathlib import Path
# Add the src directory to Python path to ensure imports work
src_path = Path(__file__).parent.parent.parent
sys.path.insert(0, str(src_path))
# Ensure environment variables from .env are available when running directly
try:
from dotenv import load_dotenv
# Load from project root if present
project_root = Path(__file__).resolve().parents[3]
env_path = project_root / ".env"
if env_path.exists():
load_dotenv(env_path)
else:
load_dotenv()
except Exception:
# Continue without dotenv if not installed
pass
from fastmcp import FastMCP
from .fastmcp_tools import register_inventory_tools, register_shopping_tools
from .fastmcp_resources import register_resources, register_shopping_resources
from .fastmcp_prompts import register_prompts
# Create the MCP server - FastMCP handles all configuration automatically
# Server name can be overridden via MCP_SERVER_NAME environment variable
server_name = os.getenv("MCP_SERVER_NAME", "FoodWise")
mcp = FastMCP(server_name)
# Register all MCP primitives
register_inventory_tools(mcp)
register_shopping_tools(mcp)
register_resources(mcp)
register_shopping_resources(mcp)
register_prompts(mcp)
# FastMCP best practice: only run when executed directly, not when imported
if __name__ == "__main__":
# FastMCP handles transport, logging, and all other configuration
# Use CLI arguments or environment variables for customization:
# - MCP_LOG_LEVEL=DEBUG for verbose logging
# - fastmcp run main.py --transport http for HTTP transport
mcp.run()