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.
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +430 -0
- package/dist/setup.js.map +1 -0
- package/package.json +36 -0
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -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
|
+
}
|