Skip to content

Commit 0fb9a4e

Browse files
committed
Address PR review feedback (#5754)
1 parent 5bb4402 commit 0fb9a4e

2 files changed

Lines changed: 48 additions & 3 deletions

File tree

apps/sim/app/api/mcp/servers/[id]/refresh/route.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,48 @@ describe('MCP server refresh route', () => {
333333
expect(mockUpdate).not.toHaveBeenCalled()
334334
})
335335

336+
it.each(['unavailable', 'winner-cache'] as const)(
337+
'preserves a newer cache invalidation over %s discovery tools',
338+
async (state) => {
339+
mockDiscoverServerTools.mockResolvedValueOnce({
340+
tools: [
341+
{
342+
name: 'stale-search',
343+
description: 'Search tool loaded before invalidation',
344+
inputSchema: {},
345+
serverId: 'server-1',
346+
serverName: 'OAuth Server',
347+
},
348+
],
349+
state,
350+
})
351+
const cacheInvalidatedServer = {
352+
...initialServer,
353+
lastToolsRefresh: new Date(initialServer.lastToolsRefresh.getTime() + 60_000),
354+
toolCount: 0,
355+
}
356+
mockSelect.mockReturnValueOnce(selectRows([cacheInvalidatedServer]))
357+
358+
const request = new Request('http://localhost/api/mcp/servers/server-1/refresh', {
359+
method: 'POST',
360+
}) as NextRequest
361+
const response = await POST(request, { params: Promise.resolve({ id: 'server-1' }) })
362+
const body = await response.json()
363+
364+
expect(body.data).toEqual(
365+
expect.objectContaining({
366+
status: 'connected',
367+
error: null,
368+
toolCount: 0,
369+
workflowsUpdated: 0,
370+
updatedWorkflowIds: [],
371+
})
372+
)
373+
expect(mockSelect).toHaveBeenCalledTimes(2)
374+
expect(mockUpdate).not.toHaveBeenCalled()
375+
}
376+
)
377+
336378
it('preserves a newer successful refresh when discovery is superseded', async () => {
337379
mockDiscoverServerTools.mockResolvedValueOnce({
338380
tools: [],

apps/sim/app/api/mcp/servers/[id]/refresh/route.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,13 @@ export const POST = withRouteHandler(
265265
let connectionStatus = refreshedServer?.connectionStatus ?? 'error'
266266
let lastError = refreshedServer ? refreshedServer.lastError : discoveryError
267267
let toolCount = refreshedServer?.toolCount ?? discoveredTools.length
268-
const newerSuccessWonRace =
269-
connectionStatus === 'connected' &&
268+
const newerPublicationWonRace =
270269
refreshedServer?.lastToolsRefresh != null &&
271270
(server.lastToolsRefresh == null ||
272-
refreshedServer.lastToolsRefresh > server.lastToolsRefresh) &&
271+
refreshedServer.lastToolsRefresh > server.lastToolsRefresh)
272+
const newerSuccessWonRace =
273+
connectionStatus === 'connected' &&
274+
newerPublicationWonRace &&
273275
refreshedServer.lastConnected != null &&
274276
(server.lastConnected == null || refreshedServer.lastConnected > server.lastConnected)
275277

@@ -279,6 +281,7 @@ export const POST = withRouteHandler(
279281
toolCount = 0
280282
} else if (
281283
discoveryError === null &&
284+
!newerPublicationWonRace &&
282285
(discoveryState === 'unavailable' || discoveryState === 'winner-cache')
283286
) {
284287
connectionStatus = 'connected'

0 commit comments

Comments
 (0)