@omophub/omophub-mcp 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -4
- package/dist/client/api.d.ts +2 -2
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +1 -1
- package/dist/client/api.js.map +1 -1
- package/dist/client/resolve.d.ts +26 -0
- package/dist/client/resolve.d.ts.map +1 -0
- package/dist/client/resolve.js +55 -0
- package/dist/client/resolve.js.map +1 -0
- package/dist/client/types.d.ts +13 -8
- package/dist/client/types.d.ts.map +1 -1
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +21 -4
- package/dist/formatters/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +7 -4
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/concepts.d.ts.map +1 -1
- package/dist/tools/concepts.js +7 -4
- package/dist/tools/concepts.js.map +1 -1
- package/dist/tools/explore.d.ts.map +1 -1
- package/dist/tools/explore.js +6 -4
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/hierarchy.d.ts.map +1 -1
- package/dist/tools/hierarchy.js +4 -2
- package/dist/tools/hierarchy.js.map +1 -1
- package/dist/tools/mappings.d.ts.map +1 -1
- package/dist/tools/mappings.js +4 -2
- package/dist/tools/mappings.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +4 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/semantic-search.d.ts.map +1 -1
- package/dist/tools/semantic-search.js +4 -2
- package/dist/tools/semantic-search.js.map +1 -1
- package/dist/tools/similar.d.ts.map +1 -1
- package/dist/tools/similar.js +4 -2
- package/dist/tools/similar.js.map +1 -1
- package/dist/tools/vocabularies.d.ts.map +1 -1
- package/dist/tools/vocabularies.js +36 -10
- package/dist/tools/vocabularies.js.map +1 -1
- package/dist/transports/http.d.ts +3 -2
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +126 -19
- package/dist/transports/http.js.map +1 -1
- package/dist/utils/auth.d.ts +1 -1
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +1 -6
- package/dist/utils/auth.js.map +1 -1
- package/package.json +2 -2
package/dist/transports/http.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { createServer } from 'node:http';
|
|
2
3
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
+
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
5
|
import { handleHealthRequest } from '../health.js';
|
|
4
6
|
import { logger } from '../utils/logger.js';
|
|
5
7
|
const CORS_HEADERS = {
|
|
6
8
|
'Access-Control-Allow-Origin': '*',
|
|
7
9
|
'Access-Control-Allow-Methods': 'GET, POST, DELETE, OPTIONS',
|
|
8
|
-
'Access-Control-Allow-Headers': 'Content-Type, mcp-session-id',
|
|
10
|
+
'Access-Control-Allow-Headers': 'Content-Type, mcp-session-id, Authorization',
|
|
9
11
|
'Access-Control-Expose-Headers': 'mcp-session-id',
|
|
10
12
|
};
|
|
11
13
|
function setCorsHeaders(res) {
|
|
@@ -13,41 +15,146 @@ function setCorsHeaders(res) {
|
|
|
13
15
|
res.setHeader(key, value);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
18
|
+
// Active sessions — each client gets its own transport + server
|
|
19
|
+
const sessions = new Map();
|
|
20
|
+
const MAX_BODY_SIZE = 1_048_576; // 1 MB
|
|
21
|
+
const JSON_RPC_INTERNAL_ERROR = JSON.stringify({
|
|
22
|
+
jsonrpc: '2.0',
|
|
23
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
24
|
+
id: null,
|
|
25
|
+
});
|
|
16
26
|
/**
|
|
17
|
-
* Starts an HTTP server with
|
|
27
|
+
* Starts an HTTP server with per-session MCP transports on /
|
|
18
28
|
* and a health endpoint on /health.
|
|
19
29
|
*/
|
|
20
|
-
export async function startHttpTransport(
|
|
21
|
-
const transport = new StreamableHTTPServerTransport({
|
|
22
|
-
sessionIdGenerator: undefined,
|
|
23
|
-
});
|
|
24
|
-
await mcpServer.connect(transport);
|
|
30
|
+
export async function startHttpTransport(serverFactory, defaultClient, port) {
|
|
25
31
|
const httpServer = createServer(async (req, res) => {
|
|
26
32
|
setCorsHeaders(res);
|
|
27
|
-
// Handle CORS preflight
|
|
28
33
|
if (req.method === 'OPTIONS') {
|
|
29
34
|
res.writeHead(204);
|
|
30
35
|
res.end();
|
|
31
36
|
return;
|
|
32
37
|
}
|
|
33
|
-
// Health endpoint
|
|
34
38
|
if (handleHealthRequest(req, res))
|
|
35
39
|
return;
|
|
36
|
-
|
|
37
|
-
if (
|
|
40
|
+
const pathname = new URL(req.url ?? '/', 'http://localhost').pathname;
|
|
41
|
+
if (pathname === '/' || pathname === '/mcp') {
|
|
42
|
+
const rawSessionId = req.headers['mcp-session-id'];
|
|
43
|
+
const sessionId = Array.isArray(rawSessionId) ? rawSessionId[0] : rawSessionId;
|
|
44
|
+
// GET (SSE stream) and DELETE (session close) carry no body — route directly
|
|
45
|
+
if (req.method === 'GET' || req.method === 'DELETE') {
|
|
46
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
47
|
+
const transport = sessions.get(sessionId);
|
|
48
|
+
try {
|
|
49
|
+
await transport.handleRequest(req, res);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger.error('MCP transport error', { error: String(error), sessionId });
|
|
53
|
+
if (!res.headersSent) {
|
|
54
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
55
|
+
res.end(JSON_RPC_INTERNAL_ERROR);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
61
|
+
res.end(JSON.stringify({
|
|
62
|
+
jsonrpc: '2.0',
|
|
63
|
+
error: { code: -32000, message: 'Bad Request: No valid session ID provided' },
|
|
64
|
+
id: null,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// POST — read body with size limit
|
|
70
|
+
const chunks = [];
|
|
71
|
+
let totalBytes = 0;
|
|
72
|
+
let aborted = false;
|
|
73
|
+
for await (const chunk of req) {
|
|
74
|
+
const buf = typeof chunk === 'string' ? Buffer.from(chunk) : chunk;
|
|
75
|
+
totalBytes += buf.length;
|
|
76
|
+
if (totalBytes > MAX_BODY_SIZE) {
|
|
77
|
+
req.destroy();
|
|
78
|
+
res.writeHead(413, { 'Content-Type': 'application/json' });
|
|
79
|
+
res.end(JSON.stringify({
|
|
80
|
+
jsonrpc: '2.0',
|
|
81
|
+
error: { code: -32000, message: 'Payload too large' },
|
|
82
|
+
id: null,
|
|
83
|
+
}));
|
|
84
|
+
aborted = true;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
chunks.push(buf);
|
|
88
|
+
}
|
|
89
|
+
if (aborted)
|
|
90
|
+
return;
|
|
91
|
+
const body = Buffer.concat(chunks).toString();
|
|
92
|
+
let parsedBody;
|
|
38
93
|
try {
|
|
39
|
-
|
|
94
|
+
parsedBody = JSON.parse(body);
|
|
40
95
|
}
|
|
41
|
-
catch
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
96
|
+
catch {
|
|
97
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
98
|
+
res.end(JSON.stringify({
|
|
99
|
+
jsonrpc: '2.0',
|
|
100
|
+
error: { code: -32700, message: 'Parse error' },
|
|
101
|
+
id: null,
|
|
102
|
+
}));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Existing session
|
|
106
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
107
|
+
const transport = sessions.get(sessionId);
|
|
108
|
+
try {
|
|
109
|
+
await transport.handleRequest(req, res, parsedBody);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
logger.error('MCP transport error', { error: String(error), sessionId });
|
|
113
|
+
if (!res.headersSent) {
|
|
114
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
115
|
+
res.end(JSON_RPC_INTERNAL_ERROR);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// New session (initialize request)
|
|
121
|
+
if (!sessionId && isInitializeRequest(parsedBody)) {
|
|
122
|
+
const transport = new StreamableHTTPServerTransport({
|
|
123
|
+
sessionIdGenerator: () => randomUUID(),
|
|
124
|
+
onsessioninitialized: (id) => {
|
|
125
|
+
sessions.set(id, transport);
|
|
126
|
+
logger.info('MCP session created', { sessionId: id });
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
transport.onclose = () => {
|
|
130
|
+
if (transport.sessionId) {
|
|
131
|
+
sessions.delete(transport.sessionId);
|
|
132
|
+
logger.info('MCP session closed', { sessionId: transport.sessionId });
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const server = serverFactory(defaultClient);
|
|
136
|
+
await server.connect(transport);
|
|
137
|
+
try {
|
|
138
|
+
await transport.handleRequest(req, res, parsedBody);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.error('MCP transport error (init)', { error: String(error) });
|
|
142
|
+
if (!res.headersSent) {
|
|
143
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
144
|
+
res.end(JSON_RPC_INTERNAL_ERROR);
|
|
145
|
+
}
|
|
46
146
|
}
|
|
147
|
+
return;
|
|
47
148
|
}
|
|
149
|
+
// Invalid request — no session and not an initialize
|
|
150
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
151
|
+
res.end(JSON.stringify({
|
|
152
|
+
jsonrpc: '2.0',
|
|
153
|
+
error: { code: -32000, message: 'Bad Request: No valid session ID provided' },
|
|
154
|
+
id: null,
|
|
155
|
+
}));
|
|
48
156
|
return;
|
|
49
157
|
}
|
|
50
|
-
// Not found
|
|
51
158
|
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
52
159
|
res.end(JSON.stringify({ error: 'Not found' }));
|
|
53
160
|
});
|
|
@@ -56,7 +163,7 @@ export async function startHttpTransport(mcpServer, port) {
|
|
|
56
163
|
});
|
|
57
164
|
await new Promise((resolve) => {
|
|
58
165
|
httpServer.listen(port, () => {
|
|
59
|
-
logger.info(`OMOPHub MCP server listening on http://localhost:${String(port)}
|
|
166
|
+
logger.info(`OMOPHub MCP server listening on http://localhost:${String(port)}`);
|
|
60
167
|
logger.info(`Health endpoint at http://localhost:${String(port)}/health`);
|
|
61
168
|
resolve();
|
|
62
169
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAEjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,YAAY,GAA2B;IAC3C,6BAA6B,EAAE,GAAG;IAClC,8BAA8B,EAAE,4BAA4B;IAC5D,8BAA8B,EAAE,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/auth.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function resolveApiKey(cliKey?: string): string;
|
|
1
|
+
export declare function resolveApiKey(cliKey?: string): string | undefined;
|
|
2
2
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/utils/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE"}
|
package/dist/utils/auth.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
export function resolveApiKey(cliKey) {
|
|
2
|
-
|
|
3
|
-
if (!key) {
|
|
4
|
-
throw new Error('OMOPHub API key required. Set OMOPHUB_API_KEY environment variable or pass --api-key=KEY.\n' +
|
|
5
|
-
'Get your free API key at: https://dashboard.omophub.com/api-keys');
|
|
6
|
-
}
|
|
7
|
-
return key;
|
|
2
|
+
return cliKey || process.env.OMOPHUB_API_KEY || undefined;
|
|
8
3
|
}
|
|
9
4
|
//# sourceMappingURL=auth.js.map
|
package/dist/utils/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC;AAC5D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omophub/omophub-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"mcpName": "io.github.OMOPHub/omophub-mcp",
|
|
5
|
-
"description": "MCP server for OHDSI OMOP standardized medical vocabularies
|
|
5
|
+
"description": "MCP server for OHDSI OMOP standardized medical vocabularies - search, lookup, map, and navigate concepts via AI agents",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"bin": {
|