@opentabs-dev/mcp-server 0.0.27 → 0.0.28

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.
Files changed (60) hide show
  1. package/dist/adapter-files.js +4 -4
  2. package/dist/adapter-files.js.map +1 -1
  3. package/dist/browser-tools/extension-get-logs.d.ts +1 -1
  4. package/dist/browser-tools/get-console-logs.d.ts +1 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +5 -7
  7. package/dist/config.js.map +1 -1
  8. package/dist/dev-mode.d.ts.map +1 -1
  9. package/dist/dev-mode.js +2 -1
  10. package/dist/dev-mode.js.map +1 -1
  11. package/dist/extension-install.d.ts.map +1 -1
  12. package/dist/extension-install.js +5 -6
  13. package/dist/extension-install.js.map +1 -1
  14. package/dist/file-watcher.d.ts +2 -2
  15. package/dist/file-watcher.d.ts.map +1 -1
  16. package/dist/file-watcher.js +6 -6
  17. package/dist/file-watcher.js.map +1 -1
  18. package/dist/http-routes.d.ts +6 -6
  19. package/dist/http-routes.d.ts.map +1 -1
  20. package/dist/http-routes.js +10 -10
  21. package/dist/http-routes.js.map +1 -1
  22. package/dist/index.d.ts +8 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +58 -21
  25. package/dist/index.js.map +1 -1
  26. package/dist/loader.d.ts.map +1 -1
  27. package/dist/loader.js +16 -13
  28. package/dist/loader.js.map +1 -1
  29. package/dist/logger.d.ts +1 -1
  30. package/dist/logger.d.ts.map +1 -1
  31. package/dist/logger.js +3 -2
  32. package/dist/logger.js.map +1 -1
  33. package/dist/plugin-management.d.ts.map +1 -1
  34. package/dist/plugin-management.js +17 -47
  35. package/dist/plugin-management.js.map +1 -1
  36. package/dist/reload.js +1 -1
  37. package/dist/resolver.d.ts +3 -4
  38. package/dist/resolver.d.ts.map +1 -1
  39. package/dist/resolver.js +33 -30
  40. package/dist/resolver.js.map +1 -1
  41. package/dist/sdk-version.d.ts.map +1 -1
  42. package/dist/sdk-version.js +2 -1
  43. package/dist/sdk-version.js.map +1 -1
  44. package/dist/server-node.d.ts +45 -0
  45. package/dist/server-node.d.ts.map +1 -0
  46. package/dist/server-node.js +234 -0
  47. package/dist/server-node.js.map +1 -0
  48. package/dist/skip-confirmation.d.ts.map +1 -1
  49. package/dist/skip-confirmation.js +2 -1
  50. package/dist/skip-confirmation.js.map +1 -1
  51. package/dist/skip-npm-discovery.d.ts.map +1 -1
  52. package/dist/skip-npm-discovery.js +2 -1
  53. package/dist/skip-npm-discovery.js.map +1 -1
  54. package/dist/version-check.d.ts.map +1 -1
  55. package/dist/version-check.js +4 -6
  56. package/dist/version-check.js.map +1 -1
  57. package/dist/version.d.ts.map +1 -1
  58. package/dist/version.js +2 -1
  59. package/dist/version.js.map +1 -1
  60. package/package.json +5 -3
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Node.js HTTP + WebSocket server adapter.
3
+ *
4
+ * Provides the same interface as the Bun.serve() delegate shell but uses
5
+ * node:http and the ws package. Converts between Node.js IncomingMessage /
6
+ * ServerResponse and the Web Standard Request / Response objects that the
7
+ * route handlers expect.
8
+ *
9
+ * Node.js 20+ has global Request / Response via undici, so no polyfills needed.
10
+ */
11
+ import { log } from './logger.js';
12
+ import { WebSocketServer } from 'ws';
13
+ import { createServer } from 'node:http';
14
+ import { Readable } from 'node:stream';
15
+ /** Send a Web Response through a Node.js ServerResponse */
16
+ const sendResponse = (webResponse, res) => {
17
+ res.writeHead(webResponse.status, Object.fromEntries(webResponse.headers));
18
+ const body = webResponse.body;
19
+ if (!body) {
20
+ res.end();
21
+ return;
22
+ }
23
+ // Handle ReadableStream (web streams) by piping to the Node.js response.
24
+ // SSE responses from MCP Streamable HTTP transport use ReadableStream —
25
+ // piping preserves the streaming behavior.
26
+ const nodeStream = Readable.fromWeb(body);
27
+ nodeStream.pipe(res);
28
+ res.on('close', () => nodeStream.destroy());
29
+ };
30
+ /** Wrap a ws WebSocket to match the WsHandle interface used by handlers */
31
+ const wrapWs = (ws) => ({
32
+ send: (data) => ws.send(data),
33
+ close: (code, reason) => ws.close(code, reason),
34
+ });
35
+ /**
36
+ * Convert a Node.js IncomingMessage to a Web Standard Request.
37
+ */
38
+ const toWebRequest = (req, body) => {
39
+ const host = req.headers.host ?? 'localhost';
40
+ const url = `http://${host}${req.url ?? '/'}`;
41
+ const headers = new Headers();
42
+ for (const [key, value] of Object.entries(req.headers)) {
43
+ if (value === undefined)
44
+ continue;
45
+ if (Array.isArray(value)) {
46
+ for (const v of value)
47
+ headers.append(key, v);
48
+ }
49
+ else {
50
+ headers.set(key, value);
51
+ }
52
+ }
53
+ const method = req.method ?? 'GET';
54
+ const hasBody = method !== 'GET' && method !== 'HEAD';
55
+ const init = {
56
+ method,
57
+ headers,
58
+ body: hasBody && body ? new Uint8Array(body) : undefined,
59
+ };
60
+ // Node.js 20+ requires duplex: 'half' for requests with a body.
61
+ // This property is not in bun-types' RequestInit, but this file only
62
+ // runs under Node.js.
63
+ if (hasBody) {
64
+ init['duplex'] = 'half';
65
+ }
66
+ return new Request(url, init);
67
+ };
68
+ /** Collect the full request body from an IncomingMessage */
69
+ const collectBody = (req) => new Promise((resolve, reject) => {
70
+ const chunks = [];
71
+ req.on('data', (chunk) => chunks.push(chunk));
72
+ req.on('end', () => resolve(Buffer.concat(chunks)));
73
+ req.on('error', reject);
74
+ });
75
+ /**
76
+ * Handle an HTTP request by converting it to a Web Request, running the
77
+ * fetch handler, and sending the Web Response back through the Node.js response.
78
+ */
79
+ const handleHttpRequest = (options, adapter, req, res) => {
80
+ const run = async () => {
81
+ try {
82
+ const body = req.method !== 'GET' && req.method !== 'HEAD' ? await collectBody(req) : null;
83
+ const webReq = toWebRequest(req, body);
84
+ const webRes = await options.fetch(webReq, adapter);
85
+ if (webRes) {
86
+ sendResponse(webRes, res);
87
+ }
88
+ else if (!res.headersSent) {
89
+ res.writeHead(204);
90
+ res.end();
91
+ }
92
+ }
93
+ catch (err) {
94
+ log.error('Unhandled error in HTTP handler:', err);
95
+ if (!res.headersSent) {
96
+ res.writeHead(500);
97
+ res.end('Internal Server Error');
98
+ }
99
+ }
100
+ };
101
+ void run();
102
+ };
103
+ /**
104
+ * Handle a WebSocket upgrade by running the fetch handler (which calls
105
+ * adapter.upgrade()), then completing the upgrade via the ws library.
106
+ */
107
+ const handleWsUpgradeEvent = (options, adapter, wss, getUpgradeContext, setUpgradeContext, setPendingHeaders, req, socket, head) => {
108
+ const run = async () => {
109
+ try {
110
+ setUpgradeContext({ requested: false });
111
+ const webReq = toWebRequest(req, null);
112
+ await options.fetch(webReq, adapter);
113
+ const ctx = getUpgradeContext();
114
+ setUpgradeContext(null);
115
+ if (!ctx?.requested) {
116
+ socket.destroy();
117
+ return;
118
+ }
119
+ // Stash custom headers (e.g., sec-websocket-protocol) so the 'headers'
120
+ // event listener on the WebSocketServer can inject them into the 101 response.
121
+ if (ctx.headers) {
122
+ const h = new Headers(ctx.headers);
123
+ const headerMap = {};
124
+ for (const [key, value] of h) {
125
+ headerMap[key] = value;
126
+ }
127
+ setPendingHeaders(headerMap);
128
+ }
129
+ wss.handleUpgrade(req, socket, head, ws => {
130
+ const handle = wrapWs(ws);
131
+ ws.on('message', (data, isBinary) => {
132
+ if (isBinary) {
133
+ if (Buffer.isBuffer(data)) {
134
+ options.websocket.message(handle, new Uint8Array(data));
135
+ }
136
+ else if (data instanceof ArrayBuffer) {
137
+ options.websocket.message(handle, data);
138
+ }
139
+ }
140
+ else if (Buffer.isBuffer(data)) {
141
+ options.websocket.message(handle, data.toString('utf-8'));
142
+ }
143
+ else if (Array.isArray(data)) {
144
+ options.websocket.message(handle, Buffer.concat(data).toString('utf-8'));
145
+ }
146
+ else {
147
+ options.websocket.message(handle, new TextDecoder().decode(data));
148
+ }
149
+ });
150
+ ws.on('close', () => options.websocket.close(handle));
151
+ options.websocket.open(handle);
152
+ });
153
+ }
154
+ catch (err) {
155
+ log.error('Unhandled error in WebSocket upgrade handler:', err);
156
+ setUpgradeContext(null);
157
+ socket.destroy();
158
+ }
159
+ };
160
+ void run();
161
+ };
162
+ /**
163
+ * Create a Node.js HTTP + WebSocket server that presents the ServerAdapter
164
+ * interface to the MCP server route handlers.
165
+ *
166
+ * The tricky part is WebSocket upgrades. Bun.serve() handles upgrades inline
167
+ * in the fetch handler — `server.upgrade(req)` completes the handshake and
168
+ * returns a boolean. Node.js + ws handle upgrades via the 'upgrade' event on
169
+ * the HTTP server, which is separate from normal request handling.
170
+ *
171
+ * Strategy: The 'upgrade' event constructs a Web Request, calls the fetch
172
+ * handler (which calls `adapter.upgrade()`), and if upgrade was requested,
173
+ * completes it via `wss.handleUpgrade()`.
174
+ */
175
+ const createNodeServer = (options) => new Promise((resolveServer, rejectServer) => {
176
+ const wss = new WebSocketServer({ noServer: true });
177
+ // The ws library emits 'headers' with the raw header lines just before
178
+ // sending the 101 response. We use this to inject custom headers
179
+ // (e.g., Sec-WebSocket-Protocol) from the route handler's upgrade call.
180
+ let pendingUpgradeHeaders = {};
181
+ wss.on('headers', (headers) => {
182
+ for (const [key, value] of Object.entries(pendingUpgradeHeaders)) {
183
+ headers.push(`${key}: ${value}`);
184
+ }
185
+ pendingUpgradeHeaders = {};
186
+ });
187
+ /**
188
+ * Mutable ref set during upgrade event processing. The adapter.upgrade()
189
+ * method reads/writes this to communicate upgrade intent back to the
190
+ * 'upgrade' event handler.
191
+ */
192
+ let upgradeContext = null;
193
+ const adapter = {
194
+ upgrade: (_req, opts) => {
195
+ if (upgradeContext) {
196
+ upgradeContext.requested = true;
197
+ upgradeContext.headers = opts.headers;
198
+ return true;
199
+ }
200
+ return false;
201
+ },
202
+ timeout: () => {
203
+ // Node.js http server uses socket-level timeouts. The default is
204
+ // sufficient — long-running MCP responses keep the socket open as
205
+ // long as data is being written.
206
+ },
207
+ };
208
+ const httpServer = createServer((req, res) => {
209
+ handleHttpRequest(options, adapter, req, res);
210
+ });
211
+ httpServer.on('upgrade', (req, socket, head) => {
212
+ handleWsUpgradeEvent(options, adapter, wss, () => upgradeContext, ctx => {
213
+ upgradeContext = ctx;
214
+ }, headers => {
215
+ pendingUpgradeHeaders = headers;
216
+ }, req, socket, head);
217
+ });
218
+ httpServer.on('error', (err) => {
219
+ rejectServer(err);
220
+ });
221
+ httpServer.listen(options.port, options.hostname, () => {
222
+ const addr = httpServer.address();
223
+ const actualPort = typeof addr === 'object' && addr !== null ? addr.port : options.port;
224
+ resolveServer({
225
+ port: actualPort,
226
+ stop: () => {
227
+ wss.close();
228
+ httpServer.close();
229
+ },
230
+ });
231
+ });
232
+ });
233
+ export { createNodeServer };
234
+ //# sourceMappingURL=server-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-node.js","sourceRoot":"","sources":["../src/server-node.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skip-confirmation.d.ts","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,QAAO,OAA8B,CAAC"}
1
+ {"version":3,"file":"skip-confirmation.d.ts","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,QAAO,OAA8B,CAAC"}
@@ -10,7 +10,8 @@
10
10
  * The config.json `skipConfirmation` field is checked separately at reload
11
11
  * time and combined with this flag in state.skipConfirmation.
12
12
  */
13
- const cliSkipConfirmation = Bun.argv.includes('--dangerously-skip-confirmation') || Bun.env.OPENTABS_SKIP_CONFIRMATION === '1';
13
+ import { getArgv, getEnv } from '@opentabs-dev/shared';
14
+ const cliSkipConfirmation = getArgv().includes('--dangerously-skip-confirmation') || getEnv('OPENTABS_SKIP_CONFIRMATION') === '1';
14
15
  /** Whether the CLI flag or env var requests confirmation bypass */
15
16
  export const isCliSkipConfirmation = () => cliSkipConfirmation;
16
17
  //# sourceMappingURL=skip-confirmation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skip-confirmation.js","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,mBAAmB,GACvB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,CAAC;AAErG,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,EAAE,CAAC,mBAAmB,CAAC"}
1
+ {"version":3,"file":"skip-confirmation.js","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,mBAAmB,GACvB,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,IAAI,MAAM,CAAC,4BAA4B,CAAC,KAAK,GAAG,CAAC;AAExG,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,EAAE,CAAC,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skip-npm-discovery.d.ts","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,kBAAkB,QAAO,OAA2B,CAAC"}
1
+ {"version":3,"file":"skip-npm-discovery.d.ts","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,eAAO,MAAM,kBAAkB,QAAO,OAA2B,CAAC"}
@@ -8,6 +8,7 @@
8
8
  * This is used by E2E tests to prevent globally-installed npm plugins
9
9
  * on the developer's machine from polluting test isolation.
10
10
  */
11
- const skipNpmDiscovery = Bun.env.OPENTABS_SKIP_NPM_DISCOVERY === '1';
11
+ import { getEnv } from '@opentabs-dev/shared';
12
+ const skipNpmDiscovery = getEnv('OPENTABS_SKIP_NPM_DISCOVERY') === '1';
12
13
  export const isSkipNpmDiscovery = () => skipNpmDiscovery;
13
14
  //# sourceMappingURL=skip-npm-discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skip-npm-discovery.js","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,CAAC;AAErE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAY,EAAE,CAAC,gBAAgB,CAAC"}
1
+ {"version":3,"file":"skip-npm-discovery.js","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,MAAM,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC,KAAK,GAAG,CAAC;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAY,EAAE,CAAC,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAK9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,aAAa,MAAM,KAAG,MAAM,GAAG,IAejE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,OAqBzD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,KAAG,IAwDpD,CAAC"}
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAK9D;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,aAAa,MAAM,KAAG,MAAM,GAAG,IAajE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,OAqBzD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,KAAG,IAwDpD,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * the background and stores results in server state.
7
7
  */
8
8
  import { log } from './logger.js';
9
- import { platformExec, toErrorMessage } from '@opentabs-dev/shared';
9
+ import { spawnProcessSync, toErrorMessage } from '@opentabs-dev/shared';
10
10
  /**
11
11
  * Query the latest published version of a package via `npm view`.
12
12
  * Delegates auth to npm itself, which reads ~/.npmrc for tokens —
@@ -17,14 +17,12 @@ import { platformExec, toErrorMessage } from '@opentabs-dev/shared';
17
17
  */
18
18
  export const fetchLatestVersion = (packageName) => {
19
19
  try {
20
- const result = Bun.spawnSync([platformExec('npm'), 'view', packageName, 'version'], {
21
- stdio: ['ignore', 'pipe', 'pipe'],
22
- });
20
+ const result = spawnProcessSync('npm', ['view', packageName, 'version']);
23
21
  if (result.exitCode !== 0) {
24
- log.debug(`npm view failed for ${packageName}: ${result.stderr.toString().trim()}`);
22
+ log.debug(`npm view failed for ${packageName}: ${result.stderr.trim()}`);
25
23
  return null;
26
24
  }
27
- const version = result.stdout.toString().trim();
25
+ const version = result.stdout.trim();
28
26
  return version || null;
29
27
  }
30
28
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,QAAA,IAAI,OAAO,QAAU,CAAC;AAYtB,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,QAAA,IAAI,OAAO,QAAU,CAAC;AAYtB,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/version.js CHANGED
@@ -5,12 +5,13 @@
5
5
  * (e.g., running from a different working directory or restructured dist)
6
6
  * falls back to '0.0.0' instead of crashing the entire module import chain.
7
7
  */
8
+ import { readJsonFile } from '@opentabs-dev/shared';
8
9
  import { join, dirname } from 'node:path';
9
10
  import { fileURLToPath } from 'node:url';
10
11
  let version = '0.0.0';
11
12
  try {
12
13
  const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
13
- const pkgJson = await Bun.file(pkgPath).json();
14
+ const pkgJson = await readJsonFile(pkgPath);
14
15
  if (pkgJson !== null && typeof pkgJson === 'object' && 'version' in pkgJson && typeof pkgJson.version === 'string') {
15
16
  version = pkgJson.version;
16
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,IAAI,OAAO,GAAG,OAAO,CAAC;AAEtB,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,OAAO,GAAY,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,4DAA4D;AAC9D,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,IAAI,OAAO,GAAG,OAAO,CAAC;AAEtB,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,OAAO,GAAY,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,4DAA4D;AAC9D,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentabs-dev/mcp-server",
3
- "version": "0.0.27",
3
+ "version": "0.0.28",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -14,15 +14,17 @@
14
14
  "scripts": {
15
15
  "build": "tsc --build",
16
16
  "dev": "bun --hot dist/index.js --dev",
17
- "start": "bun dist/index.js"
17
+ "start": "node dist/index.js"
18
18
  },
19
19
  "devDependencies": {
20
+ "@types/ws": "^8.18.1",
20
21
  "bun-types": "^1.3.9"
21
22
  },
22
23
  "dependencies": {
23
24
  "@modelcontextprotocol/sdk": "^1.26.0",
24
- "@opentabs-dev/shared": "0.0.23",
25
+ "@opentabs-dev/shared": "0.0.25",
25
26
  "ajv": "^8.18.0",
27
+ "ws": "^8.19.0",
26
28
  "zod": "^4.3.6"
27
29
  }
28
30
  }