Spaces:
Running
Running
File size: 1,165 Bytes
effc62f 48b28db effc62f 48b28db effc62f 48b28db |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
from mcp.server.fastmcp import FastMCP
from starlette.applications import Starlette
from starlette.routing import Mount
import contextlib
import uvicorn
# Creates a server named "Arithmetic"
mcp = FastMCP("Arithmetic")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""Multiply two numbers"""
return a * b
@mcp.tool()
def minus(a: int, b: int) -> int:
"""Subtract two numbers (a - b)"""
return a - b
@mcp.tool()
def divide(a: int, b: int) -> float:
"""Divide two numbers (a / b). Returns a float. Raises ValueError on division by zero."""
if b == 0:
raise ValueError("Division by zero is not allowed.")
return a / b
@contextlib.asynccontextmanager
async def lifespan(app: Starlette):
async with contextlib.AsyncExitStack() as stack:
await stack.enter_async_context(mcp.session_manager.run())
yield
app = Starlette(
routes=[Mount("/mcp", mcp.streamable_http_app())],
lifespan=lifespan,
)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8001) |