initial mcp server setup
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
"""
|
||||
Mathematical Tools for MCP
|
||||
"""
|
||||
from typing import List
|
||||
from ..core.types import MCPTool
|
||||
|
||||
|
||||
class MathTools:
|
||||
"""Collection of mathematical tools"""
|
||||
|
||||
@staticmethod
|
||||
def get_tools() -> List[MCPTool]:
|
||||
"""Get all math tools"""
|
||||
return [
|
||||
MathTools._create_add_tool(),
|
||||
MathTools._create_subtract_tool(),
|
||||
MathTools._create_multiply_tool(),
|
||||
MathTools._create_divide_tool(),
|
||||
MathTools._create_power_tool(),
|
||||
MathTools._create_square_root_tool(),
|
||||
MathTools._create_calculate_bmi_tool(),
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def _create_add_tool() -> MCPTool:
|
||||
"""Create addition tool"""
|
||||
async def add(a: float, b: float) -> float:
|
||||
"""Add two numbers together"""
|
||||
return a + b
|
||||
|
||||
return MCPTool(
|
||||
name="add",
|
||||
description="Add two numbers together",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {"type": "number", "description": "First number"},
|
||||
"b": {"type": "number", "description": "Second number"},
|
||||
},
|
||||
"required": ["a", "b"],
|
||||
},
|
||||
handler=add,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_subtract_tool() -> MCPTool:
|
||||
"""Create subtraction tool"""
|
||||
async def subtract(a: float, b: float) -> float:
|
||||
"""Subtract second number from first"""
|
||||
return a - b
|
||||
|
||||
return MCPTool(
|
||||
name="subtract",
|
||||
description="Subtract second number from first",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {"type": "number", "description": "First number"},
|
||||
"b": {"type": "number", "description": "Number to subtract"},
|
||||
},
|
||||
"required": ["a", "b"],
|
||||
},
|
||||
handler=subtract,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_multiply_tool() -> MCPTool:
|
||||
"""Create multiplication tool"""
|
||||
async def multiply(a: float, b: float) -> float:
|
||||
"""Multiply two numbers"""
|
||||
return a * b
|
||||
|
||||
return MCPTool(
|
||||
name="multiply",
|
||||
description="Multiply two numbers",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {"type": "number", "description": "First number"},
|
||||
"b": {"type": "number", "description": "Second number"},
|
||||
},
|
||||
"required": ["a", "b"],
|
||||
},
|
||||
handler=multiply,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_divide_tool() -> MCPTool:
|
||||
"""Create division tool"""
|
||||
async def divide(a: float, b: float) -> float:
|
||||
"""Divide first number by second"""
|
||||
if b == 0:
|
||||
raise ValueError("Cannot divide by zero")
|
||||
return a / b
|
||||
|
||||
return MCPTool(
|
||||
name="divide",
|
||||
description="Divide first number by second",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"a": {"type": "number", "description": "Dividend"},
|
||||
"b": {"type": "number", "description": "Divisor (cannot be zero)"},
|
||||
},
|
||||
"required": ["a", "b"],
|
||||
},
|
||||
handler=divide,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_power_tool() -> MCPTool:
|
||||
"""Create power tool"""
|
||||
async def power(base: float, exponent: float) -> float:
|
||||
"""Calculate base raised to the power of exponent"""
|
||||
return base ** exponent
|
||||
|
||||
return MCPTool(
|
||||
name="power",
|
||||
description="Calculate base raised to the power of exponent",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"base": {"type": "number", "description": "Base number"},
|
||||
"exponent": {"type": "number", "description": "Exponent"},
|
||||
},
|
||||
"required": ["base", "exponent"],
|
||||
},
|
||||
handler=power,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_square_root_tool() -> MCPTool:
|
||||
"""Create square root tool"""
|
||||
async def square_root(number: float) -> float:
|
||||
"""Calculate square root of a number"""
|
||||
if number < 0:
|
||||
raise ValueError("Cannot calculate square root of negative number")
|
||||
return number ** 0.5
|
||||
|
||||
return MCPTool(
|
||||
name="square_root",
|
||||
description="Calculate square root of a number",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"number": {"type": "number", "description": "Number to find square root of (must be non-negative)"},
|
||||
},
|
||||
"required": ["number"],
|
||||
},
|
||||
handler=square_root,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_calculate_bmi_tool() -> MCPTool:
|
||||
"""Create BMI calculation tool"""
|
||||
async def calculate_bmi(weight_kg: float, height_m: float) -> str:
|
||||
"""Calculate BMI and provide health category"""
|
||||
if weight_kg <= 0 or height_m <= 0:
|
||||
raise ValueError("Weight and height must be positive numbers")
|
||||
|
||||
bmi = weight_kg / (height_m ** 2)
|
||||
|
||||
if bmi < 18.5:
|
||||
category = "Underweight"
|
||||
elif bmi < 25:
|
||||
category = "Normal weight"
|
||||
elif bmi < 30:
|
||||
category = "Overweight"
|
||||
else:
|
||||
category = "Obese"
|
||||
|
||||
return ".1f"
|
||||
|
||||
return MCPTool(
|
||||
name="calculate_bmi",
|
||||
description="Calculate BMI and provide health assessment",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"weight_kg": {"type": "number", "description": "Weight in kilograms"},
|
||||
"height_m": {"type": "number", "description": "Height in meters"},
|
||||
},
|
||||
"required": ["weight_kg", "height_m"],
|
||||
},
|
||||
handler=calculate_bmi,
|
||||
)
|
||||
Reference in New Issue
Block a user