diff --git a/api/controllers/mcp/mcp.py b/api/controllers/mcp/mcp.py index f990f08680..cacd8197de 100644 --- a/api/controllers/mcp/mcp.py +++ b/api/controllers/mcp/mcp.py @@ -1,3 +1,5 @@ +import logging + from flask_restful import Resource, reqparse from pydantic import ValidationError from sqlalchemy.orm import Session @@ -14,6 +16,8 @@ from extensions.ext_database import db from libs import helper from models.model import App, AppMCPServer, AppMode +logger = logging.getLogger(__name__) + class MCPAppApi(Resource): def post(self, server_code): @@ -31,6 +35,7 @@ class MCPAppApi(Resource): parser.add_argument("params", type=dict, required=True, location="json") parser.add_argument("id", type=int_or_str, required=True, location="json") args = parser.parse_args() + logger.info(f"MCP request: {args}") server = db.session.query(AppMCPServer).filter(AppMCPServer.server_code == server_code).first() if not server: raise NotFound("Server Not Found") diff --git a/api/core/mcp/server/handler.py b/api/core/mcp/server/handler.py index 8ee29055c1..065a7da2b0 100644 --- a/api/core/mcp/server/handler.py +++ b/api/core/mcp/server/handler.py @@ -1,4 +1,5 @@ import json +import logging from collections.abc import Mapping from typing import Any, cast @@ -18,6 +19,8 @@ from services.app_generate_service import AppGenerateService Apply to MCP HTTP streamable server with stateless http """ +logger = logging.getLogger(__name__) + class MCPServerReuqestHandler: def __init__(self, app: App, request: types.ClientRequest, user_input_form: list[VariableEntity], session: Session): @@ -100,6 +103,7 @@ class MCPServerReuqestHandler: return self.error_response(INTERNAL_ERROR, f"Internal server error: {str(e)}") def initialize(self): + logger.info(f"Initialize: {self.request}") request = cast(types.InitializeRequest, self.request.root) client_info = request.params.clientInfo clinet_name = f"{client_info.name}@{client_info.version}" @@ -122,6 +126,7 @@ class MCPServerReuqestHandler: ) def list_tools(self): + logger.info(f"List tools: {self.request}") if not self.end_user: raise ValueError("User not found") return types.ListToolsResult(