http-server.mjs
53 lines 1.9 KB
Raw
sha256:65ccb454656ea5acdea0a10e559b78bcde1eb6ff753ecc2911bc99d1c3d7cadd feat(calendar): enforce agent context tiers in retrieval AP… Human minor ⚠ breaking 1 day ago
1 /**
2 * Knowtation MCP — Streamable HTTP (Issue #1 Phase D1).
3 * One McpServer + transport per session (Mcp-Session-Id). No vault file watcher (multi-session).
4 */
5
6 import '../lib/load-env.mjs';
7 import { randomUUID } from 'node:crypto';
8 import { createMcpExpressApp } from '@modelcontextprotocol/sdk/server/express.js';
9 import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
10 import { loadConfig } from '../lib/config.mjs';
11 import { createKnowtationMcpServer } from './create-server.mjs';
12
13 /** @type {Map<string, import('@modelcontextprotocol/sdk/server/streamableHttp.js').StreamableHTTPServerTransport>} */
14 const transports = new Map();
15
16 function resolveListen() {
17 try {
18 const c = loadConfig();
19 return { host: c.mcp.http_host, port: c.mcp.http_port };
20 } catch {
21 const p = parseInt(process.env.KNOWTATION_MCP_HTTP_PORT || '3334', 10);
22 return { host: '127.0.0.1', port: Number.isFinite(p) ? p : 3334 };
23 }
24 }
25
26 export async function startKnowtationMcpHttp() {
27 const { host, port } = resolveListen();
28 const app = createMcpExpressApp({ host });
29
30 app.all('/mcp', async (req, res) => {
31 const sessionHeader = req.headers['mcp-session-id'];
32 let transport = sessionHeader ? transports.get(String(sessionHeader)) : undefined;
33 if (!transport) {
34 transport = new StreamableHTTPServerTransport({
35 sessionIdGenerator: () => randomUUID(),
36 onsessioninitialized: (id) => {
37 transports.set(id, transport);
38 },
39 });
40 const mcp = createKnowtationMcpServer();
41 await mcp.connect(transport);
42 }
43 await transport.handleRequest(req, res, req.body);
44 });
45
46 return new Promise((resolve, reject) => {
47 const srv = app.listen(port, host, () => {
48 console.error(`Knowtation MCP (Streamable HTTP) http://${host}:${port}/mcp`);
49 resolve(srv);
50 });
51 srv.on('error', reject);
52 });
53 }
File History 2 commits
sha256:65ccb454656ea5acdea0a10e559b78bcde1eb6ff753ecc2911bc99d1c3d7cadd feat(calendar): enforce agent context tiers in retrieval AP… Human minor 1 day ago
sha256:9103f98c89257ed2b01c237cea895dabb3e85ea337dccb1161c175e4422355b6 docs: accept Calendar Events v0 spec with Phase 0 security … Human 2 days ago