todo_chatbot / src /mcp /server.py
Awais68
Deploy FastAPI backend with MCP and OpenAI agents
cccf200
Raw
History Blame Contribute Delete
2.33 kB
"""
MCP Server setup for Todo AI Chatbot.
"""
from typing import Dict, Any, List
import json
class MCPServer:
"""MCP Server for managing AI tools."""
def __init__(self):
self.tools: Dict[str, Any] = {}
def tool(self, name: str = None):
"""Decorator to register MCP tools."""
def decorator(func):
tool_name = name or func.__name__
self.tools[tool_name] = func
return func
return decorator
def get_tool_definitions(self) -> List[Dict[str, Any]]:
"""Get OpenAI-compatible tool definitions."""
definitions = []
for tool_name, tool_func in self.tools.items():
# Extract function signature and docstring
import inspect
sig = inspect.signature(tool_func)
doc = inspect.getdoc(tool_func) or ""
# Build parameter schema
parameters = {
"type": "object",
"properties": {},
"required": []
}
for param_name, param in sig.parameters.items():
if param_name in ['self', 'session']:
continue
param_type = "string"
if param.annotation == int:
param_type = "integer"
elif param.annotation == bool:
param_type = "boolean"
parameters["properties"][param_name] = {
"type": param_type,
"description": f"{param_name} parameter"
}
if param.default == inspect.Parameter.empty:
parameters["required"].append(param_name)
definitions.append({
"type": "function",
"function": {
"name": tool_name,
"description": doc.split('\n')[0] if doc else tool_name,
"parameters": parameters
}
})
return definitions
def execute_tool(self, tool_name: str, **kwargs) -> Dict[str, Any]:
"""Execute a registered tool."""
if tool_name not in self.tools:
raise ValueError(f"Tool {tool_name} not found")
return self.tools[tool_name](**kwargs)
# Global MCP server instance
mcp_server = MCPServer()