AttributeError: 'BYOAccessTokenOAuthConfig' object has no attribute 'client_id'
Fixes mcp-atlassian crashing at request time when both a placeholder OAuth token and full OAuth config are set. Use when tool calls raise this AttributeError. Not for missing config values.
AttributeError: 'BYOAccessTokenOAuthConfig' object has no attribute 'client_id'
TL;DR: Remove the placeholder JIRAOAUTHACCESSTOKEN or CONFLUENCEOAUTHACCESSTOKEN env value, or drop the full OAuth client config; do not set both. The placeholder switches the server into bring-your-own-token mode, which has no client_id, and the per-user path crashes reading it. Upgrading to a patched version also guards the read with a fallback.
The error
AttributeError: 'BYOAccessTokenOAuthConfig' object has no attribute 'client_id'Fix it
- Search your server env for JIRAOAUTHACCESSTOKEN or CONFLUENCEOAUTHACCESSTOKEN placeholders.
Expected: You find a placeholder value set.
- Check whether full OAuth clientid, clientsecret, redirect_uri are also set.
Expected: Both are set, which is the conflict.
- Remove the placeholder token values (or the full client config, whichever you do not use).
Expected: Only one auth mode remains configured.
- Restart the server and retry the tool call.
Expected: The AttributeError is gone.
When this applies
mcp-atlassian raises this exact AttributeError on tool calls in a per-user OAuth deployment where placeholder access tokens were left in the env.
When this does NOT apply
If the error names a different missing attribute, read which config is absent. Plain 401s are auth, not this crash.
Tool compatibility
sooperset/mcp-atlassian, per-user OAuth deployments
Also seen as
- BYOAccessTokenOAuthConfig client_id
- mcp-atlassian OAuth AttributeError
- placeholder OAuth token conflict
Why it happens
Setting a placeholder *OAUTHACCESSTOKEN makes the global config a BYOAccessTokenOAuthConfig, which lacks clientid and friends. The per-request code reads those fields directly and crashes. The fix guards the read and treats the conflict as config error.
Edge cases
- Docker env files often carry stale placeholders; audit them.
- The per-request OAuth proxy path is the one that crashes; single-user mode may look fine.
- After removing the placeholder, delete the stored session so the old config is not reused.
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.