Skip to content

chore: sync with upstream sentry-mcp v0.39.0 (rebased onto upstream/main) - #74

Open
github-actions[bot] wants to merge 16 commits into
mainfrom
sync-upstream-20260831-resolved
Open

github-actions[bot] wants to merge 16 commits into
mainfrom
sync-upstream-20260831-resolved

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

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.

$ git rev-list HEAD..upstream/main --count
0
$ git log upstream/main..HEAD --oneline
d7cf08d chore: sync with upstream sentry-mcp (rebased)

Upstream changes included (15 commits)

Fork-specific changes re-applied

Change Notes
packages/mcp-cloudflare-fields/ Our Cloudflare deploy package (symlinks into packages/mcp-cloudflare preserved)
.github/workflows/deploy-fields.yml Our deploy workflow
.github/workflows/sync-upstream.yml Our sync workflow
Upstream Sentry workflows All kept disabled — only deploy-fields.yml and sync-upstream.yml are active .yml files
@fields/mcp-cloudflare version Bumped 0.37.0 → 0.39.0 to match @sentry/mcp-cloudflare
pnpm-lock.yaml Regenerated; change is purely additive (the fields importer only, no upstream resolution churn)

Shared dependencies in packages/mcp-cloudflare-fields/package.json were diffed against packages/mcp-cloudflare/package.json — dependencies and devDependencies are 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-cloudflare package
  • pnpm install --frozen-lockfile — pass (lockfile in sync)
  • Aside from pnpm-lock.yaml and the pre-existing .github/workflows fork state, no upstream file contents are modified by this branch

⚠️ main must be force-pushed

This 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 main with this branch's history:

git fetch origin sync-upstream-20260831-resolved
git push origin +origin/sync-upstream-20260831-resolved:main

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

  • The .github/workflows tree is intentionally byte-identical to the previous main. The Actions GITHUB_TOKEN lacks the workflows permission, so any workflow-file change is rejected at push time. Content of the .disabled files is irrelevant since they never run.
  • packages/mcp-cloudflare-fields/index.html remains 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.

AerDragon and others added 16 commits August 24, 2026 13:29
…#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
github-actions Bot force-pushed the sync-upstream-20260831-resolved branch from 566ab25 to d7cf08d Compare August 31, 2026 08:06
@github-actions github-actions Bot changed the title chore: sync with upstream sentry-mcp (rebased) chore: sync with upstream sentry-mcp v0.39.0 (rebased onto upstream/main) Aug 31, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants