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.
package/.security.log CHANGED
@@ -46,3 +46,8 @@
46
46
  {"timestamp":"2026-01-24T20:19:47.199Z","event":"mcp_server_started","details":{"timestamp":1769285987199},"severity":"low","pid":9716,"user":"unknown"}
47
47
  {"timestamp":"2026-01-24T20:24:33.021Z","event":"mobile_device_connected","details":{"timestamp":1769286273021},"severity":"low","pid":9716,"user":"unknown"}
48
48
  {"timestamp":"2026-01-24T23:11:46.753Z","event":"mcp_server_started","details":{"timestamp":1769296306753},"severity":"low","pid":17644,"user":"unknown"}
49
+ {"timestamp":"2026-01-25T06:14:25.194Z","event":"mcp_server_started","details":{"timestamp":1769321665193},"severity":"low","pid":1464,"user":"unknown"}
50
+ {"timestamp":"2026-01-25T06:49:16.008Z","event":"mcp_server_started","details":{"timestamp":1769323756008},"severity":"low","pid":19532,"user":"unknown"}
51
+ {"timestamp":"2026-02-02T22:30:02.241Z","event":"mcp_server_started","details":{"timestamp":1770071402240},"severity":"low","pid":12948,"user":"unknown"}
52
+ {"timestamp":"2026-02-02T22:33:52.400Z","event":"mcp_server_started","details":{"timestamp":1770071632399},"severity":"low","pid":7800,"user":"unknown"}
53
+ {"timestamp":"2026-02-03T19:10:22.296Z","event":"mcp_server_started","details":{"timestamp":1770145822295},"severity":"low","pid":7864,"user":"unknown"}
package/dist/agent.d.ts CHANGED
@@ -1,10 +1,17 @@
1
- import { WebRTCConnection } from './webrtc.js';
2
- export declare class UniversalAgent {
3
- private webrtc;
4
- private cliAdapter;
5
- private activeTool;
6
- constructor(webrtc: WebRTCConnection);
7
- start(): Promise<void>;
8
- private handleMessage;
1
+ export declare class ZKRelayAgent {
2
+ private socket;
3
+ private ptyProcess;
4
+ private secretCode;
5
+ private roomId;
6
+ private encryptionKey;
7
+ private spinner;
8
+ constructor();
9
+ private setupSecurity;
10
+ private initPTY;
11
+ private connectToRelay;
12
+ private handleIncomingMessage;
13
+ private sendSecurePayload;
14
+ private sendEnvInfo;
15
+ private printBanner;
9
16
  }
10
17
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/C,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAwB;gBAE9B,MAAM,EAAE,gBAAgB;IAK9B,KAAK;IAkCX,OAAO,CAAC,aAAa;CAwCxB"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAWA,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAwC;;IASvD,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,cAAc;IA+DtB,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;CAYtB"}
package/dist/agent.js CHANGED
@@ -1,75 +1,175 @@
1
- import { setupMCPServer } from './mcp-handler.js';
2
- import { CLIAdapter } from './adapters/cli-adapter.js';
3
- export class UniversalAgent {
4
- webrtc;
5
- cliAdapter;
6
- activeTool = 'mcp';
7
- constructor(webrtc) {
8
- this.webrtc = webrtc;
9
- this.cliAdapter = new CLIAdapter();
1
+ import { io } from 'socket.io-client';
2
+ import * as os from 'os';
3
+ import * as pty from 'node-pty';
4
+ import CryptoJS from 'crypto-js';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ // 🚨 BURAYI KENDİ DOMAIN ADRESİNLE DEĞİŞTİR!
8
+ const RELAY_SERVER_URL = 'https://api.mobilecoder.xyz';
9
+ export class ZKRelayAgent {
10
+ socket;
11
+ ptyProcess;
12
+ secretCode;
13
+ roomId;
14
+ encryptionKey;
15
+ spinner = ora('Initializing Secure Tunnel...');
16
+ constructor() {
17
+ this.setupSecurity();
18
+ this.initPTY();
19
+ this.connectToRelay();
10
20
  }
11
- async start() {
12
- console.log('πŸš€ Universal Agent starting...');
13
- // Initialize MCP Server (Cursor integration)
14
- // We run this in parallel because it sets up its own listeners
15
- // Note: In the future, we might want to wrap this better
16
- setupMCPServer(this.webrtc).catch(err => {
17
- console.error('Failed to start MCP server:', err);
21
+ // 1. Güvenlik Katmanı: Kod Üret ve Anahtar Türet
22
+ setupSecurity() {
23
+ // 6 Haneli rastgele kod (Kullanıcının gâreceği)
24
+ const randomNum = Math.floor(100000 + Math.random() * 900000);
25
+ this.secretCode = randomNum.toString();
26
+ // Oda ID'si: Kodun Hash'i (Sunucu sadece bunu gΓΆrΓΌr, kodu gΓΆremez)
27
+ this.roomId = CryptoJS.SHA256(this.secretCode).toString();
28
+ // Şifreleme Anahtarı: Kodun kendisi (AES-256 için kullanılacak)
29
+ this.encryptionKey = this.secretCode;
30
+ }
31
+ // 2. Terminal (PTY) Başlatma
32
+ initPTY() {
33
+ const shell = os.platform() === 'win32' ? 'powershell.exe' : (process.env.SHELL || 'bash');
34
+ this.ptyProcess = pty.spawn(shell, [], {
35
+ name: 'xterm-256color',
36
+ cols: 80,
37
+ rows: 24,
38
+ cwd: process.cwd(),
39
+ env: process.env
40
+ });
41
+ // Terminalden çıkan veriyi şifrele ve yolla
42
+ this.ptyProcess.onData((data) => {
43
+ this.sendSecurePayload('term_data', data);
44
+ });
45
+ }
46
+ // 3. Relay Sunucusuna Bağlanma
47
+ connectToRelay() {
48
+ this.spinner.start('Connecting to MobileCoder Relay Network...');
49
+ this.socket = io(RELAY_SERVER_URL, {
50
+ transports: ['websocket'], // HΔ±z iΓ§in sadece websocket
51
+ reconnection: true,
52
+ reconnectionAttempts: Infinity
53
+ });
54
+ this.socket.on('connect', () => {
55
+ this.spinner.succeed(chalk.green('Connected to Relay Node!'));
56
+ // Odaya KatΔ±l (Sadece Hash ID gΓΆnderilir)
57
+ this.socket.emit('join_room', { code: this.roomId, type: 'agent' });
58
+ // Note: Changed 'join_secure_room' to 'join_room' to match server implementation
59
+ // Server implementation in index.ts: socket.on('join_room', (data: { code: string; type: 'agent' | 'client' }) => ...)
60
+ this.printBanner();
61
+ });
62
+ this.socket.on('disconnect', () => {
63
+ this.spinner.warn(chalk.yellow('Connection lost. Reconnecting...'));
64
+ });
65
+ // Mobilden biri bağlandığında
66
+ this.socket.on('peer_joined', () => {
67
+ console.log(chalk.green('\nπŸ“± Mobile Client Connected via Encrypted Tunnel!'));
68
+ this.sendEnvInfo();
18
69
  });
19
- // Initialize CLI Adapter listeners
20
- this.cliAdapter.onOutput((data) => {
21
- this.webrtc.send({
22
- type: 'cli_output',
23
- data: data,
24
- timestamp: Date.now()
25
- });
70
+ // Mobilden şifreli veri geldiğinde
71
+ // RelayManager emits 'term_data' and 'meta_data'.
72
+ // Server implementation:
73
+ // socket.on('term_data', ...) -> pass through term_data
74
+ // socket.on('meta_data', ...) -> pass through meta_data
75
+ // Agent connects to /, Server index.ts uses / (global namespace) BUT has:
76
+ // const relayNamespace = io.of('/terminal');
77
+ // WAIT. Previous user setup had /terminal.
78
+ // My previous edit REMOVED /terminal and used RelayManager on root io.
79
+ // But RelayManager implementation listens on 'relay_data'.
80
+ // My RelayManager uses: socket.on('relay_data', ...)
81
+ // But user snippet provided for Agent uses 'relay_encrypted' and listens on 'stream_encrypted'.
82
+ // I need to align Agent and Server.
83
+ // The previous edit to server/index.ts instantiates RelayManager.
84
+ // RelayManager listens to 'relay_data'.
85
+ // So the Agent MUST emit 'relay_data'.
86
+ this.socket.on('relay_data', (message) => {
87
+ // RelayManager checks payload structure?
88
+ // Wait, RelayManager implementation:
89
+ // socket.on('relay_data', (data) => { ... socket.to(room).emit('relay_data', data.payload) ... })
90
+ // So client receives `payload`.
91
+ // If payload is encrypted string, handle it.
92
+ this.handleIncomingMessage(message);
26
93
  });
27
- // Override the WebRTC message handler to route commands
28
- // We need to be careful not to conflict with mcp-handler's listeners
29
- // Currently mcp-handler adds its own listener. SimplePeer supports multiple listeners.
30
- this.webrtc.onMessage((message) => {
31
- this.handleMessage(message);
94
+ // Also listen for connect_error
95
+ this.socket.on('connect_error', (err) => {
96
+ // console.error(err);
32
97
  });
98
+ }
99
+ // Gelen veriyi çâz ve işle
100
+ handleIncomingMessage(encryptedPayload) {
33
101
  try {
34
- await this.webrtc.connect();
102
+ // Payload might be wrapped { e: ... } or string
103
+ let ciphertext = encryptedPayload;
104
+ if (typeof encryptedPayload === 'object' && encryptedPayload.e) {
105
+ ciphertext = encryptedPayload.e;
106
+ }
107
+ const bytes = CryptoJS.AES.decrypt(ciphertext, this.encryptionKey);
108
+ const originalText = bytes.toString(CryptoJS.enc.Utf8);
109
+ if (!originalText)
110
+ return;
111
+ // Veri JSON mu? (Resize komutu vs olabilir)
112
+ try {
113
+ const cmd = JSON.parse(originalText);
114
+ if (cmd.type === 'resize') {
115
+ this.ptyProcess.resize(cmd.cols, cmd.rows);
116
+ return;
117
+ }
118
+ if (cmd.type === 'input') {
119
+ this.ptyProcess.write(cmd.data);
120
+ return;
121
+ }
122
+ // Fallback checks
123
+ }
124
+ catch (e) {
125
+ // JSON değilse saf terminal girdisidir
126
+ this.ptyProcess.write(originalText);
127
+ }
35
128
  }
36
129
  catch (error) {
37
- console.error('Failed to connect WebRTC:', error);
130
+ // Şifre çâzülemezse (Yanlış anahtar vb.) sessizce yut
38
131
  }
39
132
  }
40
- handleMessage(message) {
41
- // console.log('Universal Agent received:', message);
42
- if (message.type === 'switch_tool') {
43
- this.activeTool = message.tool;
44
- console.log(`πŸ”„ Switched active tool to: ${this.activeTool}`);
45
- this.webrtc.send({
46
- type: 'system',
47
- message: `Switched to ${this.activeTool}`
48
- });
49
- return;
50
- }
51
- if (message.type === 'switch_ide') {
52
- console.log(`πŸ–₯️ Target IDE switched to: ${message.ide}`);
53
- this.webrtc.send({
54
- type: 'system',
55
- message: `Target IDE: ${message.ide}`
56
- });
57
- return;
58
- }
59
- if (message.type === 'switch_model') {
60
- console.log(`πŸ€– AI Model preference: ${message.model}`);
61
- this.webrtc.send({
62
- type: 'system',
63
- message: `Model: ${message.model}`
64
- });
65
- return;
133
+ // Veriyi şifrele ve gânder
134
+ sendSecurePayload(type, data) {
135
+ let payloadStr = data;
136
+ if (type === 'meta') {
137
+ // Standardize format
138
+ payloadStr = JSON.stringify(data);
66
139
  }
67
- if (message.type === 'cli_command') {
68
- const command = message.command;
69
- console.log(`πŸ’» Received CLI command: ${command}`);
70
- this.cliAdapter.execute(command);
140
+ else if (type === 'term_data' && typeof data === 'string') {
141
+ // Wrap output in { type: 'output', data: ... } for client consistency if client expects JSON
142
+ // The Client handles { type: 'output' ... }
143
+ payloadStr = JSON.stringify({ type: 'output', data: data });
71
144
  }
72
- // MCP commands are handled by mcp-handler.ts directly via its own listener
145
+ const encrypted = CryptoJS.AES.encrypt(payloadStr, this.encryptionKey).toString();
146
+ // RelayManager expects 'relay_data' event with { room, payload }
147
+ // It emits 'relay_data' with just payload to other peer.
148
+ this.socket.emit('relay_data', {
149
+ room: this.roomId,
150
+ payload: { e: encrypted }
151
+ });
152
+ }
153
+ sendEnvInfo() {
154
+ const info = {
155
+ type: 'host_info', // Changed to match client expectation
156
+ username: os.userInfo().username, // user -> username
157
+ hostname: os.hostname(), // host -> hostname
158
+ platform: os.platform(),
159
+ cwd: process.cwd()
160
+ };
161
+ this.sendSecurePayload('meta', info);
162
+ }
163
+ printBanner() {
164
+ console.log('\n' + chalk.bgBlue.bold(' MOBILECODER ZK-RELAY v2.0 '));
165
+ console.log(chalk.gray('Secure, End-to-End Encrypted Terminal Bridge\n'));
166
+ console.log(chalk.yellow('β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”'));
167
+ console.log(chalk.yellow('β”‚ πŸ”‘ CONNECTION CODE (ENTER ON APP) β”‚'));
168
+ console.log(chalk.yellow('β”‚ β”‚'));
169
+ console.log(chalk.yellow(`β”‚ ${chalk.white.bold.bgBlack(` ${this.secretCode.slice(0, 3)} - ${this.secretCode.slice(3)} `)} β”‚`));
170
+ console.log(chalk.yellow('β”‚ β”‚'));
171
+ console.log(chalk.yellow('β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜'));
172
+ console.log(chalk.cyan('\nWaiting for mobile connection...'));
73
173
  }
74
174
  }
75
175
  //# sourceMappingURL=agent.js.map
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js 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
+ const program = new Command();
6
+ program
7
+ .name('mobilecoder-mcp')
8
+ .description('MobileCoder Desktop Agent - ZK-Relay Edition')
9
+ .version('2.0.0');
10
+ program
11
+ .command('init')
12
+ .description('Start the secure relay agent')
13
+ .action(() => {
14
+ try {
15
+ new ZKRelayAgent();
16
+ }
17
+ catch (error) {
18
+ console.error(chalk.red('Fatal Error:'), error);
19
+ process.exit(1);
20
+ }
21
+ });
22
+ // Varsayılan komut (argüman girilmezse init çalışsın)
23
+ if (!process.argv.slice(2).length) {
24
+ try {
25
+ new ZKRelayAgent();
26
+ }
27
+ catch (error) {
28
+ console.error(chalk.red('Fatal Error:'), error);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ else {
33
+ program.parse(process.argv);
34
+ }
35
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,iBAAiB,CAAC;KACvB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,OAAO;KACF,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8BAA8B,CAAC;KAC3C,MAAM,CAAC,GAAG,EAAE;IACT,IAAI,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,sDAAsD;AACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,IAAI,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;KAAM,CAAC;IACJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
package/dist/index.js CHANGED
@@ -3,10 +3,6 @@ import { Command } from 'commander';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
5
  import * as os from 'os';
6
- import * as crypto from 'crypto';
7
- import { createRequire } from 'module';
8
- const require = createRequire(import.meta.url);
9
- const qrcode = require('qrcode-terminal');
10
6
  import { UniversalAgent } from './agent.js';
11
7
  import { WebRTCConnection } from './webrtc.js';
12
8
  const program = new Command();
@@ -16,7 +12,7 @@ program
16
12
  .version('1.0.0');
17
13
  program
18
14
  .command('init')
19
- .description('Initialize connection, generate QR code and start the agent')
15
+ .description('Initialize connection and start the agent')
20
16
  .option('-s, --signaling <url>', 'Signaling server URL', process.env.MCP_SIGNALING_URL || 'https://api.mobilecoder.xyz/api')
21
17
  .option('--debug', 'Enable debug logging', false)
22
18
  .action(async (options) => {
@@ -24,18 +20,24 @@ program
24
20
  if (options.debug) {
25
21
  console.log('πŸ” Debug mode enabled');
26
22
  }
27
- console.log('\nπŸ“± MobileCoder MCP - Quick Setup');
28
- console.log('================================');
29
- console.log(`\nπŸ”‘ Your Pairing Code: ${code}`);
30
- console.log('Scan the QR code below with your mobile device to connect:\n');
31
- // Generate QR code in terminal
32
- // Use environment variable or default to the deployed URL
33
- const webAppUrl = process.env.MOBILE_CODER_WEB_URL || 'https://mobilecoder.xyz';
34
- const pairingUrl = `${webAppUrl}/connect?code=${code}`;
35
- qrcode.generate(pairingUrl, { small: true });
36
- console.log('\nπŸš€ Configuring IDEs...');
23
+ console.log('\n╔════════════════════════════════════════════════════════════╗');
24
+ console.log('β•‘ β•‘');
25
+ console.log('β•‘ πŸ“± MobileCoderMCP β•‘');
26
+ console.log('β•‘ β•‘');
27
+ console.log('╠════════════════════════════════════════════════════════════╣');
28
+ console.log(`β•‘ β•‘`);
29
+ console.log(`β•‘ πŸ”‘ YOUR CONNECTION CODE: ${code} β•‘`);
30
+ console.log(`β•‘ β•‘`);
31
+ console.log('╠════════════════════════════════════════════════════════════╣');
32
+ console.log('β•‘ β•‘');
33
+ console.log('β•‘ πŸ“² From your phone or another device: β•‘');
34
+ console.log('β•‘ β•‘');
35
+ console.log('β•‘ 1. Go to https://mobilecoder.xyz β•‘');
36
+ console.log('β•‘ 2. Sign in with Google β•‘');
37
+ console.log('β•‘ 3. Enter the code above β•‘');
38
+ console.log('β•‘ β•‘');
39
+ console.log('β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•');
37
40
  await autoConfigureIDEs(code, options.signaling);
38
- console.log('\nπŸ”Œ Starting Universal Agent...');
39
41
  const webrtc = new WebRTCConnection(code, options.signaling, options.debug);
40
42
  const agent = new UniversalAgent(webrtc);
41
43
  await agent.start();
@@ -52,9 +54,6 @@ program
52
54
  console.log(' Use: mobilecoder-mcp start --code=YOUR_CODE');
53
55
  process.exit(1);
54
56
  }
55
- console.log('πŸ”Œ Starting Universal Agent...');
56
- console.log(` Connection code: ${options.code}`);
57
- console.log(` Signaling server: ${options.signaling}\n`);
58
57
  const webrtc = new WebRTCConnection(options.code, options.signaling, options.debug);
59
58
  const agent = new UniversalAgent(webrtc);
60
59
  await agent.start();
@@ -83,7 +82,12 @@ program
83
82
  });
84
83
  program.parse();
85
84
  function generateConnectionCode() {
86
- return crypto.randomBytes(3).toString('hex').toUpperCase();
85
+ const chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
86
+ let result = '';
87
+ for (let i = 0; i < 6; i++) {
88
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
89
+ }
90
+ return result;
87
91
  }
88
92
  async function autoConfigureIDEs(code, signalingUrl) {
89
93
  const configs = {
@@ -128,7 +132,6 @@ async function configureIDE(configPath, ideName, code, signalingUrl) {
128
132
  }
129
133
  };
130
134
  fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
131
- console.log(` βœ… ${ideName.charAt(0).toUpperCase() + ideName.slice(1)} linked.`);
132
135
  }
133
136
  async function removeFromConfig(configPath, serverName) {
134
137
  if (!fs.existsSync(configPath)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-handler.d.ts","sourceRoot":"","sources":["../src/mcp-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmB/C,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4N5E"}
1
+ {"version":3,"file":"mcp-handler.d.ts","sourceRoot":"","sources":["../src/mcp-handler.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAwC/C,wBAAsB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiP5E"}
@@ -6,6 +6,24 @@ import * as fs from 'fs';
6
6
  import * as path from 'path';
7
7
  // Queue to store commands received from mobile
8
8
  const commandQueue = [];
9
+ const ALLOWED_METHODS = {
10
+ 'initialize': true,
11
+ 'initialized': true,
12
+ 'tools/list': true,
13
+ 'tools/call': true,
14
+ 'prompts/list': true,
15
+ 'prompts/get': true,
16
+ 'resources/list': true,
17
+ 'resources/read': true,
18
+ 'resources/subscribe': true,
19
+ 'resources/unsubscribe': true,
20
+ 'sampling/createMessage': true,
21
+ 'logging/setLevel': true,
22
+ 'completion/complete': true
23
+ };
24
+ function isMethodAllowed(method) {
25
+ return ALLOWED_METHODS[method] === true;
26
+ }
9
27
  export async function setupMCPServer(webrtc) {
10
28
  // Create MCP server
11
29
  const server = new Server({
@@ -136,10 +154,37 @@ export async function setupMCPServer(webrtc) {
136
154
  });
137
155
  // Connect WebRTC listeners
138
156
  webrtc.onConnect(() => {
139
- console.log('πŸ“± [MCP] Mobile device connected');
140
157
  securityLogger.log('mobile_device_connected', { timestamp: Date.now() }, 'low');
141
158
  });
142
159
  webrtc.onMessage(async (message) => {
160
+ // Detailed logging for debugging
161
+ if (message.type !== 'pong') {
162
+ console.log('═══════════════════════════════════════');
163
+ console.log(`πŸ“₯ [MCP] Incoming: ${message.type || message.method || 'unknown'}`);
164
+ if (message.id)
165
+ console.log(`ID: ${message.id}`);
166
+ if (webrtc.getDebug()) {
167
+ console.log('Full:', JSON.stringify(message, null, 2));
168
+ }
169
+ console.log('═══════════════════════════════════════');
170
+ }
171
+ // Handle MCP method calls (JSON-RPC)
172
+ if (message.method) {
173
+ if (!isMethodAllowed(message.method)) {
174
+ console.warn(`⚠️ [Security] Blocked method: ${message.method}`);
175
+ webrtc.send({
176
+ jsonrpc: "2.0",
177
+ id: message.id,
178
+ error: {
179
+ code: -32001,
180
+ message: "Command blocked for security reasons",
181
+ data: { blocked: message.method }
182
+ }
183
+ });
184
+ return;
185
+ }
186
+ console.log(`βœ… [Security] Allowed method: ${message.method}`);
187
+ }
143
188
  // Handle command queueing
144
189
  if (message.type === 'command' && message.text) {
145
190
  const sanitizedCommand = sanitizeInput(message.text);
@@ -164,13 +209,11 @@ export async function setupMCPServer(webrtc) {
164
209
  });
165
210
  return;
166
211
  }
167
- console.log(` [MCP] Queuing command: ${sanitizedCommand}`);
168
212
  commandQueue.push(sanitizedCommand);
169
213
  }
170
214
  // Handle direct tool calls from mobile (for File Explorer)
171
215
  if (message.type === 'tool_call') {
172
216
  const { tool, data, id } = message;
173
- console.log(`πŸ› οΈ [MCP] Tool call received: ${tool}`, data);
174
217
  try {
175
218
  let result;
176
219
  if (tool === 'list_directory') {
@@ -191,7 +234,6 @@ export async function setupMCPServer(webrtc) {
191
234
  });
192
235
  }
193
236
  catch (error) {
194
- console.error(`❌ [MCP] Tool execution failed: ${error.message}`);
195
237
  securityLogger.log('tool_execution_failed', { tool, error: error.message }, 'medium');
196
238
  webrtc.send({
197
239
  type: 'tool_result',
@@ -206,8 +248,6 @@ export async function setupMCPServer(webrtc) {
206
248
  // Start MCP server with stdio transport
207
249
  const transport = new StdioServerTransport();
208
250
  await server.connect(transport);
209
- console.log('βœ… MCP Server initialized (stdio transport)');
210
- securityLogger.log('mcp_server_started', { timestamp: Date.now() }, 'low');
211
251
  }
212
252
  // Helper functions for file system operations
213
253
  async function handleListDirectory(cwd, args, requestId) {