xdebug-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +341 -0
  3. package/dist/config.d.ts +36 -0
  4. package/dist/config.js +47 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/dbgp/connection.d.ts +52 -0
  7. package/dist/dbgp/connection.js +362 -0
  8. package/dist/dbgp/connection.js.map +1 -0
  9. package/dist/dbgp/index.d.ts +3 -0
  10. package/dist/dbgp/index.js +4 -0
  11. package/dist/dbgp/index.js.map +1 -0
  12. package/dist/dbgp/server.d.ts +34 -0
  13. package/dist/dbgp/server.js +94 -0
  14. package/dist/dbgp/server.js.map +1 -0
  15. package/dist/dbgp/types.d.ts +112 -0
  16. package/dist/dbgp/types.js +28 -0
  17. package/dist/dbgp/types.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.js +93 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/session/code-coverage.d.ts +94 -0
  22. package/dist/session/code-coverage.js +226 -0
  23. package/dist/session/code-coverage.js.map +1 -0
  24. package/dist/session/debug-config.d.ts +102 -0
  25. package/dist/session/debug-config.js +194 -0
  26. package/dist/session/debug-config.js.map +1 -0
  27. package/dist/session/index.d.ts +10 -0
  28. package/dist/session/index.js +11 -0
  29. package/dist/session/index.js.map +1 -0
  30. package/dist/session/logpoint-manager.d.ts +94 -0
  31. package/dist/session/logpoint-manager.js +167 -0
  32. package/dist/session/logpoint-manager.js.map +1 -0
  33. package/dist/session/manager.d.ts +41 -0
  34. package/dist/session/manager.js +135 -0
  35. package/dist/session/manager.js.map +1 -0
  36. package/dist/session/profiler.d.ts +89 -0
  37. package/dist/session/profiler.js +191 -0
  38. package/dist/session/profiler.js.map +1 -0
  39. package/dist/session/request-context.d.ts +50 -0
  40. package/dist/session/request-context.js +182 -0
  41. package/dist/session/request-context.js.map +1 -0
  42. package/dist/session/session-export.d.ts +83 -0
  43. package/dist/session/session-export.js +320 -0
  44. package/dist/session/session-export.js.map +1 -0
  45. package/dist/session/session.d.ts +92 -0
  46. package/dist/session/session.js +369 -0
  47. package/dist/session/session.js.map +1 -0
  48. package/dist/session/step-filter.d.ts +81 -0
  49. package/dist/session/step-filter.js +174 -0
  50. package/dist/session/step-filter.js.map +1 -0
  51. package/dist/session/watch-manager.d.ts +64 -0
  52. package/dist/session/watch-manager.js +137 -0
  53. package/dist/session/watch-manager.js.map +1 -0
  54. package/dist/tools/advanced.d.ts +26 -0
  55. package/dist/tools/advanced.js +502 -0
  56. package/dist/tools/advanced.js.map +1 -0
  57. package/dist/tools/breakpoints.d.ts +6 -0
  58. package/dist/tools/breakpoints.js +308 -0
  59. package/dist/tools/breakpoints.js.map +1 -0
  60. package/dist/tools/execution.d.ts +6 -0
  61. package/dist/tools/execution.js +283 -0
  62. package/dist/tools/execution.js.map +1 -0
  63. package/dist/tools/index.d.ts +31 -0
  64. package/dist/tools/index.js +44 -0
  65. package/dist/tools/index.js.map +1 -0
  66. package/dist/tools/inspection.d.ts +7 -0
  67. package/dist/tools/inspection.js +431 -0
  68. package/dist/tools/inspection.js.map +1 -0
  69. package/dist/tools/session.d.ts +6 -0
  70. package/dist/tools/session.js +164 -0
  71. package/dist/tools/session.js.map +1 -0
  72. package/dist/utils/logger.d.ts +16 -0
  73. package/dist/utils/logger.js +47 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/dist/utils/path-mapper.d.ts +13 -0
  76. package/dist/utils/path-mapper.js +56 -0
  77. package/dist/utils/path-mapper.js.map +1 -0
  78. package/package.json +56 -0
@@ -0,0 +1,502 @@
1
+ /**
2
+ * Advanced Debugging MCP Tools
3
+ * Watch expressions, logpoints, profiling, coverage, and more.
4
+ */
5
+ import { z } from 'zod';
6
+ import { Profiler } from '../session/profiler.js';
7
+ export function registerAdvancedTools(server, ctx) {
8
+ // ============ Watch Expressions ============
9
+ server.tool('add_watch', 'Add a watch expression that will be evaluated on each break. Watch expressions persist across steps.', {
10
+ expression: z.string().describe("PHP expression to watch (e.g., '$user->id', 'count($items)')"),
11
+ }, async ({ expression }) => {
12
+ const watch = ctx.watchManager.addWatch(expression);
13
+ return {
14
+ content: [
15
+ {
16
+ type: 'text',
17
+ text: JSON.stringify({
18
+ success: true,
19
+ watch: {
20
+ id: watch.id,
21
+ expression: watch.expression,
22
+ },
23
+ }),
24
+ },
25
+ ],
26
+ };
27
+ });
28
+ server.tool('remove_watch', 'Remove a watch expression', {
29
+ watch_id: z.string().describe('Watch ID to remove'),
30
+ }, async ({ watch_id }) => {
31
+ const success = ctx.watchManager.removeWatch(watch_id);
32
+ return {
33
+ content: [
34
+ {
35
+ type: 'text',
36
+ text: JSON.stringify({ success, watch_id }),
37
+ },
38
+ ],
39
+ };
40
+ });
41
+ server.tool('evaluate_watches', 'Evaluate all watch expressions and return their current values', {
42
+ session_id: z.string().optional().describe('Session ID'),
43
+ }, async ({ session_id }) => {
44
+ const session = ctx.sessionManager.resolveSession(session_id);
45
+ if (!session) {
46
+ return {
47
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No active session' }) }],
48
+ };
49
+ }
50
+ const results = await ctx.watchManager.evaluateAll(session);
51
+ const changedWatches = results.filter((r) => r.hasChanged);
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: JSON.stringify({
57
+ watches: results.map((r) => ({
58
+ id: r.id,
59
+ expression: r.expression,
60
+ value: r.value,
61
+ hasChanged: r.hasChanged,
62
+ error: r.error,
63
+ })),
64
+ changedCount: changedWatches.length,
65
+ }, null, 2),
66
+ },
67
+ ],
68
+ };
69
+ });
70
+ server.tool('list_watches', 'List all active watch expressions', {}, async () => {
71
+ const watches = ctx.watchManager.getAllWatches();
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: JSON.stringify({
77
+ watches: watches.map((w) => ({
78
+ id: w.id,
79
+ expression: w.expression,
80
+ lastValue: w.lastValue,
81
+ hasChanged: w.hasChanged,
82
+ evaluationCount: w.evaluationCount,
83
+ })),
84
+ }, null, 2),
85
+ },
86
+ ],
87
+ };
88
+ });
89
+ // ============ Logpoints ============
90
+ server.tool('add_logpoint', 'Add a logpoint that logs messages without stopping execution. Use {varName} placeholders for variables.', {
91
+ file: z.string().describe('File path'),
92
+ line: z.number().int().describe('Line number'),
93
+ message: z.string().describe("Message template with {var} placeholders (e.g., 'User {$userId} logged in')"),
94
+ condition: z.string().optional().describe('Optional condition'),
95
+ }, async ({ file, line, message, condition }) => {
96
+ const logpoint = ctx.logpointManager.createLogpoint(file, line, message, condition);
97
+ return {
98
+ content: [
99
+ {
100
+ type: 'text',
101
+ text: JSON.stringify({
102
+ success: true,
103
+ logpoint: {
104
+ id: logpoint.id,
105
+ file,
106
+ line,
107
+ message,
108
+ condition,
109
+ },
110
+ }),
111
+ },
112
+ ],
113
+ };
114
+ });
115
+ server.tool('remove_logpoint', 'Remove a logpoint', {
116
+ logpoint_id: z.string().describe('Logpoint ID'),
117
+ }, async ({ logpoint_id }) => {
118
+ const success = ctx.logpointManager.removeLogpoint(logpoint_id);
119
+ return {
120
+ content: [{ type: 'text', text: JSON.stringify({ success, logpoint_id }) }],
121
+ };
122
+ });
123
+ server.tool('get_logpoint_history', 'Get the log output history from logpoints', {
124
+ logpoint_id: z.string().optional().describe('Specific logpoint ID (all if not specified)'),
125
+ limit: z.number().int().default(50).describe('Maximum entries to return'),
126
+ }, async ({ logpoint_id, limit }) => {
127
+ if (logpoint_id) {
128
+ const history = ctx.logpointManager.getLogHistory(logpoint_id, limit);
129
+ return {
130
+ content: [{ type: 'text', text: JSON.stringify({ logpoint_id, history }, null, 2) }],
131
+ };
132
+ }
133
+ const stats = ctx.logpointManager.getStatistics();
134
+ return {
135
+ content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],
136
+ };
137
+ });
138
+ // ============ Profiling ============
139
+ server.tool('start_profiling', 'Start profiling to track memory usage and execution time', {}, async () => {
140
+ const session = ctx.profiler.startSession();
141
+ return {
142
+ content: [
143
+ {
144
+ type: 'text',
145
+ text: JSON.stringify({
146
+ success: true,
147
+ sessionId: session.id,
148
+ message: 'Profiling started. Use step commands to collect data.',
149
+ }),
150
+ },
151
+ ],
152
+ };
153
+ });
154
+ server.tool('stop_profiling', 'Stop profiling and get the results', {}, async () => {
155
+ const session = ctx.profiler.endSession();
156
+ if (!session) {
157
+ return {
158
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No active profiling session' }) }],
159
+ };
160
+ }
161
+ const stats = ctx.profiler.getStatistics();
162
+ return {
163
+ content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],
164
+ };
165
+ });
166
+ server.tool('get_profile_stats', 'Get current profiling statistics', {}, async () => {
167
+ const stats = ctx.profiler.getStatistics();
168
+ if (!stats) {
169
+ return {
170
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No profiling data. Start profiling first.' }) }],
171
+ };
172
+ }
173
+ return {
174
+ content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],
175
+ };
176
+ });
177
+ server.tool('get_memory_timeline', 'Get memory usage timeline from profiling', {}, async () => {
178
+ const timeline = ctx.profiler.getMemoryTimeline();
179
+ return {
180
+ content: [
181
+ {
182
+ type: 'text',
183
+ text: JSON.stringify({
184
+ timeline: timeline.map((t) => ({
185
+ timestamp: t.timestamp,
186
+ usage: Profiler.formatBytes(t.usage),
187
+ peak: Profiler.formatBytes(t.peak),
188
+ })),
189
+ }, null, 2),
190
+ },
191
+ ],
192
+ };
193
+ });
194
+ // ============ Request Context ============
195
+ server.tool('capture_request_context', 'Capture the current HTTP request context ($_GET, $_POST, $_SESSION, $_COOKIE, headers)', {
196
+ session_id: z.string().optional().describe('Session ID'),
197
+ }, async ({ session_id }) => {
198
+ const session = ctx.sessionManager.resolveSession(session_id);
199
+ if (!session) {
200
+ return {
201
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No active session' }) }],
202
+ };
203
+ }
204
+ try {
205
+ const context = await ctx.requestCapture.capture(session);
206
+ const summary = ctx.requestCapture.getSummary(context);
207
+ return {
208
+ content: [
209
+ {
210
+ type: 'text',
211
+ text: JSON.stringify({
212
+ summary,
213
+ headers: context.headers,
214
+ get: context.get,
215
+ post: context.post,
216
+ cookies: context.cookie,
217
+ session: context.session,
218
+ requestBody: context.requestBody,
219
+ }, null, 2),
220
+ },
221
+ ],
222
+ };
223
+ }
224
+ catch (error) {
225
+ return {
226
+ content: [
227
+ {
228
+ type: 'text',
229
+ text: JSON.stringify({
230
+ error: 'Failed to capture request context',
231
+ message: error instanceof Error ? error.message : String(error),
232
+ }),
233
+ },
234
+ ],
235
+ };
236
+ }
237
+ });
238
+ // ============ Step Filters ============
239
+ server.tool('add_step_filter', 'Add a step filter to skip certain files/directories during stepping (e.g., vendor code)', {
240
+ pattern: z.string().describe("Pattern to match (e.g., '/vendor/', '*.min.js', '/regex/')"),
241
+ type: z.enum(['include', 'exclude']).describe('include = step into, exclude = skip'),
242
+ description: z.string().optional().describe('Description of the filter'),
243
+ }, async ({ pattern, type, description }) => {
244
+ const rule = ctx.stepFilter.addRule(pattern, type, description);
245
+ return {
246
+ content: [{ type: 'text', text: JSON.stringify({ success: true, rule }) }],
247
+ };
248
+ });
249
+ server.tool('list_step_filters', 'List all step filter rules', {}, async () => {
250
+ const rules = ctx.stepFilter.getAllRules();
251
+ return {
252
+ content: [{ type: 'text', text: JSON.stringify({ rules }, null, 2) }],
253
+ };
254
+ });
255
+ server.tool('get_function_history', 'Get the history of function calls made during debugging', {
256
+ limit: z.number().int().default(50).describe('Maximum entries'),
257
+ search: z.string().optional().describe('Search query to filter'),
258
+ }, async ({ limit, search }) => {
259
+ let history = search
260
+ ? ctx.stepFilter.searchHistory(search)
261
+ : ctx.stepFilter.getFunctionHistory(limit);
262
+ if (limit && history.length > limit) {
263
+ history = history.slice(-limit);
264
+ }
265
+ const stats = ctx.stepFilter.getCallStatistics();
266
+ const topCalls = Array.from(stats.entries())
267
+ .sort((a, b) => b[1].count - a[1].count)
268
+ .slice(0, 10);
269
+ return {
270
+ content: [
271
+ {
272
+ type: 'text',
273
+ text: JSON.stringify({
274
+ history,
275
+ topFunctions: topCalls.map(([name, stat]) => ({
276
+ name,
277
+ count: stat.count,
278
+ lastCall: stat.lastCall,
279
+ })),
280
+ }, null, 2),
281
+ },
282
+ ],
283
+ };
284
+ });
285
+ // ============ Code Coverage ============
286
+ server.tool('start_coverage', 'Start tracking code coverage during debugging', {}, async () => {
287
+ const report = ctx.coverageTracker.startTracking();
288
+ return {
289
+ content: [
290
+ {
291
+ type: 'text',
292
+ text: JSON.stringify({
293
+ success: true,
294
+ message: 'Code coverage tracking started',
295
+ }),
296
+ },
297
+ ],
298
+ };
299
+ });
300
+ server.tool('stop_coverage', 'Stop tracking code coverage and get the report', {}, async () => {
301
+ ctx.coverageTracker.stopTracking();
302
+ const summary = ctx.coverageTracker.getSummary();
303
+ const report = ctx.coverageTracker.generateReport();
304
+ return {
305
+ content: [
306
+ {
307
+ type: 'text',
308
+ text: JSON.stringify({ summary, report }, null, 2),
309
+ },
310
+ ],
311
+ };
312
+ });
313
+ server.tool('get_coverage_report', 'Get the current code coverage report', {}, async () => {
314
+ const summary = ctx.coverageTracker.getSummary();
315
+ const hotSpots = ctx.coverageTracker.getHotSpots(10);
316
+ return {
317
+ content: [
318
+ {
319
+ type: 'text',
320
+ text: JSON.stringify({ summary, hotSpots }, null, 2),
321
+ },
322
+ ],
323
+ };
324
+ });
325
+ // ============ Debug Profiles ============
326
+ server.tool('save_debug_profile', 'Save the current debug configuration (breakpoints, watches, filters) as a named profile', {
327
+ name: z.string().describe('Profile name'),
328
+ description: z.string().optional().describe('Profile description'),
329
+ }, async ({ name, description }) => {
330
+ const session = ctx.sessionManager.getActiveSession();
331
+ // Create profile with current settings
332
+ const profile = ctx.configManager.createProfile(name, description);
333
+ // Add current breakpoints
334
+ if (session) {
335
+ const breakpoints = await session.listBreakpoints();
336
+ profile.breakpoints = breakpoints.map((bp) => ({
337
+ file: bp.filename || '',
338
+ line: bp.lineno || 0,
339
+ condition: bp.expression,
340
+ enabled: bp.state === 'enabled',
341
+ }));
342
+ }
343
+ // Add watches
344
+ profile.watchExpressions = ctx.watchManager.getAllWatches().map((w) => w.expression);
345
+ // Add step filters
346
+ profile.stepFilters = ctx.stepFilter.getAllRules().map((r) => ({
347
+ pattern: r.pattern,
348
+ type: r.type,
349
+ enabled: r.enabled,
350
+ }));
351
+ // Add logpoints
352
+ profile.logpoints = ctx.logpointManager.getAllLogpoints().map((lp) => ({
353
+ file: lp.file,
354
+ line: lp.line,
355
+ message: lp.message,
356
+ condition: lp.condition,
357
+ }));
358
+ await ctx.configManager.saveAllProfiles();
359
+ return {
360
+ content: [
361
+ {
362
+ type: 'text',
363
+ text: JSON.stringify({
364
+ success: true,
365
+ profile: {
366
+ name: profile.name,
367
+ breakpoints: profile.breakpoints.length,
368
+ watches: profile.watchExpressions.length,
369
+ filters: profile.stepFilters.length,
370
+ logpoints: profile.logpoints.length,
371
+ },
372
+ }),
373
+ },
374
+ ],
375
+ };
376
+ });
377
+ server.tool('load_debug_profile', 'Load a saved debug profile', {
378
+ name: z.string().describe('Profile name to load'),
379
+ }, async ({ name }) => {
380
+ const profile = ctx.configManager.getProfile(name);
381
+ if (!profile) {
382
+ return {
383
+ content: [{ type: 'text', text: JSON.stringify({ error: `Profile not found: ${name}` }) }],
384
+ };
385
+ }
386
+ // Clear current settings
387
+ ctx.watchManager.clearAllWatches();
388
+ // Load watches
389
+ for (const expr of profile.watchExpressions) {
390
+ ctx.watchManager.addWatch(expr);
391
+ }
392
+ // Load step filters
393
+ ctx.stepFilter.importConfig(profile.stepFilters);
394
+ // Load logpoints
395
+ for (const lp of profile.logpoints) {
396
+ ctx.logpointManager.createLogpoint(lp.file, lp.line, lp.message, lp.condition);
397
+ }
398
+ ctx.configManager.setActiveProfile(name);
399
+ return {
400
+ content: [
401
+ {
402
+ type: 'text',
403
+ text: JSON.stringify({
404
+ success: true,
405
+ loaded: {
406
+ name: profile.name,
407
+ breakpoints: profile.breakpoints.length,
408
+ watches: profile.watchExpressions.length,
409
+ filters: profile.stepFilters.length,
410
+ logpoints: profile.logpoints.length,
411
+ },
412
+ note: 'Breakpoints need to be set manually using set_breakpoint for each entry',
413
+ }),
414
+ },
415
+ ],
416
+ };
417
+ });
418
+ server.tool('list_debug_profiles', 'List all saved debug profiles', {}, async () => {
419
+ await ctx.configManager.loadProfiles();
420
+ const profiles = ctx.configManager.getAllProfiles();
421
+ const activeProfile = ctx.configManager.getActiveProfile();
422
+ return {
423
+ content: [
424
+ {
425
+ type: 'text',
426
+ text: JSON.stringify({
427
+ activeProfile: activeProfile?.name || null,
428
+ profiles: profiles.map((p) => ({
429
+ name: p.name,
430
+ description: p.description,
431
+ breakpoints: p.breakpoints.length,
432
+ watches: p.watchExpressions.length,
433
+ createdAt: p.createdAt,
434
+ updatedAt: p.updatedAt,
435
+ })),
436
+ }, null, 2),
437
+ },
438
+ ],
439
+ };
440
+ });
441
+ // ============ Export ============
442
+ server.tool('export_session', 'Export the current debug session as a report', {
443
+ format: z.enum(['json', 'html']).default('json').describe('Export format'),
444
+ session_id: z.string().optional().describe('Session ID'),
445
+ }, async ({ format, session_id }) => {
446
+ const session = ctx.sessionManager.resolveSession(session_id);
447
+ if (!session) {
448
+ return {
449
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No active session' }) }],
450
+ };
451
+ }
452
+ // Capture final snapshot
453
+ const watchResults = await ctx.watchManager.evaluateAll(session);
454
+ await ctx.sessionExporter.captureSnapshot(session, {
455
+ watchValues: watchResults,
456
+ });
457
+ const exported = format === 'html'
458
+ ? ctx.sessionExporter.exportAsHtml(session)
459
+ : ctx.sessionExporter.exportAsJson(session);
460
+ return {
461
+ content: [
462
+ {
463
+ type: 'text',
464
+ text: format === 'html'
465
+ ? JSON.stringify({
466
+ format: 'html',
467
+ content: exported,
468
+ note: 'Save this content to a .html file to view the report',
469
+ })
470
+ : exported,
471
+ },
472
+ ],
473
+ };
474
+ });
475
+ server.tool('capture_snapshot', 'Capture a snapshot of the current debug state for the export report', {
476
+ session_id: z.string().optional().describe('Session ID'),
477
+ }, async ({ session_id }) => {
478
+ const session = ctx.sessionManager.resolveSession(session_id);
479
+ if (!session) {
480
+ return {
481
+ content: [{ type: 'text', text: JSON.stringify({ error: 'No active session' }) }],
482
+ };
483
+ }
484
+ const watchResults = await ctx.watchManager.evaluateAll(session);
485
+ const snapshot = await ctx.sessionExporter.captureSnapshot(session, {
486
+ watchValues: watchResults,
487
+ });
488
+ return {
489
+ content: [
490
+ {
491
+ type: 'text',
492
+ text: JSON.stringify({
493
+ success: true,
494
+ snapshotCount: ctx.sessionExporter.snapshotCount,
495
+ currentState: snapshot.state,
496
+ }),
497
+ },
498
+ ],
499
+ };
500
+ });
501
+ }
502
+ //# sourceMappingURL=advanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../src/tools/advanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Breakpoint MCP Tools
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { SessionManager } from '../session/manager.js';
6
+ export declare function registerBreakpointTools(server: McpServer, sessionManager: SessionManager): void;