Skip to main content
Glama

Bun SSE Transport for MCP

by tigranbs
echo-server.ts2.01 kB
import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; import { BunSSEServerTransport } from "../src/index.js"; const server = new McpServer({ name: "Echo", version: "1.0.0", }); server.resource( "echo", new ResourceTemplate("echo://{message}", { list: undefined }), async (uri, { message }) => ({ contents: [ { uri: uri.href, text: `Resource echo: ${message}`, }, ], }) ); server.tool("echo", { message: z.string() }, async ({ message }) => ({ content: [{ type: "text", text: `Tool echo: ${message}` }], })); server.prompt("echo", { message: z.string() }, ({ message }) => ({ messages: [ { role: "user", content: { type: "text", text: `Please process this message: ${message}`, }, }, ], })); const transports: Record<string, BunSSEServerTransport> = {}; Bun.serve({ port: 3000, idleTimeout: 255, routes: { "/sse": () => { const transport = new BunSSEServerTransport("/messages"); server.connect(transport); transport.onclose = () => { delete transports[transport.sessionId]; }; transports[transport.sessionId] = transport; return transport.createResponse(); }, "/messages": (req) => { const url = new URL(req.url); const sessionId = url.searchParams.get("sessionId"); if (!sessionId || !transports[sessionId]) { return new Response("Invalid session ID", { status: 400 }); } return transports[sessionId].handlePostMessage(req); }, }, fetch(req) { console.log("fetch", req.url); const url = new URL(req.url); // Home page if (url.pathname === "/") { return new Response("Hello World!"); } return new Response("Not Found", { status: 404 }); }, });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tigranbs/bun-mcp-sse-transport'

If you have feedback or need assistance with the MCP directory API, please join our Discord server