{"record":{"id":"9f2d387740fde759","repo":"FlowiseAI/Flowise","slug":"pipedream-project-id-is-required-in-credentials","errorCode":null,"errorMessage":"Pipedream Project ID is required in credentials","messagePattern":"Pipedream Project ID is required in credentials","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/components/nodes/tools/MCP/Pipedream/PipedreamMCP.ts","lineNumber":300,"sourceCode":"            externalUserId = 'flowise_preview_user'\n        }\n\n        externalUserId = externalUserId.replace(/<[^>]*>/g, '').trim()\n        if (!externalUserId) {\n            throw new Error('Pipedream user ID is required')\n        }\n\n        const SAFE_USER_ID = /^[a-zA-Z0-9._@+-]{1,250}$/\n        if (!SAFE_USER_ID.test(externalUserId.trim())) {\n            throw new Error('User ID contains invalid characters. Allowed: letters, digits, . _ @ + -')\n        }\n\n        const credentialData = await getCredentialData(nodeData.credential ?? '', options)\n        const projectId = getCredentialParam('projectId', credentialData, nodeData)\n        const oauthScopes = getCredentialParam('oauthScopes', credentialData, nodeData) as string | 'connect:*'\n\n        if (!projectId) {\n            throw new Error('Pipedream Project ID is required in credentials')\n        }\n\n        const clientId = getCredentialParam('clientId', credentialData, nodeData)\n        const clientSecret = getCredentialParam('clientSecret', credentialData, nodeData)\n\n        if (!clientId || !clientSecret) {\n            throw new Error('Pipedream Client ID and Client Secret are required in credentials')\n        }\n        const accessToken = await this.fetchAccessToken(clientId, clientSecret, oauthScopes)\n\n        const environment = (nodeData.inputs?.environment as string) || 'development'\n        const toolMode = (nodeData.inputs?.toolMode as string) || 'tools-only'\n\n        const serverParams = {\n            url: 'https://remote.mcp.pipedream.net',\n            headers: {\n                Authorization: `Bearer ${accessToken}`,\n                'x-pd-project-id': projectId,","sourceCodeStart":282,"sourceCodeEnd":318,"githubUrl":"https://github.com/FlowiseAI/Flowise/blob/abe4a8601a058047b350c260676826e21dd14101/packages/components/nodes/tools/MCP/Pipedream/PipedreamMCP.ts#L282-L318","documentation":"Thrown when the Pipedream credential has no projectId. The projectId is sent as the x-pd-project-id header to the Pipedream MCP server and is required to scope tool access, so getTools rejects early if it is missing.","triggerScenarios":"The selected Pipedream credential exists but its 'projectId' field is empty; the credential component was filled partially; projectId was cleared during an edit.","commonSituations":"User created the credential but skipped projectId; copied an old credential schema without projectId; the field is mislabeled or the value was not saved.","solutions":["Open the bound Pipedream credential and enter the Project ID from the Pipedream dashboard (Workspace > Projects).","Confirm the projectId corresponds to the workspace/environment you intend to use.","Save the credential and re-run the node."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const projectId = getCredentialParam('projectId', credentialData, nodeData)\nif (!projectId) {\n    throw new Error('Pipedream Project ID is required')\n}","typeGuard":"function hasProjectId(cred: unknown): cred is { projectId: string } {\n    return typeof cred === 'object' && cred !== null\n        && typeof (cred as any).projectId === 'string'\n        && (cred as any).projectId.trim().length > 0\n}","tryCatchPattern":"try { await pipedream.getTools(nodeData, options) }\ncatch (e) { if (e instanceof Error && e.message === 'Pipedream Project ID is required in credentials') { /* bind projectId */ } }","preventionTips":["Make projectId a required field in the credential component.","Provide a credential 'Test' that validates all required fields at save time."],"tags":["pipedream","credentials","validation","configuration"],"backgroundTag":null,"analyzedSha":"abe4a8601a058047b350c260676826e21dd14101","analyzedAt":"2026-08-12T16:04:40.823Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}