FlowiseAI/Flowise · error · Error
Missing credentials: provide Bearer token from flow/credenti
Error message
Missing credentials: provide Bearer token from flow/credentials OR username/password from credentials
What it means
Thrown by the Teradata MCP node when none of the three credential sources resolves. The node first looks for a bearerToken on nodeData.inputs.bearerToken, then getCredentialParam('token'), then falls back to username (tdUsername) + password (tdPassword) from the credential store. If all are falsy it cannot build an Authorization header for the Teradata MCP server, so it aborts before constructing the MCPToolkit.
Source
Thrown at packages/components/nodes/tools/MCP/Teradata/TeradataMCP.ts:122
if (!mcpUrl) {
throw new Error('Missing MCP Server URL')
}
// Determine auth method from credentials
let serverParams: any = {
url: mcpUrl,
headers: {}
}
// Get Bearer token from node input (from agent flow) or credential store
const bearerToken = nodeData.inputs?.bearerToken || getCredentialParam('token', credentialData, nodeData)
const username = getCredentialParam('tdUsername', credentialData, nodeData)
const password = getCredentialParam('tdPassword', credentialData, nodeData)
if (bearerToken) {
serverParams.headers['Authorization'] = `Bearer ${bearerToken}`
} else if (username && password) {
serverParams.headers['Authorization'] = 'Basic ' + Buffer.from(`${username}:${password}`).toString('base64')
} else {
throw new Error('Missing credentials: provide Bearer token from flow/credentials OR username/password from credentials')
}
const workspaceId = options?.searchOptions?.workspaceId?._value || options?.workspaceId || 'tdws_default'
let sandbox: ICommonObject = {}
const cacheKey = hash({ workspaceId, serverParams, sandbox })
if (options.cachePool) {
const cachedResult = await options.cachePool.getMCPCache(cacheKey)
if (cachedResult) {
if (cachedResult.tools.length > 0) {
return cachedResult.tools
}
}
}
// Use SSE for remote HTTP MCP servers
const toolkit = new MCPToolkit(serverParams, 'sse')
await toolkit.initialize()
const tools = toolkit.tools ?? []
if (options.cachePool) {View on GitHub (pinned to abe4a8601a)
Solutions
- Open the Teradata MCP node and attach a credential of the correct type containing either a token field or tdUsername+tdPassword fields.
- If using agent-flow auth, wire an upstream node's output into the node's bearerToken input so nodeData.inputs.bearerToken is non-empty.
- Verify the credential id in nodeData.credential still exists in the credential store and was saved with the expected field names.
- Re-save the credential after correcting the field names to exactly 'token', 'tdUsername', 'tdPassword'.
Example fix
// before: no auth wired
const bearerToken = nodeData.inputs?.bearerToken || getCredentialParam('token', credentialData, nodeData) // both undefined
// after: attach credential with token, or wire flow input
// In Flowise UI: set node credential to a Teradata credential containing { token: '...' }
// or map an upstream node output to the bearerToken input. Defensive patterns
Strategy: validation
Validate before calling
const hasBearer = !!(nodeData.inputs?.bearerToken || getCredentialParam('token', credentialData, nodeData))
const hasBasic = !!(getCredentialParam('tdUsername', credentialData, nodeData) && getCredentialParam('tdPassword', credentialData, nodeData))
if (!hasBearer && !hasBasic) {
throw new Error('Attach a Teradata credential with token, or tdUsername+tdPassword, or wire bearerToken from flow')
} Type guard
const hasTeradataAuth = (cred: Record<string, any> | undefined, inputs: any): boolean => !!(inputs?.bearerToken || cred?.token || (cred?.tdUsername && cred?.tdPassword))
Try / catch
try {
const tools = await teradataNode.getTools(nodeData, options)
} catch (e) {
if (e.message.startsWith('Missing credentials')) {
// prompt user to attach/wire credentials before retrying
}
throw e
} Prevention
- Make the bearerToken input required in the UI when no credential is attached.
- Standardize on one Teradata credential type and document its exact field names.
- In tests, assert getCredentialData returns the expected keys before invoking getTools.
When it happens
Trigger: Teradata_MCP.getTools runs with: nodeData.inputs.bearerToken empty AND credential has no 'token' field AND (credential missing tdUsername OR missing tdPassword). Also fires when the credential id in nodeData.credential does not resolve (getCredentialData returns empty) so every getCredentialParam returns undefined.
Common situations: Wrong credential type attached to the node (e.g. a generic API key cred instead of the Teradata cred); credential saved without the token/username/password fields; bearerToken input not wired from an upstream agent flow node; credential deleted but node still references it.
Related errors
- Missing Github Access Token
- Missing Slack credentials. Provide either an OAuth2 access t
- Missing Browserless API Token
- No postgres url provided
- No access token found in credential
AI-assisted analysis of FlowiseAI/Flowise@abe4a8601a (2026-08-12).
Data as JSON: /api/errors/ad4147b9f7441329.
Report an issue: GitHub.