[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)

Status Open
Maintainer reply None cached
Activity 3 comments · opened Sep 2, 2026

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

  1. Install the Claude GitHub App (github.com/apps/claude/installations/new)

on a personal account, grant access including the private repo

  1. In claude.ai web, open a new chat and use "+ → Add from GitHub"
  2. Select the private repo (sivanhasson/MomLee), branch main — the picker

shows it and inserts the repo URL into the conversation

  1. 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" />

View original on GitHub ↗

3 Comments

davelovenina-rgb · 1 month ago

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_me succeeding 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

  • Homepage URL: your own GitHub profile URL, e.g. https://github.com/<your-username>
  • Authorization callback URL: https://claude.ai/api/mcp/auth_callback
  • Device Flow: off

That 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

  • Remote MCP server URL: https://api.githubcopilot.com/mcp/
  • Open Advanced Settings and paste your OAuth Client ID and Client Secret there

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

  • OAuth Apps cannot be repo-scoped. The grant is account-wide. For a personal account that's usually acceptable; for anything shared, think it through first.
  • One callback URL per OAuth App. If Claude's callback ever moves to a different domain, update that field.
  • Audit your grants periodically at github.com/settings/applications and github.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.

karlhinze · 26 days ago

Thanks, yes been banging my head against the wall with the built-in Github connector, the OAuth workaround helped, thanks @davelovenina-rgb

fams · 24 days ago

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.