{"name":"io.github.cunjun/mcubuddy","slug":"cunjun-mcubuddy","title":"McuBuddy","description":"AI-native MCU debugging and observability through probes, symbols, RTOS, logs, and build tools.","url":"https://mcp.market/server/cunjun-mcubuddy","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":18,"stars":6,"forks":0,"downloads_week":null,"last_push_at":"2026-08-17T06:12:55.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/cunjun/McuBuddy","website":null,"version":"0.5.1","remotes":[],"packages":[{"registryType":"pypi","identifier":"McuBuddy","version":"0.5.1","transport":{"type":"stdio"}}],"tools":[{"name":"backtrace","description":"Heuristic call stack reconstruction for Cortex-M targets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"board_smoke_test","description":"Run a generic read-only hardware sanity check for the configured board.","write_action":true,"price_micros":0,"input_schema":null},{"name":"build_project","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_all_breakpoints","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_breakpoint","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"compare_elf_to_flash","description":"Compare all loadable ELF sections against actual target memory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"configure_build","description":"Set Keil UV4 build/flash parameters. Only needed if using build_project or flash_firmware.","write_action":false,"price_micros":0,"input_schema":null},{"name":"configure_elf","description":"Set the ELF/AXF file path for symbol resolution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"configure_keil_project","description":"Auto-configure Keil build and ELF paths from a project path or discovery root.","write_action":false,"price_micros":0,"input_schema":null},{"name":"configure_log","description":"Set UART log channel parameters (e.g. uart_port='COM5', uart_baudrate=115200).","write_action":false,"price_micros":0,"input_schema":null},{"name":"configure_probe","description":"Set probe connection parameters. Run list_connected_probes first to find unique_id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"connect_with_config","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"continue_target","description":"Resume target execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose","description":"Route a user-level symptom to the most relevant diagnosis tool.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_clock_issue","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_hardfault","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_interrupt_issue","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_memory_corruption","description":"Scan stack and heap regions for corruption evidence.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_peripheral_stuck","description":"Diagnose why a peripheral is not working.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_stack_overflow","description":"Diagnose potential stack overflow on a Cortex-M target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"diagnose_startup_failure","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"disassemble","description":"Disassemble Thumb/Thumb-2 instructions at the given address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"disconnect_all","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"discover_keil_projects","description":"Find Keil project files, targets, and likely AXF/ELF outputs under a directory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"doctor","description":"Run a read-only environment, dependency, probe, target, and config preflight.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dump_memory","description":"Read and display memory in formatted form.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dwarf_backtrace","description":"Accurate call stack using DWARF .debug_frame CFI rules.","write_action":false,"price_micros":0,"input_schema":null},{"name":"elf_addr_to_source","description":"Look up the source file and line number for a given address using DWARF .debug_line.","write_action":false,"price_micros":0,"input_schema":null},{"name":"elf_list_functions","description":"List all function symbols from the loaded ELF with address and size.","write_action":false,"price_micros":0,"input_schema":null},{"name":"elf_load","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"elf_symbol_info","description":"Return address, size, type, and source location for a single symbol.","write_action":false,"price_micros":0,"input_schema":null},{"name":"erase_flash","description":"Erase target flash memory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"first_contact","description":"Run the safest first board contact flow and suggest next debug tools.","write_action":true,"price_micros":0,"input_schema":null},{"name":"flash_firmware","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_gdb_server_status","description":"Return whether the pyOCD GDB server is running and which ports it uses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_jlink_gdb_server_status","description":"Return whether the J-Link GDB server is running and which port it uses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_locals","description":"Read local variables and parameters at the current PC using DWARF .debug_info.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_runtime_config","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_target_info","description":"Return alias-match and device-patch info for a target on a given backend.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_conditional_breakpoints","description":"List all registered conditional breakpoints in the current session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_connected_probes","description":"List all probes currently connected to this machine. Start here if unsure what probe to use.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_demo_profiles","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_rtos_tasks","description":"List all FreeRTOS tasks with state, priority, and stack usage.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_supported_targets","description":"List built-in target profiles and validation metadata for a backend.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_tool_safety","description":"List safety levels for public McuBuddy tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_validation_records","description":"List machine-readable real-hardware validation records.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_demo_profile","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_connect","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_disconnect","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_tail","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"log_trace","description":"Step through code and record each unique source line visited.","write_action":false,"price_micros":0,"input_schema":null},{"name":"match_chip_name","description":"Resolve a chip alias to a backend-specific target name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_diff","description":"Re-read a snapshotted memory region and return a byte-level diff.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_find","description":"Search a memory region for a byte pattern.","write_action":false,"price_micros":0,"input_schema":null},{"name":"memory_snapshot","description":"Capture a memory region snapshot for later comparison.","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_clear_all_watchpoints","description":"Remove all hardware watchpoints.","write_action":true,"price_micros":0,"input_schema":null},{"name":"probe_connect","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_continue_until","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_disconnect","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_halt","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_read_fpu_registers","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_read_memory","description":"Read bytes from target memory at the given address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_read_mpu_regions","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_read_registers","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_remove_watchpoint","description":"Remove a hardware watchpoint at the given address.","write_action":true,"price_micros":0,"input_schema":null},{"name":"probe_reset","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_resume","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_set_watchpoint","description":"Set a hardware data watchpoint on a memory address.","write_action":false,"price_micros":0,"input_schema":null},{"name":"probe_step","description":"Execute one instruction and return the new PC (with symbol if ELF is loaded).","write_action":true,"price_micros":0,"input_schema":null},{"name":"probe_write_memory","description":"Write bytes to target memory. data is a list of integers (0-255).","write_action":true,"price_micros":0,"input_schema":null},{"name":"program_flash","description":"Program target flash memory from raw byte data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_cycle_counter","description":"Read the DWT cycle counter when supported by the active probe backend.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_memory_map","description":"Return the Cortex-M address space layout and ELF section map.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_rtt_log","description":"Read Segger RTT log output directly from target RAM via probe (no UART needed).","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_stack_usage","description":"Scan FreeRTOS task stacks for the canary high-water mark.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_stopped_context","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_swo_log","description":"Read bytes from the J-Link SWO host buffer when supported by the active probe backend.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_symbol_value","description":"Read the value of a symbol (variable, linker symbol) by name from target memory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reset_and_trace","description":"Reset the target and immediately trace execution from the reset vector.","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtos_switch_context","description":"Switch CPU context to a blocked or suspended FreeRTOS task.","write_action":false,"price_micros":0,"input_schema":null},{"name":"rtos_task_context","description":"Read the saved register context of a blocked or suspended FreeRTOS task.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_debug_loop","description":"","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_to_function","description":"Set a breakpoint on a function by name, resume, and wait for it to be hit.","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_to_source","description":"Run target until execution reaches a specific source file and line number.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_breakpoint","description":"Set a breakpoint, optionally with a condition.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_breakpoints_for_function_range","description":"Set breakpoints on all ELF functions whose address falls between two symbols.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_local","description":"Write an integer value to a local variable by name at the current PC.","write_action":true,"price_micros":0,"input_schema":null},{"name":"source_step","description":"Execute instructions until the source line changes (source-level single step).","write_action":true,"price_micros":0,"input_schema":null},{"name":"start_gdb_server","description":"Start a pyOCD GDB server for the configured target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_jlink_gdb_server","description":"Start a J-Link GDB server for the configured target.","write_action":false,"price_micros":0,"input_schema":null},{"name":"step_n_instructions","description":"Execute count assembly instructions, recording PC and symbol at each step.","write_action":true,"price_micros":0,"input_schema":null},{"name":"step_out","description":"Run until the current function returns (step out).","write_action":true,"price_micros":0,"input_schema":null},{"name":"step_over","description":"Execute one source line, stepping OVER function calls (bl/blx).","write_action":true,"price_micros":0,"input_schema":null},{"name":"stop_gdb_server","description":"Stop the active pyOCD GDB server process if one is running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stop_jlink_gdb_server","description":"Stop the active J-Link GDB server process if one is running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"svd_list_peripherals","description":"List all peripherals in the loaded SVD (UART, SPI, I2C, GPIO, TIM, etc.).","write_action":false,"price_micros":0,"input_schema":null},{"name":"svd_load","description":"Load a CMSIS-SVD file to enable peripheral register interpretation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_flash","description":"Verify target flash contents against expected raw byte data.","write_action":false,"price_micros":0,"input_schema":null},{"name":"watch_symbol","description":"Poll a symbol's value until it changes or timeout expires.","write_action":false,"price_micros":0,"input_schema":null},{"name":"write_symbol_value","description":"Write an integer value to a symbol (variable) by name in target memory.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-25T17:24:08.753Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T17:24:08.706Z","components":{"code":{"score":25,"max":25,"notes":["96 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":12,"max":15,"notes":["last push 39 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"McuBuddy","version":"0.5.1","found":true,"license":"MIT","dependencyCount":9,"publishedAt":"2026-07-20T06:21:28.001241Z","repositoryUrl":"https://github.com/cunjun/McuBuddy"}],"repo":{"found":true,"owner":"cunjun","repo":"McuBuddy","archived":false,"pushedAt":"2026-08-17T06:12:55Z","stars":6,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/208476864?v=4","ownerCreatedAt":"2025-04-21T12:29:16Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/208476864?v=4&s=128","source":"github"},"presence":{"stars":6,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-08-17T06:12:55.000Z","score":18}}}},"grade_history":[],"reviews":[]}