github/copilot-sdk · error
No bearer-token provider registered for provider
Error message
No bearer-token provider registered for provider "${params.providerName}" What it means
Thrown by the session's `providerToken.getToken` API when a bearer token is requested for a provider name that has no registered bearer-token provider callback in the session's registry. The SDK cannot obtain a token for an unknown provider, so it fails fast with a descriptive message.
Solutions
- Call session.registerBearerTokenProvider(providerName, callback) for the requested provider before getToken
- Fix the providerName string to exactly match the registered key
- Ensure registration runs on the same CopilotSession instance and executes before token requests
- Log available provider names at startup to verify wiring
Example fix
// before
const token = await session.providerToken.getToken({ providerName: "anthropic" });
// after
session.registerBearerTokenProvider("anthropic", async ({ providerName }) => getAuthToken(providerName));
const token = await session.providerToken.getToken({ providerName: "anthropic" }); Defensive patterns
Strategy: validation
Validate before calling
const registered = session.listBearerTokenProviders?.() ?? [];
if (!registered.includes(providerName)) {
session.registerBearerTokenProvider(providerName, tokenCallback);
} Type guard
function canGetToken(session, providerName) {
return typeof session.listBearerTokenProviders === "function"
&& session.listBearerTokenProviders().includes(providerName);
} Try / catch
try {
return await session.providerToken.getToken({ providerName });
} catch (err) {
if (String(err?.message).startsWith("No bearer-token provider registered")) {
registerProvider(providerName);
return await session.providerToken.getToken({ providerName });
}
throw err;
} Prevention
- Register token providers for every provider name referenced in config, before first use
- Source provider names from the same constants/config module used at registration
- Log registered provider names at startup to catch wiring gaps
When it happens
Trigger: Calling providerToken.getToken({ providerName }) before registerBearerTokenProvider was called for that provider; misspelled or differently-cased provider name; token provider registered on a different session instance.
Common situations: Configuring model providers whose auth callback registration was skipped; typos like "anthropic" vs "Anthropic"; environment-specific wiring where token providers are registered only in prod bootstrap code.
Related errors
- createSessionFsProvider is required in session config when…
- SQLite is not supported by this provider
- GitHubToken and UseLoggedInUser cannot be combined with…
- No bearer-token provider registered for provider
- Missing required field 'isAuthenticated' in…
AI-assisted analysis of github/copilot-sdk@cd8cf15dc3 (2026-09-09).
Data as JSON: /api/errors/0e888c366607dcb8.
Report an issue: GitHub.
Appendix: source
Thrown at nodejs/src/session.ts:1637
* @param providers - Map of provider name → callback, or undefined/empty to clear.
* @internal This method is called internally when creating/resuming a session.
*/
registerBearerTokenProviders(providers?: Map<string, BearerTokenProvider>): void {
this.bearerTokenProviders.clear();
if (!providers || providers.size === 0) {
delete this.clientSessionApis.providerToken;
return;
}
for (const [name, callback] of providers) {
this.bearerTokenProviders.set(name, callback);
}
const self = this;
this.clientSessionApis.providerToken = {
async getToken(params) {
const callback = self.bearerTokenProviders.get(params.providerName);
if (!callback) {
throw new Error(
`No bearer-token provider registered for provider "${params.providerName}"`
);
}
const token = await callback({
providerName: params.providerName,
sessionId: params.sessionId,
});
return { token };
},
};
}
/**
* Registers command handlers for this session.
*
* @param commands - An array of command definitions with handlers, or undefined to clear
* @internal This method is typically called internally when creating/resuming a session.
*/View on GitHub (pinned to cd8cf15dc3)