diff --git a/backend/app/utils/toolkit/notion_mcp_toolkit.py b/backend/app/utils/toolkit/notion_mcp_toolkit.py index 02eb68472..735193083 100644 --- a/backend/app/utils/toolkit/notion_mcp_toolkit.py +++ b/backend/app/utils/toolkit/notion_mcp_toolkit.py @@ -1,9 +1,30 @@ import os +from typing import Any, Dict, List +from loguru import logger from camel.toolkits import FunctionTool from app.component.environment import env from app.utils.toolkit.abstract_toolkit import AbstractToolkit from camel.toolkits.mcp_toolkit import MCPToolkit +def _customize_function_parameters(schema: Dict[str, Any]) -> None: + r"""Customize function parameters for specific functions. + + This method allows modifying parameter descriptions or other schema + attributes for specific functions. + """ + function_info = schema.get("function", {}) + function_name = function_info.get("name", "") + parameters = function_info.get("parameters", {}) + properties = parameters.get("properties", {}) + required = parameters.get("required", []) + + # Modify the notion-create-pages function to make parent optional + if function_name == "notion-create-pages": + required.remove("parent") + parameters["required"] = required + if "parent" in properties: + # Update the parent parameter description + properties["parent"]["description"] = "Optional. " + properties["parent"]["description"] class NotionMCPToolkit(MCPToolkit, AbstractToolkit): @@ -31,7 +52,7 @@ class NotionMCPToolkit(MCPToolkit, AbstractToolkit): } } } - super().__init__(config_dict=config_dict, timeout=timeout) + super().__init__(config_dict=config_dict, timeout=timeout) @classmethod async def get_can_use_tools(cls, api_task_id: str) -> list[FunctionTool]: @@ -41,6 +62,12 @@ class NotionMCPToolkit(MCPToolkit, AbstractToolkit): await toolkit.connect() # Use subclass implementation that inlines upstream processing all_tools = toolkit.get_tools() + tool_schema = [ + item.get_openai_tool_schema() for item in all_tools + ] + #adjust tool schema + for item in tool_schema: + _customize_function_parameters(item) for item in all_tools: setattr(item, "_toolkit_name", cls.__name__) tools.append(item)