lockin-mcp 1.0.0

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 (175) hide show
  1. package/README.md +349 -0
  2. package/assets/icon-256.png +0 -0
  3. package/assets/icon-32.png +0 -0
  4. package/assets/icon.svg +4 -0
  5. package/dist/blocker.d.ts +23 -0
  6. package/dist/blocker.d.ts.map +1 -0
  7. package/dist/blocker.js +184 -0
  8. package/dist/blocker.js.map +1 -0
  9. package/dist/brand.d.ts +12 -0
  10. package/dist/brand.d.ts.map +1 -0
  11. package/dist/brand.js +12 -0
  12. package/dist/brand.js.map +1 -0
  13. package/dist/hosts-manager.d.ts +14 -0
  14. package/dist/hosts-manager.d.ts.map +1 -0
  15. package/dist/hosts-manager.js +233 -0
  16. package/dist/hosts-manager.js.map +1 -0
  17. package/dist/hosts-manager.test.d.ts +2 -0
  18. package/dist/hosts-manager.test.d.ts.map +1 -0
  19. package/dist/hosts-manager.test.js +19 -0
  20. package/dist/hosts-manager.test.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +296 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/install.d.ts +3 -0
  26. package/dist/install.d.ts.map +1 -0
  27. package/dist/install.js +15 -0
  28. package/dist/install.js.map +1 -0
  29. package/dist/installer/agent-instructions.d.ts +25 -0
  30. package/dist/installer/agent-instructions.d.ts.map +1 -0
  31. package/dist/installer/agent-instructions.js +36 -0
  32. package/dist/installer/agent-instructions.js.map +1 -0
  33. package/dist/installer/agents.d.ts +9 -0
  34. package/dist/installer/agents.d.ts.map +1 -0
  35. package/dist/installer/agents.js +223 -0
  36. package/dist/installer/agents.js.map +1 -0
  37. package/dist/installer/background-service.d.ts +11 -0
  38. package/dist/installer/background-service.d.ts.map +1 -0
  39. package/dist/installer/background-service.js +47 -0
  40. package/dist/installer/background-service.js.map +1 -0
  41. package/dist/installer/clipboard.d.ts +2 -0
  42. package/dist/installer/clipboard.d.ts.map +1 -0
  43. package/dist/installer/clipboard.js +28 -0
  44. package/dist/installer/clipboard.js.map +1 -0
  45. package/dist/installer/daemon-linux.d.ts +10 -0
  46. package/dist/installer/daemon-linux.d.ts.map +1 -0
  47. package/dist/installer/daemon-linux.js +66 -0
  48. package/dist/installer/daemon-linux.js.map +1 -0
  49. package/dist/installer/daemon-windows.d.ts +10 -0
  50. package/dist/installer/daemon-windows.d.ts.map +1 -0
  51. package/dist/installer/daemon-windows.js +88 -0
  52. package/dist/installer/daemon-windows.js.map +1 -0
  53. package/dist/installer/daemon.d.ts +10 -0
  54. package/dist/installer/daemon.d.ts.map +1 -0
  55. package/dist/installer/daemon.js +96 -0
  56. package/dist/installer/daemon.js.map +1 -0
  57. package/dist/installer/hosts-sudo.d.ts +6 -0
  58. package/dist/installer/hosts-sudo.d.ts.map +1 -0
  59. package/dist/installer/hosts-sudo.js +111 -0
  60. package/dist/installer/hosts-sudo.js.map +1 -0
  61. package/dist/installer/legacy-tunnels.d.ts +2 -0
  62. package/dist/installer/legacy-tunnels.d.ts.map +1 -0
  63. package/dist/installer/legacy-tunnels.js +27 -0
  64. package/dist/installer/legacy-tunnels.js.map +1 -0
  65. package/dist/installer/license.d.ts +9 -0
  66. package/dist/installer/license.d.ts.map +1 -0
  67. package/dist/installer/license.js +193 -0
  68. package/dist/installer/license.js.map +1 -0
  69. package/dist/installer/mcp-cleanup.d.ts +3 -0
  70. package/dist/installer/mcp-cleanup.d.ts.map +1 -0
  71. package/dist/installer/mcp-cleanup.js +28 -0
  72. package/dist/installer/mcp-cleanup.js.map +1 -0
  73. package/dist/installer/platform.d.ts +7 -0
  74. package/dist/installer/platform.d.ts.map +1 -0
  75. package/dist/installer/platform.js +76 -0
  76. package/dist/installer/platform.js.map +1 -0
  77. package/dist/installer/poke-daemon.d.ts +14 -0
  78. package/dist/installer/poke-daemon.d.ts.map +1 -0
  79. package/dist/installer/poke-daemon.js +161 -0
  80. package/dist/installer/poke-daemon.js.map +1 -0
  81. package/dist/installer/poke.d.ts +43 -0
  82. package/dist/installer/poke.d.ts.map +1 -0
  83. package/dist/installer/poke.js +154 -0
  84. package/dist/installer/poke.js.map +1 -0
  85. package/dist/installer/port.d.ts +6 -0
  86. package/dist/installer/port.d.ts.map +1 -0
  87. package/dist/installer/port.js +76 -0
  88. package/dist/installer/port.js.map +1 -0
  89. package/dist/installer/presets.d.ts +5 -0
  90. package/dist/installer/presets.d.ts.map +1 -0
  91. package/dist/installer/presets.js +22 -0
  92. package/dist/installer/presets.js.map +1 -0
  93. package/dist/installer/prompts.d.ts +8 -0
  94. package/dist/installer/prompts.d.ts.map +1 -0
  95. package/dist/installer/prompts.js +128 -0
  96. package/dist/installer/prompts.js.map +1 -0
  97. package/dist/installer/relay-credentials.d.ts +26 -0
  98. package/dist/installer/relay-credentials.d.ts.map +1 -0
  99. package/dist/installer/relay-credentials.js +75 -0
  100. package/dist/installer/relay-credentials.js.map +1 -0
  101. package/dist/installer/relay-provision.d.ts +26 -0
  102. package/dist/installer/relay-provision.d.ts.map +1 -0
  103. package/dist/installer/relay-provision.js +57 -0
  104. package/dist/installer/relay-provision.js.map +1 -0
  105. package/dist/installer/run.d.ts +2 -0
  106. package/dist/installer/run.d.ts.map +1 -0
  107. package/dist/installer/run.js +365 -0
  108. package/dist/installer/run.js.map +1 -0
  109. package/dist/installer/tty.d.ts +7 -0
  110. package/dist/installer/tty.d.ts.map +1 -0
  111. package/dist/installer/tty.js +37 -0
  112. package/dist/installer/tty.js.map +1 -0
  113. package/dist/installer/tui.d.ts +14 -0
  114. package/dist/installer/tui.d.ts.map +1 -0
  115. package/dist/installer/tui.js +150 -0
  116. package/dist/installer/tui.js.map +1 -0
  117. package/dist/installer/tunnel-daemon.d.ts +13 -0
  118. package/dist/installer/tunnel-daemon.d.ts.map +1 -0
  119. package/dist/installer/tunnel-daemon.js +129 -0
  120. package/dist/installer/tunnel-daemon.js.map +1 -0
  121. package/dist/installer/tunnel-provision.d.ts +14 -0
  122. package/dist/installer/tunnel-provision.d.ts.map +1 -0
  123. package/dist/installer/tunnel-provision.js +31 -0
  124. package/dist/installer/tunnel-provision.js.map +1 -0
  125. package/dist/installer/tunnel.d.ts +12 -0
  126. package/dist/installer/tunnel.d.ts.map +1 -0
  127. package/dist/installer/tunnel.js +91 -0
  128. package/dist/installer/tunnel.js.map +1 -0
  129. package/dist/installer/types.d.ts +59 -0
  130. package/dist/installer/types.d.ts.map +1 -0
  131. package/dist/installer/types.js +2 -0
  132. package/dist/installer/types.js.map +1 -0
  133. package/dist/license-check.d.ts +12 -0
  134. package/dist/license-check.d.ts.map +1 -0
  135. package/dist/license-check.js +59 -0
  136. package/dist/license-check.js.map +1 -0
  137. package/dist/license-guard.d.ts +14 -0
  138. package/dist/license-guard.d.ts.map +1 -0
  139. package/dist/license-guard.js +56 -0
  140. package/dist/license-guard.js.map +1 -0
  141. package/dist/license-guard.test.d.ts +2 -0
  142. package/dist/license-guard.test.d.ts.map +1 -0
  143. package/dist/license-guard.test.js +34 -0
  144. package/dist/license-guard.test.js.map +1 -0
  145. package/dist/relay-client.d.ts +32 -0
  146. package/dist/relay-client.d.ts.map +1 -0
  147. package/dist/relay-client.js +249 -0
  148. package/dist/relay-client.js.map +1 -0
  149. package/dist/relay-types.d.ts +30 -0
  150. package/dist/relay-types.d.ts.map +1 -0
  151. package/dist/relay-types.js +2 -0
  152. package/dist/relay-types.js.map +1 -0
  153. package/dist/relay-urls.d.ts +22 -0
  154. package/dist/relay-urls.d.ts.map +1 -0
  155. package/dist/relay-urls.js +57 -0
  156. package/dist/relay-urls.js.map +1 -0
  157. package/dist/server.d.ts +6 -0
  158. package/dist/server.d.ts.map +1 -0
  159. package/dist/server.js +164 -0
  160. package/dist/server.js.map +1 -0
  161. package/dist/state.d.ts +12 -0
  162. package/dist/state.d.ts.map +1 -0
  163. package/dist/state.js +91 -0
  164. package/dist/state.js.map +1 -0
  165. package/dist/types.d.ts +40 -0
  166. package/dist/types.d.ts.map +1 -0
  167. package/dist/types.js +41 -0
  168. package/dist/types.js.map +1 -0
  169. package/dist/types.test.d.ts +2 -0
  170. package/dist/types.test.d.ts.map +1 -0
  171. package/dist/types.test.js +13 -0
  172. package/dist/types.test.js.map +1 -0
  173. package/install.ps1 +41 -0
  174. package/install.sh +39 -0
  175. package/package.json +64 -0
@@ -0,0 +1,233 @@
1
+ import { access, readFile, writeFile, unlink } from "node:fs/promises";
2
+ import { execFile, spawn } from "node:child_process";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { BLOCK_IP, BLOCK_IP_V6, MARKER, expandDomainVariants, getHostsPath, } from "./types.js";
7
+ import { ensureHostsUpdaterScript, writeHostsViaPasswordlessScript, } from "./installer/hosts-sudo.js";
8
+ import { commandExists } from "./installer/platform.js";
9
+ const execFileAsync = promisify(execFile);
10
+ function hostsPath() {
11
+ return getHostsPath();
12
+ }
13
+ function runSudoInteractive(command, args) {
14
+ return new Promise((resolve, reject) => {
15
+ const child = spawn("sudo", [command, ...args], {
16
+ stdio: "inherit",
17
+ env: process.env,
18
+ });
19
+ child.on("error", reject);
20
+ child.on("close", (code) => {
21
+ if (code === 0) {
22
+ resolve();
23
+ return;
24
+ }
25
+ reject(new Error(`Could not update hosts file (sudo ${command} exited with code ${code ?? 1}).`));
26
+ });
27
+ });
28
+ }
29
+ async function runSudoIfCached(command, args) {
30
+ try {
31
+ await execFileAsync("sudo", ["-n", command, ...args]);
32
+ return true;
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ }
38
+ async function runWindowsElevatedCopy(tempPath, destPath) {
39
+ const script = `Start-Process -FilePath 'cmd.exe' -ArgumentList '/c copy /Y "${tempPath.replace(/'/g, "''")}" "${destPath.replace(/'/g, "''")}"' -Verb RunAs -Wait`;
40
+ await execFileAsync("powershell", ["-NoProfile", "-Command", script]);
41
+ }
42
+ export async function canWriteHostsFile() {
43
+ const path = hostsPath();
44
+ try {
45
+ await access(path);
46
+ await writeFile(path, await readFile(path, "utf8"), "utf8");
47
+ return true;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ export async function readHostsFile() {
54
+ return readFile(hostsPath(), "utf8");
55
+ }
56
+ export function stripManagedEntries(hostsContent) {
57
+ const lines = hostsContent.split("\n");
58
+ const kept = [];
59
+ let skipping = false;
60
+ for (const line of lines) {
61
+ if (line.includes(MARKER)) {
62
+ skipping = true;
63
+ continue;
64
+ }
65
+ if (skipping) {
66
+ if (line.trim() === "" || line.startsWith("#")) {
67
+ if (line.trim() === "") {
68
+ skipping = false;
69
+ kept.push(line);
70
+ }
71
+ continue;
72
+ }
73
+ if (line.startsWith(BLOCK_IP) || line.startsWith(BLOCK_IP_V6)) {
74
+ continue;
75
+ }
76
+ skipping = false;
77
+ }
78
+ kept.push(line);
79
+ }
80
+ return kept.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd();
81
+ }
82
+ export function buildManagedSection(domains) {
83
+ if (domains.length === 0) {
84
+ return "";
85
+ }
86
+ const lines = [
87
+ "",
88
+ `${MARKER} BEGIN`,
89
+ "# Managed by LockIn MCP — do not edit manually",
90
+ ];
91
+ const uniqueHosts = new Set();
92
+ for (const domain of domains) {
93
+ for (const host of expandDomainVariants(domain)) {
94
+ uniqueHosts.add(host);
95
+ }
96
+ }
97
+ for (const host of [...uniqueHosts].sort()) {
98
+ lines.push(`${BLOCK_IP} ${host}`);
99
+ lines.push(`${BLOCK_IP_V6} ${host}`);
100
+ }
101
+ lines.push(`${MARKER} END`);
102
+ return lines.join("\n");
103
+ }
104
+ export function composeHostsFile(existingContent, blockedDomains) {
105
+ const base = stripManagedEntries(existingContent);
106
+ const managed = buildManagedSection(blockedDomains);
107
+ if (!managed) {
108
+ return `${base}\n`;
109
+ }
110
+ return `${base}${managed}\n`;
111
+ }
112
+ function normalizeHostsContent(content) {
113
+ return content.replace(/\n+$/g, "\n");
114
+ }
115
+ async function writeHostsWithElevation(content) {
116
+ const dest = hostsPath();
117
+ const tempPath = join(tmpdir(), `lockin-mcp-hosts-${process.pid}`);
118
+ await writeFile(tempPath, content, "utf8");
119
+ try {
120
+ if (process.platform === "win32") {
121
+ await runWindowsElevatedCopy(tempPath, dest);
122
+ await flushDnsCache();
123
+ return;
124
+ }
125
+ await ensureHostsUpdaterScript();
126
+ const usedPasswordless = await writeHostsViaPasswordlessScript(tempPath);
127
+ if (!usedPasswordless) {
128
+ await runSudoInteractive("cp", [tempPath, dest]);
129
+ await flushDnsCache();
130
+ }
131
+ }
132
+ finally {
133
+ await unlink(tempPath).catch(() => undefined);
134
+ }
135
+ }
136
+ export async function writeHostsFile(content) {
137
+ try {
138
+ await writeFile(hostsPath(), content, "utf8");
139
+ return "direct";
140
+ }
141
+ catch (error) {
142
+ if (error instanceof Error &&
143
+ "code" in error &&
144
+ error.code === "EACCES") {
145
+ await writeHostsWithElevation(content);
146
+ return "sudo";
147
+ }
148
+ throw error;
149
+ }
150
+ }
151
+ async function tryExec(command, args) {
152
+ try {
153
+ await execFileAsync(command, args);
154
+ return true;
155
+ }
156
+ catch {
157
+ return false;
158
+ }
159
+ }
160
+ async function flushDnsMacos() {
161
+ if (await tryExec("dscacheutil", ["-flushcache"])) {
162
+ await tryExec("killall", ["-HUP", "mDNSResponder"]);
163
+ return true;
164
+ }
165
+ if (await runSudoIfCached("dscacheutil", ["-flushcache"])) {
166
+ await runSudoIfCached("killall", ["-HUP", "mDNSResponder"]);
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ async function flushDnsLinux() {
172
+ if (await commandExists("resolvectl")) {
173
+ if (await tryExec("resolvectl", ["flush-caches"]))
174
+ return true;
175
+ if (await runSudoIfCached("resolvectl", ["flush-caches"]))
176
+ return true;
177
+ }
178
+ if (await commandExists("systemd-resolve")) {
179
+ if (await tryExec("systemd-resolve", ["--flush-caches"]))
180
+ return true;
181
+ if (await runSudoIfCached("systemd-resolve", ["--flush-caches"]))
182
+ return true;
183
+ }
184
+ if (await commandExists("nscd")) {
185
+ if (await tryExec("nscd", ["-i", "hosts"]))
186
+ return true;
187
+ if (await runSudoIfCached("nscd", ["-i", "hosts"]))
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ async function flushDnsWindows() {
193
+ return tryExec("ipconfig", ["/flushdns"]);
194
+ }
195
+ export async function flushDnsCache() {
196
+ switch (process.platform) {
197
+ case "darwin":
198
+ await flushDnsMacos();
199
+ break;
200
+ case "linux":
201
+ await flushDnsLinux();
202
+ break;
203
+ case "win32":
204
+ await flushDnsWindows();
205
+ break;
206
+ default:
207
+ break;
208
+ }
209
+ }
210
+ export async function syncHostsFile(blockedDomains) {
211
+ const current = await readHostsFile();
212
+ const next = composeHostsFile(current, blockedDomains);
213
+ if (normalizeHostsContent(next) === normalizeHostsContent(current)) {
214
+ return {
215
+ method: "unchanged",
216
+ blockedCount: blockedDomains.length,
217
+ };
218
+ }
219
+ const method = await writeHostsFile(next);
220
+ await flushDnsCache();
221
+ return {
222
+ method,
223
+ blockedCount: blockedDomains.length,
224
+ };
225
+ }
226
+ /** Reconcile hosts file with saved state on daemon startup. */
227
+ export async function reconcileHostsOnStartup() {
228
+ const { loadState, getDomainsToBlockInHosts } = await import("./state.js");
229
+ const state = await loadState();
230
+ const domains = getDomainsToBlockInHosts(state);
231
+ await syncHostsFile(domains);
232
+ }
233
+ //# sourceMappingURL=hosts-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts-manager.js","sourceRoot":"","sources":["../src/hosts-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hosts-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts-manager.test.d.ts","sourceRoot":"","sources":["../src/hosts-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { composeHostsFile, stripManagedEntries, buildManagedSection, } from "./hosts-manager.js";
3
+ import { MARKER } from "./types.js";
4
+ describe("hosts-manager", () => {
5
+ it("builds and strips managed section", () => {
6
+ const base = "127.0.0.1 localhost\n";
7
+ const managed = buildManagedSection(["youtube.com"]);
8
+ expect(managed).toContain(MARKER);
9
+ expect(managed).toContain("youtube.com");
10
+ const composed = composeHostsFile(base, ["youtube.com"]);
11
+ const stripped = stripManagedEntries(composed);
12
+ expect(stripped.trim()).toBe(base.trim());
13
+ });
14
+ it("leaves content unchanged when domains empty", () => {
15
+ const base = "127.0.0.1 localhost\n";
16
+ expect(composeHostsFile(base, [])).toBe(`${base}`);
17
+ });
18
+ });
19
+ //# sourceMappingURL=hosts-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts-manager.test.js","sourceRoot":"","sources":["../src/hosts-manager.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAG,uBAAuB,CAAC;QACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,uBAAuB,CAAC;QACrC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,296 @@
1
+ #!/usr/bin/env node
2
+ import { randomUUID } from "node:crypto";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
5
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
6
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
7
+ import express from "express";
8
+ import { APP_SLUG } from "./brand.js";
9
+ import { startExpiryWatcher } from "./blocker.js";
10
+ import { startLicenseVerificationWatcher, verifyTokenWithBackend, } from "./license-check.js";
11
+ import { invalidateLicenseCache } from "./license-guard.js";
12
+ import { loadCachedLicense } from "./installer/license.js";
13
+ import { reconcileHostsOnStartup } from "./hosts-manager.js";
14
+ import { createMcpServer } from "./server.js";
15
+ const DEFAULT_HTTP_PORT = 3847;
16
+ const streamSessions = new Map();
17
+ const sseSessions = new Map();
18
+ function log(message) {
19
+ console.error(`[${APP_SLUG}] ${message}`);
20
+ }
21
+ function parseArgs(argv) {
22
+ const hasStdio = argv.includes("--stdio");
23
+ const hasHttp = argv.includes("--http");
24
+ const portArgIndex = argv.findIndex((arg) => arg === "--port");
25
+ const portValue = portArgIndex >= 0 ? Number(argv[portArgIndex + 1]) : DEFAULT_HTTP_PORT;
26
+ const port = Number.isFinite(portValue) && portValue > 0
27
+ ? portValue
28
+ : DEFAULT_HTTP_PORT;
29
+ if (hasStdio && hasHttp) {
30
+ throw new Error("Use only one of --stdio or --http");
31
+ }
32
+ if (hasHttp) {
33
+ return { mode: "http", port };
34
+ }
35
+ if (hasStdio) {
36
+ return { mode: "stdio", port };
37
+ }
38
+ // Default to stdio for MCP clients (Claude Desktop, Cursor, etc.)
39
+ return { mode: "stdio", port };
40
+ }
41
+ async function runStdio() {
42
+ const server = createMcpServer();
43
+ const transport = new StdioServerTransport();
44
+ await server.connect(transport);
45
+ log("Running on stdio transport");
46
+ }
47
+ async function handleMcpRequest(req, res) {
48
+ const sessionIdHeader = req.headers["mcp-session-id"];
49
+ const sessionId = Array.isArray(sessionIdHeader)
50
+ ? sessionIdHeader[0]
51
+ : sessionIdHeader;
52
+ if (sessionId && streamSessions.has(sessionId)) {
53
+ const entry = streamSessions.get(sessionId);
54
+ if (!entry) {
55
+ res.status(400).json({
56
+ jsonrpc: "2.0",
57
+ error: { code: -32000, message: "Session not found" },
58
+ id: null,
59
+ });
60
+ return;
61
+ }
62
+ await entry.transport.handleRequest(req, res, req.body);
63
+ return;
64
+ }
65
+ if (req.method === "POST" && isInitializeRequest(req.body)) {
66
+ const server = createMcpServer();
67
+ const transport = new StreamableHTTPServerTransport({
68
+ sessionIdGenerator: () => randomUUID(),
69
+ onsessioninitialized: (id) => {
70
+ streamSessions.set(id, { server, transport });
71
+ },
72
+ });
73
+ transport.onclose = () => {
74
+ if (transport.sessionId) {
75
+ streamSessions.delete(transport.sessionId);
76
+ }
77
+ };
78
+ await server.connect(transport);
79
+ await transport.handleRequest(req, res, req.body);
80
+ return;
81
+ }
82
+ res.status(400).json({
83
+ jsonrpc: "2.0",
84
+ error: {
85
+ code: -32000,
86
+ message: "Bad Request: invalid or missing session ID",
87
+ },
88
+ id: null,
89
+ });
90
+ }
91
+ function bearerTokenMatches(header, authToken) {
92
+ if (!header) {
93
+ return false;
94
+ }
95
+ const match = header.match(/^Bearer\s+(.+)$/i);
96
+ return match?.[1] === authToken;
97
+ }
98
+ function createBearerAuthMiddleware(authToken) {
99
+ return (req, res, next) => {
100
+ if (!bearerTokenMatches(req.headers.authorization, authToken)) {
101
+ res.status(401).json({
102
+ error: "Unauthorized",
103
+ message: "Provide Authorization: Bearer <MDB_MCP_AUTH_TOKEN>",
104
+ });
105
+ return;
106
+ }
107
+ next();
108
+ };
109
+ }
110
+ async function runHttp(port) {
111
+ process.env.MDB_HTTP_PORT = String(port);
112
+ try {
113
+ await reconcileHostsOnStartup();
114
+ log("Hosts file reconciled with saved state");
115
+ }
116
+ catch (error) {
117
+ const message = error instanceof Error ? error.message : String(error);
118
+ log(`Warning: could not reconcile hosts on startup: ${message}`);
119
+ }
120
+ if (!process.env.MDB_RELAY_URL ||
121
+ !process.env.MDB_DEVICE_ID ||
122
+ !process.env.MDB_RELAY_DEVICE_TOKEN) {
123
+ try {
124
+ const { readRelayCredentials } = await import("./installer/relay-credentials.js");
125
+ const credentials = await readRelayCredentials();
126
+ if (credentials) {
127
+ process.env.MDB_RELAY_URL ??=
128
+ credentials.relayConnectUrl ?? credentials.relayUrl;
129
+ process.env.MDB_DEVICE_ID ??= credentials.deviceId;
130
+ process.env.MDB_RELAY_DEVICE_TOKEN ??= credentials.relayDeviceToken;
131
+ }
132
+ }
133
+ catch {
134
+ // installer module may be unavailable in minimal builds
135
+ }
136
+ }
137
+ const { startRelayClientFromEnv } = await import("./relay-client.js");
138
+ let relayClient = null;
139
+ const app = express();
140
+ const authToken = process.env.MDB_MCP_AUTH_TOKEN;
141
+ let proVerified = false;
142
+ const cachedLicense = await loadCachedLicense();
143
+ if (cachedLicense?.tier === "pro" && cachedLicense.token) {
144
+ const status = await verifyTokenWithBackend(cachedLicense.token);
145
+ proVerified = status.valid;
146
+ if (status.valid) {
147
+ log(`Pro license active (${status.email ?? "verified"})`);
148
+ relayClient = startRelayClientFromEnv((message) => log(`[relay] ${message}`));
149
+ }
150
+ else {
151
+ log(`Pro license invalid: ${status.error ?? "verification failed"} — relay features disabled`);
152
+ }
153
+ startLicenseVerificationWatcher(() => cachedLicense.token, (result) => {
154
+ log(`Pro license check failed: ${result.error ?? "invalid"}`);
155
+ proVerified = false;
156
+ invalidateLicenseCache();
157
+ relayClient?.stop();
158
+ relayClient = null;
159
+ });
160
+ }
161
+ else {
162
+ log("No Pro license — relay disabled. Purchase at signup?redirect=checkout");
163
+ }
164
+ app.use(express.json({ limit: "4mb" }));
165
+ const protectedPaths = ["/mcp", "/sse", "/message"];
166
+ if (authToken) {
167
+ for (const path of protectedPaths) {
168
+ app.use(path, createBearerAuthMiddleware(authToken));
169
+ }
170
+ log("HTTP MCP auth enabled (Bearer token required)");
171
+ }
172
+ app.get("/health", (_req, res) => {
173
+ res.json({
174
+ status: "ok",
175
+ tier: proVerified ? "pro" : "free",
176
+ });
177
+ });
178
+ app.get("/icon.png", async (_req, res) => {
179
+ try {
180
+ const { readFile } = await import("node:fs/promises");
181
+ const { dirname, join } = await import("node:path");
182
+ const { fileURLToPath } = await import("node:url");
183
+ const baseDir = dirname(fileURLToPath(import.meta.url));
184
+ const iconPath = join(baseDir, "..", "assets", "icon-256.png");
185
+ const data = await readFile(iconPath);
186
+ res.setHeader("content-type", "image/png");
187
+ res.setHeader("cache-control", "public, max-age=86400");
188
+ res.send(data);
189
+ }
190
+ catch {
191
+ res.status(404).end();
192
+ }
193
+ });
194
+ app.get("/", (_req, res) => {
195
+ res.json({
196
+ service: APP_SLUG,
197
+ status: "ok",
198
+ endpoints: {
199
+ health: "/health",
200
+ mcp: "/mcp",
201
+ sse: "/sse",
202
+ message: "/message",
203
+ },
204
+ hint: "Use /mcp for Poke, Claude, Cursor, and ChatGPT.",
205
+ });
206
+ });
207
+ app.get("/sse", (_req, res) => {
208
+ void (async () => {
209
+ const server = createMcpServer();
210
+ const transport = new SSEServerTransport("/message", res);
211
+ sseSessions.set(transport.sessionId, { server, transport });
212
+ transport.onclose = () => {
213
+ sseSessions.delete(transport.sessionId);
214
+ };
215
+ await server.connect(transport);
216
+ })().catch((error) => {
217
+ const message = error instanceof Error ? error.message : String(error);
218
+ if (!res.headersSent) {
219
+ res.status(500).json({ error: message });
220
+ }
221
+ });
222
+ });
223
+ app.post("/message", (req, res) => {
224
+ void (async () => {
225
+ const sessionId = req.query.sessionId;
226
+ if (typeof sessionId !== "string") {
227
+ res.status(400).end("Missing sessionId");
228
+ return;
229
+ }
230
+ const entry = sseSessions.get(sessionId);
231
+ if (!entry) {
232
+ res.status(404).end("Unknown session");
233
+ return;
234
+ }
235
+ await entry.transport.handlePostMessage(req, res, req.body);
236
+ })().catch((error) => {
237
+ const message = error instanceof Error ? error.message : String(error);
238
+ if (!res.headersSent) {
239
+ res.status(500).json({ error: message });
240
+ }
241
+ });
242
+ });
243
+ app.post("/mcp", (req, res) => {
244
+ void handleMcpRequest(req, res);
245
+ });
246
+ app.get("/mcp", (req, res) => {
247
+ void handleMcpRequest(req, res);
248
+ });
249
+ app.delete("/mcp", (req, res) => {
250
+ const sessionIdHeader = req.headers["mcp-session-id"];
251
+ const sessionId = Array.isArray(sessionIdHeader)
252
+ ? sessionIdHeader[0]
253
+ : sessionIdHeader;
254
+ if (!sessionId || !streamSessions.has(sessionId)) {
255
+ res.status(400).json({ error: "Invalid or missing session ID" });
256
+ return;
257
+ }
258
+ const entry = streamSessions.get(sessionId);
259
+ if (entry) {
260
+ void entry.transport.close();
261
+ streamSessions.delete(sessionId);
262
+ }
263
+ res.status(200).json({ closed: true });
264
+ });
265
+ const listenHost = process.env.MDB_HTTP_HOST ?? "127.0.0.1";
266
+ await new Promise((resolve) => {
267
+ app.listen(port, listenHost, () => {
268
+ log(`Running on HTTP at http://${listenHost}:${port}/mcp`);
269
+ resolve();
270
+ });
271
+ });
272
+ }
273
+ async function main() {
274
+ const argv = process.argv.slice(2);
275
+ if (argv[0] === "install" || argv[0] === "mdb-install") {
276
+ const { runInstaller } = await import("./installer/run.js");
277
+ await runInstaller(argv.slice(1));
278
+ return;
279
+ }
280
+ if (process.platform !== "darwin") {
281
+ log("Warning: this server is designed for macOS. Hosts/DNS behavior may differ on other platforms.");
282
+ }
283
+ const { mode, port } = parseArgs(argv);
284
+ startExpiryWatcher();
285
+ if (mode === "http") {
286
+ await runHttp(port);
287
+ return;
288
+ }
289
+ await runStdio();
290
+ }
291
+ main().catch((error) => {
292
+ const message = error instanceof Error ? error.message : String(error);
293
+ log(`Fatal error: ${message}`);
294
+ process.exit(1);
295
+ });
296
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ import { runInstaller } from "./installer/run.js";
3
+ async function main() {
4
+ const args = process.argv.slice(2);
5
+ if (args[0] === "install") {
6
+ args.shift();
7
+ }
8
+ await runInstaller(args);
9
+ }
10
+ main().catch((error) => {
11
+ const message = error instanceof Error ? error.message : String(error);
12
+ console.error(`Installer failed: ${message}`);
13
+ process.exit(1);
14
+ });
15
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare const CHATGPT_CONNECTORS_URL = "https://chatgpt.com/#settings/Connectors";
2
+ export interface AgentConnectionDetails {
3
+ authToken: string;
4
+ remoteMcpUrl: string;
5
+ pokeIntegrationUrl: string;
6
+ poke: {
7
+ mcpUrl: string;
8
+ mcpAddCommand: string;
9
+ };
10
+ claude: {
11
+ mcpUrl: string;
12
+ configPath: string;
13
+ };
14
+ chatgpt: {
15
+ mcpUrl: string;
16
+ settingsUrl: string;
17
+ };
18
+ }
19
+ export declare function agentConnectionDetails(params: {
20
+ remoteMcpUrl: string;
21
+ pokeIntegrationUrl: string;
22
+ authToken: string;
23
+ }): AgentConnectionDetails;
24
+ export declare function formatCredentialsCard(details: AgentConnectionDetails): string;
25
+ //# sourceMappingURL=agent-instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-instructions.d.ts","sourceRoot":"","sources":["../../src/installer/agent-instructions.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,sBAAsB,CAgCzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAK7E"}