@statsig/mcp-test
Version:
Statsig MCP Server (TEST VERSION) - Making your AI context-aware with feature flags, experiments, and analytics
52 lines (51 loc) • 2.27 kB
JavaScript
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express";
import { createServer } from "./serverSetup.js";
async function main() {
// Check for transport type from environment variable. npm run start:sse will set MCP_TRANSPORT=sse
const transportType = process.env.MCP_TRANSPORT?.toLowerCase() || "stdio";
// Initialize server without API key for now (will be created per request in SSE mode). Will be used if its not SSE
let server = await createServer();
if (transportType === "sse") {
const app = express();
let transport = null;
app.get("/sse", async (req, res) => {
// Extract API key from query parameters
const statsigApiKey = req.query.STATSIG_API_KEY;
if (statsigApiKey) {
// For SSE mode, create a new server instance with the request API key
server = await createServer(statsigApiKey);
}
else {
// Use the default server with environment variable API key if available
// console.debug("No API key found in request, using environment variable if available");
}
// Create transport
transport = new SSEServerTransport("/messages", res);
server.connect(transport);
// console.debug("Statsig MCP Server connected via SSE");
});
app.post("/messages", (req, res) => {
if (transport) {
transport.handlePostMessage(req, res);
}
else {
res.status(400).send("No active SSE transport");
}
});
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
app.listen(port, () => {
// console.debug(`Statsig MCP Server running on SSE at http://localhost:${port}/sse`);
});
}
else {
// Default to stdio transport with environment variable API key
const transport = new StdioServerTransport();
await server.connect(transport);
}
}
main().catch((error) => {
console.error("Fatal error in main():", error);
process.exit(1);
});