NI TestStand

cancel
Showing results for 
Search instead for 
Did you mean: 

TestStand MCP released (Use Claude, Copilot ... to create and analyse your TestStand code)

Following a short beta phase, I am now able to announce the release of TestStand MCP. With this version, you can make use of the full range of TestStand features available in Claude, Copilot and other tools.

 

I use the TestStand MCP for creating test sequences, debugging, reverse engineering and documentation.

=> It’s also great fun to discuss your own code and carry out a review using TestStand!

 

The current version has been tested with TS2025 and TS2026, but should be compatible up to TS2019.

 

https://github.com/Zuehlke/teststand-mcp

https://github.com/Zuehlke/teststand-mcp/releases

 

Have fun with the tool and please let me know what you think

 

Best

Claude

 

P.S.: I’d also recommend taking a look at my TestStand Agent for Claude (.claude subdirectory). The MCP offers you many features, but user-friendliness come with the agent! Another point is to create a RAG for the projects (requirements, documentation, etc.) and style guides. Ultimately, you’ll end up with a comprehensive workflow that you can carry out systematically (e.g. for reviews, enhancements, documentation, etc.)

https://support.claude.com/en/articles/11473015-retrieval-augmented-generation-rag-for-projects

https://n8n.io/integrations/claude/

CLA / CTD
Message 1 of 9
(1,198 Views)

The latest release also includes full enum management. You can now generate enums directly from a list, a database entry or any other source. Of course, you can also edit or extend existing enums, or delete entries.

Enjoy version V1.0.3!

 

Claude

 

https://github.com/Zuehlke/teststand-mcp/releases/tag/V1.0.3

CLA / CTD
Message 2 of 9
(976 Views)

The latest version includes bug fixes and improvements relating to test execution.
https://github.com/Zuehlke/teststand-mcp/releases/tag/V1.1.1

 

Claude

CLA / CTD
0 Kudos
Message 3 of 9
(846 Views)

Here is a complete overview of the current TestStand MCP tools:

All MCP tools are tested using over 350 unit tests, guaranteeing reliable performance!
=> Let me know if anything is missing! 🙂

 

# TestStand MCP Server — Available Tools

The TestStand MCP server exposes 200+ tools covering the full sequence lifecycle:

 

## 🔌 Engine & Station
`connect_engine` · `disconnect_engine` · `get_engine_paths` · `get_station_info` · `get_station_options` · `set_station_options` · `expand_path_macros`

 

## 📁 Sequence Files
`create_sequence_file` · `open_sequence_file` · `save_sequence_file` · `close_sequence_file` · `get_loaded_sequence_files` · `get_file_properties` · `set_file_properties` · `find_file` · `find_in_file` · `replace_in_file` · `read_csv_lines` · `write_csv_lines`

 

## 🧬 Sequences
`get_sequence` · `insert_sequence` · `delete_sequence` · `duplicate_sequence` · `rename_sequence` · `sequence_name_exists` · `get_sequence_properties` · `set_sequence_properties` · `get_sequence_parameters` · `insert_sequence_parameter`

 

## 🪜 Steps
`get_steps` · `get_step` · `insert_step` · `insert_steps_bulk` · `insert_step_from_template` · `delete_step` · `move_step` · `rename_step` · `enable_step` · `step_name_exists` · `search_steps` · `get_step_unique_id` · `get_step_properties` · `get_step_type` · `get_step_types` · `get_step_templates` · `validate_sequence_plan`

 

## 🔧 Step Configuration
`set_step_comment` · `set_step_expression` · `set_step_precondition` · `set_step_eval_precond` · `set_step_run_mode` · `set_step_record_result` · `set_step_pass_action` · `set_step_fail_action` · `set_step_loop` · `set_step_measurement` · `set_step_breakpoint` · `set_step_module_path` · `set_step_module_load_option` · `set_step_module_unload_option` · `set_step_batch_sync_option` · `set_wait_time` · `change_step_adapter` · `set_sequence_call_target` · `get_step_module_info` · `get_module_parameters` · `set_module_parameter`

 

## 🧩 Modules / Adapters
`configure_dll_module` · `configure_dotnet_module` · `configure_labview_module` · `configure_python_module` · `configure_sequence_call_module` · `configure_message_popup` · `configure_property_loader` · `configure_string_value_test` · `get_adapter_details` · `get_loaded_adapters` · `load_adapter` · `unload_adapter`

 

## 📏 Tests / Limits
`get_numeric_limits` · `set_numeric_limits`

 

## 📦 Variables & Properties
`get_local_variables` · `insert_local_variable` · `set_local_variable` · `delete_local_variable` · `set_local_variable_comment` · `get_file_globals` · `insert_file_global` · `set_file_global` · `get_station_globals` · `set_station_global` · `delete_station_global` · `get_property` · `set_property` · `get_property_object` · `get_property_tree` · `set_property_value` · `delete_sub_property` · `get_array_variable` · `set_array_element` · `resize_array_variable`

 

## 🏷️ Data Types & Enums
`create_data_type` · `delete_data_type` · `get_data_types` · `get_data_type_fields` · `add_data_type_field` · `remove_data_type_field` · `create_enum` · `delete_enum` · `get_enum_values` · `set_enum_values` · `add_enum_value` · `remove_enum_value` · `rename_enum_value` · `get_type_palettes` · `load_type_palette` · `unload_type_palette`

 

## ▶️ Execution
`run_sequence` · `start_execution` · `run_steps_interactively` · `run_in_editor` · `get_active_executions` · `get_execution_status` · `get_execution_results` · `get_execution_log` · `get_execution_time` · `get_execution_threads` · `wait_for_execution` · `abort_execution` · `abort_all` · `terminate_execution` · `terminate_all` · `restart_execution` · `resume_execution` · `break_execution` · `break_all` · `clear_execution_log`

 

## 🐞 Debugging
`get_breakpoints` · `step_into` · `step_over` · `step_out` · `step_into_thread` · `step_over_thread` · `step_out_thread` · `break_thread` · `resume_thread` · `get_thread_status` · `get_thread_call_stack` · `add_watch_expression` · `remove_watch_expression` · `get_watch_expressions`

 

## 📊 Results & Reports
`generate_report` · `get_full_report` · `get_report_text` · `save_report` · `launch_report_viewer` · `get_step_result` · `get_result_schemas` · `create_result_log` · `export_results` · `add_report_section` · `get_uut_info` · `set_uut_serial_number` · `set_uut_part_number`

 

## 💬 Output Messages
`post_output_message` · `get_output_messages` · `clear_output_messages` · `post_ui_message`

 

## 🧮 Expressions
`check_expression` · `evaluate_expression` · `list_expression_reference`

 

## 🔁 Process Model & Callbacks
`get_process_model` · `set_process_model` · `get_callbacks` · `add_callback_override`

 

## 🔍 Analysis & Comparison
`analyze_sequence_file` · `run_sequence_analyzer` · `compare_sequence_files` · `diff_sequence_files`

 

## ↩️ Undo / Redo
`undo` · `redo` · `begin_undo_group` · `end_undo_group` · `cancel_undo_group` · `get_undo_stack`

 

## 🔒 Synchronization
`create_sync_object` · `create_batch_sync_object` · `delete_sync_object` · `get_sync_objects` · `sync_mutex_lock` · `sync_mutex_unlock` · `sync_semaphore_wait` · `sync_semaphore_release` · `sync_notification_set` · `sync_notification_reset` · `sync_notification_wait` · `sync_queue_enqueue` · `sync_queue_dequeue` · `sync_queue_flush`

 

## 👤 User Management
`create_user` · `delete_user` · `get_users` · `user_name_exists` · `get_current_user` · `get_user_profiles` · `get_user_privileges` · `check_user_privilege` · `set_user_password`

 

## 🖥️ Sequence Editor (GUI)
`launch_sequence_editor` · `close_sequence_editor` · `get_editor_status` · `open_file_in_editor`

 

## 🗂️ Workspaces & Search Directories
`get_workspace` · `open_workspace` · `get_search_directories` · `add_search_directory` · `remove_search_directory`

CLA / CTD
Message 4 of 9
(757 Views)

Very nice work, tried it with claude code and it works !! My observation is that when mcp is invoked it takes a lot of time to process it, and when we have complex sequence it can take ~10 minutes.

 

Sometimes for my specific task it is just better to bypass mcp completely, convert sequence to xml, write custom skill and go from there 😄

0 Kudos
Message 5 of 9
(601 Views)

I agree with you that using the API is slower than editing the XML directly. However, for more complex tasks, I find it tricky to work directly in the XML. For example, I wouldn’t create enums linked to LabVIEW or Python via the XML. 🙂

My conclusion is that you don’t necessarily need Opus 4.8 with Effort (Max or Ultracode). If you use a lower level, it’s up to three times faster.

Personally, though, I find the quality of the generated code more important than the speed. If I’m generating a complex sequence, I don’t mind waiting 20 minutes.

 

CLA / CTD
0 Kudos
Message 6 of 9
(577 Views)

I have put together a major release of the MCP for you. In this new version, many minor issues have been corrected and optimised. The quality of the generated code is now very good, and the result can be used in production.

 

In addition, I have included some further agents for you as ideas. The agents cover the following topics:

- Sequence file documentation (Word document with a dependency diagram and description of the sequences)

- Presentation generator: for explaining the sequence to a client or running a demo)

 

The agents are automatically registered with Claude upon initial registration. Alternatively, you can copy them to the working directory or register them yourself using the file:
‘..\.claude\agents\link-agents.bat’.

 

https://github.com/Zuehlke/teststand-mcp/releases/tag/V1.3.1

https://github.com/Zuehlke/teststand-mcp

 

Please also observe the rules of fair play and let us know how the MCP is working. If you extend the MCP yourself, please submit your changes as a pull request!

 

Claude

CLA / CTD
Message 7 of 9
(494 Views)

I will just said that works as a chime in Cursor, and I like it, and since I have some custom rules in I can explain my PoC, go for a coffee break and is done after that, I will test it intensively and share any finding. Kudos Cloedu!!

0 Kudos
Message 8 of 9
(455 Views)

Have been using this last week and it does really good job !

next step would be to have code reviews of sequence files in the cloud 🙂

I guess it would require docker image with teststand activated and MCP installed.

was able to create docker image and run analyzer by api in the cloud so it is a start ...

Message 9 of 9
(277 Views)