mcp / app.py
tensorus's picture
Rename spaces_mcp_app.py to app.py
5fe8a1a verified
#!/usr/bin/env python3
"""
Hugging Face Spaces entry point for Tensorus MCP Server.
This script provides a specialized entry point for deploying the Tensorus MCP server
to Hugging Face Spaces with proper configuration and error handling.
"""
import os
import sys
import logging
import uvicorn
from pathlib import Path
# Add the project root to Python path
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
def setup_environment():
"""Configure environment variables for Hugging Face Spaces deployment."""
# Set default values if not already configured
env_defaults = {
"TENSORUS_STORAGE_BACKEND": "in_memory",
"TENSORUS_API_KEY_HEADER_NAME": "X-API-KEY",
"TENSORUS_VALID_API_KEYS": "[]",
"TENSORUS_AUTH_JWT_ENABLED": "false",
"TENSORUS_AUTH_DEV_MODE_ALLOW_DUMMY_JWT": "false",
"PYTHONUNBUFFERED": "1"
}
for key, default_value in env_defaults.items():
if key not in os.environ:
os.environ[key] = default_value
logger.info(f"Set {key}={default_value}")
def check_dependencies():
"""Check if required dependencies are available."""
try:
import fastmcp
logger.info(f"FastMCP version: {fastmcp.__version__ if hasattr(fastmcp, '__version__') else 'unknown'}")
except ImportError:
logger.error("fastmcp is not installed. Please install it with: pip install fastmcp>=0.2.0")
sys.exit(1)
try:
import tensorus
logger.info("Tensorus package loaded successfully")
except ImportError as e:
logger.error(f"Failed to import tensorus: {e}")
sys.exit(1)
def main():
"""Main entry point for Hugging Face Spaces deployment."""
logger.info("Starting Tensorus MCP Server for Hugging Face Spaces")
# Setup environment
setup_environment()
# Check dependencies
check_dependencies()
# Import and configure the MCP server
try:
import tensorus.mcp_server as mcp_server
# Set API URL to local backend if available, otherwise demo mode
if "TENSORUS_BACKEND_URL" in os.environ:
mcp_server.API_BASE_URL = os.environ["TENSORUS_BACKEND_URL"]
logger.info(f"Using backend URL: {mcp_server.API_BASE_URL}")
else:
# Enable demo mode for standalone deployment
mcp_server.DEMO_MODE = True
logger.info("Running in demo mode - using mock data")
# Get configuration from environment
host = os.environ.get("HOST", "0.0.0.0")
port = int(os.environ.get("PORT", "7860"))
path = os.environ.get("MCP_PATH", "/mcp")
logger.info(f"Starting MCP server on {host}:{port}{path}")
# Run the MCP server using its built-in runner
mcp_server.server.run(
transport="streamable-http",
host=host,
port=port,
path=path,
log_level="info",
)
except Exception as e:
logger.error(f"Failed to start MCP server: {e}")
sys.exit(1)
if __name__ == "__main__":
main()