import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
import express from "express";
import { initDb } from "./db.js";
import { registerMcpHandlers } from "./mcp-handlers.js";
const app = express();
let transport = null;
initDb();
const server = new Server(
{
name: "sqlite-vec-server",
version: "0.1.0",
},
{
capabilities: {
tools: {},
},
}
);
registerMcpHandlers(server);
export function startMcpServer(port = 3000) {
app.use(express.json());
app.get("/sse", async (req, res) => {
transport = new SSEServerTransport("/messages", res);
await server.connect(transport);
});
app.post("/messages", async (req, res) => {
if (transport) {
await transport.handlePostMessage(req, res);
} else {
res.status(400).send("No transport connection");
}
});
const httpServer = app.listen(port, () => {
console.log(`MCP SSE Server listening on http://localhost:${port}/sse`);
});
return httpServer;
}