[BUG] Claude Code on the web: Claude Design handoff session can push a branch but has no GitHub MCP tools, so it cannot open the PR for the branch it just pushed

Status Open
Reported on v2.1.247
Maintainer reply None cached
Activity 0 comments · opened Aug 28, 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?

Surface: Claude Code on the web (claude.ai/code), Anthropic-hosted cloud session.

A cloud session created by the Claude Design -> Claude Code handoff (session tag omelette-handoff) is missing the GitHub MCP tools that a normal claude.ai/code session has. It can attach repos with add_repo, clone them, commit and git push - but it cannot create a pull request, because PR creation on this surface goes through GitHub MCP tools, not raw HTTP.

Net effect: the session does the whole job and pushes the branch, then cannot open the PR for the branch it just pushed. The user has to open a second, normal claude.ai/code session to finish that last step.

| Operation | Handoff session | Normal claude.ai/code session |
|---|---|---|
| add_repo + git clone | works | works |
| git push -u origin <branch> | works | works |
| GitHub MCP tools (create PR, ...) | not present at all | present and working |
| curl https://api.github.com/... | 403 | 403 (same - not the issue) |
| gh CLI | not installed | not installed |

The curl 403 is a red herring: raw api.github.com is blocked in both session types, which is expected given the credential-proxy design. The real difference is tool availability.

I verified this by spawning a sibling session in one of the account's real cloud environments via create_session and having it probe the same repo. Its result: "403 via curl; MCP works." Same curl behaviour, different tools. In the handoff session a tool search for GitHub PR/issue tooling returns nothing - there is no create_pull_request capability of any kind.

Environment detail: the handoff session's environment_id is env_011111111111111111111114, which does not appear in the account's list_environments output (that lists two normal cloud environments, ids beginning env_0196... and env_01EN...). It looks synthetic rather than a real configured cloud environment.

Secondary papercut in the same sessions: the clone's fetch refspec is narrowed to +refs/heads/main:refs/remotes/origin/main, so git push -u on a NEW branch cannot create its remote-tracking ref. git status -sb then shows no upstream, and anything counting commits against @{u} reports everything as unpushed even though the branch is on GitHub. Recovering needs a manual git config --add remote.origin.fetch ... plus branch.<name>.remote/merge.

What Should Happen?

Either:

(a) handoff sessions get the same GitHub MCP tooling a normal claude.ai/code session has - the session already has push rights, so withholding exactly the step that follows a push is a strange boundary; or

(b) if that is deliberate: say so at session start, and make the fallback error name the real cause and remedy, e.g. "This session type has no GitHub tools. Open a normal claude.ai/code session to create the PR."

Suggested fixes, most useful first:

  1. Attach the GitHub MCP server to Design-handoff sessions.
  2. Fix the 403 message so it names the session-scoped cause instead of an org-level one.
  3. Surface the limitation at session start, so the agent can warn before doing work that ends in an un-openable PR.
  4. Widen the fetch refspec (or have push -u write the tracking config) so a new branch gets its remote-tracking ref.

Error Messages/Logs

POST https://api.github.com/repos/<owner>/<repo>/pulls
{
  "message": "GitHub access is not enabled for this session. An org admin must connect the Claude GitHub App for this organization.",
  "documentation_url": "https://docs.anthropic.com/en/docs/claude-code/github-actions"
}

Same for a read-only call, so it is not a write-scope issue:

GET https://api.github.com/repos/<owner>/<repo>
{
  "message": "GitHub access is not enabled for this session. An org admin must connect the Claude GitHub App for this organization.",
  "documentation_url": "https://docs.anthropic.com/en/docs/claude-code/github-actions"
}

This message is actively misleading: it names an ORG-level remedy, but the GitHub App IS connected for this account - a normal claude.ai/code session on the same account creates PRs fine. The condition is session/tooling-scoped, not org-scoped. Acting on the message, the agent told the user "an org admin must connect the app", which was false and would have sent them chasing a permissions problem that does not exist.

Steps to Reproduce

  1. In Claude Design, produce a design and use the handoff into Claude Code on the web.
  2. In the resulting claude.ai/code session, attach a private repo with add_repo and clone it. -> works
  3. Make changes, commit, git push -u origin <branch>. -> works, the branch appears on GitHub
  4. Ask the session to open a PR for that branch. -> no GitHub MCP tool exists; the curl fallback returns the 403 above
  5. Repeat steps 2-4 in a normal claude.ai/code session started from the sidebar -> PR creation works

Claude Model

Opus

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.247 (cloud container, Claude Code on the web)

Platform

Anthropic API

Operating System

Other Linux

Terminal/Shell

Other

Additional Information

Related issues

  • #51980 - "Send to Claude Code Web" from Claude Design opens a session with no way to connect a GitHub repo. Closed as stale. Related but earlier along the same path: repo attachment now works via add_repo, so the failure moved one step later, to PR creation.
  • #84581 - Cowork cloud sessions cannot access any GitHub repository. Different surface, similar shape.
  • #57641 - request for user-OAuth read access to repos without App installation.

Workarounds that do work

  • Open a normal claude.ai/code session and create the PR there.
  • /teleport into the terminal, where the local gh token applies.
  • Create the PR by hand from the compare URL GitHub prints after the push.

Notes on the form fields above

This is a cloud session: "Operating System" is the container (Linux), and there is no terminal at all - the surface is the claude.ai/code web UI. The Claude Code version is container-managed: 2.1.247 in the handoff session and 2.1.248 in the sibling session spawned minutes later, so "latest version" is not under the user's control.

On the duplicate GitHub suggests (#42243)

GitHub flags #42243 ("Claude Code web inconsistently provides GitHub MCP tools for private repos", closed as not planned) as a potential duplicate. It describes the same missing mcp__github__* tools, but as intermittent - "sometimes available, sometimes not". This report is the deterministic case behind that: the tools are reliably absent in Claude Design handoff sessions and reliably present in normal claude.ai/code sessions on the same account, with the session tag and a synthetic environment id as the distinguishing signal. Filed separately because the reproducible trigger is new information - happy to see it merged into #42243 if you prefer.

View original on GitHub ↗