Files
meshtastic_firmware/.github/prompts/mcp-test.prompt.md
T
Ben MeadorsGitHubCopilotcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
c8dac10348 Add MCP server for interacting with meshtastic devices and testing framework / TUI (#10194)
* Start of MCP server and test suite

* Add MCP server for interacting with meshtastic devices and testing framework / TUI

* Update mcp-server/README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix mcp-server review feedback from thread

Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/91dc128a-ed50-4d07-8bb2-3dc6623a05f7

Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com>

* Enhance StreamAPI and PhoneAPI for improved log record handling and concurrency control

* Semgrep fixes

* Trunk and semgrep fixes

* optimize pio streaming tee file writes

Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/04e26c6b-6a2b-45be-bbeb-79ae4d0be633

Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com>

* chore: remove redundant log handle assignment

Agent-Logs-Url: https://github.com/meshtastic/firmware/sessions/04e26c6b-6a2b-45be-bbeb-79ae4d0be633

Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com>

* Consolidate type imports and remove placeholder test files

* Add tests for config persistence and more exchange messages

* Refactor position test to validate on-demand request/reply behavior

* Remove  position request/reply test and update README for telemetry behavior

* Fix transmit history file to get removed on factory reset

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-04-18 08:17:44 -05:00

3.5 KiB

mode, description
mode description
agent Run the mcp-server test suite and interpret results (Copilot equivalent of the Claude Code /test slash command)

/mcp-test — mcp-server test runner with interpretation

Equivalent of the Claude Code /test slash command in .claude/commands/test.md. Use this when the operator asks you to "run the tests", "check the mcp test suite", "run the mesh tests", etc.

What to do

  1. Invoke the wrapper from the firmware repo root:

    ./mcp-server/run-tests.sh [pytest-args]
    

    If the operator specified a subset (e.g. "just the mesh tests"), pass it through as tests/mesh or a pytest -k filter. If they said nothing, use the wrapper's defaults (full suite with pytest-html report).

    The wrapper auto-detects connected Meshtastic devices, maps each to its PlatformIO env, exports the required env vars, and invokes pytest. Zero pre-flight config needed from the operator.

  2. Read the pre-flight header (first few lines of wrapper output). The detected hub : line lists role → port → env mappings. If it reads (none), the wrapper narrowed to tests/unit only — call that out explicitly so the operator knows hardware tiers were skipped.

  3. On pass: one-line summary like N passed, M skipped in <duration>. Don't enumerate test names. DO mention any non-placeholder SKIPs (things like "role not present on hub") because they indicate missing hardware or setup issues.

  4. On failure: open mcp-server/tests/report.html (pytest-html output, self-contained) and extract the Meshtastic debug section for each failed test. That section includes a firmware log stream (last 200 lines) and device state dump. For each failure, summarise:

    • test name
    • one-line assertion message
    • the specific firmware log lines that explain why (look for PKI_UNKNOWN_PUBKEY, Skip send NodeInfo, Error=, Guru Meditation, assertion failed, No suitable channel)
  5. Classify each failure as one of:

    • Transient flake — LoRa collision, first-attempt NAK with self-heal pattern, timing-sensitive assertion. Suggest /mcp-repro <test-id> to confirm.
    • Environmental — device unreachable, port busy, CP2102 driver wedged on macOS. Suggest specific recovery (USB replug, touch_1200bps, git status userPrefs.jsonc).
    • Regression — same assertion fails repeatedly on re-runs, firmware log shows novel errors. Identify the firmware module likely responsible.
  6. Do NOT run destructive recovery automatically. If a failure looks like it needs a reflash, factoryreset, or replug — _describe the steps and let the operator decide. Never burn airtime or flash cycles without approval.

Arguments convention

Operators generally invoke this prompt either with no arguments (full suite) or with a specific subset. Examples:

  • tests/mesh — one tier
  • tests/mesh/test_direct_with_ack.py::test_direct_with_ack_roundtrip — one test
  • --force-bake — reflash devices first
  • -k telemetry — name-filter

Side-effects to confirm in your summary

  • userPrefs.jsonc should be clean after a successful run. The session fixture in mcp-server/tests/conftest.py (_session_userprefs) snapshots and restores. Check git status --porcelain userPrefs.jsonc and report if it's non-empty.
  • mcp-server/tests/report.html and junit.xml regenerate on every run.
  • The wrapper prints a warning if a .mcp-session-bak sidecar was left over from a crashed prior session and auto-restores from it — mention that if it happened.