langflow-ai/langflow · warning · Error

No supported files found in folder. Allowed types: ${types?.

Error message

No supported files found in folder. Allowed types: ${types?.join(", ")}

What it means

400 produced when get_config_path(client) raises ValueError — the client name is not one of cursor/windsurf/claude, or the OS is unsupported for that client (e.g. Claude config on a non-Windows, non-macOS, non-WSL system). The ValueError's text (raised in the path-resolution helper) is passed through as the detail.

Source

Thrown at src/frontend/src/hooks/files/use-upload-file.ts:54

  const uploadFile = async ({
    files,
  }: {
    files?: File[];
  }): Promise<string[]> => {
    try {
      const filesToUpload = await getFilesToUpload({ files });
      const filesIds: string[] = [];

      // Filter files by supported types when using folder selection
      let validFiles = filesToUpload;
      if (webkitdirectory && types) {
        validFiles = filesToUpload.filter((file) => {
          const fileExtension = file.name.split(".").pop()?.toLowerCase();
          return fileExtension && types.includes(fileExtension);
        });

        if (validFiles.length === 0) {
          throw new Error(
            `No supported files found in folder. Allowed types: ${types?.join(", ")}`,
          );
        }
      }

      for (const file of validFiles) {
        validateFileSize(file);
        // Check if file extension is allowed (for non-folder selection)
        if (!webkitdirectory) {
          const fileExtension = file.name.split(".").pop()?.toLowerCase();
          if (!fileExtension || (types && !types.includes(fileExtension))) {
            throw new Error(
              `File type ${fileExtension} not allowed. Allowed types: ${types?.join(", ")}`,
            );
          }
          if (!multiple && filesToUpload.length !== 1) {
            throw new Error("Multiple files are not allowed");
          }

View on GitHub (pinned to 976ec789d2)

Solutions

  1. Use one of the supported client values: 'cursor', 'windsurf', or 'claude'.
  2. On plain Linux, install into Cursor/Windsurf instead of Claude, or copy the MCP JSON manually to whatever client you use.
  3. Check the response detail — it echoes the ValueError explaining exactly which condition failed.
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED_CLIENTS = {"cursor", "windsurf", "claude"}
if body["client"].lower() not in SUPPORTED_CLIENTS:
    raise ValueError(f"unsupported client; choose from {SUPPORTED_CLIENTS}")

Type guard

def is_supported_mcp_client(name: str) -> bool:
    return name.lower() in {"cursor", "windsurf", "claude"}

Prevention

When it happens

Trigger: POST /{project_id}/install with body.client='vscode' or 'cline'; or client='claude' on plain Linux where no Claude Desktop config path is defined ('Unsupported operating system for Claude configuration').

Common situations: Asking to install into a client Langflow does not support; using the Claude Desktop flow on a bare Linux box (Claude Desktop has no Linux build).

Related errors


AI-assisted analysis of langflow-ai/langflow@976ec789d2 (2026-08-14). Data as JSON: /api/errors/c822f4a99ba28d5e. Report an issue: GitHub.