Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions test/integration/test/server/cloudflareWorkers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,28 +150,29 @@ export default {
it('should handle MCP requests', async () => {
expect(env).not.toBeNull();

// Retry connection — wrangler may report "Ready" before it can handle requests
let client!: Client;
// Retry the full interaction — wrangler may report "Ready" before it can
// reliably handle all requests (initialize succeeds but subsequent calls
// can still get "Network connection lost." on slower runtimes like Node 20).
let lastError: unknown;
for (let attempt = 0; attempt < 5; attempt++) {
const client = new Client({ name: 'test-client', version: '1.0.0' });
const transport = new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${PORT}/`));
try {
client = new Client({ name: 'test-client', version: '1.0.0' });
const transport = new StreamableHTTPClientTransport(new URL(`http://127.0.0.1:${PORT}/`));
await client.connect(transport);
lastError = undefined;
break;
const result = await client.callTool({ name: 'greet', arguments: { name: 'World' } });
expect(result.content).toEqual([{ type: 'text', text: 'Hello, World!' }]);
await client.close();
return;
} catch (error) {
lastError = error;
await new Promise(resolve => setTimeout(resolve, 1000));
try {
await client.close();
} catch {
/* ignore cleanup errors */
}
if (attempt < 4) await new Promise(resolve => setTimeout(resolve, 1000));
}
}
if (lastError) {
throw lastError;
}

const result = await client.callTool({ name: 'greet', arguments: { name: 'World' } });
expect(result.content).toEqual([{ type: 'text', text: 'Hello, World!' }]);

await client.close();
throw lastError;
}, 30_000);
});
Loading