{"record":{"id":"a8c351d23f41c00f","repo":"FlowiseAI/Flowise","slug":"pipedream-app-slug-is-required","errorCode":null,"errorMessage":"Pipedream app slug is required","messagePattern":"Pipedream app slug is required","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/tools/MCP/Pipedream/PipedreamMCP.ts","lineNumber":261,"sourceCode":"\n        const workspaceId = options?.searchOptions?.workspaceId?._value || options?.workspaceId\n        if (!workspaceId) return value\n\n        const appDataSource = options.appDataSource as DataSource\n        const databaseEntities = options.databaseEntities as IDatabaseEntity\n        const optionsWithWorkspaceId = options.workspaceId ? options : { ...options, workspaceId }\n        const variables = await getVars(appDataSource, databaseEntities, nodeData, optionsWithWorkspaceId)\n        const vars = prepareSandboxVars(variables) as Record<string, string>\n\n        return value.replace(VAR_PLACEHOLDER_RE, (match, varName) => {\n            return vars[varName] != null ? String(vars[varName]) : match\n        })\n    }\n\n    async getTools(nodeData: INodeData, options: ICommonObject, isLoadMethod = false): Promise<Tool[]> {\n        const appSlug = nodeData.inputs?.appSlug as string\n        if (!appSlug) {\n            throw new Error('Pipedream app slug is required')\n        }\n\n        const SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9_-]{0,98}[a-z0-9])?(?:,\\s*[a-z0-9](?:[a-z0-9_-]{0,98}[a-z0-9])?)*$/\n        if (!SLUG_PATTERN.test(appSlug)) {\n            throw new Error('Invalid app slug format. Must be lowercase letters, digits, hyphens and underscores only.')\n        }\n\n        let externalUserId = nodeData.inputs?.externalUserId as string\n        externalUserId = await this.resolveVarsInString(externalUserId, nodeData, options)\n\n        if (externalUserId.includes('{{')) {\n            if (!isLoadMethod) {\n                throw new Error(\n                    'Variables in User ID are not resolved. ' +\n                        '{{$vars.*}} requires a matching workspace variable. ' +\n                        '{{$flow.*}} variables (e.g. sessionId) are only available at runtime, not when refreshing actions.'\n                )\n            }","sourceCodeStart":243,"sourceCodeEnd":279,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/tools/MCP/Pipedream/PipedreamMCP.ts#L243-L279","documentation":"Thrown by PipedreamMCP.getTools when nodeData.inputs.appSlug is empty. The Pipedream MCP server selects tools by app slug, so a missing slug makes the request meaningless and is rejected before any network call.","triggerScenarios":"The Pipedream_MCP node has no 'appSlug' input set (blank field, or the field was never filled). Triggered during tool-load (refresh actions) or at runtime when getTools is called.","commonSituations":"User adds the node but leaves appSlug empty; a flow/template was duplicated without copying the appSlug; the UI field was cleared; variable substitution produced an empty value.","solutions":["Open the Pipedream_MCP node and enter the app slug (e.g. 'slack', 'github', 'google_sheets') in the appSlug field.","Confirm the slug matches the lowercase identifier shown on mcp.pipedream.com / Pipedream's app directory.","If using a variable, ensure it resolves to a non-empty string before getTools runs."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const appSlug = nodeData.inputs?.appSlug as string\nif (!appSlug || !appSlug.trim()) {\n    throw new Error('Pipedream app slug is required') // block before getTools body\n}","typeGuard":"function hasAppSlug(inputs: unknown): inputs is { appSlug: string } {\n    return typeof inputs === 'object' && inputs !== null\n        && typeof (inputs as any).appSlug === 'string'\n        && (inputs as any).appSlug.trim().length > 0\n}","tryCatchPattern":"try {\n    await pipedream.getTools(nodeData, options)\n} catch (e) {\n    if (e instanceof Error && e.message === 'Pipedream app slug is required') {\n        // prompt for the appSlug input\n    }\n}","preventionTips":["Mark appSlug as a required input in the node schema.","Provide an autocomplete of known slugs from Pipedream's directory."],"tags":["pipedream","validation","configuration","mcp"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}