feat(mcps): unify SSE/Stdio transport and fix handshake timeouts

This commit is contained in:
2026-03-05 12:04:19 +01:00
parent 29423123b3
commit daa2750f89
5 changed files with 141 additions and 75 deletions

View File

@@ -132,25 +132,39 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
});
async function run() {
const app = express();
let transport: SSEServerTransport | null = null;
const isStdio = process.argv.includes('--stdio');
app.get('/sse', async (req, res) => {
transport = new SSEServerTransport('/message', res);
if (isStdio) {
const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
const transport = new StdioServerTransport();
await server.connect(transport);
});
console.error('GlitchTip MCP server is running on stdio');
} else {
const app = express();
let transport: SSEServerTransport | null = null;
app.post('/message', async (req, res) => {
if (!transport) { res.status(400).send('No active SSE connection'); return; }
await transport.handlePostMessage(req, res);
});
app.get('/sse', async (req, res) => {
console.error('New SSE connection established');
transport = new SSEServerTransport('/message', res);
await server.connect(transport);
});
const PORT = process.env.GLITCHTIP_MCP_PORT || 3005;
app.listen(PORT, () => {
console.error(`GlitchTip MCP server running on http://localhost:${PORT}/sse`);
});
app.post('/message', async (req, res) => {
if (!transport) {
res.status(400).send('No active SSE connection');
return;
}
await transport.handlePostMessage(req, res);
});
const PORT = process.env.GLITCHTIP_MCP_PORT || 3005;
app.listen(PORT, () => {
console.error(`GlitchTip MCP server running on http://localhost:${PORT}/sse`);
});
}
}
run().catch((err) => {
console.error("Fatal error:", err);
process.exit(1);