| |
| """ |
| 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 |
|
|
| |
| project_root = Path(__file__).parent |
| sys.path.insert(0, str(project_root)) |
|
|
| |
| 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.""" |
| |
| |
| 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() |
| |
| |
| check_dependencies() |
| |
| |
| try: |
| import tensorus.mcp_server as mcp_server |
| |
| |
| 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: |
| |
| mcp_server.DEMO_MODE = True |
| logger.info("Running in demo mode - using mock data") |
| |
| |
| 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}") |
| |
| |
| 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() |