Skip to main content
Glama

mcp-starter

by parmindersk
index.js2.37 kB
const express = require("express"); const { randomUUID } = require("node:crypto"); const { McpServer } = require("@modelcontextprotocol/sdk/server/mcp.js"); const { StreamableHTTPServerTransport, } = require("@modelcontextprotocol/sdk/server/streamableHttp.js"); const { isInitializeRequest } = require("@modelcontextprotocol/sdk/types.js"); const { z } = require("zod"); require("dotenv").config(); const loadFunctions = require("./functionLoader.js"); const { functions, manifestEntries } = loadFunctions(); const app = express(); app.use(express.json()); const transports = {}; const registerTools = (server) => { const fnNames = Object.keys(functions); for (const fnName of fnNames) { const { handler, meta } = functions[fnName]; server.registerTool(fnName, meta, handler); } }; app.post("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"]; let transport; if (sessionId && transports[sessionId]) { transport = transports[sessionId]; } else if (!sessionId && isInitializeRequest(req.body)) { transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID(), onsessioninitialized: (sessionId) => { transports[sessionId] = transport; }, }); transport.onclose = () => { if (transport.sessionId) { delete transports[transport.sessionId]; } }; const server = new McpServer({ name: process.env.MCP_SERVER_NAME || "MCP Server", version: "1.0.0", }); registerTools(server); await server.connect(transport); } else { res.status(400).json({ jsonrpc: "2.0", error: { code: -32000, message: "Bad Request: No valid session ID provided", }, id: null, }); return; } await transport.handleRequest(req, res, req.body); }); const handleSessionRequest = async (req, res) => { const sessionId = req.headers["mcp-session-id"]; if (!sessionId || !transports[sessionId]) { res.status(400).send("Invalid or missing session ID"); return; } const transport = transports[sessionId]; await transport.handleRequest(req, res); }; app.get("/mcp", handleSessionRequest); app.delete("/mcp", handleSessionRequest); const port = process.env.PORT || 3000; app.listen(port, () => console.log(`MCP server running on http://localhost:${port}`) );

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/parmindersk/mcp-starter'

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