{"name":"io.github.Klievan/jlink-mcp","slug":"klievan-jlink-mcp","title":"J-Link MCP","description":"Debug embedded firmware on real hardware: J-Link probes, Cortex-M faults, RTT logs, GDB.","url":"https://mcp.market/server/klievan-jlink-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":46,"stars":40,"forks":6,"downloads_week":403,"last_push_at":"2026-10-26T11:28:00.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Klievan/jlink-mcp","website":"https://github.com/Klievan/jlink-mcp","version":"0.8.0","remotes":[],"packages":[{"registryType":"npm","identifier":"jlink-mcp","version":"0.8.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Target device name, exactly as J-Link spells it (e.g. nRF52840_XXAA, STM32F407VG). Use the search_devices tool to find it.","isRequired":true,"name":"JLINK_DEVICE"},{"description":"Serial number of a specific probe, when more than one is attached.","name":"JLINK_SERIAL"},{"description":"CMSIS-SVD file for the target. Without it, peripheral reads are undecoded hex.","name":"SVD_PATH"},{"description":"Address of the firmware's _SEGGER_RTT symbol. Lets RTT survive a reset or flash.","name":"JLINK_RTT_ADDR"}]}],"tools":[{"name":"check_setup","description":"Check that everything needed to debug is in place: the probe software, a connected probe, a target","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_breakpoints","description":"Clear all breakpoints, including any left armed in the debug hardware by an earlier session","write_action":false,"price_micros":0,"input_schema":null},{"name":"decode_register","description":"Decode a value into named bit fields using the target's SVD. Reads from the device unless a value is supplied — useful for interpreting a number you already have.","write_action":false,"price_micros":0,"input_schema":null},{"name":"device_info","description":"Halt the target and read its registers via …. Returns the probe name and a compact register summary. Leaves the target HALTED — call resume when you are done.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_crash","description":"Auto-read and decode ARM Cortex-M fault registers (CFSR, HFSR, MMFAR, BFAR), exception stack frame, and recent errors.","write_action":false,"price_micros":0,"input_schema":null},{"name":"erase","description":"Erase target flash memory","write_action":false,"price_micros":0,"input_schema":null},{"name":"flash","description":"Flash firmware to the target device","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_backtrace","description":"Get a stack backtrace. With debug symbols loaded, shows function names, file paths, and line numbers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_command","description":"Send any GDB command and get the response. For execution commands (continue, step, next, finish, until), blocks until the target stops or times out. If the target doesn't stop, use gdb_wait to poll. Examples: 'bt' (backtrace), 'info threads', 'print myVar', 'break main', 'continue', 'next', 'step', 'finish', 'info registers', 'x/10xw 0x20000000'","write_action":true,"price_micros":0,"input_schema":null},{"name":"gdb_connect","description":"Connect a GDB client to the running GDB server. Enables source-level debugging: backtraces, variable inspection, conditional breakpoints, stepping by source line. Optionally load an ELF file for symbol info.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_disconnect","description":"Disconnect the GDB client (does not stop the GDB server)","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_load","description":"Load an ELF file into GDB. By default loads symbols only (for source-level debugging: backtraces with file:line, variable names). Set flash=true to also program it onto the target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_server_start","description":"Start … GDB server","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_server_status","description":"Get GDB server, RTT, and telnet proxy status","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_server_stop","description":"Stop … GDB server and disconnect RTT","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdb_wait","description":"Poll for target stop after a continue/step that timed out. Returns the stop reason (breakpoint hit, signal, finished stepping, etc.) when the target halts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_config","description":"Get current probe and server configuration","write_action":false,"price_micros":0,"input_schema":null},{"name":"halt","description":"Halt the target CPU","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_devices","description":"Scan for connected PROBES — the debuggers plugged into this machine, not target chips. Despite the name it does not list target devices; use search_devices for those. Shows probe serial numbers and whether one is reachable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_peripherals","description":"List the target's peripherals and base addresses, from its CMSIS-SVD description. Requires an SVD file to be configured.","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_command","description":"Execute raw … commands","write_action":true,"price_micros":0,"input_schema":null},{"name":"read_memory","description":"Read memory from the target. Returns clean hex dump.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_peripheral","description":"Read every register of a peripheral from the target and decode each one's bit fields by name. This is read_memory plus the meaning of what was read.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_register","description":"Read a specific CPU register by name","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_registers","description":"Read all CPU registers (compact format, FP only if non-zero).","write_action":false,"price_micros":0,"input_schema":null},{"name":"reset","description":"Reset the target device. Halting leaves the core stopped at the reset vector,","write_action":false,"price_micros":0,"input_schema":null},{"name":"resume","description":"Resume the target CPU","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_clear","description":"Clear RTT buffer","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_connect","description":"Connect to RTT…","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_disconnect","description":"Disconnect from RTT","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_read","description":"Read RTT log lines (clean, parsed Zephyr format). Non-destructive — reading does not consume","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_search","description":"Search/filter RTT logs by level, module, or regex","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtt_send","description":"Send data to device via RTT down-channel","write_action":true,"price_micros":0,"input_schema":null},{"name":"rtt_status","description":"Read SEGGER's RTT control block on the target: is it initialised, how much has the firmware","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_devices","description":"Search the device names this J-Link installation accepts, by part number, manufacturer, or core.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_breakpoint","description":"Set a hardware breakpoint","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_device","description":"Set the target device name at runtime. Required before any debugging commands will work.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_rtt_address","description":"Tell the server where the firmware's RTT control block is (its _SEGGER_RTT symbol), at runtime.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_serial_number","description":"Set the debug probe serial number at runtime. Required when multiple probes are connected to select which one to communicate with. Run list_devices to see connected serial numbers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_svd_path","description":"Point the server at a CMSIS-SVD file for the target at runtime, so peripheral reads come back","write_action":false,"price_micros":0,"input_schema":null},{"name":"snapshot","description":"Capture complete device state: CPU registers (compact), fault status, recent RTT output, and stack dump.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_debug_session","description":"One-call setup: starts GDB server via …, connects RTT (if supported), waits for initial output. This is the recommended first tool to call. If no device is configured, use list_devices and set_device first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"step","description":"Step one CPU instruction","write_action":false,"price_micros":0,"input_schema":null},{"name":"telnet_proxy_read","description":"Read raw data from telnet proxy buffer","write_action":false,"price_micros":0,"input_schema":null},{"name":"telnet_proxy_start","description":"Start a TCP relay that re-serves the RTT stream on another port, so an external decoder (Trice, Pigweed, or your own) can consume it alongside this server. It relays bytes; it does not decode them.","write_action":false,"price_micros":0,"input_schema":null},{"name":"telnet_proxy_status","description":"Get telnet proxy status","write_action":false,"price_micros":0,"input_schema":null},{"name":"telnet_proxy_stop","description":"Stop telnet proxy","write_action":false,"price_micros":0,"input_schema":null},{"name":"write_memory","description":"Write a 32-bit value to memory","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-10-30T18:16:51.054Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-30T18:16:50.987Z","components":{"code":{"score":20,"max":25,"notes":["45 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"out/mcp/standalone.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"jlink-mcp","version":"0.8.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-10-26T11:07:45.198Z","repositoryUrl":"git+https://github.com/Klievan/jlink-mcp.git","weeklyDownloads":403}],"repo":{"found":true,"owner":"Klievan","repo":"jlink-mcp","archived":false,"pushedAt":"2026-10-26T11:28:00Z","stars":40,"forks":6,"openIssues":3,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/5279685?v=4","ownerCreatedAt":"2013-08-21T15:42:24Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/5279685?v=4&s=128","source":"registry"},"presence":{"stars":40,"forks":6,"downloadsWeek":403,"license":"MIT","lastPushAt":"2026-10-26T11:28:00.000Z","score":46}}}},"grade_history":[],"reviews":[]}