You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/examples/mcp_example/math_server.py

70 lines
2.3 KiB

import logging
from fastmcp import FastMCP
from litellm import LiteLLM
# Configure logging
logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)
# Initialize MCP server for math operations
mcp = FastMCP("Math-Server")
@mcp.tool(name="add", description="Add two numbers")
def add(a: float, b: float) -> float:
try:
result = float(a) + float(b)
return result
except (ValueError, TypeError) as e:
logger.error(f"Invalid input types for addition: {e}")
raise ValueError("Inputs must be valid numbers")
except Exception as e:
logger.error(f"Unexpected error in add operation: {e}")
raise
@mcp.tool(name="subtract", description="Subtract b from a")
def subtract(a: float, b: float) -> float:
try:
result = float(a) - float(b)
return result
except (ValueError, TypeError) as e:
logger.error(f"Invalid input types for subtraction: {e}")
raise ValueError("Inputs must be valid numbers")
except Exception as e:
logger.error(f"Unexpected error in subtract operation: {e}")
raise
@mcp.tool(name="multiply", description="Multiply two numbers together")
def multiply(a: float, b: float) -> float:
try:
result = float(a) * float(b)
return result
except (ValueError, TypeError) as e:
logger.error(f"Invalid input types for multiplication: {e}")
raise ValueError("Inputs must be valid numbers")
except Exception as e:
logger.error(f"Unexpected error in multiply operation: {e}")
raise
@mcp.tool(name="divide", description="Divide a by b")
def divide(a: float, b: float) -> float:
try:
if float(b) == 0:
raise ZeroDivisionError("Cannot divide by zero")
result = float(a) / float(b)
return result
except (ValueError, TypeError) as e:
logger.error(f"Invalid input types for division: {e}")
raise ValueError("Inputs must be valid numbers")
except ZeroDivisionError as e:
logger.error(f"ZeroDivisionError: {e}")
raise
except Exception as e:
logger.error(f"Unexpected error in divide operation: {e}")
raise
if __name__ == "__main__":
print("Starting Math Server on port 6274...")
llm = LiteLLM(model_name="gpt-4o-mini")
mcp.run(transport="sse", host="0.0.0.0", port=6274)