Repository navigation
chore: sync with upstream sentry-mcp v0.39.0 (rebased onto upstream/main) - #74
Open
github-actions[bot] wants to merge 16 commits into
Open
github-actions[bot] wants to merge 16 commits into
github-actions[bot] wants to merge 16 commits into
Conversation
…#1260) `--disable-skills=seer` (getsentry#794) removes `analyze_issue_with_seer` from the active tool set, but it does not stop `get_issue_details` from requesting Seer autofix state. The call lives in `fetchIssueEnrichmentData` and is never gated on the granted skills: ```ts const [autofixState, externalIssues, relatedReplayIds] = await Promise.all([ apiService .getAutofixState({ organizationSlug, issueId: issue.shortId }) .catch(() => undefined), ... ``` `get_issue_details` belongs to `["inspect", "triage", "seer"]`, so disabling `seer` leaves the tool available through the other two skills — and every lookup still hits `/api/0/organizations/{org}/issues/{issue}/autofix/`. ### Why it matters On a deployment without Seer that endpoint is a guaranteed 500: `GroupAutofixEndpoint.get` calls through to Seer with no transport-error handling, so an unreachable Seer surfaces as an unhandled `ConnectionError`. The failure is invisible from the client side — `.catch(() => undefined)` swallows it and the tool output is unaffected — so the flag looks like it works. But the request still goes out, and the target instance logs a 5xx for every issue lookup. Observed on a self-hosted instance: 105 × HTTP 500 in 30 minutes from a single agent session, all from `get_issue_details`, at ~30/min. Ingress error-rate alerting is usually a *ratio*, so on a low-traffic instance this reads as a ~20% error rate and pages. ### Change Gate the autofix fetch on the `seer` skill, so the flag that already exists suppresses the request as well as the tool: ```ts function isSeerGranted(context: ServerContext): boolean { return context.grantedSkills ? context.grantedSkills.has("seer") : true; } ``` An unknown granted set keeps the previous behaviour and fetches, so nothing changes for callers that don't configure skills. `ServerContext.grantedSkills` is populated by both transports (stdio via `--skills` / `--disable-skills`, remote via `?skills=` / `?disable-skills=`), so this works for hosted sessions too. ### Notes - Two tests added: autofix is not requested when `seer` is absent from the granted set, and still requested when present. - `packages/mcp-core` tsc and `biome check` are clean for the touched files. The pre-existing `msw` import-sort finding in `get-issue-details.test.ts` is left alone — it reproduces on `main`. - This is deliberately scoped to honouring the existing flag. It does not help a caller who leaves all skills enabled; the general fix for that belongs upstream in `sentry`, where the endpoint should degrade instead of raising when Seer is unreachable. --- 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sentry objectstore-backed attachments intentionally store empty checksums on the attachment model. `get_event_attachment` was still requiring and printing that SHA1, which made list output look broken even when size and download metadata were fine. This removes attachment SHA1 from the event attachment schema and from list/download tool output. Upstream API responses may still include the field; we no longer depend on it. Ref FS-491 Ref getsentry/sentry#122260 <!-- junior-request-attribution:start --> Requested by **async jauer**. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AD0AQCS7VDC2%3A1787658082.396219 --> -- [View Junior Session](https://junior-prod.sentry.dev/conversations/slack%3AD0AQCS7VDC2%3A1787658082.396219) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AD0AQCS7VDC2%3A1787658082.396219/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Jan Michael Auer <jan.auer@sentry.io>
…y#1175) Earlier this year `GET /api/0/organizations/` had a control silo implementation added. This endpoint lets avoid multi-region fanouts as we can get all the necessary information from a single request. Refs getsentry/sentry#118963
- Align MCP AI conversation tools with Sentry’s current agent conversation API. - Update specs and coverage for the renamed routes. Co-authored-by: Codex CLI Agent <noreply@openai.com>
Renames the Agent Conversation MCP catalog tools and keeps existing clients working by registering the previous AI conversation tool names as deprecated catalog entries that reuse the new tool handlers. Legacy AI conversation wording still discovers the Agent tools first, while exact old-name calls remain compatible. Closes TET-2825 Co-authored-by: Codex CLI Agent <noreply@openai.com>
Sentry onboarding runs now store project slugs and verification issue IDs in stage-specific `extra` objects. This updates the API schemas, outgoing status payloads, response parsing, and mocks to follow the contract introduced by getsentry/sentry#122076. The `onboarding_status_update` tool now accepts a nested `update` object whose schema discriminates on `stage`. Callers must move `stage`, `status`, `runStatus`, and `eventNote` under `update`, and send `projectSlugs` or `issueIds` through that stage's `extra` object.
…1275) Stops [MCP-SERVER-G8A](https://sentry.sentry.io/issues/7697335091/) from paging on Cloudflare Web Analytics noise. The stack is entirely in `static.cloudflareinsights.com/beacon.min.js` on Mobile Safari 13 (`TypeError: t.entries.at is not a function`). That script is injected by Cloudflare Web Analytics, not our HTML. Uses `allowUrls: [window.location.origin]` so we only keep first-party exceptions. Assets are same-origin (`/assets/...` on mcp.sentry.dev), so this covers prod/canary/local without a vendor denylist. <!-- junior-request-attribution:start --> Requested by **David Cramer**. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AC08J1NSPU6S%3A1787941569.594509 --> -- [View Junior Session](https://junior-prod.sentry.dev/conversations/slack%3AC08J1NSPU6S%3A1787941569.594509) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC08J1NSPU6S%3A1787941569.594509/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: David Cramer <david@sentry.io>
…ry#1276) ## Summary Fixes getsentry#1274. When the MCP client dies and closes stderr, the old fatal handlers could throw while logging, get re-invoked forever, and leave orphaned processes spinning at 100%+ CPU. ### Key Changes - One shared exit path for uncaught exceptions, unhandled rejections, and stdio startup failures - Catch logging/reporting failures so a dead stderr cannot throw inside the handler - Always `process.exit(1)`, including a timeout if Sentry flush hangs ### Breaking Changes - None <!-- junior-request-attribution:start --> Requested by **David Cramer**. <!-- junior-request-attribution:end --> <!-- junior-session-footer:start --> <!-- junior-conversation-id:slack%3AC08J1NSPU6S%3A1787941530.610869 --> -- [View Junior Session](https://junior-prod.sentry.dev/conversations/slack%3AC08J1NSPU6S%3A1787941530.610869) [[Sentry]](https://sentry.sentry.io/explore/conversations/slack%3AC08J1NSPU6S%3A1787941530.610869/?project=4510944073809921) <!-- junior-session-footer:end --> --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: David Cramer <david@sentry.io>
Reset to upstream/main (77c8b1a) and re-applied fork-specific changes on top, so every upstream commit SHA is present in our history (0 commits behind). Fork-specific changes re-applied: - packages/mcp-cloudflare-fields (Fields Cloudflare deployment package) - .github/workflows/deploy-fields.yml (fork deploy workflow) - .github/workflows/sync-upstream.yml (fork sync workflow) - All upstream Sentry workflows kept disabled (.disabled suffix); the .github/workflows tree is byte-identical to the previous main, since the Actions token cannot push workflow-file changes - @fields/mcp-cloudflare bumped 0.37.0 -> 0.39.0 to match @sentry/mcp-cloudflare - pnpm-lock.yaml regenerated (additive: fields importer only) Co-Authored-By: opencode/claude-opus-5 <noreply@opencode.ai>
github-actions
Bot
force-pushed
the
sync-upstream-20260831-resolved
branch
from
August 31, 2026 08:06
566ab25 to
d7cf08d
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Syncs the fork with upstream
getsentry/sentry-mcp(upstream/main@77c8b1a, includes releases 0.38.0 and 0.39.0).The automatic rebase failed on conflicts, so this branch was rebuilt with the reset strategy: branch created directly from
upstream/main, then fork-specific changes re-applied as a single commit on top. This guarantees every upstream commit SHA is in our history, so GitHub reports 0 commits behind.Upstream changes included (15 commits)
chore(event formatter): add new event formatter to mcp (chore(event formatter): add new event formatter to mcp getsentry/toolkit#1162)fix(stdio): exit cleanly when fatal logging hits a dead pipe (fix(stdio): exit cleanly when fatal logging hits a dead pipe getsentry/toolkit#1276)fix(client): allowlist first-party URLs in browser Sentry (fix(client): allowlist first-party URLs in browser Sentry getsentry/toolkit#1275)fix(tools): stop sparse structured side-channels on issue/trace (fix(tools): stop sparse structured side-channels on issue/trace getsentry/toolkit#1272)release: 0.39.0fix(api): support stage-specific onboarding metadata (fix(api): Support stage-specific onboarding metadata getsentry/toolkit#1266)release: 0.38.0fix(api): don't fanout across regions forGET /organizations(fix(api) Don't fanout across regions for GET /organizations getsentry/toolkit#1175)fix(attachments): stop using attachment SHA1 metadata (fix(attachments): stop using attachment SHA1 metadata getsentry/toolkit#1265)chore: cleanup core (chore: cleanup core getsentry/toolkit#1264)fix(tools): skip autofix fetch when seer skill is disabled (fix(tools): skip autofix fetch when seer skill is disabled getsentry/toolkit#1260)Fork-specific changes re-applied
packages/mcp-cloudflare-fields/packages/mcp-cloudflarepreserved).github/workflows/deploy-fields.yml.github/workflows/sync-upstream.ymldeploy-fields.ymlandsync-upstream.ymlare active.ymlfiles@fields/mcp-cloudflareversion0.37.0→0.39.0to match@sentry/mcp-cloudflarepnpm-lock.yamlShared dependencies in
packages/mcp-cloudflare-fields/package.jsonwere diffed againstpackages/mcp-cloudflare/package.json—dependenciesanddevDependenciesare identical (no missing, extra, or version-drifted entries).Verification
pnpm run tsc— pass (7/7 tasks)pnpm run lint— pass (2 pre-existing upstream warnings)pnpm run test— pass (419 tests, 32 files), including the@fields/mcp-cloudflarepackagepnpm install --frozen-lockfile— pass (lockfile in sync)pnpm-lock.yamland the pre-existing.github/workflowsfork state, no upstream file contents are modified by this branchmainmust be force-pushedThis branch does not share the merge-based history of
main, so a normal merge would reintroduce the merge commits this sync is meant to eliminate.After approval, replace
mainwith this branch's history:Merging this PR through the GitHub UI instead of force-pushing will leave the fork showing as "behind" upstream and defeat the purpose of the rebase.
Notes
.github/workflowstree is intentionally byte-identical to the previousmain. The ActionsGITHUB_TOKENlacks theworkflowspermission, so any workflow-file change is rejected at push time. Content of the.disabledfiles is irrelevant since they never run.packages/mcp-cloudflare-fields/index.htmlremains forked (no Plausible analytics) and therefore does not pick up upstream's new no-JS static-home fallback. This divergence pre-dates this sync; the injecting Vite plugin no-ops when the markers are absent, so the build is unaffected.