{"_id":"@ahmedshaikh/flight-recorder-mcp","_rev":"8-a24cd581d873d90c30de0dea3076d265","name":"@ahmedshaikh/flight-recorder-mcp","dist-tags":{"latest":"0.4.2"},"versions":{"0.1.0":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.1.0","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"8a5b1981dec6e032ff2216998cb27002d13d7d41","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.1.0.tgz","fileCount":9,"integrity":"sha512-NtJ8TN5QCUiaPjtmrp24/AkjDOutW5nVDyMvksAEz+9onxVtnxcJ5L3K3VD9Lfn2w+AsFdEUYQVEII/XqinF+A==","signatures":[{"sig":"MEUCIQCCfbAfNLfiPUlrr3bIkQFxUI2055LNQ4NpiE5hEF2jiQIgPlFJqmRnpDPeRwMcqcOUqFCuKQMfw26ONy8F9Ud9vIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62019},"type":"module","engines":{"node":">=22"},"gitHead":"73de63faa6ba43f59f050b33dd7dce1f90dc0c24","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.1.0_1783032262914_0.4675657961424111","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.1.1","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"9d8e93f2def9b7eb4ec213ea7d509b729047845c","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.1.1.tgz","fileCount":9,"integrity":"sha512-SEe2s566tdjRBp5/b9roSESgCF23XYM8s6HWhvDPVqPab7v+kKP1TcsdwX0JYc0dcAabTJ9JxS+qpTY1Ph0R5g==","signatures":[{"sig":"MEYCIQDmD4X5BZnkif4I7jIoLohdxYR1tyxPSZlX9UyCPPzXqgIhAKE69s4WBefNedUVQA+og/hpG9OSmcW5dg5PCt/HWXoY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62361},"type":"module","engines":{"node":">=22"},"gitHead":"ae0b77b8b0881bc6090819245058da3467c730a7","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.1.1_1783034082268_0.30720897995575847","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.1.2","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"79692069442c5a956a059f946cd48a851d222e28","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.1.2.tgz","fileCount":9,"integrity":"sha512-9rDhLCfULbEWAuu6LtPXYv/OzDE2RAend6aupTKBH/9T62xS53RBztE7mx54KgqvuKlSYVbWv0hEmsd+wjymww==","signatures":[{"sig":"MEYCIQCuGX10Ez1mmPzxQokkD5a+LJK0cevjOOqtHpKT2JaKbAIhAKddxwljZ/hdcA8NkNncmNEnayzi8Xb6VIjgWtlx9yhW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62426},"type":"module","engines":{"node":">=22"},"gitHead":"5c7da0cc1029d4c817dfb0d22bd5f54451850af4","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.1.2_1783034210137_0.08503804723374997","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.2.0","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"582aee4c45f995c276daf956e05e4982facf171c","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.2.0.tgz","fileCount":9,"integrity":"sha512-Sr1fFTReQ43AmeMd93iHFMwJNKkfzvmNyARTFF3fVueXxtRpMgdNy+jDiYkKV/ypwVpqtd/37bru/PxdgPrpag==","signatures":[{"sig":"MEUCIQDbqELCWLs5Idamrp1kHGiUIDZQeEHG/kQkHPsiHqPSuwIgUKCKVybzVzkvqPrMrjAMDh5JiMkeAQybFF2Ep3EAEEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64078},"type":"module","engines":{"node":">=22"},"gitHead":"076ab39f167dcee53d2a381dc1156e6d90e37ab3","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.2.0_1783035124250_0.45896280009458446","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.3.0","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.3.0","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"5857abd2555e6d12d2c1fa10f222e4d8f0db7ce0","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.3.0.tgz","fileCount":9,"integrity":"sha512-+gR7vAGenv1vCLVWD8n79R7pyCVEqQO6c9U5qCOouM4nApIL4Zsky3DgjT5c6q/jWpTY8grgUgOPt5hOvRQ22w==","signatures":[{"sig":"MEQCIHNFkbz3UnUA3psCCo/Bn53vJkiWLLbV4xyKMNr7M/jxAiA9IHaEBTKcUEXyIrMvyrlgZ15pXGhYK2dqu8KjBGQtJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70023},"type":"module","engines":{"node":">=22"},"gitHead":"543e5b57d89a47e1ccd4e87f2556e570ebfb37f0","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.3.0_1783036755896_0.9015123092967461","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.4.0","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.4.0","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"9eb86cef3cf2ea3c302c5e258527609187dff428","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.4.0.tgz","fileCount":10,"integrity":"sha512-gb5WaD9nSc8xWSq3yUdQvcP2j5Uah3Pr3hc8mLIkbAuNSwfRlj94KG0Hw29I0jHPjaOZWPkj84pF8CuXLM+bgg==","signatures":[{"sig":"MEUCIQCaIN/AfRn8pVU9v9yA2IxvhusWshGyEIB0ZZnNC3yuwgIgHgM4GKstirhUiDXsjaSAtmqJPx4p+5KtAEY/vChPVBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81132},"type":"module","engines":{"node":">=22"},"gitHead":"53c559b725faec09e6d40ccc33bcd91682f86cde","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.4.0_1783037406771_0.27184293997330333","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.4.1","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"author":{"name":"ahmedshaikh"},"license":"MIT","_id":"@ahmedshaikh/flight-recorder-mcp@0.4.1","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"bin":{"flight-recorder":"dist/server.js"},"dist":{"shasum":"6602dc00b0999d0ee1901425a5ad7cfadd36f2b1","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.4.1.tgz","fileCount":10,"integrity":"sha512-gw5b14WGRcoObM4KT1mDSLcakf/JvMVZTxpRe0C4hhKNzVqutjWF7v9hBCklpaJ+uSKErjjgRRtLDdy9iPYPMw==","signatures":[{"sig":"MEQCIB9s2KP/vzsHAIwx7p8OpbeiVzqPg8wtBsDWvwV+q9qOAiADh9GJ1HyzKxHrgghbZHVRKwVo/92oPHtERsYvONPomQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83749},"type":"module","engines":{"node":">=22"},"gitHead":"e2edc0eb64e4060a4cf049f9eee880125dc36c03","scripts":{"test":"node --import tsx --test --test-force-exit test/*.test.ts","build":"tsc","serve":"tsx src/server.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"repository":{"url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","typescript":"^5.4.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/flight-recorder-mcp_0.4.1_1783038175331_0.8942365569720399","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@ahmedshaikh/flight-recorder-mcp","version":"0.4.2","type":"module","description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","bin":{"flight-recorder":"dist/server.js"},"engines":{"node":">=22"},"scripts":{"serve":"tsx src/server.ts","build":"tsc","test":"node --import tsx --test --test-force-exit test/*.test.ts","prepublishOnly":"npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","zod":"^3.23.8"},"devDependencies":{"@types/node":"^24.0.0","tsx":"^4.7.0","typescript":"^5.4.0"},"license":"MIT","author":{"name":"ahmedshaikh"},"keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"repository":{"type":"git","url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git"},"homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"publishConfig":{"access":"public"},"gitHead":"4df494f1d6cc35220f9349c365c0143213c49623","_id":"@ahmedshaikh/flight-recorder-mcp@0.4.2","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-VFZ2UhrRFM4pblTtTv8w/hYSbHnMe87dKMPkK/Ncpiv1qfGzrIO9qrSJJhVqTDFeJA+RaPC0MLAFPchVB7ve8g==","shasum":"6650bcb006f643b27995595c883a25ae5eb81f6f","tarball":"https://registry.npmjs.org/@ahmedshaikh/flight-recorder-mcp/-/flight-recorder-mcp-0.4.2.tgz","fileCount":10,"unpackedSize":85020,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC2+43G0rbHJAYOd1BJGY6d3RjZOYG0gcxhrYCzxF/kMAIgWkD/uBiydr3Md6Ewu2jMj8PI3EoD2FaqImvoqsZ2n60="}]},"_npmUser":{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"},"directories":{},"maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flight-recorder-mcp_0.4.2_1783305222746_0.7251935933909159"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-02T22:44:22.713Z","modified":"2026-07-06T02:33:43.018Z","0.1.0":"2026-07-02T22:44:23.077Z","0.1.1":"2026-07-02T23:14:42.414Z","0.1.2":"2026-07-02T23:16:50.262Z","0.2.0":"2026-07-02T23:32:04.382Z","0.3.0":"2026-07-02T23:59:16.032Z","0.4.0":"2026-07-03T00:10:07.026Z","0.4.1":"2026-07-03T00:22:55.502Z","0.4.2":"2026-07-06T02:33:42.895Z"},"bugs":{"url":"https://github.com/RaziStuff/flight-recorder-mcp/issues"},"author":{"name":"ahmedshaikh"},"license":"MIT","homepage":"https://github.com/RaziStuff/flight-recorder-mcp#readme","keywords":["mcp","model-context-protocol","claude","agent","ai","tracing","debugger","time-travel","execution-trace","flight-recorder"],"repository":{"type":"git","url":"git+https://github.com/RaziStuff/flight-recorder-mcp.git"},"description":"Execution tracer as an MCP server — record a Python/Node run once (calls, args, returns, exceptions, line probes), then query the recording instead of printf-debugging and rerunning.","maintainers":[{"name":"ahmedshaikh","email":"ahmed@shaikh1.com"}],"readme":"# flight-recorder-mcp\n\n**Execution tracer as an MCP server — record a run once, then query it like a database.**\n\nAgents debug by printf-looping: add a print, rerun, read output, add another print, rerun.\nFive to ten full cycles to answer one question like *\"what was `user_id` the third time\nthrough that loop?\"*\n\nflight-recorder replaces the loop with one recording. `trace_run` executes a Python or\nNode command under instrumentation and stores every event in SQLite. After that, every\nquestion is a query — no reruns, no code edits:\n\n| question | tool |\n| --- | --- |\n| what was this function actually called with, and what did it return? | `trace_calls` |\n| who called whom, in what order, with what values? | `trace_tree` |\n| what was every variable when it crashed? | `trace_exception` |\n| what was `total` on each loop iteration? | `trace_values` (via probes) |\n| where did the string `\"abc123\"` appear during the run? | `trace_search` |\n| what changed between the passing and the failing run? | `trace_diff` |\n\n## What gets recorded\n\n**Python** (3.8+ — no dependencies, no code changes; on 3.12+ a `sys.monitoring`\n(PEP 669) backend is used, falling back to `sys.settrace` on older interpreters):\n\n- every call with argument values (`repr`, truncated)\n- every return with the return value and duration\n- every exception with its propagation path through frames (including caught ones)\n- on an uncaught crash: local variables of every frame in the traceback\n- probe lines: all (or selected) locals captured each time a `file:line` executes\n\n**Node** (>= 22, driven over the Chrome DevTools Protocol via `--inspect-brk`):\n\n- uncaught exceptions / unhandled rejections: per-frame variables at the moment of the\n  throw (local, block, closure, and script scopes)\n- every exception thrown in user code (even later caught), with throw-site variables\n- probe lines as above\n- full call tracing for Node is on the roadmap; crash forensics and probes are the\n  high-value 90%\n\nOnly your code is traced by default — stdlib and site-packages are excluded unless\n`include_deps: true`.\n\n## Example\n\n```\ntrace_run  command=\"python3 app.py\" probes=[{\"file\": \"app.py\", \"line\": 20, \"vars\": [\"total\"]}]\n→ trace #7 — python3 app.py (python, exit 1, 342ms, 1204 events)\n  UNCAUGHT KeyError: 'quantiy'\n    path: <module> (app.py:39) → main (app.py:36)\n  top functions: parse ×50 [12.3ms] · validate ×50 · main ×1\n  probes: 3 hit(s) — trace_values trace_id=7 to inspect\n\ntrace_exception  trace_id=7\n→ UNCAUGHT KeyError: 'quantiy'\n    at main (app.py:36)\n       locals: missing={'sku': 'zzz'}  total=9  items=[{'sku': 'abc', 'qty': 2}, …]\n\ntrace_values  trace_id=7 file=app.py line=20\n→ 3 probe hit(s): total=0 · total=2 · total=5\n\ntrace_diff  trace_a=6 trace_b=7          # passing run vs failing run\n→ outcome changes: transform: never raised in A · raised ×2 in B\n  call-count changes: transform A×3 B×6\n  exceptions only in B: ValueError at transform (diffy.py:6) ×2 — too big: 4\n  first value divergence: call position 3, pipeline: A (nums=[0, 1, 2]) · B (nums=[0, 1, 2, 3, 4, 5])\n```\n\n## Tools\n\n| tool | purpose |\n| --- | --- |\n| `trace_run` | run a python/node command under the tracer, get a trace id |\n| `trace_calls` | every invocation of a function: args → return/exception, duration |\n| `trace_tree` | the call tree with args and returns inline; re-rootable |\n| `trace_exception` | crash post-mortem: per-frame locals + propagation chains |\n| `trace_values` | variable values at a probed line, across all hits |\n| `trace_search` | substring search over all recorded events and values |\n| `trace_diff` | compare two traces: outcome flips, call-count changes, new exceptions, first value/return/structural divergence, probe diffs |\n| `trace_list` / `trace_delete` | manage recordings (auto-prunes to last 20) |\n\n## Install\n\n```jsonc\n// .mcp.json\n{\n  \"mcpServers\": {\n    \"flight-recorder\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@ahmedshaikh/flight-recorder-mcp\"]\n    }\n  }\n}\n```\n\nTraces are stored in `~/.flight-recorder/traces.db` (override with `FLIGHT_RECORDER_DB`).\nRuns are capped at 200k events and 120s by default (`max_events`, `timeout_s`).\n\n## Tracing test runs\n\n`trace_run` accepts `python -m` module commands, and bare `pytest …` is rewritten to\n`python3 -m pytest …`. Tracing a failing test shows what the code under test was\nactually called with — `trace_calls func=average` might show\n`average(nums=[2, 4, 6]) → 4.0` next to `average(nums=[]) ⚡ ZeroDivisionError`.\nIn module mode, code under the run's `cwd` is traced; the test runner's own\ninternals are not (unless `include_deps`).\n\n## Limits\n\n- node entry point must be a script path (`node -e` is not supported)\n- Python values are captured as truncated `repr` strings, not live objects\n- generators/coroutines record one call segment per resume\n- overhead: on Python 3.12+ untraced code (test runners, stdlib, deps) is ~free\n  (~4% measured on a stdlib-heavy workload, vs ~80% for the settrace fallback);\n  fully-traced hot code is serialization-bound at roughly 2–10× either way —\n  cap or exclude accordingly\n- interpreter internals (stdlib/site-packages) are excluded even when a venv\n  lives inside the project directory, unless `include_deps`\n- child processes spawned by the traced program are not traced\n  (`multiprocessing`, `subprocess`, pytest-xdist workers)\n- traced values (arguments, returns, locals) are stored as plaintext in the\n  trace database — if traced code handles secrets, they end up in\n  `~/.flight-recorder/traces.db`; use `trace_delete all=true` to purge\n- on timeout the run gets SIGTERM (flushing events recorded so far) and a\n  SIGKILL two seconds later; the partial trace is kept with status `timeout`\n\n## Development\n\n```\nnpm install\nnpm test        # node:test; python tests need python3 on PATH\nnpm run build\n```\n\nMIT\n","readmeFilename":"README.md"}