bitmate-mcp 0.1.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.
@@ -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,117 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const index_js_2 = require("@modelcontextprotocol/sdk/client/index.js");
7
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
8
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
9
+ const BITMATE_API_URL = "https://api.bitmate.ai/mcp";
10
+ // ── Setup mode ──────────────────────────────────────────────────────────────
11
+ if (process.argv[2] === "setup") {
12
+ import("./setup.js").then((m) => m.runSetup());
13
+ }
14
+ else {
15
+ startProxy();
16
+ }
17
+ // ── Proxy mode ──────────────────────────────────────────────────────────────
18
+ async function startProxy() {
19
+ const apiKey = process.env.BITMATE_API_KEY;
20
+ if (!apiKey) {
21
+ process.stderr.write("Error: BITMATE_API_KEY environment variable is required.\n" +
22
+ "Get your API key at https://app.bitmate.ai/settings/api\n" +
23
+ "Then set it: export BITMATE_API_KEY=your_key_here\n");
24
+ process.exit(1);
25
+ }
26
+ // Remote MCP client — connects to api.bitmate.ai/mcp
27
+ const remoteTransport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(BITMATE_API_URL), {
28
+ requestInit: {
29
+ headers: {
30
+ Authorization: `Bearer ${apiKey}`,
31
+ },
32
+ },
33
+ });
34
+ const remoteClient = new index_js_2.Client({ name: "bitmate-mcp-proxy", version: "0.1.0" }, { capabilities: {} });
35
+ // Local MCP server — exposed via stdio
36
+ const localServer = new index_js_1.Server({ name: "bitmate-mcp", version: "0.1.0" }, {
37
+ capabilities: {
38
+ tools: {},
39
+ },
40
+ });
41
+ // Cache of remote tools
42
+ let cachedTools = [];
43
+ // ── Connect to remote server ──────────────────────────────────────────
44
+ try {
45
+ await remoteClient.connect(remoteTransport);
46
+ process.stderr.write("Connected to Bitmate API.\n");
47
+ }
48
+ catch (err) {
49
+ process.stderr.write(`Failed to connect to Bitmate API: ${err instanceof Error ? err.message : err}\n`);
50
+ process.exit(1);
51
+ }
52
+ // Fetch tools from remote
53
+ try {
54
+ const result = await remoteClient.listTools();
55
+ cachedTools = result.tools;
56
+ process.stderr.write(`Loaded ${cachedTools.length} tools from Bitmate API.\n`);
57
+ }
58
+ catch (err) {
59
+ process.stderr.write(`Warning: Failed to list tools from Bitmate API: ${err instanceof Error ? err.message : err}\n`);
60
+ }
61
+ // ── Handle tools/list ─────────────────────────────────────────────────
62
+ localServer.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
63
+ // Refresh tool list on each request in case tools have changed
64
+ try {
65
+ const result = await remoteClient.listTools();
66
+ cachedTools = result.tools;
67
+ }
68
+ catch {
69
+ // Use cached tools if refresh fails
70
+ }
71
+ return { tools: cachedTools };
72
+ });
73
+ // ── Handle tools/call ─────────────────────────────────────────────────
74
+ localServer.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
75
+ try {
76
+ const result = await remoteClient.callTool({
77
+ name: request.params.name,
78
+ arguments: request.params.arguments,
79
+ });
80
+ return result;
81
+ }
82
+ catch (err) {
83
+ return {
84
+ content: [
85
+ {
86
+ type: "text",
87
+ text: `Error calling tool '${request.params.name}': ${err instanceof Error ? err.message : String(err)}`,
88
+ },
89
+ ],
90
+ isError: true,
91
+ };
92
+ }
93
+ });
94
+ // ── Start local stdio server ──────────────────────────────────────────
95
+ const stdioTransport = new stdio_js_1.StdioServerTransport();
96
+ await localServer.connect(stdioTransport);
97
+ process.stderr.write("Bitmate MCP proxy running on stdio.\n");
98
+ // Cleanup on exit
99
+ const cleanup = async () => {
100
+ try {
101
+ await remoteClient.close();
102
+ }
103
+ catch {
104
+ // ignore
105
+ }
106
+ try {
107
+ await localServer.close();
108
+ }
109
+ catch {
110
+ // ignore
111
+ }
112
+ process.exit(0);
113
+ };
114
+ process.on("SIGINT", cleanup);
115
+ process.on("SIGTERM", cleanup);
116
+ }
117
+ //# 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,2 @@
1
+ export declare function runSetup(): Promise<void>;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AA6WA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAoF9C"}
package/dist/setup.js ADDED
@@ -0,0 +1,430 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runSetup = runSetup;
37
+ /**
38
+ * `bitmate-mcp setup` — auto-configures all MCP-compatible AI tools.
39
+ *
40
+ * Based on memord's setup pattern (25+ tools supported).
41
+ * Usage: npx bitmate-mcp setup
42
+ */
43
+ const fs = __importStar(require("node:fs"));
44
+ const path = __importStar(require("node:path"));
45
+ const os = __importStar(require("node:os"));
46
+ const readline = __importStar(require("node:readline"));
47
+ const HOME = os.homedir();
48
+ const IS_WIN = process.platform === "win32";
49
+ const IS_MAC = process.platform === "darwin";
50
+ const APPDATA = process.env.APPDATA ?? path.join(HOME, "AppData", "Roaming");
51
+ const LOCALAPPDATA = process.env.LOCALAPPDATA ?? path.join(HOME, "AppData", "Local");
52
+ function dirExists(p) {
53
+ try {
54
+ return fs.existsSync(p);
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ function readJson(p) {
61
+ try {
62
+ return JSON.parse(fs.readFileSync(p, "utf-8"));
63
+ }
64
+ catch {
65
+ return {};
66
+ }
67
+ }
68
+ function writeJson(p, data) {
69
+ fs.mkdirSync(path.dirname(p), { recursive: true });
70
+ const tmp = p + ".tmp";
71
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2) + "\n", "utf-8");
72
+ fs.renameSync(tmp, p);
73
+ }
74
+ function readYaml(p) {
75
+ try {
76
+ return fs.readFileSync(p, "utf-8");
77
+ }
78
+ catch {
79
+ return "";
80
+ }
81
+ }
82
+ function writeFile(p, content) {
83
+ fs.mkdirSync(path.dirname(p), { recursive: true });
84
+ const tmp = p + ".tmp";
85
+ fs.writeFileSync(tmp, content, "utf-8");
86
+ fs.renameSync(tmp, p);
87
+ }
88
+ function escapeYaml(s) {
89
+ return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
90
+ }
91
+ function escapeToml(s) {
92
+ return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
93
+ }
94
+ function ask(question) {
95
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
96
+ return new Promise((resolve) => {
97
+ rl.question(question, (answer) => { rl.close(); resolve(answer.trim()); });
98
+ });
99
+ }
100
+ // ── MCP entry builder ─────────────────────────────────────────────────────
101
+ function mcpEntry(apiKey) {
102
+ return {
103
+ command: "npx",
104
+ args: ["bitmate-mcp"],
105
+ env: { BITMATE_API_KEY: apiKey },
106
+ };
107
+ }
108
+ function mcpEntryWin(apiKey) {
109
+ // Claude Code on Windows needs cmd /c wrapper for npx
110
+ return {
111
+ command: "cmd",
112
+ args: ["/c", "npx", "bitmate-mcp"],
113
+ env: { BITMATE_API_KEY: apiKey },
114
+ };
115
+ }
116
+ // ── Standard JSON injectors ───────────────────────────────────────────────
117
+ function injectMcpServers(configPath, apiKey, tool, requiresDirExist = false) {
118
+ if (requiresDirExist && !dirExists(path.dirname(configPath))) {
119
+ return { tool, path: configPath, status: "skipped", message: "Not installed" };
120
+ }
121
+ try {
122
+ const config = readJson(configPath);
123
+ const servers = (config.mcpServers ?? {});
124
+ const entry = mcpEntry(apiKey);
125
+ if (servers["bitmate"]) {
126
+ servers["bitmate"] = entry;
127
+ writeJson(configPath, { ...config, mcpServers: servers });
128
+ return { tool, path: configPath, status: "configured", message: "Updated" };
129
+ }
130
+ servers["bitmate"] = entry;
131
+ writeJson(configPath, { ...config, mcpServers: servers });
132
+ return { tool, path: configPath, status: "configured", message: "Added" };
133
+ }
134
+ catch (e) {
135
+ return { tool, path: configPath, status: "error", message: String(e) };
136
+ }
137
+ }
138
+ function injectVsCodeServers(configPath, apiKey, tool, requiresDirExist = false) {
139
+ if (requiresDirExist && !dirExists(path.dirname(configPath))) {
140
+ return { tool, path: configPath, status: "skipped", message: "Not installed" };
141
+ }
142
+ try {
143
+ const config = readJson(configPath);
144
+ const servers = (config.servers ?? {});
145
+ const entry = { type: "stdio", ...mcpEntry(apiKey) };
146
+ if (servers["bitmate"]) {
147
+ servers["bitmate"] = entry;
148
+ writeJson(configPath, { ...config, servers });
149
+ return { tool, path: configPath, status: "configured", message: "Updated" };
150
+ }
151
+ servers["bitmate"] = entry;
152
+ writeJson(configPath, { ...config, servers });
153
+ return { tool, path: configPath, status: "configured", message: "Added" };
154
+ }
155
+ catch (e) {
156
+ return { tool, path: configPath, status: "error", message: String(e) };
157
+ }
158
+ }
159
+ // ── Tool configurators (25+ tools) ───────────────────────────────────────
160
+ function setupClaudeDesktop(apiKey) {
161
+ const p = IS_WIN
162
+ ? path.join(APPDATA, "Claude", "claude_desktop_config.json")
163
+ : IS_MAC
164
+ ? path.join(HOME, "Library", "Application Support", "Claude", "claude_desktop_config.json")
165
+ : path.join(HOME, ".config", "Claude", "claude_desktop_config.json");
166
+ return injectMcpServers(p, apiKey, "Claude Desktop");
167
+ }
168
+ function setupClaudeCode(apiKey) {
169
+ const p = path.join(HOME, ".claude.json");
170
+ if (!dirExists(path.join(HOME, ".claude"))) {
171
+ return { tool: "Claude Code", path: p, status: "skipped", message: "Not installed" };
172
+ }
173
+ // Windows needs cmd /c wrapper for npx
174
+ try {
175
+ const config = readJson(p);
176
+ const servers = (config.mcpServers ?? {});
177
+ servers["bitmate"] = IS_WIN ? mcpEntryWin(apiKey) : mcpEntry(apiKey);
178
+ writeJson(p, { ...config, mcpServers: servers });
179
+ return { tool: "Claude Code", path: p, status: "configured", message: "Added" };
180
+ }
181
+ catch (e) {
182
+ return { tool: "Claude Code", path: p, status: "error", message: String(e) };
183
+ }
184
+ }
185
+ function setupCursor(apiKey) {
186
+ const p = path.join(HOME, ".cursor", "mcp.json");
187
+ const installed = dirExists(path.join(HOME, ".cursor")) ||
188
+ (IS_WIN && dirExists(path.join(HOME, "AppData", "Local", "Programs", "Cursor"))) ||
189
+ (IS_MAC && dirExists("/Applications/Cursor.app"));
190
+ if (!installed)
191
+ return { tool: "Cursor", path: p, status: "skipped", message: "Not installed" };
192
+ return injectMcpServers(p, apiKey, "Cursor");
193
+ }
194
+ function setupWindsurf(apiKey) {
195
+ return injectMcpServers(path.join(HOME, ".codeium", "windsurf", "mcp_config.json"), apiKey, "Windsurf", true);
196
+ }
197
+ function setupVsCode(apiKey) {
198
+ const p = IS_WIN
199
+ ? path.join(APPDATA, "Code", "User", "mcp.json")
200
+ : IS_MAC
201
+ ? path.join(HOME, "Library", "Application Support", "Code", "User", "mcp.json")
202
+ : path.join(HOME, ".config", "Code", "User", "mcp.json");
203
+ return injectVsCodeServers(p, apiKey, "VS Code", true);
204
+ }
205
+ function setupGithubCopilot(apiKey) {
206
+ const p = IS_WIN
207
+ ? path.join(APPDATA, "Code", "User", "mcp.json")
208
+ : IS_MAC
209
+ ? path.join(HOME, "Library", "Application Support", "Code", "User", "mcp.json")
210
+ : path.join(HOME, ".config", "Code", "User", "mcp.json");
211
+ return injectVsCodeServers(p, apiKey, "GitHub Copilot", true);
212
+ }
213
+ function setupCline(apiKey) {
214
+ const base = IS_WIN ? path.join(APPDATA, "Code") : IS_MAC
215
+ ? path.join(HOME, "Library", "Application Support", "Code")
216
+ : path.join(HOME, ".config", "Code");
217
+ const p = path.join(base, "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json");
218
+ return injectMcpServers(p, apiKey, "Cline", true);
219
+ }
220
+ function setupRooCode(apiKey) {
221
+ const base = IS_WIN ? path.join(APPDATA, "Code") : IS_MAC
222
+ ? path.join(HOME, "Library", "Application Support", "Code")
223
+ : path.join(HOME, ".config", "Code");
224
+ const p = path.join(base, "User", "globalStorage", "rooveterinaryinc.roo-cline", "settings", "cline_mcp_settings.json");
225
+ return injectMcpServers(p, apiKey, "Roo Code", true);
226
+ }
227
+ function setupContinue(apiKey) {
228
+ const configDir = path.join(HOME, ".continue");
229
+ if (!dirExists(configDir))
230
+ return { tool: "Continue", path: configDir, status: "skipped", message: "Not installed" };
231
+ const yamlPath = path.join(configDir, "config.yaml");
232
+ try {
233
+ const existing = readYaml(yamlPath);
234
+ if (existing.includes("bitmate"))
235
+ return { tool: "Continue", path: yamlPath, status: "already_set", message: "Already configured" };
236
+ const entry = `\nmcpServers:\n - name: bitmate\n command: npx\n args:\n - "bitmate-mcp"\n env:\n BITMATE_API_KEY: "${escapeYaml(apiKey)}"\n`;
237
+ writeFile(yamlPath, existing + entry);
238
+ return { tool: "Continue", path: yamlPath, status: "configured", message: "Added" };
239
+ }
240
+ catch (e) {
241
+ return { tool: "Continue", path: yamlPath, status: "error", message: String(e) };
242
+ }
243
+ }
244
+ function setupZed(apiKey) {
245
+ const p = IS_WIN
246
+ ? path.join(APPDATA, "Zed", "settings.json")
247
+ : path.join(HOME, ".config", "zed", "settings.json");
248
+ if (!dirExists(path.dirname(p)))
249
+ return { tool: "Zed", path: p, status: "skipped", message: "Not installed" };
250
+ try {
251
+ const config = readJson(p);
252
+ const servers = (config.context_servers ?? {});
253
+ if (servers["bitmate"])
254
+ return { tool: "Zed", path: p, status: "already_set", message: "Already configured" };
255
+ servers["bitmate"] = { command: "npx", args: ["bitmate-mcp"], env: { BITMATE_API_KEY: apiKey } };
256
+ writeJson(p, { ...config, context_servers: servers });
257
+ return { tool: "Zed", path: p, status: "configured", message: "Added" };
258
+ }
259
+ catch (e) {
260
+ return { tool: "Zed", path: p, status: "error", message: String(e) };
261
+ }
262
+ }
263
+ function setupJetBrains(apiKey) {
264
+ return injectMcpServers(path.join(HOME, ".junie", "mcp", "mcp.json"), apiKey, "JetBrains IDEs", true);
265
+ }
266
+ function setupGeminiCli(apiKey) {
267
+ return injectMcpServers(path.join(HOME, ".gemini", "settings.json"), apiKey, "Gemini CLI", true);
268
+ }
269
+ function setupGeminiCodeAssist(apiKey) {
270
+ return injectMcpServers(path.join(HOME, ".gemini", "settings.json"), apiKey, "Gemini Code Assist", true);
271
+ }
272
+ function setupCodexCli(apiKey) {
273
+ const p = path.join(HOME, ".codex", "config.toml");
274
+ if (!dirExists(path.join(HOME, ".codex")))
275
+ return { tool: "OpenAI Codex CLI", path: p, status: "skipped", message: "Not installed" };
276
+ try {
277
+ const existing = fs.existsSync(p) ? fs.readFileSync(p, "utf-8") : "";
278
+ if (existing.includes("[mcp_servers.bitmate]"))
279
+ return { tool: "OpenAI Codex CLI", path: p, status: "already_set", message: "Already configured" };
280
+ const entry = `\n[mcp_servers.bitmate]\ncommand = "npx"\nargs = ["bitmate-mcp"]\nenabled = true\n\n[mcp_servers.bitmate.env]\nBITMATE_API_KEY = "${escapeToml(apiKey)}"\n`;
281
+ writeFile(p, existing + entry);
282
+ return { tool: "OpenAI Codex CLI", path: p, status: "configured", message: "Added" };
283
+ }
284
+ catch (e) {
285
+ return { tool: "OpenAI Codex CLI", path: p, status: "error", message: String(e) };
286
+ }
287
+ }
288
+ function setupAmazonQ(apiKey) {
289
+ return injectMcpServers(path.join(HOME, ".aws", "amazonq", "mcp.json"), apiKey, "Amazon Q CLI", true);
290
+ }
291
+ function setupGoose(apiKey) {
292
+ const configDir = IS_WIN
293
+ ? path.join(APPDATA, "Block", "goose", "config")
294
+ : path.join(HOME, ".config", "goose");
295
+ const p = path.join(configDir, "config.yaml");
296
+ if (!dirExists(configDir))
297
+ return { tool: "Goose", path: p, status: "skipped", message: "Not installed" };
298
+ try {
299
+ const existing = readYaml(p);
300
+ if (existing.includes("bitmate"))
301
+ return { tool: "Goose", path: p, status: "already_set", message: "Already configured" };
302
+ const entry = `\nextensions:\n bitmate:\n name: bitmate\n cmd: npx\n args:\n - "bitmate-mcp"\n enabled: true\n type: stdio\n envs:\n BITMATE_API_KEY: "${escapeYaml(apiKey)}"\n`;
303
+ writeFile(p, existing + entry);
304
+ return { tool: "Goose", path: p, status: "configured", message: "Added" };
305
+ }
306
+ catch (e) {
307
+ return { tool: "Goose", path: p, status: "error", message: String(e) };
308
+ }
309
+ }
310
+ function setupNeovim(apiKey) {
311
+ return injectMcpServers(path.join(HOME, ".config", "mcphub", "servers.json"), apiKey, "Neovim (mcphub.nvim)", true);
312
+ }
313
+ function setupAntigravity(apiKey) {
314
+ return injectMcpServers(path.join(HOME, ".gemini", "antigravity", "mcp_config.json"), apiKey, "Antigravity", true);
315
+ }
316
+ function setupAmp(apiKey) {
317
+ const ampDir = path.join(HOME, ".config", "amp");
318
+ const p = path.join(ampDir, "settings.json");
319
+ if (!dirExists(ampDir))
320
+ return { tool: "Amp", path: p, status: "skipped", message: "Not installed" };
321
+ try {
322
+ const config = readJson(p);
323
+ const servers = (config["amp.mcpServers"] ?? {});
324
+ servers["bitmate"] = mcpEntry(apiKey);
325
+ writeJson(p, { ...config, "amp.mcpServers": servers });
326
+ return { tool: "Amp", path: p, status: "configured", message: "Added" };
327
+ }
328
+ catch (e) {
329
+ return { tool: "Amp", path: p, status: "error", message: String(e) };
330
+ }
331
+ }
332
+ function setup5ire(apiKey) {
333
+ const p = IS_WIN
334
+ ? path.join(LOCALAPPDATA, "5ire", "mcp.json")
335
+ : IS_MAC
336
+ ? path.join(HOME, "Library", "Application Support", "5ire", "mcp.json")
337
+ : path.join(HOME, ".config", "5ire", "mcp.json");
338
+ return injectMcpServers(p, apiKey, "5ire", true);
339
+ }
340
+ function setupLmStudio(apiKey) {
341
+ return injectMcpServers(path.join(HOME, ".lmstudio", "mcp.json"), apiKey, "LM Studio", true);
342
+ }
343
+ function setupKiro(apiKey) {
344
+ return injectMcpServers(path.join(HOME, ".kiro", "settings", "mcp.json"), apiKey, "Kiro", true);
345
+ }
346
+ function setupVisualStudio(apiKey) {
347
+ if (!IS_WIN)
348
+ return { tool: "Visual Studio", path: "", status: "skipped", message: "Windows only" };
349
+ const installed = dirExists("C:\\Program Files\\Microsoft Visual Studio") ||
350
+ dirExists("C:\\Program Files (x86)\\Microsoft Visual Studio");
351
+ if (!installed)
352
+ return { tool: "Visual Studio", path: "", status: "skipped", message: "Not installed" };
353
+ return injectMcpServers(path.join(HOME, ".mcp.json"), apiKey, "Visual Studio");
354
+ }
355
+ // ── Main setup ────────────────────────────────────────────────────────────
356
+ async function runSetup() {
357
+ console.error("\n Bitmate MCP — Setup\n");
358
+ // Get API key
359
+ let apiKey = process.env.BITMATE_API_KEY ?? "";
360
+ if (!apiKey) {
361
+ apiKey = await ask(" Enter your Bitmate API key (get one at https://app.bitmate.ai/settings/api):\n > ");
362
+ }
363
+ if (!apiKey) {
364
+ console.error(" No API key provided. Aborting.\n");
365
+ process.exit(1);
366
+ }
367
+ // All configurators
368
+ const configurators = [
369
+ setup5ire,
370
+ setupAmazonQ,
371
+ setupAmp,
372
+ setupAntigravity,
373
+ setupClaudeCode,
374
+ setupClaudeDesktop,
375
+ setupCline,
376
+ setupCodexCli,
377
+ setupContinue,
378
+ setupCursor,
379
+ setupGeminiCli,
380
+ setupGeminiCodeAssist,
381
+ setupGithubCopilot,
382
+ setupGoose,
383
+ setupJetBrains,
384
+ setupKiro,
385
+ setupLmStudio,
386
+ setupNeovim,
387
+ setupRooCode,
388
+ setupVisualStudio,
389
+ setupVsCode,
390
+ setupWindsurf,
391
+ setupZed,
392
+ ];
393
+ const results = [];
394
+ for (const fn of configurators) {
395
+ results.push(fn(apiKey));
396
+ }
397
+ const configured = results.filter(r => r.status === "configured");
398
+ const alreadySet = results.filter(r => r.status === "already_set");
399
+ const skipped = results.filter(r => r.status === "skipped");
400
+ const errors = results.filter(r => r.status === "error");
401
+ // Show results
402
+ if (configured.length > 0) {
403
+ console.error(" Configured:");
404
+ for (const r of configured)
405
+ console.error(` + ${r.tool}`);
406
+ }
407
+ if (alreadySet.length > 0) {
408
+ console.error(" Already configured:");
409
+ for (const r of alreadySet)
410
+ console.error(` = ${r.tool}`);
411
+ }
412
+ if (errors.length > 0) {
413
+ console.error(" Errors:");
414
+ for (const r of errors)
415
+ console.error(` ! ${r.tool}: ${r.message}`);
416
+ }
417
+ const total = configured.length + alreadySet.length;
418
+ if (total === 0) {
419
+ console.error("\n No supported AI tools detected.\n" +
420
+ " Manually add this to your MCP config:\n\n" +
421
+ JSON.stringify({ bitmate: mcpEntry(apiKey) }, null, 2) + "\n");
422
+ }
423
+ else {
424
+ console.error(`\n Done! ${total} tool(s) ready (${configured.length} new, ${alreadySet.length} existing).` +
425
+ "\n Restart your AI tool(s) to activate Bitmate.\n");
426
+ }
427
+ // Manual-only tools
428
+ console.error(" Note: Warp, Cherry Studio, and Augment Code require manual config via their UI.\n");
429
+ }
430
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "bitmate-mcp",
3
+ "version": "0.1.0",
4
+ "description": "Bitmate MCP Server — AI-agent-native algorithmic trading platform control",
5
+ "bin": {
6
+ "bitmate-mcp": "dist/index.js"
7
+ },
8
+ "main": "dist/index.js",
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsx src/index.ts",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "mcp",
16
+ "bitmate",
17
+ "trading",
18
+ "ai",
19
+ "algorithmic-trading"
20
+ ],
21
+ "license": "MIT",
22
+ "dependencies": {
23
+ "@modelcontextprotocol/sdk": "^1.12.0"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.0.0",
27
+ "tsx": "^4.0.0",
28
+ "typescript": "^5.5.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=18"
32
+ },
33
+ "files": [
34
+ "dist"
35
+ ]
36
+ }