Spaces:
Paused
Paused
| from fastmcp import FastMCP | |
| from fastmcp.exceptions import ToolError | |
| import logging | |
| import os | |
| # Set up logging to see what's happening | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| # 1. Create a FastMCP server instance | |
| mcp = FastMCP(name="Calculator 🧮") | |
| # 2. Define tools using the @mcp.tool decorator | |
| def add(a: float, b: float) -> float: | |
| """Adds two numbers together.""" | |
| logger.info(f"Adding {a} + {b}") | |
| return a + b | |
| def multiply(a: float, b: float) -> float: | |
| """Multiplies two numbers.""" | |
| logger.info(f"Multiplying {a} * {b}") | |
| return a * b | |
| def divide(a: float, b: float) -> float: | |
| """ | |
| Divides the first number by the second. | |
| Raises an error if the second number is zero. | |
| """ | |
| logger.info(f"Dividing {a} / {b}") | |
| if b == 0: | |
| raise ToolError("Division by zero is not allowed.") | |
| return a / b | |
| # 3. Add a main block to run the server | |
| if __name__ == "__main__": | |
| port = int(os.environ.get("PORT", 7860)) | |
| logger.info(f"Starting FastMCP server on host 0.0.0.0 port {port}") | |
| try: | |
| # FastMCP only supports streamable-http transport | |
| mcp.run(transport="streamable-http", host="0.0.0.0", | |
| port=7860, | |
| path="/mcp") | |
| except Exception as e: | |
| logger.error(f"Failed to start server: {e}") | |
| raise |