Skip to main content
Glama
mcp.py6.46 kB
"""Protected MCP operation endpoints.""" import logging from typing import Dict, Any from fastapi import APIRouter, Depends, HTTPException, status from ....core.security import CurrentActiveUser from ....schemas import ( # Added new response schemas MCPExecuteRequest, MCPBroadcastRequest, MCPExecuteResponse, MCPBroadcastResponse, MCPModelsListResponse ) from ....models.user import AuthenticatedUserModel logger = logging.getLogger(__name__) router = APIRouter() @router.post("/execute", response_model=MCPExecuteResponse, tags=["mcp"]) # Added response_model async def execute_operation( request: MCPExecuteRequest, current_user: AuthenticatedUserModel = CurrentActiveUser ): """ Execute an MCP operation. This is a protected endpoint that requires authentication. Args: request: MCP execute request containing operation and parameters current_user: Current authenticated user Returns: dict: Operation execution result """ logger.info(f"User '{current_user.username}' executing operation: {request.operation}") # Mock implementation - in a real system, this would dispatch to actual MCP operations try: if request.operation == "get_capabilities": result = { "capabilities": ["read", "write", "execute", "broadcast"], "supported_operations": ["herd_management", "health_check", "statistics"], "api_version": "1.0.0" } elif request.operation == "process_data": # Mock data processing data = request.parameters.get("data", []) if request.parameters else [] result = { "processed_items": len(data), "operation": "process_data", "status": "completed", "timestamp": "2024-01-01T00:00:00Z" } elif request.operation == "system_status": result = { "status": "operational", "uptime": "99.9%", "active_connections": 42, "last_maintenance": "2024-01-01T00:00:00Z" } else: # Handle unknown operations raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=f"Unknown operation: {request.operation}" ) logger.info(f"Operation '{request.operation}' completed successfully for user '{current_user.username}'") return { "success": True, "operation": request.operation, "result": result, "executed_by": current_user.username } except Exception as e: logger.error(f"Operation '{request.operation}' failed for user '{current_user.username}': {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Operation execution failed: {str(e)}" ) @router.post("/broadcast", response_model=MCPBroadcastResponse, tags=["mcp"]) # Added response_model async def broadcast_message( request: MCPBroadcastRequest, current_user: AuthenticatedUserModel = CurrentActiveUser ): """ Broadcast a message to connected clients. This is a protected endpoint that requires authentication. Args: request: MCP broadcast request containing message and targets current_user: Current authenticated user Returns: dict: Broadcast result """ logger.info(f"User '{current_user.username}' broadcasting message: {request.message[:50]}...") try: # Mock implementation - in a real system, this would send to actual connected clients targets = request.targets or ["all"] delivered_count = len(targets) if targets != ["all"] else 100 # Mock delivery count result = { "message_id": f"msg_{hash(request.message) % 10000:04d}", "message": request.message, "targets": targets, "delivered_count": delivered_count, "failed_count": 0, "timestamp": "2024-01-01T00:00:00Z", "broadcast_by": current_user.username } logger.info(f"Message broadcast completed by user '{current_user.username}': delivered to {delivered_count} recipients") return { "success": True, "broadcast_result": result } except Exception as e: logger.error(f"Broadcast failed for user '{current_user.username}': {e}") raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Broadcast failed: {str(e)}" ) @router.get("/models", response_model=MCPModelsListResponse, tags=["mcp"]) # Added response_model async def list_models(current_user: AuthenticatedUserModel = CurrentActiveUser): """ List available MCP models. This is an optionally protected endpoint that requires authentication. Args: current_user: Current authenticated user Returns: dict: Available models """ logger.info(f"User '{current_user.username}' requesting model list") # Mock model list - in a real system, this would query actual available models models = [ { "id": "mcp-herd-manager-v1", "name": "Herd Management Model", "version": "1.0.0", "description": "Model for managing livestock herds", "capabilities": ["create", "read", "update", "delete", "search"], "status": "active" }, { "id": "mcp-analytics-v2", "name": "Analytics Model", "version": "2.1.0", "description": "Model for data analysis and reporting", "capabilities": ["analyze", "report", "predict"], "status": "active" }, { "id": "mcp-notification-v1", "name": "Notification Model", "version": "1.2.0", "description": "Model for handling notifications and alerts", "capabilities": ["send", "receive", "filter"], "status": "maintenance" } ] return { "models": models, "total_count": len(models), "active_count": len([m for m in models if m["status"] == "active"]), "requested_by": current_user.username }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DPoitrast/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server