Skip to main content
Glama

qudi MCP Integration

by dirkenglund
safety_tools.cpython-313.pyc9.8 kB
� �+�h���H�SrSSKrSSKJrJrJrJr SSKJr "SS5r g)z� Safety and system control tools for qudi MCP integration Handles safety interlocks, emergency controls, and system monitoring for quantum photonics experiments. �N)�Dict�List�Any�Optional�)�RunLevelc�`�\rSrSrSrSrS\S\\\4S\\\44Sjr S\\\4S\\\44S jr S\\\4S\\\44S jr S\\\4S\\\44S jr S\\\4S\\\44S jr S\\\4S\\\44S jrS\\\4S\\\44SjrS\\\4S\\\44SjrS\4SjrSrg)� SafetyTools� z"Safety and emergency control toolsc�F�Xl[R"S5Ulg)Nzqudi-mcp.safety)�server�logging� getLogger�logger)�selfr s �Z/Users/englund/Projects/QPG-MIT/qudi-iqo-modules-QPG/mcp_integration/tools/safety_tools.py�__init__�SafetyTools.__init__s��� ��'�'�(9�:�� ��name� arguments�returnc���# �URURURURURUR UR S.nX;aSSU30$X1"U5IShv�N $N7f)zRoute safety tool calls)zsafety.check_interlockszsafety.set_runlevelzsafety.get_statuszsafety.validate_parameterzsystem.emergency_stopzsystem.reset_emergencyzsystem.get_limits�errorzUnknown safety tool: N)�_check_interlocks� _set_runlevel�_get_safety_status�_validate_parameter�_emergency_stop�_reset_emergency� _get_limits)rrr�tool_maps r� handle_tool�SafetyTools.handle_tools{���(,�'=�'=�#'�#5�#5�!%�!8�!8�)-�)A�)A�%)�%9�%9�&*�&;�&;�!%�!1�!1� �� � ��4�T�F�;�<� <��^�I�.�.�.�.�s�A*A3�,A1�-A3�argsc���# �URRS5 URRR 5nSURR R UUR5SUS3S.$7f)zCheck all safety interlockszChecking safety interlocks�successzInterlock check completed - �overall_status)�status�runlevel� interlocks� timestamp�message)r�infor �safety_checker�check_all_interlocksr*�value�_get_timestamp)rr%�interlock_resultss rr�SafetyTools._check_interlocks&sv��� � � ���5�6� �K�K�6�6�K�K�M�� �� � �,�,�2�2�+��,�,�.�5�6G�HX�6Y�5Z�[�  � �s�A:A<c��n# �URS5nURSS5nU(dSS0$[U5nURR SUR R RS U35 UR RRXC5nUS (aX@R lUS (aS OS UR R RUR R RUUS UR5S .$![a SSUS30s$f=f7f)z&Set system runlevel with safety checksr*�reasonz User requestrzrunlevel is requiredzInvalid runlevel: z#. Valid options: dry-run, sim, livezRunlevel change requested: z -> r'�failedr-)r)�previous_runlevel�current_runlevelr6r-r,) �getr� ValueErrorrr.r r*r1r/�request_runlevel_changer2)rr%�target_runlevelr6� target_enum�results rr�SafetyTools._set_runlevel5s&����(�(�:�.�����(�N�3����3�4� 4� h�"�?�3�K� � � ���6�t�{�{�7K�7K�7Q�7Q�6R�RV�Wf�Vg�h�i����+�+�C�C�K�X�� �)� �#.�K�K� �$*�)�#4�i�(�!%���!5�!5�!;�!;� $� � � 4� 4� :� :���i�(��,�,�.�  � ��� h��1�/�1B�Be�f�g� g� h�s(�/D5� D�C D5�D2�/D5�1D2�2D5c��v# �SURRR5UR5S.$7f)zGet comprehensive safety statusr')r)� safety_statusr,)r r/�get_safety_statusr2)rr%s rr�SafetyTools._get_safety_statusTs6��� �!�[�[�7�7�I�I�K��,�,�.� � �s�79c��0# �URS5nURS5nUbUcSS0$[U5nURR R X#5upESUUUUUR5S.$![[4a SSU30s$f=f7f)z0Validate a parameter value against safety limits� parameterr1rz parameter and value are requiredzValue must be numeric, got: r')r)rFr1�is_safer-r,)r:�floatr;� TypeErrorr r/�validate_parameterr2)rr%rFr1rGr-s rr�SafetyTools._validate_parameter]s�����H�H�[�)� �����!�� � �� ��?�@� @� E��%�L�E� �;�;�5�5�H�H��Z��� �"�����,�,�.�  � �� �I�&� E��;�E�7�C�D� D� E�s'�-B� A9�>B�9B�B�B�Bc��# �URSS5nURRSU35 URRR U5n[ RURl/nURRR5H&upVUSS:XdMSUS'URU5 M( SUUURRRUSUR5S .$7f) zActivate emergency stopr6zManual emergency stop via MCPzEmergency stop activated: r)�running�emergency_stopped�emergency_stop_activatedr-)r)r6�stopped_measurementsr*r-r,)r:r�criticalr r/�emergency_stopr�DRY_RUNr*�measurement_state�items�appendr1r2)rr%r6r?rP�measurement_id�states rr�SafetyTools._emergency_stopvs�������(�$C�D�� � � ���9�&��B�C����+�+�:�:�6�B�� (�/�/�� � �� "��%)�[�[�%B�%B�%H�%H�%J� !�N��X��)�+�"5��h��$�+�+�N�;�&K� 1��$8�� � �,�,�2�2��i�(��,�,�.�  � �s �B'C?�-AC?c��`# �URSS5nURSS5nU(dSSSS.$URRS U35 URRR U5nS UURR RUS UR5S .$7f) z,Reset emergency stop (requires confirmation)r6zManual reset via MCP�confirmFz3Emergency stop reset requires explicit confirmationz)Set 'confirm': true to proceed with reset�emergency_stop_active)rr-�current_statuszEmergency stop reset: �emergency_stop_resetr-)r)r6r*r-r,) r:rr.r r/�reset_emergency_stopr*r1r2)rr%r6r[r?s rr �SafetyTools._reset_emergency�s�������(�$:�;���(�(�9�e�,���N�F�"9�� � � � ���1�&��:�;����+�+�@�@��H��-��� � �,�,�2�2��i�(��,�,�.�  � �s�B,B.c��,# �URS5nU(a�X RRR;aVURRRUnSUURUR UR URS.S.$SSU30$0nURRRR5H6upSURUR UR URS.XE'M8 SU[U5S.$7f)z,Get all safety limits and their descriptionsrFr')� min_value� max_value�unit� description)r)rF�limitrz'No safety limit defined for parameter: )r)�limits�total_parameters) r:r r/� safety_limitsrbrcrdrerU�len)rr%rFrfrgrs rr!�SafetyTools._get_limits�s�����H�H�[�)� � ��K�K�6�6�D�D�D�� � �2�2�@�@��K��'�!*�%*�_�_�%*�_�_� %� � �',�'8�'8� � � � �#J�9�+�!V�W�W��F�#�{�{�9�9�G�G�M�M�O� ��!&���!&���!�J�J�#(�#4�#4�  �� � P�$� �$'��K�� �s�DDc�J�SSKJn UR5R5$)z#Get current timestamp in ISO formatr)�datetime)rm�now� isoformat)rrms rr2�SafetyTools._get_timestamp�s��%��|�|�~�'�'�)�)r)rr N)�__name__� __module__� __qualname__�__firstlineno__�__doc__r�strrrr#rrrrrr r!r2�__static_attributes__�rrr r s7��,�;�/�c�/�d�3��8�n�/��c�SV�h��/�$  �D��c��N�  �t�C��H�~�  � ��S�#�X�� �4��S��>� �> �T�#�s�(�^� ��S�#�X�� � �d�3��8�n� ��c�3�h�� �2 �$�s�C�x�.� �T�#�s�(�^� �8 �4��S��>� �d�3��8�n� �2$�d�3��8�n�$��c�3�h��$�L*��*rr ) rur�typingrrrr�safetyrr rxrr�<module>r{s$����,�,��G*�G*r

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dirkenglund/qudi-mcp-integration'

If you have feedback or need assistance with the MCP directory API, please join our Discord server