from datetime import datetime
from mcp.server.fastmcp import Context
from mcp.types import ToolAnnotations
from mcp_use.server import MCPServer
server = MCPServer(name="Calculator Server", version="1.0.0")
@server.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@server.tool(
name="divide",
annotations=ToolAnnotations(readOnlyHint=True)
)
def safe_divide(a: float, b: float) -> float:
"""Safely divide two numbers."""
if b == 0:
raise ValueError("Division by zero")
return a / b
@server.tool()
async def batch_calculate(
operations: list[dict],
context: Context
) -> list[float]:
"""Perform multiple calculations with progress."""
results = []
for i, op in enumerate(operations):
await context.report_progress(i, len(operations))
if op["type"] == "add":
results.append(op["a"] + op["b"])
elif op["type"] == "multiply":
results.append(op["a"] * op["b"])
return results
if __name__ == "__main__":
server.run(transport="streamable-http", debug=True)