xdebug-mcp 1.0.2 → 1.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/README.md +132 -6
- package/dist/config.d.ts +3 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/dbgp/server.d.ts +7 -3
- package/dist/dbgp/server.js +47 -5
- package/dist/dbgp/server.js.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -145,6 +145,71 @@ services:
|
|
|
145
145
|
- XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
### Using Unix Domain Sockets
|
|
149
|
+
|
|
150
|
+
For improved performance and simplified setup on local systems, you can use Unix domain sockets instead of TCP. Unix sockets eliminate network stack overhead and are ideal for debugging on the same machine.
|
|
151
|
+
|
|
152
|
+
**Benefits:**
|
|
153
|
+
- ⚡ Lower latency (no TCP/IP stack overhead)
|
|
154
|
+
- 🔒 Better security (file permissions instead of port binding)
|
|
155
|
+
- 📦 Simpler setup (no port management)
|
|
156
|
+
- 🚀 Faster communication for local debugging
|
|
157
|
+
|
|
158
|
+
**MCP Configuration (Unix Socket):**
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"mcpServers": {
|
|
163
|
+
"xdebug": {
|
|
164
|
+
"command": "xdebug-mcp",
|
|
165
|
+
"env": {
|
|
166
|
+
"XDEBUG_SOCKET_PATH": "/tmp/xdebug.sock",
|
|
167
|
+
"LOG_LEVEL": "info"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**PHP/Xdebug Configuration:**
|
|
175
|
+
|
|
176
|
+
```ini
|
|
177
|
+
[xdebug]
|
|
178
|
+
zend_extension=xdebug
|
|
179
|
+
xdebug.mode=debug
|
|
180
|
+
xdebug.start_with_request=yes
|
|
181
|
+
xdebug.client_host=unix:///tmp/xdebug.sock
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Socket File Permissions:**
|
|
185
|
+
|
|
186
|
+
The socket file is created with default permissions. To restrict access, you can:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# After MCP server starts
|
|
190
|
+
chmod 600 /tmp/xdebug.sock
|
|
191
|
+
|
|
192
|
+
# Or use a secure directory
|
|
193
|
+
mkdir -p ~/.xdebug && chmod 700 ~/.xdebug
|
|
194
|
+
# Then set XDEBUG_SOCKET_PATH=$HOME/.xdebug/xdebug.sock
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Automatic Cleanup:**
|
|
198
|
+
|
|
199
|
+
When `XDEBUG_SOCKET_PATH` is set, the server will:
|
|
200
|
+
- Listen on the specified Unix socket instead of TCP port
|
|
201
|
+
- Automatically clean up stale socket files on startup (prevents "address in use" errors)
|
|
202
|
+
- Automatically clean up socket files on shutdown
|
|
203
|
+
- Use the same debugging tools and features as TCP mode
|
|
204
|
+
|
|
205
|
+
**When to Use Unix Sockets:**
|
|
206
|
+
- ✅ Local PHP development (best performance)
|
|
207
|
+
- ✅ Same-machine debugging
|
|
208
|
+
- ✅ High-frequency breakpoint hits
|
|
209
|
+
- ❌ Remote debugging (use TCP instead)
|
|
210
|
+
|
|
211
|
+
*Unix socket support requested in [Issue #1](https://github.com/kpanuragh/xdebug-mcp/issues/1) by [@dkd-kaehm](https://github.com/dkd-kaehm)*
|
|
212
|
+
|
|
148
213
|
## Available MCP Tools (41 Total)
|
|
149
214
|
|
|
150
215
|
### Session Management
|
|
@@ -290,8 +355,9 @@ Use capture_request_context to see $_GET, $_POST, $_SESSION, cookies, and header
|
|
|
290
355
|
|
|
291
356
|
| Variable | Default | Description |
|
|
292
357
|
|----------|---------|-------------|
|
|
293
|
-
| `XDEBUG_PORT` | `9003` | Port to listen for Xdebug connections |
|
|
294
|
-
| `XDEBUG_HOST` | `0.0.0.0` | Host to bind |
|
|
358
|
+
| `XDEBUG_PORT` | `9003` | Port to listen for Xdebug connections (TCP mode) |
|
|
359
|
+
| `XDEBUG_HOST` | `0.0.0.0` | Host to bind (TCP mode) |
|
|
360
|
+
| `XDEBUG_SOCKET_PATH` | - | Unix domain socket path (e.g., `/tmp/xdebug.sock`). When set, uses Unix socket instead of TCP |
|
|
295
361
|
| `COMMAND_TIMEOUT` | `30000` | Command timeout in milliseconds |
|
|
296
362
|
| `PATH_MAPPINGS` | - | JSON object mapping container to host paths |
|
|
297
363
|
| `MAX_DEPTH` | `3` | Max depth for variable inspection |
|
|
@@ -299,21 +365,44 @@ Use capture_request_context to see $_GET, $_POST, $_SESSION, cookies, and header
|
|
|
299
365
|
| `MAX_DATA` | `2048` | Max data size per variable |
|
|
300
366
|
| `LOG_LEVEL` | `info` | Log level: debug, info, warn, error |
|
|
301
367
|
|
|
368
|
+
## Connection Modes: TCP vs Unix Socket
|
|
369
|
+
|
|
370
|
+
| Feature | TCP | Unix Socket |
|
|
371
|
+
|---------|-----|-------------|
|
|
372
|
+
| **Setup** | Easy (default) | Simple (one env var) |
|
|
373
|
+
| **Performance** | Good | Excellent (lower latency) |
|
|
374
|
+
| **Security** | Port accessible to network | File-based permissions |
|
|
375
|
+
| **Remote Debugging** | ✅ Supported | ❌ Local only |
|
|
376
|
+
| **Docker** | ✅ Works with host.docker.internal | ❌ Requires volume mount |
|
|
377
|
+
| **Stale Socket** | Manual port cleanup | Auto-cleanup |
|
|
378
|
+
| **Default** | `XDEBUG_PORT=9003` | Disabled (use TCP) |
|
|
379
|
+
|
|
380
|
+
**Quick Decision Guide:**
|
|
381
|
+
- 🏠 **Local development?** → Use Unix socket for best performance
|
|
382
|
+
- 🐳 **Docker on same machine?** → Use Unix socket with volume mount
|
|
383
|
+
- 🌐 **Remote server?** → Use TCP
|
|
384
|
+
- 🚀 **Maximum speed?** → Use Unix socket
|
|
385
|
+
- 📝 **Don't know?** → Start with TCP (default), switch to Unix socket if needed
|
|
386
|
+
|
|
302
387
|
## How It Works
|
|
303
388
|
|
|
304
|
-
1. **MCP Server starts** and listens for Xdebug connections
|
|
389
|
+
1. **MCP Server starts** and listens for Xdebug connections (TCP port 9003 or Unix socket)
|
|
305
390
|
2. **PHP script runs** with Xdebug enabled
|
|
306
391
|
3. **Xdebug connects** to the MCP server via DBGp protocol
|
|
307
392
|
4. **AI uses MCP tools** to control debugging (set breakpoints, step, inspect)
|
|
308
393
|
5. **DBGp commands** are sent to Xdebug, responses parsed and returned
|
|
309
394
|
|
|
310
395
|
```
|
|
311
|
-
┌─────────────┐ MCP/stdio ┌─────────────┐
|
|
312
|
-
│ Claude │ ◄────────────────► │ xdebug-mcp │
|
|
396
|
+
┌─────────────┐ MCP/stdio ┌─────────────┐ DBGp/TCP or ┌─────────────┐
|
|
397
|
+
│ Claude │ ◄────────────────► │ xdebug-mcp │ ◄─ Unix Socket ──► │ Xdebug │
|
|
313
398
|
│ (AI Agent) │ │ Server │ │ (in PHP) │
|
|
314
399
|
└─────────────┘ └─────────────┘ └─────────────┘
|
|
315
400
|
```
|
|
316
401
|
|
|
402
|
+
**Connection Options:**
|
|
403
|
+
- **TCP (Default):** `xdebug.client_host=127.0.0.1` + `XDEBUG_PORT=9003`
|
|
404
|
+
- **Unix Socket:** `xdebug.client_host=unix:///tmp/xdebug.sock` + `XDEBUG_SOCKET_PATH=/tmp/xdebug.sock`
|
|
405
|
+
|
|
317
406
|
## Troubleshooting
|
|
318
407
|
|
|
319
408
|
### No debug sessions appearing
|
|
@@ -321,18 +410,55 @@ Use capture_request_context to see $_GET, $_POST, $_SESSION, cookies, and header
|
|
|
321
410
|
1. Check that Xdebug is installed: `php -v` should show Xdebug
|
|
322
411
|
2. Verify Xdebug config: `php -i | grep xdebug`
|
|
323
412
|
3. Ensure `xdebug.client_host` points to the MCP server
|
|
324
|
-
4. Check firewall allows connections on port 9003
|
|
413
|
+
4. **For TCP:** Check firewall allows connections on port 9003
|
|
414
|
+
5. **For Unix socket:** Verify socket path exists and has correct permissions: `ls -la /tmp/xdebug.sock`
|
|
415
|
+
6. Check MCP server logs: `LOG_LEVEL=debug` for verbose output
|
|
325
416
|
|
|
326
417
|
### Connection issues with Docker
|
|
327
418
|
|
|
328
419
|
1. For Linux, add `extra_hosts: ["host.docker.internal:host-gateway"]`
|
|
329
420
|
2. Verify container can reach host: `curl host.docker.internal:9003`
|
|
421
|
+
3. Check xdebug logs in container: `docker logs <container-id> | grep xdebug`
|
|
422
|
+
|
|
423
|
+
### Unix socket issues
|
|
424
|
+
|
|
425
|
+
1. **"Address already in use"**: Socket file wasn't cleaned up
|
|
426
|
+
- Remove manually: `rm -f /tmp/xdebug.sock`
|
|
427
|
+
- MCP server will clean up automatically on next start
|
|
428
|
+
2. **"Permission denied"**: Check socket file permissions
|
|
429
|
+
- List socket: `ls -la /tmp/xdebug.sock`
|
|
430
|
+
- Run as same user as PHP: `ps aux | grep php`
|
|
431
|
+
3. **Socket path in php.ini:**
|
|
432
|
+
- Correct: `xdebug.client_host=unix:///tmp/xdebug.sock`
|
|
433
|
+
- Wrong: `xdebug.client_host=unix:/tmp/xdebug.sock` (missing one `/`)
|
|
330
434
|
|
|
331
435
|
### Breakpoints not hitting
|
|
332
436
|
|
|
333
437
|
1. Ensure file paths match exactly (use container paths for Docker)
|
|
334
438
|
2. Check breakpoint is resolved: `list_breakpoints`
|
|
335
439
|
3. Verify script execution reaches that line
|
|
440
|
+
4. Check that `xdebug.start_with_request=yes` is set
|
|
441
|
+
5. Try a simple file to verify basic setup works
|
|
442
|
+
|
|
443
|
+
### Performance issues
|
|
444
|
+
|
|
445
|
+
1. If experiencing slow stepping, increase `COMMAND_TIMEOUT`:
|
|
446
|
+
- Default: 30000ms (30 seconds)
|
|
447
|
+
- Try: `COMMAND_TIMEOUT=60000` for slower systems
|
|
448
|
+
2. For Unix sockets, verify socket is on fast filesystem (not network mount)
|
|
449
|
+
3. Check system load: `top` - excessive context switching slows debugging
|
|
450
|
+
|
|
451
|
+
### Server won't start
|
|
452
|
+
|
|
453
|
+
1. **Port in use (TCP):**
|
|
454
|
+
- Find process: `lsof -i :9003`
|
|
455
|
+
- Kill it: `kill -9 <pid>`
|
|
456
|
+
2. **Bad config:**
|
|
457
|
+
- Validate environment variables: `echo $XDEBUG_SOCKET_PATH`
|
|
458
|
+
- Check for typos in path names
|
|
459
|
+
3. **Permission denied:**
|
|
460
|
+
- For Unix socket, ensure write permission to parent directory
|
|
461
|
+
- Example: `mkdir -p ~/.xdebug && chmod 700 ~/.xdebug`
|
|
336
462
|
|
|
337
463
|
## Contributing
|
|
338
464
|
|
package/dist/config.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { z } from 'zod';
|
|
|
5
5
|
declare const ConfigSchema: z.ZodObject<{
|
|
6
6
|
dbgpPort: z.ZodDefault<z.ZodNumber>;
|
|
7
7
|
dbgpHost: z.ZodDefault<z.ZodString>;
|
|
8
|
+
dbgpSocketPath: z.ZodOptional<z.ZodString>;
|
|
8
9
|
commandTimeout: z.ZodDefault<z.ZodNumber>;
|
|
9
10
|
pathMappings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
10
11
|
maxDepth: z.ZodDefault<z.ZodNumber>;
|
|
@@ -19,10 +20,12 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
19
20
|
maxChildren: number;
|
|
20
21
|
maxData: number;
|
|
21
22
|
logLevel: "debug" | "info" | "warn" | "error";
|
|
23
|
+
dbgpSocketPath?: string | undefined;
|
|
22
24
|
pathMappings?: Record<string, string> | undefined;
|
|
23
25
|
}, {
|
|
24
26
|
dbgpPort?: number | undefined;
|
|
25
27
|
dbgpHost?: string | undefined;
|
|
28
|
+
dbgpSocketPath?: string | undefined;
|
|
26
29
|
commandTimeout?: number | undefined;
|
|
27
30
|
pathMappings?: Record<string, string> | undefined;
|
|
28
31
|
maxDepth?: number | undefined;
|
package/dist/config.js
CHANGED
|
@@ -7,6 +7,7 @@ const ConfigSchema = z.object({
|
|
|
7
7
|
// DBGp server settings
|
|
8
8
|
dbgpPort: z.number().int().positive().default(9003),
|
|
9
9
|
dbgpHost: z.string().default('0.0.0.0'),
|
|
10
|
+
dbgpSocketPath: z.string().optional(),
|
|
10
11
|
commandTimeout: z.number().int().positive().default(30000),
|
|
11
12
|
// Path mappings for Docker
|
|
12
13
|
pathMappings: z.record(z.string(), z.string()).optional(),
|
|
@@ -27,6 +28,10 @@ export function loadConfig() {
|
|
|
27
28
|
maxData: parseInt(process.env.MAX_DATA || '2048', 10),
|
|
28
29
|
logLevel: process.env.LOG_LEVEL || 'info',
|
|
29
30
|
};
|
|
31
|
+
// Add socket path if provided
|
|
32
|
+
if (process.env.XDEBUG_SOCKET_PATH) {
|
|
33
|
+
rawConfig.dbgpSocketPath = process.env.XDEBUG_SOCKET_PATH;
|
|
34
|
+
}
|
|
30
35
|
// Parse path mappings from JSON if provided
|
|
31
36
|
if (process.env.PATH_MAPPINGS) {
|
|
32
37
|
try {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,uBAAuB;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACvC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAE1D,2BAA2B;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEzD,6BAA6B;IAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAElD,UAAU;IACV,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CACrE,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU;IACxB,MAAM,SAAS,GAA4B;QACzC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC;QACzD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS;QAC9C,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,EAAE,EAAE,CAAC;QACpE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;QACpD,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,KAAK,EAAE,EAAE,CAAC;QAC5D,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC;QACrD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;KAC1C,CAAC;IAEF,4CAA4C;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE7C,kBAAkB;IAClB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAoB,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/dbgp/server.d.ts
CHANGED
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
import { EventEmitter } from 'events';
|
|
6
6
|
import { DbgpConnection } from './connection.js';
|
|
7
7
|
export interface DbgpServerConfig {
|
|
8
|
-
host
|
|
9
|
-
port
|
|
8
|
+
host?: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
socketPath?: string;
|
|
10
11
|
commandTimeout?: number;
|
|
11
12
|
}
|
|
12
13
|
export interface DbgpServerEvents {
|
|
13
14
|
connection: (connection: DbgpConnection) => void;
|
|
14
15
|
error: (error: Error) => void;
|
|
15
|
-
listening: (
|
|
16
|
+
listening: (address: string) => void;
|
|
16
17
|
close: () => void;
|
|
17
18
|
}
|
|
18
19
|
export declare class DbgpServer extends EventEmitter {
|
|
19
20
|
private server;
|
|
20
21
|
private connections;
|
|
21
22
|
private config;
|
|
23
|
+
private isUnixSocket;
|
|
22
24
|
constructor(config: DbgpServerConfig);
|
|
23
25
|
start(): Promise<void>;
|
|
24
26
|
private handleConnection;
|
|
@@ -30,5 +32,7 @@ export declare class DbgpServer extends EventEmitter {
|
|
|
30
32
|
get address(): {
|
|
31
33
|
host: string;
|
|
32
34
|
port: number;
|
|
35
|
+
} | {
|
|
36
|
+
path: string;
|
|
33
37
|
} | null;
|
|
34
38
|
}
|
package/dist/dbgp/server.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* TCP server that listens for incoming Xdebug connections.
|
|
4
4
|
*/
|
|
5
5
|
import * as net from 'net';
|
|
6
|
+
import * as fs from 'fs';
|
|
6
7
|
import { EventEmitter } from 'events';
|
|
7
8
|
import { DbgpConnection } from './connection.js';
|
|
8
9
|
import { logger } from '../utils/logger.js';
|
|
@@ -10,16 +11,31 @@ export class DbgpServer extends EventEmitter {
|
|
|
10
11
|
server = null;
|
|
11
12
|
connections = new Map();
|
|
12
13
|
config;
|
|
14
|
+
isUnixSocket;
|
|
13
15
|
constructor(config) {
|
|
14
16
|
super();
|
|
17
|
+
this.isUnixSocket = !!config.socketPath;
|
|
15
18
|
this.config = {
|
|
16
19
|
host: config.host,
|
|
17
20
|
port: config.port,
|
|
21
|
+
socketPath: config.socketPath,
|
|
18
22
|
commandTimeout: config.commandTimeout ?? 30000,
|
|
19
23
|
};
|
|
20
24
|
}
|
|
21
25
|
async start() {
|
|
22
26
|
return new Promise((resolve, reject) => {
|
|
27
|
+
// Clean up stale socket file if using Unix socket
|
|
28
|
+
if (this.isUnixSocket && this.config.socketPath) {
|
|
29
|
+
try {
|
|
30
|
+
if (fs.existsSync(this.config.socketPath)) {
|
|
31
|
+
fs.unlinkSync(this.config.socketPath);
|
|
32
|
+
logger.debug(`Cleaned up stale socket file: ${this.config.socketPath}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
logger.warn(`Failed to clean up socket file: ${err}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
23
39
|
this.server = net.createServer((socket) => {
|
|
24
40
|
this.handleConnection(socket);
|
|
25
41
|
});
|
|
@@ -31,11 +47,22 @@ export class DbgpServer extends EventEmitter {
|
|
|
31
47
|
this.server.on('close', () => {
|
|
32
48
|
this.emit('close');
|
|
33
49
|
});
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
if (this.isUnixSocket) {
|
|
51
|
+
this.server.listen(this.config.socketPath, () => {
|
|
52
|
+
logger.info(`DBGp server listening on Unix socket: ${this.config.socketPath}`);
|
|
53
|
+
this.emit('listening', `unix://${this.config.socketPath}`);
|
|
54
|
+
resolve();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const host = this.config.host || '0.0.0.0';
|
|
59
|
+
const port = this.config.port || 9003;
|
|
60
|
+
this.server.listen(port, host, () => {
|
|
61
|
+
logger.info(`DBGp server listening on ${host}:${port}`);
|
|
62
|
+
this.emit('listening', `${host}:${port}`);
|
|
63
|
+
resolve();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
39
66
|
});
|
|
40
67
|
}
|
|
41
68
|
handleConnection(socket) {
|
|
@@ -71,6 +98,18 @@ export class DbgpServer extends EventEmitter {
|
|
|
71
98
|
return new Promise((resolve) => {
|
|
72
99
|
if (this.server) {
|
|
73
100
|
this.server.close(() => {
|
|
101
|
+
// Clean up socket file if using Unix socket
|
|
102
|
+
if (this.isUnixSocket && this.config.socketPath) {
|
|
103
|
+
try {
|
|
104
|
+
if (fs.existsSync(this.config.socketPath)) {
|
|
105
|
+
fs.unlinkSync(this.config.socketPath);
|
|
106
|
+
logger.debug(`Cleaned up socket file: ${this.config.socketPath}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
logger.warn(`Failed to clean up socket file: ${err}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
74
113
|
logger.info('DBGp server stopped');
|
|
75
114
|
resolve();
|
|
76
115
|
});
|
|
@@ -86,6 +125,9 @@ export class DbgpServer extends EventEmitter {
|
|
|
86
125
|
get address() {
|
|
87
126
|
const addr = this.server?.address();
|
|
88
127
|
if (addr && typeof addr === 'object') {
|
|
128
|
+
if ('path' in addr) {
|
|
129
|
+
return { path: addr.path };
|
|
130
|
+
}
|
|
89
131
|
return { host: addr.address, port: addr.port };
|
|
90
132
|
}
|
|
91
133
|
return null;
|
package/dist/dbgp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dbgp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dbgp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgB5C,MAAM,OAAO,UAAW,SAAQ,YAAY;IAClC,MAAM,GAAsB,IAAI,CAAC;IACjC,WAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;IACrD,MAAM,CAAgD;IACtD,YAAY,CAAU;IAE9B,YAAY,MAAwB;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;SAC/C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,kDAAkD;YAClD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAChD,IAAI,CAAC;oBACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC1C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBACtC,MAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;oBAC9C,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC/E,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;oBAC3D,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;oBAClC,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;oBACxD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;oBAC1C,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAAkB;QACzC,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE1E,MAAM,CAAC,IAAI,CAAC,4BAA4B,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAEhD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,cAAc,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,wBAAwB;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBACrB,4CAA4C;oBAC5C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;wBAChD,IAAI,CAAC;4BACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gCAC1C,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gCACtC,MAAM,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;4BACpE,CAAC;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;wBACxD,CAAC;oBACH,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBACnC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC;IACzC,CAAC;IAED,IAAI,OAAO;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACpC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,OAAO,EAAE,IAAI,EAAG,IAAyB,CAAC,IAAI,EAAE,CAAC;YACnD,CAAC;YACD,OAAO,EAAE,IAAI,EAAG,IAA0C,CAAC,OAAO,EAAE,IAAI,EAAG,IAA0C,CAAC,IAAI,EAAE,CAAC;QAC/H,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ async function main() {
|
|
|
20
20
|
const dbgpServer = new DbgpServer({
|
|
21
21
|
host: config.dbgpHost,
|
|
22
22
|
port: config.dbgpPort,
|
|
23
|
+
socketPath: config.dbgpSocketPath,
|
|
23
24
|
commandTimeout: config.commandTimeout,
|
|
24
25
|
});
|
|
25
26
|
// Create tools context early so we can access pendingBreakpoints
|
|
@@ -55,9 +56,16 @@ async function main() {
|
|
|
55
56
|
toolsContext.pendingBreakpoints.clearSessionBreakpoints(sessionId);
|
|
56
57
|
});
|
|
57
58
|
// Start DBGp server
|
|
59
|
+
let listeningAddress;
|
|
60
|
+
dbgpServer.once('listening', (address) => {
|
|
61
|
+
listeningAddress = address;
|
|
62
|
+
});
|
|
58
63
|
try {
|
|
59
64
|
await dbgpServer.start();
|
|
60
|
-
|
|
65
|
+
const address = config.dbgpSocketPath
|
|
66
|
+
? `Unix socket: ${config.dbgpSocketPath}`
|
|
67
|
+
: `${config.dbgpHost}:${config.dbgpPort}`;
|
|
68
|
+
logger.info(`DBGp server listening on ${address}`);
|
|
61
69
|
}
|
|
62
70
|
catch (error) {
|
|
63
71
|
logger.error('Failed to start DBGp server:', error);
|
|
@@ -83,17 +91,44 @@ async function main() {
|
|
|
83
91
|
await mcpServer.connect(transport);
|
|
84
92
|
logger.info('MCP server connected via stdio');
|
|
85
93
|
// Graceful shutdown
|
|
94
|
+
let isShuttingDown = false;
|
|
86
95
|
const shutdown = async () => {
|
|
96
|
+
if (isShuttingDown)
|
|
97
|
+
return;
|
|
98
|
+
isShuttingDown = true;
|
|
87
99
|
logger.info('Shutting down...');
|
|
88
100
|
sessionManager.closeAllSessions();
|
|
89
101
|
await dbgpServer.stop();
|
|
90
102
|
process.exit(0);
|
|
91
103
|
};
|
|
104
|
+
// Handle various shutdown signals
|
|
92
105
|
process.on('SIGINT', shutdown);
|
|
93
106
|
process.on('SIGTERM', shutdown);
|
|
107
|
+
process.on('SIGHUP', shutdown);
|
|
108
|
+
// Handle stdin close (when parent process like Claude Code exits)
|
|
109
|
+
process.stdin.on('close', () => {
|
|
110
|
+
logger.info('stdin closed, shutting down...');
|
|
111
|
+
shutdown();
|
|
112
|
+
});
|
|
113
|
+
process.stdin.on('end', () => {
|
|
114
|
+
logger.info('stdin ended, shutting down...');
|
|
115
|
+
shutdown();
|
|
116
|
+
});
|
|
117
|
+
// Handle uncaught errors gracefully
|
|
118
|
+
process.on('uncaughtException', async (error) => {
|
|
119
|
+
logger.error('Uncaught exception:', error);
|
|
120
|
+
await shutdown();
|
|
121
|
+
});
|
|
122
|
+
process.on('unhandledRejection', async (reason) => {
|
|
123
|
+
logger.error('Unhandled rejection:', reason);
|
|
124
|
+
await shutdown();
|
|
125
|
+
});
|
|
94
126
|
// Keep the process alive
|
|
95
127
|
logger.info('Xdebug MCP Server is ready');
|
|
96
|
-
|
|
128
|
+
const waitMsg = config.dbgpSocketPath
|
|
129
|
+
? `Waiting for Xdebug connections on ${config.dbgpSocketPath}...`
|
|
130
|
+
: `Waiting for Xdebug connections on port ${config.dbgpPort}...`;
|
|
131
|
+
logger.info(waitMsg);
|
|
97
132
|
}
|
|
98
133
|
main().catch((error) => {
|
|
99
134
|
console.error('Fatal error:', error);
|
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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"}
|
package/package.json
CHANGED