xdebug-mcp 1.0.0 → 1.0.2
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 +7 -5
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/session/index.d.ts +1 -0
- package/dist/session/index.js +1 -0
- package/dist/session/index.js.map +1 -1
- package/dist/session/pending-breakpoints.d.ts +87 -0
- package/dist/session/pending-breakpoints.js +205 -0
- package/dist/session/pending-breakpoints.js.map +1 -0
- package/dist/tools/breakpoints.d.ts +2 -1
- package/dist/tools/breakpoints.js +177 -32
- package/dist/tools/breakpoints.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +3 -1
- package/dist/tools/index.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -160,12 +160,14 @@ services:
|
|
|
160
160
|
|
|
161
161
|
| Tool | Description |
|
|
162
162
|
|------|-------------|
|
|
163
|
-
| `set_breakpoint` | Set a line or conditional breakpoint |
|
|
164
|
-
| `set_exception_breakpoint` | Break on exceptions |
|
|
165
|
-
| `set_call_breakpoint` | Break on function calls |
|
|
166
|
-
| `remove_breakpoint` | Remove a breakpoint |
|
|
163
|
+
| `set_breakpoint` | Set a line or conditional breakpoint (supports pending breakpoints) |
|
|
164
|
+
| `set_exception_breakpoint` | Break on exceptions (supports pending breakpoints) |
|
|
165
|
+
| `set_call_breakpoint` | Break on function calls (supports pending breakpoints) |
|
|
166
|
+
| `remove_breakpoint` | Remove a breakpoint (works with pending breakpoints) |
|
|
167
167
|
| `update_breakpoint` | Enable/disable or modify a breakpoint |
|
|
168
|
-
| `list_breakpoints` | List all breakpoints |
|
|
168
|
+
| `list_breakpoints` | List all breakpoints including pending |
|
|
169
|
+
|
|
170
|
+
**Pending Breakpoints**: You can set breakpoints before a debug session starts. These are stored as "pending breakpoints" and automatically applied when a PHP script connects with Xdebug. This is useful for setting up breakpoints before triggering a page load or script execution.
|
|
169
171
|
|
|
170
172
|
### Execution Control
|
|
171
173
|
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,8 @@ async function main() {
|
|
|
22
22
|
port: config.dbgpPort,
|
|
23
23
|
commandTimeout: config.commandTimeout,
|
|
24
24
|
});
|
|
25
|
+
// Create tools context early so we can access pendingBreakpoints
|
|
26
|
+
const toolsContext = createToolsContext(sessionManager);
|
|
25
27
|
// Handle new Xdebug connections
|
|
26
28
|
dbgpServer.on('connection', async (connection) => {
|
|
27
29
|
logger.info(`New Xdebug connection: ${connection.id}`);
|
|
@@ -30,6 +32,13 @@ async function main() {
|
|
|
30
32
|
try {
|
|
31
33
|
const session = await sessionManager.createSession(connection);
|
|
32
34
|
logger.info(`Debug session created: ${session.id}`);
|
|
35
|
+
// Apply pending breakpoints to the new session
|
|
36
|
+
const pendingCount = toolsContext.pendingBreakpoints.count;
|
|
37
|
+
if (pendingCount > 0) {
|
|
38
|
+
logger.info(`Applying ${pendingCount} pending breakpoints to session ${session.id}...`);
|
|
39
|
+
const applied = await toolsContext.pendingBreakpoints.applyToSession(session);
|
|
40
|
+
logger.info(`Applied ${applied.length} breakpoints to session ${session.id}`);
|
|
41
|
+
}
|
|
33
42
|
}
|
|
34
43
|
catch (error) {
|
|
35
44
|
logger.error('Failed to create session:', error);
|
|
@@ -42,6 +51,8 @@ async function main() {
|
|
|
42
51
|
// Track session events
|
|
43
52
|
sessionManager.on('sessionEnded', (sessionId) => {
|
|
44
53
|
logger.info(`Session ended: ${sessionId}`);
|
|
54
|
+
// Clear applied breakpoints mapping for this session
|
|
55
|
+
toolsContext.pendingBreakpoints.clearSessionBreakpoints(sessionId);
|
|
45
56
|
});
|
|
46
57
|
// Start DBGp server
|
|
47
58
|
try {
|
|
@@ -57,8 +68,6 @@ async function main() {
|
|
|
57
68
|
name: 'xdebug-mcp',
|
|
58
69
|
version: '1.0.0',
|
|
59
70
|
});
|
|
60
|
-
// Create tools context with all managers
|
|
61
|
-
const toolsContext = createToolsContext(sessionManager);
|
|
62
71
|
// Load saved debug profiles
|
|
63
72
|
try {
|
|
64
73
|
await toolsContext.configManager.loadProfiles();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/session/index.d.ts
CHANGED
package/dist/session/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending Breakpoints Manager
|
|
3
|
+
* Stores breakpoints before a debug session starts and applies them when a session connects.
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { HitCondition } from '../dbgp/types.js';
|
|
7
|
+
import { DebugSession } from './session.js';
|
|
8
|
+
export interface PendingBreakpoint {
|
|
9
|
+
id: string;
|
|
10
|
+
type: 'line' | 'exception' | 'call';
|
|
11
|
+
file?: string;
|
|
12
|
+
line?: number;
|
|
13
|
+
condition?: string;
|
|
14
|
+
hitValue?: number;
|
|
15
|
+
hitCondition?: HitCondition;
|
|
16
|
+
exception?: string;
|
|
17
|
+
functionName?: string;
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
createdAt: Date;
|
|
20
|
+
}
|
|
21
|
+
export interface AppliedBreakpoint {
|
|
22
|
+
pendingId: string;
|
|
23
|
+
sessionId: string;
|
|
24
|
+
breakpointId: string;
|
|
25
|
+
}
|
|
26
|
+
export declare class PendingBreakpointsManager extends EventEmitter {
|
|
27
|
+
private pendingBreakpoints;
|
|
28
|
+
private appliedBreakpoints;
|
|
29
|
+
private breakpointIdCounter;
|
|
30
|
+
/**
|
|
31
|
+
* Add a pending line breakpoint
|
|
32
|
+
*/
|
|
33
|
+
addLineBreakpoint(file: string, line: number, options?: {
|
|
34
|
+
condition?: string;
|
|
35
|
+
hitValue?: number;
|
|
36
|
+
hitCondition?: HitCondition;
|
|
37
|
+
}): PendingBreakpoint;
|
|
38
|
+
/**
|
|
39
|
+
* Add a pending exception breakpoint
|
|
40
|
+
*/
|
|
41
|
+
addExceptionBreakpoint(exception?: string): PendingBreakpoint;
|
|
42
|
+
/**
|
|
43
|
+
* Add a pending call breakpoint
|
|
44
|
+
*/
|
|
45
|
+
addCallBreakpoint(functionName: string): PendingBreakpoint;
|
|
46
|
+
/**
|
|
47
|
+
* Remove a pending breakpoint
|
|
48
|
+
*/
|
|
49
|
+
removeBreakpoint(id: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get all pending breakpoints
|
|
52
|
+
*/
|
|
53
|
+
getAllPendingBreakpoints(): PendingBreakpoint[];
|
|
54
|
+
/**
|
|
55
|
+
* Get a specific pending breakpoint
|
|
56
|
+
*/
|
|
57
|
+
getPendingBreakpoint(id: string): PendingBreakpoint | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Enable/disable a pending breakpoint
|
|
60
|
+
*/
|
|
61
|
+
setBreakpointEnabled(id: string, enabled: boolean): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Apply all pending breakpoints to a new session
|
|
64
|
+
*/
|
|
65
|
+
applyToSession(session: DebugSession): Promise<AppliedBreakpoint[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Get applied breakpoints for a session
|
|
68
|
+
*/
|
|
69
|
+
getAppliedBreakpoints(sessionId: string): AppliedBreakpoint[];
|
|
70
|
+
/**
|
|
71
|
+
* Clear applied breakpoints for a session (when session ends)
|
|
72
|
+
*/
|
|
73
|
+
clearSessionBreakpoints(sessionId: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Clear all pending breakpoints
|
|
76
|
+
*/
|
|
77
|
+
clearAll(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Export configuration
|
|
80
|
+
*/
|
|
81
|
+
exportConfig(): PendingBreakpoint[];
|
|
82
|
+
/**
|
|
83
|
+
* Import configuration
|
|
84
|
+
*/
|
|
85
|
+
importConfig(breakpoints: PendingBreakpoint[]): void;
|
|
86
|
+
get count(): number;
|
|
87
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pending Breakpoints Manager
|
|
3
|
+
* Stores breakpoints before a debug session starts and applies them when a session connects.
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
export class PendingBreakpointsManager extends EventEmitter {
|
|
8
|
+
pendingBreakpoints = new Map();
|
|
9
|
+
appliedBreakpoints = new Map();
|
|
10
|
+
breakpointIdCounter = 0;
|
|
11
|
+
/**
|
|
12
|
+
* Add a pending line breakpoint
|
|
13
|
+
*/
|
|
14
|
+
addLineBreakpoint(file, line, options) {
|
|
15
|
+
const id = `pending_${++this.breakpointIdCounter}`;
|
|
16
|
+
const bp = {
|
|
17
|
+
id,
|
|
18
|
+
type: 'line',
|
|
19
|
+
file,
|
|
20
|
+
line,
|
|
21
|
+
condition: options?.condition,
|
|
22
|
+
hitValue: options?.hitValue,
|
|
23
|
+
hitCondition: options?.hitCondition,
|
|
24
|
+
enabled: true,
|
|
25
|
+
createdAt: new Date(),
|
|
26
|
+
};
|
|
27
|
+
this.pendingBreakpoints.set(id, bp);
|
|
28
|
+
logger.info(`Pending breakpoint added: ${id} at ${file}:${line}`);
|
|
29
|
+
this.emit('breakpointAdded', bp);
|
|
30
|
+
return bp;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add a pending exception breakpoint
|
|
34
|
+
*/
|
|
35
|
+
addExceptionBreakpoint(exception = '*') {
|
|
36
|
+
const id = `pending_${++this.breakpointIdCounter}`;
|
|
37
|
+
const bp = {
|
|
38
|
+
id,
|
|
39
|
+
type: 'exception',
|
|
40
|
+
exception,
|
|
41
|
+
enabled: true,
|
|
42
|
+
createdAt: new Date(),
|
|
43
|
+
};
|
|
44
|
+
this.pendingBreakpoints.set(id, bp);
|
|
45
|
+
logger.info(`Pending exception breakpoint added: ${id} for ${exception}`);
|
|
46
|
+
this.emit('breakpointAdded', bp);
|
|
47
|
+
return bp;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Add a pending call breakpoint
|
|
51
|
+
*/
|
|
52
|
+
addCallBreakpoint(functionName) {
|
|
53
|
+
const id = `pending_${++this.breakpointIdCounter}`;
|
|
54
|
+
const bp = {
|
|
55
|
+
id,
|
|
56
|
+
type: 'call',
|
|
57
|
+
functionName,
|
|
58
|
+
enabled: true,
|
|
59
|
+
createdAt: new Date(),
|
|
60
|
+
};
|
|
61
|
+
this.pendingBreakpoints.set(id, bp);
|
|
62
|
+
logger.info(`Pending call breakpoint added: ${id} for ${functionName}`);
|
|
63
|
+
this.emit('breakpointAdded', bp);
|
|
64
|
+
return bp;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Remove a pending breakpoint
|
|
68
|
+
*/
|
|
69
|
+
removeBreakpoint(id) {
|
|
70
|
+
const removed = this.pendingBreakpoints.delete(id);
|
|
71
|
+
if (removed) {
|
|
72
|
+
logger.info(`Pending breakpoint removed: ${id}`);
|
|
73
|
+
this.emit('breakpointRemoved', id);
|
|
74
|
+
}
|
|
75
|
+
return removed;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get all pending breakpoints
|
|
79
|
+
*/
|
|
80
|
+
getAllPendingBreakpoints() {
|
|
81
|
+
return Array.from(this.pendingBreakpoints.values());
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get a specific pending breakpoint
|
|
85
|
+
*/
|
|
86
|
+
getPendingBreakpoint(id) {
|
|
87
|
+
return this.pendingBreakpoints.get(id);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Enable/disable a pending breakpoint
|
|
91
|
+
*/
|
|
92
|
+
setBreakpointEnabled(id, enabled) {
|
|
93
|
+
const bp = this.pendingBreakpoints.get(id);
|
|
94
|
+
if (bp) {
|
|
95
|
+
bp.enabled = enabled;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Apply all pending breakpoints to a new session
|
|
102
|
+
*/
|
|
103
|
+
async applyToSession(session) {
|
|
104
|
+
const applied = [];
|
|
105
|
+
for (const bp of this.pendingBreakpoints.values()) {
|
|
106
|
+
if (!bp.enabled)
|
|
107
|
+
continue;
|
|
108
|
+
try {
|
|
109
|
+
let result;
|
|
110
|
+
switch (bp.type) {
|
|
111
|
+
case 'line':
|
|
112
|
+
if (bp.file && bp.line) {
|
|
113
|
+
result = await session.setLineBreakpoint(bp.file, bp.line, {
|
|
114
|
+
condition: bp.condition,
|
|
115
|
+
hitValue: bp.hitValue,
|
|
116
|
+
hitCondition: bp.hitCondition,
|
|
117
|
+
});
|
|
118
|
+
applied.push({
|
|
119
|
+
pendingId: bp.id,
|
|
120
|
+
sessionId: session.id,
|
|
121
|
+
breakpointId: result.id,
|
|
122
|
+
});
|
|
123
|
+
logger.debug(`Applied breakpoint ${bp.id} -> ${result.id}`);
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
case 'exception':
|
|
127
|
+
if (bp.exception) {
|
|
128
|
+
result = await session.setExceptionBreakpoint(bp.exception);
|
|
129
|
+
applied.push({
|
|
130
|
+
pendingId: bp.id,
|
|
131
|
+
sessionId: session.id,
|
|
132
|
+
breakpointId: result.id,
|
|
133
|
+
});
|
|
134
|
+
logger.debug(`Applied exception breakpoint ${bp.id} -> ${result.id}`);
|
|
135
|
+
}
|
|
136
|
+
break;
|
|
137
|
+
case 'call':
|
|
138
|
+
if (bp.functionName) {
|
|
139
|
+
result = await session.setCallBreakpoint(bp.functionName);
|
|
140
|
+
applied.push({
|
|
141
|
+
pendingId: bp.id,
|
|
142
|
+
sessionId: session.id,
|
|
143
|
+
breakpointId: result.id,
|
|
144
|
+
});
|
|
145
|
+
logger.debug(`Applied call breakpoint ${bp.id} -> ${result.id}`);
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
logger.error(`Failed to apply breakpoint ${bp.id}:`, error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Store applied breakpoints for this session
|
|
155
|
+
this.appliedBreakpoints.set(session.id, applied);
|
|
156
|
+
logger.info(`Applied ${applied.length} breakpoints to session ${session.id}`);
|
|
157
|
+
this.emit('breakpointsApplied', session.id, applied);
|
|
158
|
+
return applied;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get applied breakpoints for a session
|
|
162
|
+
*/
|
|
163
|
+
getAppliedBreakpoints(sessionId) {
|
|
164
|
+
return this.appliedBreakpoints.get(sessionId) || [];
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Clear applied breakpoints for a session (when session ends)
|
|
168
|
+
*/
|
|
169
|
+
clearSessionBreakpoints(sessionId) {
|
|
170
|
+
this.appliedBreakpoints.delete(sessionId);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clear all pending breakpoints
|
|
174
|
+
*/
|
|
175
|
+
clearAll() {
|
|
176
|
+
this.pendingBreakpoints.clear();
|
|
177
|
+
logger.info('All pending breakpoints cleared');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Export configuration
|
|
181
|
+
*/
|
|
182
|
+
exportConfig() {
|
|
183
|
+
return this.getAllPendingBreakpoints();
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Import configuration
|
|
187
|
+
*/
|
|
188
|
+
importConfig(breakpoints) {
|
|
189
|
+
for (const bp of breakpoints) {
|
|
190
|
+
this.pendingBreakpoints.set(bp.id, {
|
|
191
|
+
...bp,
|
|
192
|
+
createdAt: new Date(bp.createdAt),
|
|
193
|
+
});
|
|
194
|
+
// Update counter to avoid ID conflicts
|
|
195
|
+
const num = parseInt(bp.id.replace('pending_', ''), 10);
|
|
196
|
+
if (!isNaN(num) && num >= this.breakpointIdCounter) {
|
|
197
|
+
this.breakpointIdCounter = num + 1;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
get count() {
|
|
202
|
+
return this.pendingBreakpoints.size;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=pending-breakpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-breakpoints.js","sourceRoot":"","sources":["../../src/session/pending-breakpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
5
5
|
import { SessionManager } from '../session/manager.js';
|
|
6
|
-
|
|
6
|
+
import { PendingBreakpointsManager } from '../session/pending-breakpoints.js';
|
|
7
|
+
export declare function registerBreakpointTools(server: McpServer, sessionManager: SessionManager, pendingBreakpoints: PendingBreakpointsManager): void;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Breakpoint MCP Tools
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
export function registerBreakpointTools(server, sessionManager) {
|
|
5
|
+
export function registerBreakpointTools(server, sessionManager, pendingBreakpoints) {
|
|
6
6
|
// Set a line breakpoint
|
|
7
|
-
server.tool('set_breakpoint', 'Set a breakpoint in PHP code. Supports line breakpoints and conditional breakpoints with hit counts.', {
|
|
7
|
+
server.tool('set_breakpoint', 'Set a breakpoint in PHP code. Supports line breakpoints and conditional breakpoints with hit counts. Can be set before a debug session starts - breakpoints will be applied when a session connects.', {
|
|
8
8
|
file: z
|
|
9
9
|
.string()
|
|
10
10
|
.describe('Full file path (use container path for Docker, e.g., /var/www/html/index.php)'),
|
|
@@ -28,15 +28,32 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
28
28
|
.describe('Session ID (uses active session if not specified)'),
|
|
29
29
|
}, async ({ file, line, condition, hit_value, hit_condition, session_id }) => {
|
|
30
30
|
const session = sessionManager.resolveSession(session_id);
|
|
31
|
+
// If no active session, store as pending breakpoint
|
|
31
32
|
if (!session) {
|
|
33
|
+
const pendingBp = pendingBreakpoints.addLineBreakpoint(file, line, {
|
|
34
|
+
condition,
|
|
35
|
+
hitValue: hit_value,
|
|
36
|
+
hitCondition: hit_condition,
|
|
37
|
+
});
|
|
32
38
|
return {
|
|
33
39
|
content: [
|
|
34
40
|
{
|
|
35
41
|
type: 'text',
|
|
36
42
|
text: JSON.stringify({
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
success: true,
|
|
44
|
+
pending: true,
|
|
45
|
+
message: 'Breakpoint stored as pending - will be applied when a debug session connects',
|
|
46
|
+
breakpoint: {
|
|
47
|
+
id: pendingBp.id,
|
|
48
|
+
type: 'line',
|
|
49
|
+
file,
|
|
50
|
+
line,
|
|
51
|
+
condition: condition || null,
|
|
52
|
+
hitValue: hit_value || null,
|
|
53
|
+
hitCondition: hit_condition || null,
|
|
54
|
+
enabled: pendingBp.enabled,
|
|
55
|
+
},
|
|
56
|
+
}, null, 2),
|
|
40
57
|
},
|
|
41
58
|
],
|
|
42
59
|
};
|
|
@@ -86,7 +103,7 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
86
103
|
}
|
|
87
104
|
});
|
|
88
105
|
// Set exception breakpoint
|
|
89
|
-
server.tool('set_exception_breakpoint', 'Set a breakpoint that triggers when a specific exception is thrown', {
|
|
106
|
+
server.tool('set_exception_breakpoint', 'Set a breakpoint that triggers when a specific exception is thrown. Can be set before a debug session starts.', {
|
|
90
107
|
exception: z
|
|
91
108
|
.string()
|
|
92
109
|
.default('*')
|
|
@@ -94,12 +111,24 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
94
111
|
session_id: z.string().optional().describe('Session ID'),
|
|
95
112
|
}, async ({ exception, session_id }) => {
|
|
96
113
|
const session = sessionManager.resolveSession(session_id);
|
|
114
|
+
// If no active session, store as pending breakpoint
|
|
97
115
|
if (!session) {
|
|
116
|
+
const pendingBp = pendingBreakpoints.addExceptionBreakpoint(exception);
|
|
98
117
|
return {
|
|
99
118
|
content: [
|
|
100
119
|
{
|
|
101
120
|
type: 'text',
|
|
102
|
-
text: JSON.stringify({
|
|
121
|
+
text: JSON.stringify({
|
|
122
|
+
success: true,
|
|
123
|
+
pending: true,
|
|
124
|
+
message: 'Exception breakpoint stored as pending - will be applied when a debug session connects',
|
|
125
|
+
breakpoint: {
|
|
126
|
+
id: pendingBp.id,
|
|
127
|
+
type: 'exception',
|
|
128
|
+
exception,
|
|
129
|
+
enabled: pendingBp.enabled,
|
|
130
|
+
},
|
|
131
|
+
}, null, 2),
|
|
103
132
|
},
|
|
104
133
|
],
|
|
105
134
|
};
|
|
@@ -138,19 +167,31 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
138
167
|
}
|
|
139
168
|
});
|
|
140
169
|
// Set call breakpoint (function entry)
|
|
141
|
-
server.tool('set_call_breakpoint', 'Set a breakpoint that triggers when a specific function is called', {
|
|
170
|
+
server.tool('set_call_breakpoint', 'Set a breakpoint that triggers when a specific function is called. Can be set before a debug session starts.', {
|
|
142
171
|
function_name: z
|
|
143
172
|
.string()
|
|
144
173
|
.describe("Function name to break on (e.g., 'myFunction' or 'MyClass::myMethod')"),
|
|
145
174
|
session_id: z.string().optional().describe('Session ID'),
|
|
146
175
|
}, async ({ function_name, session_id }) => {
|
|
147
176
|
const session = sessionManager.resolveSession(session_id);
|
|
177
|
+
// If no active session, store as pending breakpoint
|
|
148
178
|
if (!session) {
|
|
179
|
+
const pendingBp = pendingBreakpoints.addCallBreakpoint(function_name);
|
|
149
180
|
return {
|
|
150
181
|
content: [
|
|
151
182
|
{
|
|
152
183
|
type: 'text',
|
|
153
|
-
text: JSON.stringify({
|
|
184
|
+
text: JSON.stringify({
|
|
185
|
+
success: true,
|
|
186
|
+
pending: true,
|
|
187
|
+
message: 'Call breakpoint stored as pending - will be applied when a debug session connects',
|
|
188
|
+
breakpoint: {
|
|
189
|
+
id: pendingBp.id,
|
|
190
|
+
type: 'call',
|
|
191
|
+
function: function_name,
|
|
192
|
+
enabled: pendingBp.enabled,
|
|
193
|
+
},
|
|
194
|
+
}, null, 2),
|
|
154
195
|
},
|
|
155
196
|
],
|
|
156
197
|
};
|
|
@@ -189,10 +230,28 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
189
230
|
}
|
|
190
231
|
});
|
|
191
232
|
// Remove a breakpoint
|
|
192
|
-
server.tool('remove_breakpoint', 'Remove a breakpoint by its ID', {
|
|
193
|
-
breakpoint_id: z.string().describe('The breakpoint ID to remove'),
|
|
233
|
+
server.tool('remove_breakpoint', 'Remove a breakpoint by its ID. Works for both active session breakpoints and pending breakpoints.', {
|
|
234
|
+
breakpoint_id: z.string().describe('The breakpoint ID to remove (session breakpoint ID or pending_* ID)'),
|
|
194
235
|
session_id: z.string().optional().describe('Session ID'),
|
|
195
236
|
}, async ({ breakpoint_id, session_id }) => {
|
|
237
|
+
// Check if it's a pending breakpoint
|
|
238
|
+
if (breakpoint_id.startsWith('pending_')) {
|
|
239
|
+
const success = pendingBreakpoints.removeBreakpoint(breakpoint_id);
|
|
240
|
+
return {
|
|
241
|
+
content: [
|
|
242
|
+
{
|
|
243
|
+
type: 'text',
|
|
244
|
+
text: JSON.stringify({
|
|
245
|
+
success,
|
|
246
|
+
breakpoint_id,
|
|
247
|
+
message: success
|
|
248
|
+
? 'Pending breakpoint removed'
|
|
249
|
+
: 'Failed to remove pending breakpoint (may not exist)',
|
|
250
|
+
}),
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
}
|
|
196
255
|
const session = sessionManager.resolveSession(session_id);
|
|
197
256
|
if (!session) {
|
|
198
257
|
return {
|
|
@@ -221,7 +280,7 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
221
280
|
};
|
|
222
281
|
});
|
|
223
282
|
// Update breakpoint (enable/disable, change hit conditions)
|
|
224
|
-
server.tool('update_breakpoint', 'Update a breakpoint (enable/disable or change hit conditions)', {
|
|
283
|
+
server.tool('update_breakpoint', 'Update a breakpoint (enable/disable or change hit conditions). Works for both active session and pending breakpoints.', {
|
|
225
284
|
breakpoint_id: z.string().describe('The breakpoint ID to update'),
|
|
226
285
|
state: z
|
|
227
286
|
.enum(['enabled', 'disabled'])
|
|
@@ -234,6 +293,40 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
234
293
|
.describe('New hit condition'),
|
|
235
294
|
session_id: z.string().optional().describe('Session ID'),
|
|
236
295
|
}, async ({ breakpoint_id, state, hit_value, hit_condition, session_id }) => {
|
|
296
|
+
// Check if it's a pending breakpoint
|
|
297
|
+
if (breakpoint_id.startsWith('pending_')) {
|
|
298
|
+
const enabled = state === undefined ? undefined : state === 'enabled';
|
|
299
|
+
if (enabled !== undefined) {
|
|
300
|
+
const success = pendingBreakpoints.setBreakpointEnabled(breakpoint_id, enabled);
|
|
301
|
+
return {
|
|
302
|
+
content: [
|
|
303
|
+
{
|
|
304
|
+
type: 'text',
|
|
305
|
+
text: JSON.stringify({
|
|
306
|
+
success,
|
|
307
|
+
breakpoint_id,
|
|
308
|
+
updates: { state },
|
|
309
|
+
message: success
|
|
310
|
+
? 'Pending breakpoint updated'
|
|
311
|
+
: 'Failed to update pending breakpoint (may not exist)',
|
|
312
|
+
}),
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
content: [
|
|
319
|
+
{
|
|
320
|
+
type: 'text',
|
|
321
|
+
text: JSON.stringify({
|
|
322
|
+
success: false,
|
|
323
|
+
breakpoint_id,
|
|
324
|
+
message: 'Only enable/disable is supported for pending breakpoints',
|
|
325
|
+
}),
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
};
|
|
329
|
+
}
|
|
237
330
|
const session = sessionManager.resolveSession(session_id);
|
|
238
331
|
if (!session) {
|
|
239
332
|
return {
|
|
@@ -264,42 +357,94 @@ export function registerBreakpointTools(server, sessionManager) {
|
|
|
264
357
|
};
|
|
265
358
|
});
|
|
266
359
|
// List all breakpoints
|
|
267
|
-
server.tool('list_breakpoints', 'List all breakpoints
|
|
360
|
+
server.tool('list_breakpoints', 'List all breakpoints including both active session breakpoints and pending breakpoints', {
|
|
268
361
|
session_id: z.string().optional().describe('Session ID'),
|
|
269
|
-
|
|
362
|
+
include_pending: z.boolean().default(true).describe('Include pending breakpoints in the list'),
|
|
363
|
+
}, async ({ session_id, include_pending }) => {
|
|
270
364
|
const session = sessionManager.resolveSession(session_id);
|
|
365
|
+
const pending = pendingBreakpoints.getAllPendingBreakpoints();
|
|
366
|
+
// If no session, just return pending breakpoints
|
|
271
367
|
if (!session) {
|
|
368
|
+
if (pending.length === 0) {
|
|
369
|
+
return {
|
|
370
|
+
content: [
|
|
371
|
+
{
|
|
372
|
+
type: 'text',
|
|
373
|
+
text: JSON.stringify({
|
|
374
|
+
message: 'No active debug session and no pending breakpoints',
|
|
375
|
+
breakpoints: [],
|
|
376
|
+
pendingBreakpoints: [],
|
|
377
|
+
totalCount: 0,
|
|
378
|
+
}),
|
|
379
|
+
},
|
|
380
|
+
],
|
|
381
|
+
};
|
|
382
|
+
}
|
|
272
383
|
return {
|
|
273
384
|
content: [
|
|
274
385
|
{
|
|
275
386
|
type: 'text',
|
|
276
|
-
text: JSON.stringify({
|
|
387
|
+
text: JSON.stringify({
|
|
388
|
+
message: 'No active debug session - showing pending breakpoints only',
|
|
389
|
+
breakpoints: [],
|
|
390
|
+
pendingBreakpoints: pending.map((bp) => ({
|
|
391
|
+
id: bp.id,
|
|
392
|
+
type: bp.type,
|
|
393
|
+
file: bp.file,
|
|
394
|
+
line: bp.line,
|
|
395
|
+
condition: bp.condition,
|
|
396
|
+
hitValue: bp.hitValue,
|
|
397
|
+
hitCondition: bp.hitCondition,
|
|
398
|
+
exception: bp.exception,
|
|
399
|
+
functionName: bp.functionName,
|
|
400
|
+
enabled: bp.enabled,
|
|
401
|
+
createdAt: bp.createdAt,
|
|
402
|
+
})),
|
|
403
|
+
totalCount: pending.length,
|
|
404
|
+
}, null, 2),
|
|
277
405
|
},
|
|
278
406
|
],
|
|
279
407
|
};
|
|
280
408
|
}
|
|
281
409
|
const breakpoints = await session.listBreakpoints();
|
|
410
|
+
const result = {
|
|
411
|
+
breakpoints: breakpoints.map((bp) => ({
|
|
412
|
+
id: bp.id,
|
|
413
|
+
type: bp.type,
|
|
414
|
+
state: bp.state,
|
|
415
|
+
resolved: bp.resolved,
|
|
416
|
+
file: bp.filename,
|
|
417
|
+
line: bp.lineno,
|
|
418
|
+
function: bp.function,
|
|
419
|
+
exception: bp.exception,
|
|
420
|
+
expression: bp.expression,
|
|
421
|
+
hitCount: bp.hitCount,
|
|
422
|
+
hitValue: bp.hitValue,
|
|
423
|
+
hitCondition: bp.hitCondition,
|
|
424
|
+
})),
|
|
425
|
+
totalCount: breakpoints.length,
|
|
426
|
+
};
|
|
427
|
+
if (include_pending && pending.length > 0) {
|
|
428
|
+
result.pendingBreakpoints = pending.map((bp) => ({
|
|
429
|
+
id: bp.id,
|
|
430
|
+
type: bp.type,
|
|
431
|
+
file: bp.file,
|
|
432
|
+
line: bp.line,
|
|
433
|
+
condition: bp.condition,
|
|
434
|
+
hitValue: bp.hitValue,
|
|
435
|
+
hitCondition: bp.hitCondition,
|
|
436
|
+
exception: bp.exception,
|
|
437
|
+
functionName: bp.functionName,
|
|
438
|
+
enabled: bp.enabled,
|
|
439
|
+
createdAt: bp.createdAt,
|
|
440
|
+
}));
|
|
441
|
+
result.totalCount += pending.length;
|
|
442
|
+
}
|
|
282
443
|
return {
|
|
283
444
|
content: [
|
|
284
445
|
{
|
|
285
446
|
type: 'text',
|
|
286
|
-
text: JSON.stringify(
|
|
287
|
-
breakpoints: breakpoints.map((bp) => ({
|
|
288
|
-
id: bp.id,
|
|
289
|
-
type: bp.type,
|
|
290
|
-
state: bp.state,
|
|
291
|
-
resolved: bp.resolved,
|
|
292
|
-
file: bp.filename,
|
|
293
|
-
line: bp.lineno,
|
|
294
|
-
function: bp.function,
|
|
295
|
-
exception: bp.exception,
|
|
296
|
-
expression: bp.expression,
|
|
297
|
-
hitCount: bp.hitCount,
|
|
298
|
-
hitValue: bp.hitValue,
|
|
299
|
-
hitCondition: bp.hitCondition,
|
|
300
|
-
})),
|
|
301
|
-
count: breakpoints.length,
|
|
302
|
-
}, null, 2),
|
|
447
|
+
text: JSON.stringify(result, null, 2),
|
|
303
448
|
},
|
|
304
449
|
],
|
|
305
450
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/tools/breakpoints.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/tools/breakpoints.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { StepFilter } from '../session/step-filter.js';
|
|
|
11
11
|
import { DebugConfigManager } from '../session/debug-config.js';
|
|
12
12
|
import { CodeCoverageTracker } from '../session/code-coverage.js';
|
|
13
13
|
import { SessionExporter } from '../session/session-export.js';
|
|
14
|
+
import { PendingBreakpointsManager } from '../session/pending-breakpoints.js';
|
|
14
15
|
export interface ToolsContext {
|
|
15
16
|
sessionManager: SessionManager;
|
|
16
17
|
watchManager: WatchManager;
|
|
@@ -21,6 +22,7 @@ export interface ToolsContext {
|
|
|
21
22
|
configManager: DebugConfigManager;
|
|
22
23
|
coverageTracker: CodeCoverageTracker;
|
|
23
24
|
sessionExporter: SessionExporter;
|
|
25
|
+
pendingBreakpoints: PendingBreakpointsManager;
|
|
24
26
|
}
|
|
25
27
|
export declare function createToolsContext(sessionManager: SessionManager): ToolsContext;
|
|
26
28
|
export declare function registerAllTools(server: McpServer, ctx: ToolsContext): void;
|
package/dist/tools/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { StepFilter } from '../session/step-filter.js';
|
|
|
9
9
|
import { DebugConfigManager } from '../session/debug-config.js';
|
|
10
10
|
import { CodeCoverageTracker } from '../session/code-coverage.js';
|
|
11
11
|
import { SessionExporter } from '../session/session-export.js';
|
|
12
|
+
import { PendingBreakpointsManager } from '../session/pending-breakpoints.js';
|
|
12
13
|
import { registerSessionTools } from './session.js';
|
|
13
14
|
import { registerBreakpointTools } from './breakpoints.js';
|
|
14
15
|
import { registerExecutionTools } from './execution.js';
|
|
@@ -25,12 +26,13 @@ export function createToolsContext(sessionManager) {
|
|
|
25
26
|
configManager: new DebugConfigManager(),
|
|
26
27
|
coverageTracker: new CodeCoverageTracker(),
|
|
27
28
|
sessionExporter: new SessionExporter(),
|
|
29
|
+
pendingBreakpoints: new PendingBreakpointsManager(),
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
export function registerAllTools(server, ctx) {
|
|
31
33
|
// Core debugging tools
|
|
32
34
|
registerSessionTools(server, ctx.sessionManager);
|
|
33
|
-
registerBreakpointTools(server, ctx.sessionManager);
|
|
35
|
+
registerBreakpointTools(server, ctx.sessionManager, ctx.pendingBreakpoints);
|
|
34
36
|
registerExecutionTools(server, ctx.sessionManager);
|
|
35
37
|
registerInspectionTools(server, ctx.sessionManager);
|
|
36
38
|
// Advanced tools
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAwB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAwB,MAAM,eAAe,CAAC;AAe5E,MAAM,UAAU,kBAAkB,CAAC,cAA8B;IAC/D,OAAO;QACL,cAAc;QACd,YAAY,EAAE,IAAI,YAAY,EAAE;QAChC,eAAe,EAAE,IAAI,eAAe,EAAE;QACtC,QAAQ,EAAE,IAAI,QAAQ,EAAE;QACxB,cAAc,EAAE,IAAI,qBAAqB,EAAE;QAC3C,UAAU,EAAE,IAAI,UAAU,EAAE;QAC5B,aAAa,EAAE,IAAI,kBAAkB,EAAE;QACvC,eAAe,EAAE,IAAI,mBAAmB,EAAE;QAC1C,eAAe,EAAE,IAAI,eAAe,EAAE;QACtC,kBAAkB,EAAE,IAAI,yBAAyB,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,GAAiB;IAEjB,uBAAuB;IACvB,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACjD,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC5E,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACnD,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAEpD,iBAAiB;IACjB,qBAAqB,CAAC,MAAM,EAAE,GAA2B,CAAC,CAAC;AAC7D,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xdebug-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"mcpName": "io.github.kpanuragh/xdebug",
|
|
4
5
|
"description": "MCP server for PHP Xdebug debugging - enables AI-assisted PHP debugging through the Model Context Protocol",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "dist/index.js",
|
|
7
8
|
"bin": {
|
|
8
|
-
"xdebug-mcp": "
|
|
9
|
+
"xdebug-mcp": "dist/index.js"
|
|
9
10
|
},
|
|
10
11
|
"scripts": {
|
|
11
12
|
"build": "tsc",
|