| name | edt-mcp-testing |
| description | How to manually e2e-test each EDT-MCP server tool against a live EDT workbench + TestConfiguration. One reference per tool under references/<family>/, each with the exact MCP call, the real expected result, and gotchas. Use when validating an MCP tool end-to-end by actually calling it (for build/unit tests see edt-mcp-build-test). |
EDT-MCP — manual e2e testing of tools
How to run each MCP tool live against a working EDT and confirm it actually works (not just compiles / passes a unit test). Build and unit tests are in edt-mcp-build-test; this is live e2e through real MCP calls. (The automated black-box suite is edt-mcp-e2e-testing.)
Structure
references/<family>/<tool>.md — one reference per tool: purpose, exact call, expected result, gotchas.
references/<family>/SETUP.md — shared family preconditions (what the family's tools can't be tested without).
Test bench (harness)
- Non-elevated EDT copy + workspace
D:\WS\EDT; MCP listens on :8765. Deploy edits with pwsh D:\Soft\edt-redeploy.ps1 (build → kill EDT → swap bundle → -clean relaunch → wait for :8765). The script sometimes returns exit 1 yet prints MCP server UP on 8765 — that is success; check the port / get_edt_version, don't trust the exit code.
- Test base — the
TestConfiguration project (in repo TestConfiguration/src, open in the workspace). Run destructive/mutating cases only on it; revert after: git checkout HEAD -- TestConfiguration && git clean -fd -- TestConfiguration.
- Workflow invariant: edit →
bash source/compile.sh → redeploy → live MCP call → git diff → revert. After a -clean redeploy EDT loses unsaved in-memory changes — mutate through MCP (write_module_source etc.) so model and disk stay in sync.
- Flaky tool output: the channel sometimes drops text (you see a bare
Error / Done instead of JSON). Re-verify state independently: debug_status, git status, Get-Process, and especially the EDT log D:\WS\EDT\.metadata\.log (it records the full request/response). Don't trust the echo.
How to add a tool reference
- Run the tool live with real arguments on
TestConfiguration.
- Record the exact call + actual output + gotchas in
references/<family>/<tool>.md.
- Link the family
SETUP.md.
- If the run needs a base mutation — document it and the revert.
Index — debug (references/debug/)
- SETUP — bring up a debuggable scenario (executable code + trigger + stop).
- Configs/launch:
list_configurations, debug_launch, debug_status, terminate_launch.
- Breakpoints:
set_breakpoint, list_breakpoints, remove_breakpoint.
- Break and inspect:
wait_for_break, get_variables, evaluate_expression, step, resume.
Full debug flow: set_breakpoint → debug_launch(update) → wait_for_break(hit) → get_variables → step over → get_variables → evaluate_expression → resume → remove_breakpoint. Details per tool in its reference.
Index — navigation / read (references/navigation/)
Read-only navigation and read tools, each with a real live call on TestConfiguration.
- SETUP — project ready (not
building), BSL index built, modulePath addressing, UI-thread tools.
- Workspace/listing: list_projects, list_modules.
- Source: read_module_source, read_method_source, get_module_structure.
- AST/refs: go_to_definition, find_references, get_method_call_hierarchy, get_symbol_info, get_content_assist.
Index — metadata-read (references/metadata-read/)
Read-only reading of the configuration model (objects, details, properties, subsystems, tags). Each with a real live call on TestConfiguration.
Index — query / problems / misc (read-only)
Index — profiling / forms / xml / translation / launch / metadata-write
Families with write/destructive/special setup. For mutating/destructive tools the docs describe the test procedure from source (mutate-then-revert / preview-then-confirm), without live destruction.
- profiling (
references/profiling/): start_profiling (a TOGGLE; applicationId = the debug-session id, not the infobase GUID), get_profiling_results (read-only; returns only the most recent measurement session).
- forms (
references/forms/): get_form_screenshot, get_form_layout_snapshot — need the JVM flag -DnativeFormBufferedLayoutRender=true; blank ≠ a bug; native vs buffered render.
- xml (
references/xml/): export_configuration_to_xml, import_configuration_from_xml (MUTATES → revert).
- translation (
references/translation/): get_translation_project_info (read-only), generate_translation_strings, translate_configuration (MUTATES + external providers).
- launch (
references/launch/): update_database (DESTRUCTIVE, exclusive infobase access), run_yaxunit_tests, debug_yaxunit_tests.
- metadata-write (
references/metadata-write/): create_metadata (FQN-addressed), modify_metadata (set properties=[{name,value,language?}] by FQN), write_module_source (mutate→verify→revert), rename_metadata_object, delete_metadata (FQN-addressed; CASCADE; preview→confirm→revert; explicit-request-only), adopt_metadata_object (adopt a base object/member into an extension; MUTATES→revert).
Coverage: debug + navigation, metadata-read, query, problems, misc, profiling, forms, xml, translation, launch, metadata-write = every MCP tool (62 today) has a per-tool e2e reference. Write/destructive tools document the procedure from source (mutate-then-revert / preview-then-confirm), not live destruction.