initial mcp server setup

This commit is contained in:
OwusuBlessing
2025-09-11 23:13:58 +01:00
commit 20f96c0f30
141 changed files with 14444 additions and 0 deletions
+186
View File
@@ -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,
)