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 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -8,3 +8,4 @@ export * from './step-filter.js';
8
8
  export * from './debug-config.js';
9
9
  export * from './code-coverage.js';
10
10
  export * from './session-export.js';
11
+ export * from './pending-breakpoints.js';
@@ -8,4 +8,5 @@ export * from './step-filter.js';
8
8
  export * from './debug-config.js';
9
9
  export * from './code-coverage.js';
10
10
  export * from './session-export.js';
11
+ export * from './pending-breakpoints.js';
11
12
  //# sourceMappingURL=index.js.map
@@ -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
- export declare function registerBreakpointTools(server: McpServer, sessionManager: SessionManager): void;
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
- error: 'No active debug session',
38
- message: 'Start a PHP script with Xdebug enabled to create a debug session first.',
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({ error: 'No active debug session' }),
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({ error: 'No active debug session' }),
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 in the current debug session', {
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
- }, async ({ session_id }) => {
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({ error: 'No active debug session' }),
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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"}
@@ -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;
@@ -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
@@ -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;AAc5E,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;KACvC,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,CAAC,CAAC;IACpD,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"}
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.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": "./dist/index.js"
9
+ "xdebug-mcp": "dist/index.js"
9
10
  },
10
11
  "scripts": {
11
12
  "build": "tsc",