Troubleshoot connections and permissions
Resolve OAuth failures, wrong accounts, revoked access, missing resources, and confused connection types.
Start by identifying which connection owns the workflow.
| Settings area | Purpose |
|---|---|
| Settings → Organization → Integrations | Slack and Discord (shared by the organization), Linear, Jira, Asana, Basecamp, Notion, and the GitHub App |
| Settings → Project → Trace imports | Source connections for importing traces from other observability platforms |
| Settings → Account → Tools & MCP | Your own connected apps, personal GitHub access, and custom MCP servers used by AI workflows |
| Settings → Account → Coding agents | Your own Claude Code, Codex, and Cursor credentials |
| Settings → Project → AI Providers | Model keys for supported Neatlogs AI features |
Slack and Discord are shared organization connections. Credentials for the other organization integrations belong to the person who connected them.
A personal GitHub tool connection does not enable repository dispatch; that uses the organization's GitHub App. A Slack integration does not automatically let an investigation read channel history.
OAuth does not complete
Preserve the error shown on the settings page (it has a Dismiss button), then check:
- browser pop-up and cookie restrictions (Tools & MCP apps open in a new tab; if it is blocked, allow pop-ups for Neatlogs and select Connect again);
- external account currently signed in;
- correct Neatlogs region (
app.neatlogs.comoreu.app.neatlogs.com); - external administrator approval;
- app installation in the intended organization or workspace;
- requested scopes;
- whether the authorization session expired, in which case start again from the settings page.
Do not keep retrying with different accounts without recording which one was active.
The wrong account is connected
- open the connection from the settings area that owns it and select Disconnect;
- sign out or switch accounts at the external provider;
- connect again;
- confirm the account shown (for example Connected as on an organization integration);
- test one safe resource.
Personal tool connections and organization integrations can legitimately use different accounts. Verify the connection type before removing either.
Access was revoked or expired
Jira, Asana, and Basecamp tokens refresh in the background. For other connections, reconnect when access expires or is revoked:
- organization integrations: Disconnect, then connect again;
- Tools & MCP apps: Reauthorize, or Check connection to confirm the current state;
- personal GitHub: Reconnect GitHub or Replace token;
- GitHub App: Reconnect GitHub App.
If the external app was removed from a workspace, organization, or repository, reinstall or reauthorize it there as well.
Rotating an API key and renewing OAuth are different operations.
For trace import connections, an organization owner or administrator can select Re-verify in Settings → Integrations. Neatlogs tests the saved connection again and reports how many source projects are visible. Re-verification does not start a new import job or change an existing mapping.
A repository, channel, or project is missing
Check both permission layers:
External provider
- Can the connected account see the resource?
- Does the app installation include it?
- Is the Slack app a member of the channel?
- Does the key belong to the correct project or region?
Neatlogs
- Is the user in the correct organization and project?
- Can their role configure the connection? Any organization member can connect Slack, Linear, Jira, Notion, Asana, or Basecamp. Discord, the GitHub App, and trace-import sources need an organization owner or admin.
- Is the tool granted to the evaluator?
- For incident evidence from Slack or Discord, has a project admin selected Authorize thread under Issue evidence access?
- Is the destination supported by that workflow?
A custom MCP connection fails
Custom MCP servers are added under Settings → Account → Tools & MCP, on the Custom MCP tab. Only you can use a server you add, and header values are write-only.
Check:
- the Server URL uses HTTPS and points at a Streamable HTTP MCP endpoint;
- the host is publicly reachable from Neatlogs;
- the URL does not redirect (redirects are rejected);
- the Authentication headers are correct (an
Auth rejectedresult means the server returned 401 or 403); - the server answers the MCP initialize request within a few seconds;
- the result of Test saved connection (a test also runs when you select Save server).
Turn on Available for evaluator grants only for servers an evaluator needs, then grant the tool in that evaluator.
Diagnose by symptom
| Symptom | Likely boundary |
|---|---|
| OAuth callback fails | Browser, provider app, account, or an expired authorization session |
| Connection succeeds but resource list is empty | External account scope or installation |
| Connect fails for Discord or the GitHub App | Requires an organization owner or admin |
| Admin can configure but reviewer cannot use | Project role or evaluator tool grant |
| Alert delivery works but AI cannot read Slack | Separate evidence authorization or Tools & MCP access |
| Personal GitHub search works but dispatch is unavailable | Organization GitHub App |
| Provider test works but model is missing | Workflow-specific model support |
Frequently asked questions
Does connecting an app make it available to every AI evaluator?
No. An evaluator can use a tool only when it is granted to that evaluator. Your own Tools & MCP connections are used by the AI assistants you run, with your permissions.
Does a personal GitHub tool enable fix dispatch?
No. Conversational tools and organization integrations serve different workflows.
Why can an administrator connect an app but I cannot use it?
Project role, external account access, evaluator grant, or repository and channel scope may still exclude it. Personal connections also belong only to the person who made them.
What should I send support?
Connection type, provider, organization and project, region, external account identifier without secrets, timestamp, the exact error, and the missing resource name.
