v2 ci: add Bun and Deno integration tests (#1607)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Konstantin Konstantinov 2026-03-05 21:38:17 +02:00 • committed by GitHub
commit 049f26ef53
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 176 additions and 6 deletions

View file

@ -0,0 +1,57 @@
/**
* Bun integration test
*
* Verifies the MCP server and client packages work natively on Bun.
* Run with: bun test test/server/bun.test.ts
*/
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
import { McpServer, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
// eslint-disable-next-line import/no-unresolved
import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
import * as z from 'zod/v4';
describe('MCP on Bun', () => {
let httpServer: ReturnType<typeof Bun.serve>;
let transport: WebStandardStreamableHTTPServerTransport;
beforeAll(async () => {
const mcpServer = new McpServer({ name: 'test-server', version: '1.0.0' });
mcpServer.registerTool(
'greet',
{
description: 'Greet someone',
inputSchema: z.object({ name: z.string() })
},
async ({ name }) => ({
content: [{ type: 'text' as const, text: `Hello, ${name}!` }]
})
);
transport = new WebStandardStreamableHTTPServerTransport();
await mcpServer.connect(transport);
httpServer = Bun.serve({
port: 0,
fetch: req => transport.handleRequest(req)
});
});
afterAll(async () => {
await transport?.close();
httpServer?.stop();
});
it('should handle MCP tool calls', async () => {
const client = new Client({ name: 'test-client', version: '1.0.0' });
const clientTransport = new StreamableHTTPClientTransport(new URL(`http://localhost:${httpServer.port}`));
await client.connect(clientTransport);
const result = await client.callTool({ name: 'greet', arguments: { name: 'Bun' } });
expect(result.content).toEqual([{ type: 'text', text: 'Hello, Bun!' }]);
await client.close();
});
});

View file

@ -0,0 +1,53 @@
/**
* Deno integration test
*
* Verifies the MCP server and client packages work natively on Deno.
* Run with: deno test --no-check --allow-net --allow-read --allow-env test/server/deno.test.ts
*/
import assert from 'node:assert/strict';
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
import { McpServer, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
import * as z from 'zod/v4';
Deno.test({
name: 'MCP tool calls work on Deno',
sanitizeOps: false,
sanitizeResources: false,
async fn() {
const mcpServer = new McpServer({ name: 'test-server', version: '1.0.0' });
mcpServer.registerTool(
'greet',
{
description: 'Greet someone',
inputSchema: z.object({ name: z.string() })
},
async ({ name }) => ({
content: [{ type: 'text' as const, text: `Hello, ${name}!` }]
})
);
const transport = new WebStandardStreamableHTTPServerTransport();
await mcpServer.connect(transport);
const httpServer = Deno.serve({ port: 0 }, req => transport.handleRequest(req));
const port = httpServer.addr.port;
try {
const client = new Client({ name: 'test-client', version: '1.0.0' });
const clientTransport = new StreamableHTTPClientTransport(new URL(`http://localhost:${port}`));
await client.connect(clientTransport);
const result = await client.callTool({ name: 'greet', arguments: { name: 'Deno' } });
assert.deepStrictEqual(result.content, [{ type: 'text', text: 'Hello, Deno!' }]);
await client.close();
} finally {
await transport.close();
await httpServer.shutdown();
}
}
});