Skip to main content
Glama
wilforlan

Suncture Healthcare MCP Server

by wilforlan
server.ts4.22 kB
import express from "express"; import cors from 'cors'; import path from "path"; import { fileURLToPath } from "url"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import { ServerOptions } from "../types/index.js"; import routes from "../routes/index.js"; import fs from 'fs'; // Get the directory name of the current module const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); /** * Configure the Express server with all necessary middleware and routes * @param server The MCP server instance * @returns An Express app configured and ready to use */ export function configureExpressApp(server: McpServer) { const app = express(); const transportMap = new Map<string, SSEServerTransport>(); // Enable CORS for all origins app.use(cors({ origin: '*', methods: ['GET', 'POST', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'] })); // Serve static files - with proper path resolution for both dev and prod environments const distPublicPath = path.join(__dirname, '../../dist/public'); const srcPublicPath = path.join(__dirname, '../../src/public'); // Check if we're running in production (dist directory) or development if (fs.existsSync(distPublicPath)) { console.log('Serving static files from dist/public directory'); app.use('/static', express.static(distPublicPath)); } else { console.log('Serving static files from src/public directory'); app.use('/static', express.static(srcPublicPath)); } // Use the routes defined in routes/index.ts app.use('/', routes); // Configure SSE endpoint app.get("/sse", async (req, res) => { console.error(`Received SSE connection request from ${req.ip}`); // Set headers for SSE res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); // Create the full URL for messages endpoint const messagesUrl = `/messages`; console.error(`Creating SSE transport with messagesUrl=${messagesUrl}`); const transport = new SSEServerTransport(messagesUrl, res); console.error(`Created SSE transport with sessionId=${transport.sessionId}`); transportMap.set(transport.sessionId, transport); await server.connect(transport); console.error(`Connected transport with sessionId=${transport.sessionId} to MCP server`); }); // Configure messages endpoint app.post("/messages", (req, res) => { const sessionId = req.query.sessionId as string; console.error(`Received message for sessionId=${sessionId}`); if (!sessionId) { console.error('Message received without sessionId'); res.status(400).json({ error: 'sessionId is required' }); return; } const transport = transportMap.get(sessionId); if (transport) { console.error(`Found transport for sessionId=${sessionId}, handling message`); transport.handlePostMessage(req, res); } else { console.error(`No transport found for sessionId=${sessionId}`); res.status(404).json({ error: 'Session not found' }); } }); return app; } /** * Run the server with the specified options * @param server The MCP server instance * @param options Server configuration options */ export async function runExpressServer(server: McpServer, options: ServerOptions = {}): Promise<void> { const port = options.port || parseInt(process.env.MCP_PORT || "3001"); const endpoint = options.endpoint || process.env.MCP_ENDPOINT || "/sse"; // Configure and start Express server const app = configureExpressApp(server); // Start the server app.listen(port, () => { console.error(`Healthcare MCP Server running on port ${port}`); console.error(`SSE URL: http://localhost:${port}${endpoint}`); console.error(`Messages URL: http://localhost:${port}/messages`); }); }

Latest Blog Posts

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/wilforlan/suncture-mcp'

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