diff --git a/src/backend/base/langflow/api/v1/mcp_utils.py b/src/backend/base/langflow/api/v1/mcp_utils.py index 47232c244cf3..22cc27de3098 100644 --- a/src/backend/base/langflow/api/v1/mcp_utils.py +++ b/src/backend/base/langflow/api/v1/mcp_utils.py @@ -192,8 +192,9 @@ async def execute_tool(session): msg = f"Flow '{name}' not found in project {project_id}" raise ValueError(msg) - # Process inputs - processed_inputs = dict(arguments) + # Convert inputs to tweaks + def transform_arguments(args: dict) -> dict: + return {key: {"input_value": value} for key, value in args.items()} # Initial progress notification if mcp_config.enable_progress_notifications and (progress_token := server.request_context.meta.progressToken): @@ -203,7 +204,9 @@ async def execute_tool(session): conversation_id = str(uuid4()) input_request = SimplifiedAPIRequest( - input_value=processed_inputs.get("input_value", ""), session_id=conversation_id + # input_value=processed_inputs.get("input_value", ""), + session_id=conversation_id, + tweaks=transform_arguments(arguments), ) async def send_progress_updates(progress_token): diff --git a/src/backend/base/langflow/helpers/flow.py b/src/backend/base/langflow/helpers/flow.py index fae1d1e390b5..9d09eb77be41 100644 --- a/src/backend/base/langflow/helpers/flow.py +++ b/src/backend/base/langflow/helpers/flow.py @@ -4,7 +4,6 @@ from uuid import UUID from fastapi import HTTPException -from lfx.log.logger import logger from pydantic.v1 import BaseModel, Field, create_model from sqlalchemy.orm import aliased from sqlmodel import asc, desc, select @@ -446,35 +445,27 @@ def json_schema_from_flow(flow: Flow) -> dict: graph = Graph.from_payload(flow_data) input_nodes = [vertex for vertex in graph.vertices if vertex.is_input] - properties = {} required = [] for node in input_nodes: node_data = node.data["node"] + name = node.data["id"] + template = node_data["template"] + properties[name] = {"type": "string", "description": f"Input for {name}"} + for field_name, field_data in template.items(): - if field_data != "Component" and field_data.get("show", False) and not field_data.get("advanced", False): - field_type = field_data.get("type", "string") - properties[field_name] = { - "type": field_type, - "description": field_data.get("info", f"Input for {field_name}"), - } - # Update field_type in properties after determining the JSON Schema type - if field_type == "str": - field_type = "string" - elif field_type == "int": - field_type = "integer" - elif field_type == "float": - field_type = "number" - elif field_type == "bool": - field_type = "boolean" - else: - logger.warning(f"Unknown field type: {field_type} defaulting to string") - field_type = "string" - properties[field_name]["type"] = field_type - - if field_data.get("required", False): - required.append(field_name) + if field_name.startswith("mcp_"): + if field_name == "mcp_description": + val = field_data.get("value") + properties[name]["description"] = val or f"Input for {name}" + + if field_name == "mcp_type" and field_data.get("value") != "": + val = field_data.get("value") + properties[name]["type"] = val or "string" + + if field_name == "mcp_required" and field_data.get("value", False): + required.append(name) return {"type": "object", "properties": properties, "required": required} diff --git a/src/lfx/src/lfx/components/input_output/chat.py b/src/lfx/src/lfx/components/input_output/chat.py index 8e0cf28d2cb0..a160d72454b3 100644 --- a/src/lfx/src/lfx/components/input_output/chat.py +++ b/src/lfx/src/lfx/components/input_output/chat.py @@ -76,6 +76,10 @@ class ChatInput(ChatComponent): is_list=True, temp_file=True, ), + MultilineInput( + name="mcp_description", display_name="MCP Description", info="Description to MCP Client", advanced=True + ), + BoolInput(name="mcp_required", display_name="MCP Required", info="Required by MCP Server", advanced=True), ] outputs = [ Output(display_name="Chat Message", name="message", method="message_response"), diff --git a/src/lfx/src/lfx/components/input_output/text.py b/src/lfx/src/lfx/components/input_output/text.py index a2d2411fa8e6..80508b9d8d7c 100644 --- a/src/lfx/src/lfx/components/input_output/text.py +++ b/src/lfx/src/lfx/components/input_output/text.py @@ -1,5 +1,5 @@ from lfx.base.io.text import TextComponent -from lfx.io import MultilineInput, Output +from lfx.io import BoolInput, MultilineInput, Output from lfx.schema.message import Message @@ -16,6 +16,10 @@ class TextInputComponent(TextComponent): display_name="Text", info="Text to be passed as input.", ), + MultilineInput( + name="mcp_description", display_name="MCP Description", info="Description to MCP Client.", advanced=True + ), + BoolInput(name="mcp_required", display_name="MCP Required", info="Required by the MCP Server.", advanced=True), ] outputs = [ Output(display_name="Output Text", name="text", method="text_response"),