[BUG] claude.ai web: private personal repo not accessible via "Add from GitHub" despite Claude GitHub App installed with access granted (backend index/sync issue)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The claude.ai web GitHub integration cannot access a PRIVATE repository on my
personal GitHub account, even though the official Claude GitHub App
(github.com/apps/claude) is installed with access granted.
Account: sivanhasson (personal account)
Repository: sivanhasson/MomLee (private)
What works:
- Claude GitHub App is installed via github.com/apps/claude/installations/new
with repository access granted (visible in github.com/settings/installations)
- The "Add from GitHub" repo picker in claude.ai DOES show the MomLee repo,
and selecting it inserts the repo link into the chat
What fails:
- After selecting the repo, Claude cannot read any files from it. The GitHub
connector tools are never available in the conversation, so the linked repo
is unreadable.
- Reproduced in a brand-new chat (fresh conversation, repo added as the first
message) — same result.
- Public repos on the same account appear and behave normally; only the
private repo is affected.
Note: initially the claude.ai connection flow completed as OAuth-only with no
app installation step (Claude appeared under "Authorized GitHub Apps" as
"Never used" but not under "Installed GitHub Apps"). I installed the app
manually via github.com/apps/claude/installations/new, which made the repo
appear in the picker, but file access still fails.
This appears to be the same backend indexing issue for personal-account
private repositories described in #33875, #68517, #64130, and #27155.
Request: please trigger a backend repository index reset / re-sync for
account sivanhasson.
What Should Happen?
After linking a private repository via "Add from GitHub" in claude.ai
(with the Claude GitHub App installed and repository access granted),
Claude should be able to read the repository's file tree and file
contents in the conversation — the same way it already works for
public repositories on the same account.
Error Messages/Logs
No explicit error message is shown. The repo link is inserted into the
chat, but Claude reports it has no GitHub tools available in the
conversation and cannot read any files from the linked repository.
Steps to Reproduce
- Install the Claude GitHub App (github.com/apps/claude/installations/new)
on a personal account, grant access including the private repo
- In claude.ai web, open a new chat and use "+ → Add from GitHub"
- Select the private repo (sivanhasson/MomLee), branch main — the picker
shows it and inserts the repo URL into the conversation
- Ask Claude to read the repo — Claude has no GitHub tools available and
cannot access any files
Claude Model
None
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
N/A — claude.ai web integration, not CLI
Platform
Other
Operating System
Windows
Terminal/Shell
Other
Additional Information
IMPORTANT: This is NOT a Claude Code CLI issue — it is the GitHub
integration in claude.ai (web), Chrome on Windows 11, personal Claude
account.
- Repository type: private repo on a personal GitHub account
(sivanhasson/MomLee). Public repos on the same account work fine.
- Claude GitHub App installed via github.com/apps/claude/installations/new,
access granted, visible under github.com/settings/installations.
- Same symptom as #68517, #33875, #64130, #27155 (personal-account
private repos not indexed on the backend despite full app access).
- Requesting a backend repository index reset / re-sync for GitHub
account: sivanhasson
Screenshots attached.
<img width="818" height="460" alt="Image" src="https://github.com/user-attachments/assets/9706d23e-0e97-4c31-9e09-629d3a2a893e" />
<img width="584" height="193" alt="Image" src="https://github.com/user-attachments/assets/a3522a11-ec17-4be5-8b56-ebac4dd59a2a" />
3 Comments
I hit this exact failure signature and burned weeks on it, so here's what actually fixed it on my account.
First, the misdiagnosis to rule out
GitHub returns 404, not 403, for a private repo your token can't see. That's deliberate, so repo existence doesn't leak. So a 404 means invisible, not missing, and it looks identical to a typo'd repo name. Confirm the exact repo name with
git ls-remote https://github.com/<owner>/<repo>before you diagnose anything else.Also:
get_mesucceeding proves nothing. It only confirms the token authenticates. The real test is a direct file fetch on a known private repo. Search results alone will lie to you, since search API coverage is weak even when direct access works fine.Why disconnect/reconnect never fixes it
The repository grant lives at
github.com/settings/installations, on GitHub's side. Disconnecting the connector in Claude does not touch it. On reconnect, the stale OAuth grant gets silently reused and the repository-selection screen never reappears. You can repeat that loop forever and never change anything. I know because I did.The fix: use your own OAuth App
1. Create the OAuth App
github.com → Settings → Developer settings → OAuth Apps → New OAuth App
https://github.com/<your-username>https://claude.ai/api/mcp/auth_callbackThat callback URL is Claude's, not a GitHub one. And put your profile URL in the Homepage field, not the Copilot MCP URL. That's the step most write-ups get wrong.
2. Capture the credentials
Copy the Client ID and generate the Client Secret. The secret is shown once. Store it somewhere safe now.
3. Add the custom connector in Claude
claude.ai → Settings → Connectors → Add custom connector
https://api.githubcopilot.com/mcp/4. Connect
Authorize against your own OAuth App. That grant covers your whole account, private repos included.
5. Disconnect the built-in GitHub integration
This one matters and isn't documented anywhere. Two GitHub connectors active at the same time conflict. The custom one has to run solo.
6. Verify in a fresh thread
Direct file fetch on a known private repo. Not search.
Why this works
Those OAuth Client ID/Secret fields in Advanced Settings exist for MCP servers that don't support Dynamic Client Registration. GitHub's server does support DCR, which is why every guide tells you to leave them blank. Filling them in swaps your own OAuth App in as the authorization entity and bypasses the broken GitHub App layer entirely.
Trade-offs, so you go in with eyes open
github.com/settings/applicationsandgithub.com/settings/installations.If you go the PAT route instead: fine-grained tokens default to zero repository access. You have to explicitly set Repository access and add Contents, Metadata, and Pull requests permissions. Short expiry, and revoke anything you've pasted into a chat window.
Hope this saves someone else the weeks it cost me.
Thanks, yes been banging my head against the wall with the built-in Github connector, the OAuth workaround helped, thanks @davelovenina-rgb
The invalid label is incorrect. I'm having the same problem, want to use project with a github as an external repository of a research, it's not claude-code. Like chatGPT.