From 8e838f31f7ccb02e90a7185b73925417568ce19a Mon Sep 17 00:00:00 2001 From: Evan Purkhiser Date: Thu, 13 Aug 2026 21:42:38 -0400 Subject: [PATCH] fix(api): Accept nullable onboarding reference lists Sentry may return null reference lists before a project or issue has been associated with an onboarding run. Normalize those values to empty lists so a successful status update does not surface as a tool failure. Fixes MCP-SERVER-G77 --- packages/mcp-core/src/api-client/schema.ts | 10 ++++- .../catalog/onboarding-status-update.test.ts | 37 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/packages/mcp-core/src/api-client/schema.ts b/packages/mcp-core/src/api-client/schema.ts index ab1f27395..bd1f456e3 100644 --- a/packages/mcp-core/src/api-client/schema.ts +++ b/packages/mcp-core/src/api-client/schema.ts @@ -2146,7 +2146,13 @@ export const AgenticOnboardingRunSchema = z.object({ expiresAt: z.string(), continueUpdates: z.boolean(), runStatus: AgenticOnboardingRunStatusSchema, - projectSlugs: z.array(z.string()), - issueIds: z.array(z.string()), + projectSlugs: z + .array(z.string()) + .nullable() + .transform((projectSlugs) => projectSlugs ?? []), + issueIds: z + .array(z.string()) + .nullable() + .transform((issueIds) => issueIds ?? []), stages: z.array(AgenticOnboardingStageStateSchema), }); diff --git a/packages/mcp-core/src/tools/catalog/onboarding-status-update.test.ts b/packages/mcp-core/src/tools/catalog/onboarding-status-update.test.ts index 7b52812e4..948d701a7 100644 --- a/packages/mcp-core/src/tools/catalog/onboarding-status-update.test.ts +++ b/packages/mcp-core/src/tools/catalog/onboarding-status-update.test.ts @@ -108,6 +108,43 @@ describe("onboarding_status_update", () => { ).resolves.toBe("Onboarding status updated. Continue updates: yes."); }); + it("accepts nullable reference lists from the backend", async () => { + mswServer.use( + http.post( + "https://us.sentry.io/api/0/organizations/sentry-mcp-evals/onboarding/agent/status/", + () => + HttpResponse.json({ + schemaVersion: 1, + runId: "2d27f6654b754dcaa2d26af18274d142", + channelId: "6835652362204cb1b10719783c26983a", + clientRunId: "e806c6f4-fef8-47b4-a720-5ab582b2fcf0", + createdAt: "2026-08-12T12:00:00Z", + updatedAt: "2026-08-12T12:01:00Z", + sequence: 1, + expiresAt: "2026-08-13T12:00:00Z", + continueUpdates: true, + runStatus: "active", + projectSlugs: null, + issueIds: null, + stages: [], + }), + ), + ); + + await expect( + onboardingStatusUpdate.handler( + { + organizationSlug: "sentry-mcp-evals", + regionUrl: "https://us.sentry.io", + runToken: "a1B2c3D4e5", + stage: "connect_mcp", + status: "completed", + }, + context, + ), + ).resolves.toBe("Onboarding status updated. Continue updates: yes."); + }); + it("reports when the run no longer accepts updates", async () => { mswServer.use( http.post(