mobilecoder-mcp 1.0.4 → 2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,37 +1,36 @@
1
1
  {
2
2
  "name": "mobilecoder-mcp",
3
- "version": "1.0.4",
4
- "type": "module",
5
- "description": "MCP server for MobileCoderMCP - enables mobile to desktop coding",
6
- "main": "dist/index.js",
3
+ "version": "2.0.0",
4
+ "description": "Secure Zero-Knowledge Terminal Relay for MobileCoder",
5
+ "main": "dist/agent.js",
7
6
  "bin": {
8
- "mobilecoder-mcp": "dist/index.js"
7
+ "mobilecoder-mcp": "./dist/cli.js"
9
8
  },
10
9
  "scripts": {
10
+ "start": "node dist/cli.js",
11
11
  "build": "tsc",
12
- "dev": "tsc --watch",
13
- "start": "node dist/index.js"
12
+ "prepublishOnly": "npm run build"
14
13
  },
15
14
  "keywords": [
16
- "mcp",
17
- "cursor",
18
- "windsurf",
19
- "mobile-coder"
15
+ "terminal",
16
+ "mobile",
17
+ "ssh",
18
+ "relay",
19
+ "zero-knowledge"
20
20
  ],
21
- "author": "",
22
- "license": "MIT",
21
+ "author": "MobileCoder",
22
+ "license": "ISC",
23
23
  "dependencies": {
24
- "@modelcontextprotocol/sdk": "^1.25.2",
25
- "@roamhq/wrtc": "^0.9.1",
26
- "commander": "^12.1.0",
27
- "qrcode-terminal": "^0.12.0",
28
- "simple-peer": "^9.11.1",
29
- "wrtc": "^0.4.7"
24
+ "chalk": "^4.1.2",
25
+ "commander": "^9.4.1",
26
+ "crypto-js": "^4.1.1",
27
+ "node-pty": "^0.10.1",
28
+ "ora": "^5.4.1",
29
+ "socket.io-client": "^4.7.4"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/node": "^20.14.0",
33
- "@types/qrcode-terminal": "^0.12.2",
34
- "@types/simple-peer": "^9.11.8",
35
- "typescript": "^5.5.0"
32
+ "@types/crypto-js": "^4.1.1",
33
+ "@types/node": "^18.11.9",
34
+ "typescript": "^4.9.3"
36
35
  }
37
- }
36
+ }
package/src/agent.ts CHANGED
@@ -1,89 +1,200 @@
1
- import { WebRTCConnection } from './webrtc.js';
2
- import { setupMCPServer } from './mcp-handler.js';
3
- import { CLIAdapter } from './adapters/cli-adapter.js';
4
-
5
- export class UniversalAgent {
6
- private webrtc: WebRTCConnection;
7
- private cliAdapter: CLIAdapter;
8
- private activeTool: 'mcp' | 'cli' = 'mcp';
9
-
10
- constructor(webrtc: WebRTCConnection) {
11
- this.webrtc = webrtc;
12
- this.cliAdapter = new CLIAdapter();
1
+
2
+ import { io, Socket } from 'socket.io-client';
3
+ import * as os from 'os';
4
+ import * as pty from 'node-pty';
5
+ import CryptoJS from 'crypto-js';
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+
9
+ // 🚨 BURAYI KENDİ DOMAIN ADRESİNLE DEĞİŞTİR!
10
+ const RELAY_SERVER_URL = 'https://api.mobilecoder.xyz';
11
+
12
+ export class ZKRelayAgent {
13
+ private socket: Socket;
14
+ private ptyProcess: any;
15
+ private secretCode: string;
16
+ private roomId: string;
17
+ private encryptionKey: string;
18
+ private spinner = ora('Initializing Secure Tunnel...');
19
+
20
+ constructor() {
21
+ this.setupSecurity();
22
+ this.initPTY();
23
+ this.connectToRelay();
13
24
  }
14
25
 
15
- async start() {
16
- console.log('šŸš€ Universal Agent starting...');
26
+ // 1. Güvenlik Katmanı: Kod Üret ve Anahtar Türet
27
+ private setupSecurity() {
28
+ // 6 Haneli rastgele kod (Kullanıcının göreceği)
29
+ const randomNum = Math.floor(100000 + Math.random() * 900000);
30
+ this.secretCode = randomNum.toString();
31
+
32
+ // Oda ID'si: Kodun Hash'i (Sunucu sadece bunu görür, kodu göremez)
33
+ this.roomId = CryptoJS.SHA256(this.secretCode).toString();
34
+
35
+ // Şifreleme Anahtarı: Kodun kendisi (AES-256 iƧin kullanılacak)
36
+ this.encryptionKey = this.secretCode;
37
+ }
38
+
39
+ // 2. Terminal (PTY) Başlatma
40
+ private initPTY() {
41
+ const shell = os.platform() === 'win32' ? 'powershell.exe' : (process.env.SHELL || 'bash');
42
+
43
+ this.ptyProcess = pty.spawn(shell, [], {
44
+ name: 'xterm-256color',
45
+ cols: 80,
46
+ rows: 24,
47
+ cwd: process.cwd(),
48
+ env: process.env
49
+ });
17
50
 
18
- // Initialize MCP Server (Cursor integration)
19
- // We run this in parallel because it sets up its own listeners
20
- // Note: In the future, we might want to wrap this better
21
- setupMCPServer(this.webrtc).catch(err => {
22
- console.error('Failed to start MCP server:', err);
51
+ // Terminalden çıkan veriyi şifrele ve yolla
52
+ this.ptyProcess.onData((data: string) => {
53
+ this.sendSecurePayload('term_data', data);
23
54
  });
55
+ }
56
+
57
+ // 3. Relay Sunucusuna Bağlanma
58
+ private connectToRelay() {
59
+ this.spinner.start('Connecting to MobileCoder Relay Network...');
24
60
 
25
- // Initialize CLI Adapter listeners
26
- this.cliAdapter.onOutput((data) => {
27
- this.webrtc.send({
28
- type: 'cli_output',
29
- data: data,
30
- timestamp: Date.now()
31
- });
61
+ this.socket = io(RELAY_SERVER_URL, {
62
+ transports: ['websocket'], // Hız iƧin sadece websocket
63
+ reconnection: true,
64
+ reconnectionAttempts: Infinity
32
65
  });
33
66
 
34
- // Override the WebRTC message handler to route commands
35
- // We need to be careful not to conflict with mcp-handler's listeners
36
- // Currently mcp-handler adds its own listener. SimplePeer supports multiple listeners.
67
+ this.socket.on('connect', () => {
68
+ this.spinner.succeed(chalk.green('Connected to Relay Node!'));
37
69
 
38
- this.webrtc.onMessage((message) => {
39
- this.handleMessage(message);
70
+ // Odaya Katıl (Sadece Hash ID gƶnderilir)
71
+ this.socket.emit('join_room', { code: this.roomId, type: 'agent' });
72
+ // Note: Changed 'join_secure_room' to 'join_room' to match server implementation
73
+ // Server implementation in index.ts: socket.on('join_room', (data: { code: string; type: 'agent' | 'client' }) => ...)
74
+
75
+ this.printBanner();
40
76
  });
41
77
 
42
- try {
43
- await this.webrtc.connect();
44
- } catch (error) {
45
- console.error('Failed to connect WebRTC:', error);
46
- }
78
+ this.socket.on('disconnect', () => {
79
+ this.spinner.warn(chalk.yellow('Connection lost. Reconnecting...'));
80
+ });
81
+
82
+ // Mobilden biri bağlandığında
83
+ this.socket.on('peer_joined', () => { // Changed peer_connected to peer_joined based on server impl
84
+ console.log(chalk.green('\nšŸ“± Mobile Client Connected via Encrypted Tunnel!'));
85
+ this.sendEnvInfo();
86
+ });
87
+
88
+ // Mobilden şifreli veri geldiğinde
89
+ // RelayManager emits 'term_data' and 'meta_data'.
90
+ // Server implementation:
91
+ // socket.on('term_data', ...) -> pass through term_data
92
+ // socket.on('meta_data', ...) -> pass through meta_data
93
+ // Agent connects to /, Server index.ts uses / (global namespace) BUT has:
94
+ // const relayNamespace = io.of('/terminal');
95
+ // WAIT. Previous user setup had /terminal.
96
+ // My previous edit REMOVED /terminal and used RelayManager on root io.
97
+ // But RelayManager implementation listens on 'relay_data'.
98
+ // My RelayManager uses: socket.on('relay_data', ...)
99
+ // But user snippet provided for Agent uses 'relay_encrypted' and listens on 'stream_encrypted'.
100
+ // I need to align Agent and Server.
101
+ // The previous edit to server/index.ts instantiates RelayManager.
102
+ // RelayManager listens to 'relay_data'.
103
+ // So the Agent MUST emit 'relay_data'.
104
+
105
+ this.socket.on('relay_data', (message: { room: string, payload: any }) => {
106
+ // RelayManager checks payload structure?
107
+ // Wait, RelayManager implementation:
108
+ // socket.on('relay_data', (data) => { ... socket.to(room).emit('relay_data', data.payload) ... })
109
+ // So client receives `payload`.
110
+ // If payload is encrypted string, handle it.
111
+ this.handleIncomingMessage(message as any);
112
+ });
113
+
114
+ // Also listen for connect_error
115
+ this.socket.on('connect_error', (err) => {
116
+ // console.error(err);
117
+ });
47
118
  }
48
119
 
49
- private handleMessage(message: any) {
50
- // console.log('Universal Agent received:', message);
120
+ // Gelen veriyi çöz ve işle
121
+ private handleIncomingMessage(encryptedPayload: any) {
122
+ try {
123
+ // Payload might be wrapped { e: ... } or string
124
+ let ciphertext = encryptedPayload;
125
+ if (typeof encryptedPayload === 'object' && encryptedPayload.e) {
126
+ ciphertext = encryptedPayload.e;
127
+ }
51
128
 
52
- if (message.type === 'switch_tool') {
53
- this.activeTool = message.tool;
54
- console.log(`šŸ”„ Switched active tool to: ${this.activeTool}`);
129
+ const bytes = CryptoJS.AES.decrypt(ciphertext, this.encryptionKey);
130
+ const originalText = bytes.toString(CryptoJS.enc.Utf8);
55
131
 
56
- this.webrtc.send({
57
- type: 'system',
58
- message: `Switched to ${this.activeTool}`
59
- });
60
- return;
61
- }
132
+ if (!originalText) return;
62
133
 
63
- if (message.type === 'switch_ide') {
64
- console.log(`šŸ–„ļø Target IDE switched to: ${message.ide}`);
65
- this.webrtc.send({
66
- type: 'system',
67
- message: `Target IDE: ${message.ide}`
68
- });
69
- return;
134
+ // Veri JSON mu? (Resize komutu vs olabilir)
135
+ try {
136
+ const cmd = JSON.parse(originalText);
137
+ if (cmd.type === 'resize') {
138
+ this.ptyProcess.resize(cmd.cols, cmd.rows);
139
+ return;
140
+ }
141
+ if (cmd.type === 'input') {
142
+ this.ptyProcess.write(cmd.data);
143
+ return;
144
+ }
145
+ // Fallback checks
146
+ } catch (e) {
147
+ // JSON değilse saf terminal girdisidir
148
+ this.ptyProcess.write(originalText);
149
+ }
150
+ } catch (error) {
151
+ // Şifre Ƨƶzülemezse (Yanlış anahtar vb.) sessizce yut
70
152
  }
153
+ }
71
154
 
72
- if (message.type === 'switch_model') {
73
- console.log(`šŸ¤– AI Model preference: ${message.model}`);
74
- this.webrtc.send({
75
- type: 'system',
76
- message: `Model: ${message.model}`
77
- });
78
- return;
155
+ // Veriyi şifrele ve gönder
156
+ private sendSecurePayload(type: string, data: any) {
157
+ let payloadStr = data;
158
+ if (type === 'meta') {
159
+ // Standardize format
160
+ payloadStr = JSON.stringify(data);
161
+ } else if (type === 'term_data' && typeof data === 'string') {
162
+ // Wrap output in { type: 'output', data: ... } for client consistency if client expects JSON
163
+ // The Client handles { type: 'output' ... }
164
+ payloadStr = JSON.stringify({ type: 'output', data: data });
79
165
  }
80
166
 
81
- if (message.type === 'cli_command') {
82
- const command = message.command;
83
- console.log(`šŸ’» Received CLI command: ${command}`);
84
- this.cliAdapter.execute(command);
85
- }
167
+ const encrypted = CryptoJS.AES.encrypt(payloadStr, this.encryptionKey).toString();
168
+
169
+ // RelayManager expects 'relay_data' event with { room, payload }
170
+ // It emits 'relay_data' with just payload to other peer.
171
+ this.socket.emit('relay_data', {
172
+ room: this.roomId,
173
+ payload: { e: encrypted }
174
+ });
175
+ }
176
+
177
+ private sendEnvInfo() {
178
+ const info = {
179
+ type: 'host_info', // Changed to match client expectation
180
+ username: os.userInfo().username, // user -> username
181
+ hostname: os.hostname(), // host -> hostname
182
+ platform: os.platform(),
183
+ cwd: process.cwd()
184
+ };
185
+ this.sendSecurePayload('meta', info);
186
+ }
187
+
188
+ private printBanner() {
189
+ console.log('\n' + chalk.bgBlue.bold(' MOBILECODER ZK-RELAY v2.0 '));
190
+ console.log(chalk.gray('Secure, End-to-End Encrypted Terminal Bridge\n'));
86
191
 
87
- // MCP commands are handled by mcp-handler.ts directly via its own listener
192
+ console.log(chalk.yellow('ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”'));
193
+ console.log(chalk.yellow('│ šŸ”‘ CONNECTION CODE (ENTER ON APP) │'));
194
+ console.log(chalk.yellow('│ │'));
195
+ console.log(chalk.yellow(`│ ${chalk.white.bold.bgBlack(` ${this.secretCode.slice(0, 3)} - ${this.secretCode.slice(3)} `)} │`));
196
+ console.log(chalk.yellow('│ │'));
197
+ console.log(chalk.yellow('ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜'));
198
+ console.log(chalk.cyan('\nWaiting for mobile connection...'));
88
199
  }
89
200
  }
package/src/cli.ts ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { ZKRelayAgent } from './agent.js';
4
+ import chalk from 'chalk';
5
+
6
+ const program = new Command();
7
+
8
+ program
9
+ .name('mobilecoder-mcp')
10
+ .description('MobileCoder Desktop Agent - ZK-Relay Edition')
11
+ .version('2.0.0');
12
+
13
+ program
14
+ .command('init')
15
+ .description('Start the secure relay agent')
16
+ .action(() => {
17
+ try {
18
+ new ZKRelayAgent();
19
+ } catch (error) {
20
+ console.error(chalk.red('Fatal Error:'), error);
21
+ process.exit(1);
22
+ }
23
+ });
24
+
25
+ // Varsayılan komut (argüman girilmezse init çalışsın)
26
+ if (!process.argv.slice(2).length) {
27
+ try {
28
+ new ZKRelayAgent();
29
+ } catch (error) {
30
+ console.error(chalk.red('Fatal Error:'), error);
31
+ process.exit(1);
32
+ }
33
+ } else {
34
+ program.parse(process.argv);
35
+ }
package/src/types.d.ts ADDED
@@ -0,0 +1,8 @@
1
+
2
+ declare module 'node-pty' {
3
+ export function spawn(cmd: string, args: string[], options: any): any;
4
+ }
5
+
6
+ declare module 'ora' {
7
+ export default function ora(text?: string | object): any;
8
+ }
@@ -1,73 +0,0 @@
1
- import { spawn, ChildProcess } from 'child_process';
2
- import { platform } from 'os';
3
-
4
- export interface CLIResult {
5
- output: string;
6
- exitCode: number | null;
7
- }
8
-
9
- export class CLIAdapter {
10
- private process: ChildProcess | null = null;
11
- private onOutputCallback?: (data: string) => void;
12
-
13
- constructor() { }
14
-
15
- execute(command: string, args: string[] = [], cwd: string = process.cwd()): void {
16
- const isWindows = platform() === 'win32';
17
- const shell = isWindows ? 'powershell.exe' : '/bin/bash';
18
- const shellArgs = isWindows ? ['-c', `${command} ${args.join(' ')}`] : ['-c', `${command} ${args.join(' ')}`];
19
-
20
- console.log(`[CLI] Executing: ${command} ${args.join(' ')}`);
21
-
22
- try {
23
- this.process = spawn(shell, shellArgs, {
24
- cwd,
25
- stdio: ['pipe', 'pipe', 'pipe'],
26
- env: process.env
27
- });
28
-
29
- this.process.stdout?.on('data', (data) => {
30
- const output = data.toString();
31
- if (this.onOutputCallback) {
32
- this.onOutputCallback(output);
33
- }
34
- });
35
-
36
- this.process.stderr?.on('data', (data) => {
37
- const output = data.toString();
38
- if (this.onOutputCallback) {
39
- this.onOutputCallback(output);
40
- }
41
- });
42
-
43
- this.process.on('error', (error) => {
44
- if (this.onOutputCallback) {
45
- this.onOutputCallback(`Error: ${error.message}\n`);
46
- }
47
- });
48
-
49
- this.process.on('close', (code) => {
50
- if (this.onOutputCallback) {
51
- this.onOutputCallback(`\n[Process exited with code ${code}]`);
52
- }
53
- this.process = null;
54
- });
55
-
56
- } catch (error: any) {
57
- if (this.onOutputCallback) {
58
- this.onOutputCallback(`Failed to start process: ${error.message}\n`);
59
- }
60
- }
61
- }
62
-
63
- onOutput(callback: (data: string) => void): void {
64
- this.onOutputCallback = callback;
65
- }
66
-
67
- kill(): void {
68
- if (this.process) {
69
- this.process.kill();
70
- this.process = null;
71
- }
72
- }
73
- }
package/src/index.ts DELETED
@@ -1,172 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { Command } from 'commander';
4
- import * as fs from 'fs';
5
- import * as path from 'path';
6
- import * as os from 'os';
7
- import * as crypto from 'crypto';
8
- import { createRequire } from 'module';
9
- const require = createRequire(import.meta.url);
10
- const qrcode = require('qrcode-terminal');
11
- import { UniversalAgent } from './agent.js';
12
- import { WebRTCConnection } from './webrtc.js';
13
-
14
- const program = new Command();
15
-
16
- program
17
- .name('mobilecoder-mcp')
18
- .description('MCP server for MobileCoderMCP - enables mobile to desktop coding')
19
- .version('1.0.0');
20
-
21
- program
22
- .command('init')
23
- .description('Initialize connection, generate QR code and start the agent')
24
- .option('-s, --signaling <url>', 'Signaling server URL', process.env.MCP_SIGNALING_URL || 'https://api.mobilecoder.xyz/api')
25
- .option('--debug', 'Enable debug logging', false)
26
- .action(async (options: { signaling: string; debug: boolean }) => {
27
- const code = generateConnectionCode();
28
-
29
- if (options.debug) {
30
- console.log('šŸ” Debug mode enabled');
31
- }
32
-
33
- console.log('\nšŸ“± MobileCoder MCP - Quick Setup');
34
- console.log('================================');
35
- console.log(`\nšŸ”‘ Your Pairing Code: ${code}`);
36
- console.log('Scan the QR code below with your mobile device to connect:\n');
37
-
38
- // Generate QR code in terminal
39
- // Use environment variable or default to the deployed URL
40
- const webAppUrl = process.env.MOBILE_CODER_WEB_URL || 'https://mobilecoder.xyz';
41
- const pairingUrl = `${webAppUrl}/connect?code=${code}`;
42
- qrcode.generate(pairingUrl, { small: true });
43
-
44
- console.log('\nšŸš€ Configuring IDEs...');
45
- await autoConfigureIDEs(code, options.signaling);
46
-
47
- console.log('\nšŸ”Œ Starting Universal Agent...');
48
- const webrtc = new WebRTCConnection(code, options.signaling, options.debug);
49
- const agent = new UniversalAgent(webrtc);
50
- await agent.start();
51
- });
52
-
53
- program
54
- .command('start')
55
- .description('Start the Universal Agent with an existing code')
56
- .option('-c, --code <code>', 'Connection code')
57
- .option('-s, --signaling <url>', 'Signaling server URL', process.env.MCP_SIGNALING_URL || 'https://api.mobilecoder.xyz/api')
58
- .option('--debug', 'Enable debug logging', false)
59
- .action(async (options: { code?: string; signaling: string; debug: boolean }) => {
60
- if (!options.code) {
61
- console.error('āŒ Error: Connection code is required');
62
- console.log(' Use: mobilecoder-mcp start --code=YOUR_CODE');
63
- process.exit(1);
64
- }
65
-
66
- console.log('šŸ”Œ Starting Universal Agent...');
67
- console.log(` Connection code: ${options.code}`);
68
- console.log(` Signaling server: ${options.signaling}\n`);
69
-
70
- const webrtc = new WebRTCConnection(options.code, options.signaling, options.debug);
71
- const agent = new UniversalAgent(webrtc);
72
- await agent.start();
73
- });
74
-
75
- program
76
- .command('reset')
77
- .description('Reset connection and remove config from all IDEs')
78
- .option('-i, --ide <ide>', 'IDE to reset (cursor, windsurf, vscode, all)', 'all')
79
- .action(async (options: { ide: string }) => {
80
- console.log('šŸ”„ Resetting MobileCoderMCP...\n');
81
-
82
- const configs = {
83
- cursor: path.join(os.homedir(), '.cursor', 'mcp.json'),
84
- windsurf: path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json'),
85
- vscode: path.join(os.homedir(), '.vscode', 'mcp.json'),
86
- };
87
-
88
- const ide = options.ide.toLowerCase();
89
-
90
- if (ide === 'all') {
91
- for (const [name, configPath] of Object.entries(configs)) {
92
- await removeFromConfig(configPath, 'mobile-coder');
93
- }
94
- } else if (configs[ide as keyof typeof configs]) {
95
- await removeFromConfig(configs[ide as keyof typeof configs], 'mobile-coder');
96
- }
97
-
98
- console.log('āœ… Configuration reset complete\n');
99
- });
100
-
101
- program.parse();
102
-
103
- function generateConnectionCode(): string {
104
- return crypto.randomBytes(3).toString('hex').toUpperCase();
105
- }
106
-
107
- async function autoConfigureIDEs(code: string, signalingUrl: string) {
108
- const configs = {
109
- cursor: path.join(os.homedir(), '.cursor', 'mcp.json'),
110
- windsurf: path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json'),
111
- vscode: path.join(os.homedir(), '.vscode', 'mcp.json'),
112
- };
113
-
114
- for (const [name, configPath] of Object.entries(configs)) {
115
- try {
116
- await configureIDE(configPath, name, code, signalingUrl);
117
- } catch (e) {
118
- // Ignore if IDE config dir doesn't exist
119
- }
120
- }
121
- }
122
-
123
- async function configureIDE(configPath: string, ideName: string, code: string, signalingUrl: string) {
124
- const configDir = path.dirname(configPath);
125
- if (!fs.existsSync(configDir)) {
126
- return; // Skip if IDE is not installed/configured
127
- }
128
-
129
- let config: any = { mcpServers: {} };
130
- if (fs.existsSync(configPath)) {
131
- try {
132
- config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
133
- } catch (e) {
134
- console.warn(`āš ļø Could not read existing ${ideName} config, creating new one`);
135
- }
136
- }
137
-
138
- if (!config.mcpServers) {
139
- config.mcpServers = {};
140
- }
141
-
142
- // We assume the user has mobilecoder-mcp installed globally or via npx
143
- // In npx context, we use the command name directly
144
- config.mcpServers['mobile-coder'] = {
145
- command: 'npx',
146
- args: ['mobilecoder-mcp', 'start', '--code', code, '--signaling', signalingUrl],
147
- env: {
148
- MCP_CONNECTION_CODE: code,
149
- MCP_SIGNALING_URL: signalingUrl
150
- }
151
- };
152
-
153
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
154
- console.log(` āœ… ${ideName.charAt(0).toUpperCase() + ideName.slice(1)} linked.`);
155
- }
156
-
157
- async function removeFromConfig(configPath: string, serverName: string) {
158
- if (!fs.existsSync(configPath)) {
159
- return;
160
- }
161
-
162
- try {
163
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
164
- if (config.mcpServers && config.mcpServers[serverName]) {
165
- delete config.mcpServers[serverName];
166
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
167
- console.log(` āœ… Removed from ${path.basename(configPath)}`);
168
- }
169
- } catch (e) {
170
- console.warn(`āš ļø Could not update ${configPath}`);
171
- }
172
- }