Skip to content

Custom MCP (Streamable HTTP): tool description and parameter inputSchema are stripped before being passed to the LLM #6497

@JacksonMilhomens

Description

@JacksonMilhomens

Describe the bug

When connecting a remote MCP server to the Custom MCP node over Streamable HTTP, the tools are discovered and appear in Available Actions, but the tool definition that is bound to the LLM is degraded:

The tool description is replaced by the tool name (e.g. a tool buscar_previsao_tempo whose real description is "Retorna a PREVISÃO do tempo de um local para os próximos dias..." is sent to the model with description = "buscar_previsao_tempo").
Each parameter schema is emptied (e.g. local is sent as {} instead of { "type": "string", "description": "..." }).

I verified directly from the LLM trace (ChatOpenAI / gpt-4o-mini) that this stripped version is what actually reaches the model, so the LLM has no description and no parameter typing/description to reason about.
This is not a server-side problem: the MCP server returns a fully populated description and inputSchema in tools/list (proof below). The information is lost during Flowise's conversion of the MCP tool into the tool bound to the model.

To Reproduce

  1. Minimal MCP server (Python, FastMCP 3.x):
from typing import Annotated

from fastmcp import FastMCP
from pydantic import Field

mcp = FastMCP("repro")


@mcp.tool()
async def greet(
    name: Annotated[
        str,
        Field(description="The full name of the person to greet."),
    ],
) -> dict:
    """Returns a friendly greeting for the given person.

    Use this whenever the user wants to greet someone by name.
    """
    return {"message": f"Hello, {name}!"}


if __name__ == "__main__":
    mcp.run(transport="http", host="127.0.0.1", port=8011)

Run it (exposing it with a tunnel such as ngrok/cloudflared if Flowise is remote):

pip install fastmcp
python repro_server.py
  1. In Flowise, add a Custom MCP node with:
{
  "url": "https://<your-host>/mcp"
}

Refresh Available Actions, select greet, attach it to an Agent, and run any message.

  1. Inspect the tool that is bound to the LLM (via the node's Tools panel / trace).

Expected behavior

The tool bound to the LLM should preserve the values returned by the MCP server:

description: "Returns a friendly greeting for the given person. Use this whenever the user wants to greet someone by name."
parameter name: { "type": "string", "description": "The full name of the person to greet." }

Actual behavior

The tool bound to the LLM has:

description: "greet" (the tool name)
parameter name: {} (empty)

Proof the server returns the correct data

Raw tools/list response from the minimal server above (captured over Streamable HTTP):

{
  "name": "greet",
  "description": "Returns a friendly greeting for the given person.\n\nUse this whenever the user wants to greet someone by name.",
  "inputSchema": {
    "additionalProperties": false,
    "properties": {
      "name": {
        "description": "The full name of the person to greet.",
        "type": "string"
      }
    },
    "required": ["name"],
    "type": "object"
  },
  "outputSchema": {
    "additionalProperties": true,
    "type": "object"
  },
  "_meta": { "fastmcp": { "tags": [] } }
}

The same payload renders correctly in the official MCP Inspector (npx @modelcontextprotocol/inspector), confirming the issue is specific to Flowise's Custom MCP handling, not the server.

Screenshots

No response

Flow

No response

Use Method

Docker

Flowise Version

3.1.2

Operating System

Windows

Browser

Chrome

Additional context

A correctly populated description and inputSchema are essential for an Agent to know when to call a tool and how to fill its parameters. With both stripped, tool selection effectively relies on the tool name alone, which defeats the purpose of MCP tool metadata.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions