{"record":{"id":"19288bc4ceec924c","repo":"FlowiseAI/Flowise","slug":"missing-browserless-api-token","errorCode":null,"errorMessage":"Missing Browserless API Token","messagePattern":"Missing Browserless API Token","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/tools/MCP/Browserless/BrowserlessMCP.ts","lineNumber":91,"sourceCode":"        const _mcpActions = nodeData.inputs?.mcpActions\n        let mcpActions = []\n        if (_mcpActions) {\n            try {\n                mcpActions = typeof _mcpActions === 'string' ? JSON.parse(_mcpActions) : _mcpActions\n            } catch (error) {\n                console.error('Error parsing mcp actions:', error)\n            }\n        }\n\n        return tools.filter((tool: any) => mcpActions.includes(tool.name))\n    }\n\n    async getTools(nodeData: INodeData, options: ICommonObject): Promise<Tool[]> {\n        const credentialData = await getCredentialData(nodeData.credential ?? '', options)\n        const apiToken = getCredentialParam('browserlessApiToken', credentialData, nodeData)\n\n        if (!apiToken) {\n            throw new Error('Missing Browserless API Token')\n        }\n\n        const serverParams = {\n            url: 'https://mcp.browserless.io/mcp',\n            headers: {\n                Authorization: `Bearer ${apiToken}`\n            }\n        }\n\n        const toolkit = new MCPToolkit(serverParams, 'sse')\n        await toolkit.initialize()\n\n        const tools = toolkit.tools ?? []\n\n        return tools\n    }\n}\n","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/tools/MCP/Browserless/BrowserlessMCP.ts#L73-L109","documentation":"Thrown by BrowserlessMCP.getTools when getCredentialParam('browserlessApiToken', ...) returns falsy. Browserless is a hosted MCP server (https://mcp.browserless.io/mcp) that requires a Bearer token; without it the toolkit would connect and immediately 401. The guard fails fast at tool-registration time so the agent never receives a broken tool set.","triggerScenarios":"The node has no credential attached, an attached credential of the wrong type, or a Browserless credential with an empty token field. Also when the credential was deleted but the node still references it.","commonSituations":"First-time setup where the user added the node but not the credential; expired trial / cancelled Browserless account where the token was cleared; selecting a different credential type in the dropdown.","solutions":["Create a Browserless credential in the credential manager and paste the API token from the Browserless dashboard.","Select that credential on the Browserless MCP node.","Verify the token is non-empty and free of surrounding whitespace.","If the account lapsed, regenerate a token in the Browserless dashboard and update the credential."],"exampleFix":"// before — node.credential points to a generic HTTP credential without browserlessApiToken\n// after — create a Browserless credential with browserlessApiToken set, then bind it on the node","handlingStrategy":"validation","validationCode":"function assertBrowserlessToken(cred: { browserlessApiToken?: string }) {\n  if (!cred.browserlessApiToken?.trim()) throw new Error('Create a Browserless credential with a non-empty browserlessApiToken')\n}","typeGuard":"function hasBrowserlessToken(c: unknown): c is { browserlessApiToken: string } {\n  return !!c && typeof (c as any).browserlessApiToken === 'string' && (c as any).browserlessApiToken.trim().length > 0\n}","tryCatchPattern":null,"preventionTips":["Create the Browserless credential before adding the node.","Bind the credential on the node dropdown.","Regenerate the token in the Browserless dashboard if the account lapsed.","Trim whitespace when pasting the token."],"tags":["browserless","mcp","credentials","validation","required-field"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}