Preflight Checklist
What's Wrong?
n Claude Code Sessions (CCR), the Anthropic-hosted GitHub MCP server at https://api.anthropic.com/v2/ccr-sessions//github/mcp exposes a pair of tools that don't compose:
mcp__github__pull_request_read with method get_review_comments returns review threads with no id field.
mcp__github__resolve_review_thread (and pull_request_review_write method resolve_thread) require a GraphQL thread node ID (PRRT_kwDO…) and explicitly say in their description to "Get thread IDs from pull_request_read with method get_review_comments."
Result: the /review skill can post replies after addressing comments but cannot programmatically resolve the threads. Every session in this environment leaves stale unresolved threads requiring manual UI clicks.
The actual response shape from get_review_comments for each thread:
{
"is_resolved": true,
"is_outdated": true,
"is_collapsed": true,
"comments": [ { "body": "...", "path": "...", "author": "...",
"created_at": "...", "updated_at": "...", "html_url": "..." } ],
"total_count": 1
}
No id, no databaseId, no node identifier at the thread or comment level. So the threadId required by the resolve tools cannot be obtained or derived in-session.
What Should Happen?
get_review_comments should include the GraphQL id (and ideally databaseId) on each review_threads[] entry, matching what resolve_review_thread and pull_request_review_write.resolve_thread document as their input source. Expected shape:
{
"id": "PRRT_kwDOQKV1Cs6-U6j9",
"databaseId": 12345678,
"is_resolved": false,
"is_outdated": false,
"is_collapsed": false,
"comments": [ ... ],
"total_count": 1
}
With that one field present, the existing resolve tools become usable, the /review skill's resolve-after-fix step works end-to-end, and there is no consumer-side change needed (the resolve tools already accept this exact node-ID format).
Steps to reproduce
In any Claude Code Session scoped to a repo with a PR that has review threads, call:
mcp__github__pull_request_read({
method: "get_review_comments",
owner: "videofactsai",
repo: "portfolio-paths",
pullNumber: 205,
perPage: 3
})
Inspect any element of the returned review_threads[] array.
Observe that the keys are exactly is_resolved | is_outdated | is_collapsed | comments | total_count — no thread id.
Try to call mcp__github__resolve_review_thread — there is no value available to pass as threadId.
Verified across perPage 3 / 5 / 100, page 1 / 2 / 3, and after an MCP server reconnect within the same session. Any PR with review threads reproduces.
Workaround
None in this environment. CCR sessions have no gh CLI, no GITHUB_TOKEN, and no direct GitHub API access — all confirmed in env. Other Claude environments fall back to gh api graphql to fetch the missing node IDs; that path is unavailable here. Manual resolution in the GitHub UI is the only option until fixed.
Environment
Claude Code: 2.1.131
Model: Claude Opus 4.7 (claude-opus-4-7[1m]); reproduces independent of model
Surface: Claude Code Session (CCR) on Anthropic infrastructure
MCP server URL pattern: https://api.anthropic.com/v2/ccr-sessions//github/mcp
MCP server ID: 735f0525-e70b-533b-8355-c868c8e04799
Repo scope: videofactsai/portfolio-paths (any repo reproduces)
Platform: Linux 6.18.5
Error Messages/Logs
Steps to Reproduce
In any Claude Code Session scoped to a repo with a PR that has review threads, call:
mcp__github__pull_request_read({
method: "get_review_comments",
owner: "videofactsai",
repo: "portfolio-paths",
pullNumber: 205,
perPage: 3
})
Inspect any element of the returned review_threads[] array.
Observe that the keys are exactly is_resolved | is_outdated | is_collapsed | comments | total_count — no thread id.
Try to call mcp__github__resolve_review_thread — there is no value available to pass as threadId.
Verified across perPage 3 / 5 / 100, page 1 / 2 / 3, and after an MCP server reconnect within the same session. Any PR with review threads reproduces.
Workaround
None in this environment. CCR sessions have no gh CLI, no GITHUB_TOKEN, and no direct GitHub API access — all confirmed in env. Other Claude environments fall back to gh api graphql to fetch the missing node IDs; that path is unavailable here. Manual resolution in the GitHub UI is the only option until fixed.
Claude Model
Opus
Is this a regression?
No, this never worked
Last Working Version
No response
Claude Code Version
Claude Code 2.1.131, model Claude Opus 4.7 (claude-opus-4-7[1m])
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
No response
Preflight Checklist
What's Wrong?
n Claude Code Sessions (CCR), the Anthropic-hosted GitHub MCP server at https://api.anthropic.com/v2/ccr-sessions//github/mcp exposes a pair of tools that don't compose:
mcp__github__pull_request_read with method get_review_comments returns review threads with no id field.
mcp__github__resolve_review_thread (and pull_request_review_write method resolve_thread) require a GraphQL thread node ID (PRRT_kwDO…) and explicitly say in their description to "Get thread IDs from pull_request_read with method get_review_comments."
Result: the /review skill can post replies after addressing comments but cannot programmatically resolve the threads. Every session in this environment leaves stale unresolved threads requiring manual UI clicks.
The actual response shape from get_review_comments for each thread:
{
"is_resolved": true,
"is_outdated": true,
"is_collapsed": true,
"comments": [ { "body": "...", "path": "...", "author": "...",
"created_at": "...", "updated_at": "...", "html_url": "..." } ],
"total_count": 1
}
No id, no databaseId, no node identifier at the thread or comment level. So the threadId required by the resolve tools cannot be obtained or derived in-session.
What Should Happen?
get_review_comments should include the GraphQL id (and ideally databaseId) on each review_threads[] entry, matching what resolve_review_thread and pull_request_review_write.resolve_thread document as their input source. Expected shape:
{
"id": "PRRT_kwDOQKV1Cs6-U6j9",
"databaseId": 12345678,
"is_resolved": false,
"is_outdated": false,
"is_collapsed": false,
"comments": [ ... ],
"total_count": 1
}
With that one field present, the existing resolve tools become usable, the /review skill's resolve-after-fix step works end-to-end, and there is no consumer-side change needed (the resolve tools already accept this exact node-ID format).
Steps to reproduce
In any Claude Code Session scoped to a repo with a PR that has review threads, call:
mcp__github__pull_request_read({
method: "get_review_comments",
owner: "videofactsai",
repo: "portfolio-paths",
pullNumber: 205,
perPage: 3
})
Inspect any element of the returned review_threads[] array.
Observe that the keys are exactly is_resolved | is_outdated | is_collapsed | comments | total_count — no thread id.
Try to call mcp__github__resolve_review_thread — there is no value available to pass as threadId.
Verified across perPage 3 / 5 / 100, page 1 / 2 / 3, and after an MCP server reconnect within the same session. Any PR with review threads reproduces.
Workaround
None in this environment. CCR sessions have no gh CLI, no GITHUB_TOKEN, and no direct GitHub API access — all confirmed in env. Other Claude environments fall back to gh api graphql to fetch the missing node IDs; that path is unavailable here. Manual resolution in the GitHub UI is the only option until fixed.
Environment
Claude Code: 2.1.131
Model: Claude Opus 4.7 (claude-opus-4-7[1m]); reproduces independent of model
Surface: Claude Code Session (CCR) on Anthropic infrastructure
MCP server URL pattern: https://api.anthropic.com/v2/ccr-sessions//github/mcp
MCP server ID: 735f0525-e70b-533b-8355-c868c8e04799
Repo scope: videofactsai/portfolio-paths (any repo reproduces)
Platform: Linux 6.18.5
Error Messages/Logs
Steps to Reproduce
In any Claude Code Session scoped to a repo with a PR that has review threads, call:
mcp__github__pull_request_read({
method: "get_review_comments",
owner: "videofactsai",
repo: "portfolio-paths",
pullNumber: 205,
perPage: 3
})
Inspect any element of the returned review_threads[] array.
Observe that the keys are exactly is_resolved | is_outdated | is_collapsed | comments | total_count — no thread id.
Try to call mcp__github__resolve_review_thread — there is no value available to pass as threadId.
Verified across perPage 3 / 5 / 100, page 1 / 2 / 3, and after an MCP server reconnect within the same session. Any PR with review threads reproduces.
Workaround
None in this environment. CCR sessions have no gh CLI, no GITHUB_TOKEN, and no direct GitHub API access — all confirmed in env. Other Claude environments fall back to gh api graphql to fetch the missing node IDs; that path is unavailable here. Manual resolution in the GitHub UI is the only option until fixed.
Claude Model
Opus
Is this a regression?
No, this never worked
Last Working Version
No response
Claude Code Version
Claude Code 2.1.131, model Claude Opus 4.7 (claude-opus-4-7[1m])
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
No response