Skip to main content
Glama
mcp_server.cpython-311.pyc26.9 kB
� P�hKN����dZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z ddlmZddlmZddlmZddlmZdd lmZmZmZmZmZmZmZmZdd lm Z ej!ej"d ej#d ��ej$��g� ��ej%e&��Z'eGd�d����Z(Gd�d��Z)d�Z*e&dkrej+e*����dSdS)zs MCP Server for Lead Nurturing System Provides remote control and monitoring of the 24/7 lead nurturing automation �N)�datetime)�Any�Dict�List�Optional)� dataclass)�Server)�InitializationOptions)� stdio_server)�CallToolRequest�CallToolResult�ListToolsRequest�ListToolsResult�Tool� TextContent� ImageContent�EmbeddedResource)� LeadNurturerz4%(asctime)s - %(name)s - %(levelname)s - %(message)s�mcp_server.log)�level�format�handlersc�r�eZdZUdZdZeed<dZee ed<dZ e ed<dZ e ed<dZ eeed <dS) � ServerStatezServer state managementF� is_runningN�last_runr� total_runs� error_count�nurturer)�__name__� __module__� __qualname__�__doc__r�bool�__annotations__rrrr�intrrr��� mcp_server.pyrr.sr�������!�!��J�����#'�H�h�x� �'�'�'��J������K�����'+�H�h�|�$�+�+�+�+�+r(rc�6�eZdZdZd�Zd�Zd�Zdeee fde fd�Z deee fde fd�Z deee fde fd �Z deee fde fd �Zdeee fde fd �Zdeee fde fd �Zdeee fde fd �Zdeee fde fd�Zdefd�Zd�ZdS)�LeadNurturingMCPServerz$MCP Server for Lead Nurturing Systemc��td��|_t��|_|���|���dS)N�lead-nurturing-server)r �serverr�state�setup_handlers�setup_signal_handlers)�selfs r)�__init__zLeadNurturingMCPServer.__init__:sG���4�5�5�� � �]�]�� � ������ �"�"�$�$�$�$�$r(c�����j���dtfd���}�j���dtdt tt fdtf�fd� ��}dS)zSetup MCP server handlers�returnc��K�ttdddddddd�id �� ��td d did �� ��td ddid �� ��tdddid �� ��tdddid �� ��tddddddd�id �� ��tddddddd�id �� ��tdddddd d!d�id �� ��g�"��S)#zList available tools�start_nurturingz*Start the lead nurturing automation system�object�interval_hours�integerz+Hours between nurturing cycles (default: 4)�)�type� description�default)r<� properties)�namer=� inputSchema�stop_nurturingz)Stop the lead nurturing automation system�run_single_cyclez(Run a single nurturing cycle immediately� get_statusz(Get current system status and statistics�get_lead_reportz"Get detailed lead nurturing report� update_configzUpdate nurturing configuration�configzConfiguration updates)r<r=�send_test_emailz"Send a test email to verify system�email�stringzEmail address to send test to�get_logszGet recent system logs�linesz-Number of log lines to retrieve (default: 50)�2)�tools)rrr'r(r)�handle_list_toolsz@LeadNurturingMCPServer.setup_handlers.<locals>.handle_list_toolsCs�����#��.�$P�$,� 0�,5�3`�/0�3"�3"�+� %� %� � � ��-�$O�$,�*,�%�%�����/�$N�$,�*,�%�%�����)�$N�$,�*,�%�%�����.�$H�$,�*,�%�%�����,�$D�$,� (�,4�3J�+"�+"�+�%�%� � � ��.�$H�$,� '�,4�3R�*"�*"�+�%�%� � � ��'�$<�$,� '�,5�3b�/1�*"�*"�+� %� %� � � �SW�Y�Y�Y�Y r(r@� argumentsc ��.�K� |dkr��|���d{V��S|dkr��|���d{V��S|dkr��|���d{V��S|dkr��|���d{V��S|dkr��|���d{V��S|dkr��|���d{V��S|dkr��|���d{V��S|d kr��|���d{V��Sttd d |��� ��g� ��S#t$rZ}t� d|�d|����ttd dt|����� ��g� ��cYd}~Sd}~wwxYw)zHandle tool callsr7NrBrCrDrErFrHrK�textzUnknown tool: �r<rR��contentzError handling tool z: zError: )r7rBrCrDrErFrHrKr r� Exception�logger�error�str)r@rP�er2s �r)�handle_call_toolz?LeadNurturingMCPServer.setup_handlers.<locals>.handle_call_tool�s_����� ��,�,�,�!%�!5�!5�i�!@�!@�@�@�@�@�@�@�@��-�-�-�!%�!4�!4�Y�!?�!?�?�?�?�?�?�?�?��/�/�/�!%�!6�!6�y�!A�!A�A�A�A�A�A�A�A��\�)�)�!%����!;�!;�;�;�;�;�;�;�;��.�.�.�!%�!5�!5�i�!@�!@�@�@�@�@�@�@�@��_�,�,�!%�!3�!3�I�!>�!>�>�>�>�>�>�>�>��.�.�.�!%�!5�!5�i�!@�!@�@�@�@�@�@�@�@��Z�'�'�!%���y�!9�!9�9�9�9�9�9�9�9�)�!,�&�?V�PT�?V�?V�!W�!W�!W� X������� � � �� � �?�D�?�?�A�?�?�@�@�@�%�(�f�;M�S��V�V�;M�;M�N�N�N�O�������������� ���sM� D0� D0� D0�( D0� D0�* D0� D0�, D0� "D0�0 F�:AF� F�FN)r.� list_toolsr� call_toolrYrrr )r2rOr[s` r)r0z%LeadNurturingMCPServer.setup_handlers@s���� �� � � !� !�[ ��[ �[ �[ � "� !�[ �z �� � � � � �� ��c�3�h�� �N� � � � � � !� � � � r(c����fd�}tjtj|��tjtj|��dS)z+Setup signal handlers for graceful shutdownc���t�d|�d�����i��tjd��dS)NzReceived signal z, shutting down gracefully...r)rW�inforB�sys�exit)�signum�framer2s �r)�signal_handlerzDLeadNurturingMCPServer.setup_signal_handlers.<locals>.signal_handler�sF��� �K�K�P�6�P�P�P� Q� Q� Q� � � �� #� #� #� �H�Q�K�K�K�K�Kr(N)�signal�SIGINT�SIGTERM)r2res` r)r1z,LeadNurturingMCPServer.setup_signal_handlers�sL��� � � � � � � �f�m�^�4�4�4�� �f�n�n�5�5�5�5�5r(rPr5c ��K� |jjr ttdd���g���S|�dd��}t ��|j_d|j_tj|� |����t� d|�d ���ttdd |�d t|jjj ���d ����g���S#t$rW}t�d |����ttddt!|�������g���cYd}~Sd}~wwxYw)zStart the nurturing automationrRz#Nurturing system is already runningrSrTr9r;TzStarted nurturing system with z h intervaluC✅ Lead nurturing system started successfully! 🕐 Running every u hours 📊 Monitoring z leadszError starting nurturing: u❌ Error starting system: N)r/rr r�getrr�asyncio� create_task�_nurturing_looprWr`�len�leadsrVrXrY)r2rPr9rZs r)r7z&LeadNurturingMCPServer.start_nurturing�s����� ��z�$� �%�(�f�;`�a�a�a�b�����'�]�]�+;�Q�?�?�N�#/�.�.�D�J� �$(�D�J� !� � �� 4� 4�^� D� D� E� E� E� �K�K�S��S�S�S� T� T� T�!�$��S�/=�S�S�,/�� �0C�0I�,J�,J�S�S�S�������� ��� � � � �L�L�9�a�9�9� :� :� :�!�$�&�7]�UX�YZ�U[�U[�7]�7]�^�^�^�_���� � � � � � ����� ���s$�+C2�CC2�2 E�<A E�E�Ec ��K� d|j_|jjr|jj���t�d��t tdd���g���S#t$rW}t� d|����t tddt|�������g���cYd }~Sd }~wwxYw) zStop the nurturing automationFzStopped nurturing systemrRu/🛑 Lead nurturing system stopped successfullyrSrTzError stopping nurturing: u❌ Error stopping system: N) r/rr� _save_leadsrWr`r rrVrXrY�r2rPrZs r)rBz%LeadNurturingMCPServer.stop_nurturing�s���� �$)�D�J� !��z�"� 2�� �#�/�/�1�1�1� �K�K�2� 3� 3� 3�!�$��J�������� ��� � � � �L�L�9�a�9�9� :� :� :�!�$�&�7]�UX�YZ�U[�U[�7]�7]�^�^�^�_���� � � � � � ����� ���s�A/A4�4 C�>A C� C�Cc ��VK� |jjst��|j_|jj���|jxjdz c_t j��|j_t� d��ttdd���g���S#t$rl}|jxj dz c_ t�d|����ttddt|�������g���cYd }~Sd }~wwxYw) zRun a single nurturing cycle�z Completed single nurturing cyclerRu2✅ Single nurturing cycle completed successfully!rSrTzError in single cycle: u❌ Error in cycle: N)r/rr�run_nurturing_cyclerr�nowrrWr`r rrVrrXrYrrs r)rCz'LeadNurturingMCPServer.run_single_cyclesQ���� ��:�&� 5�&2�n�n�� �#� �J� � 3� 3� 5� 5� 5� �J� !� !�Q� &� !� !�"*�,�.�.�D�J� � �K�K�:� ;� ;� ;�!�$��M�������� ��� � � � �J� "� "�a� '� "� "� �L�L�6�1�6�6� 7� 7� 7�!�$�&�7V�c�RS�f�f�7V�7V�W�W�W�X���� � � � � � ����� ���s�B-B2�2 D(�<A!D#�D(�#D(c ��fK� d|jjrdnd�d|jjr|jj�d��nd�d|jj�d|jj�d � }|jjr�|jjj}t|��}td �|� ��D����}td �|� ��D����}td �|� ��D����}|d |�d|�d|�d|�d||z dzd�d� z }n|dz }ttd|���g���S#t$rW}t�d|����ttddt!|�������g���cYd}~Sd}~wwxYw)zGet system statusu@ 🤖 **LEAD NURTURING SYSTEM STATUS** 🔄 **System Status**: u 🟢 Runningu 🔴 Stoppedu 📅 **Last Run**: �%Y-%m-%d %H:%M:%S�Neveru 🔢 **Total Runs**: u ❌ **Error Count**: u 📊 **Lead Statistics**: c3�0K�|]}|jdk� dV��dS)�newrtN��status��.0�leads r)� <genexpr>z4LeadNurturingMCPServer.get_status.<locals>.<genexpr>.s.����U�U�d�� �u�@T�@T��@T�@T�@T�@T�U�Ur(c3�0K�|]}|jdk� dV��dS)rrtN)�response_countr~s r)r�z4LeadNurturingMCPServer.get_status.<locals>.<genexpr>/s0����X�X�d��@S�VW�@W�@W��@W�@W�@W�@W�X�Xr(c3�0K�|]}|jdk� dV��dS)� interestedrtNr|r~s r)r�z4LeadNurturingMCPServer.get_status.<locals>.<genexpr>0s/���� ]� ]�t���P\�A\�A\��A\�A\�A\�A\� ]� ]r(u • Total Leads: u • Contacted: u • Responded: u • Interested: u • Response Rate: �dz.1fz% (if contacted > 0) u• No nurturer initializedrRrSrTzError getting status: u❌ Error getting status: N)r/rr�strftimerrrrorn�sum�valuesr rrVrWrXrY) r2rP� status_textro� total_leads� contacted� respondedr�rZs r)rDz!LeadNurturingMCPServer.get_statussY����% � �,0�:�+@�T���n� � �JN��I\�i�D�J�'�0�0�1D�E�E�E�bi� � � �j�+� � � �j�,� � � �K��z�"� =�� �+�1��!�%�j�j� ��U�U�e�l�l�n�n�U�U�U�U�U� ��X�X�e�l�l�n�n�X�X�X�X�X� � � ]� ]�u�|�|�~�~� ]� ]� ]�]�]� �� �� � �� � �� � ��  � � �y�(��,�  � � � �� � ��<�<� �!�$�&�{�C�C�C�D���� ��� � � � �L�L�5�!�5�5� 6� 6� 6�!�$�&�7\�TW�XY�TZ�TZ�7\�7\�]�]�]�^���� � � � � � ����� ���s�E E� F0�A F+�%F0�+F0c ��NK� |jjst��|j_ddl}ddl}|���}|�|��5|jj���ddd��n #1swxYwY|���}ttd|���g���S#t$rW}t� d|����ttddt|�������g���cYd}~Sd}~wwxYw)zGet detailed lead reportrNrRrSrTzError getting lead report: u❌ Error getting report: )r/rr�io� contextlib�StringIO�redirect_stdout�generate_lead_report�getvaluer rrVrWrXrY)r2rPr�r��f� report_textrZs r)rEz&LeadNurturingMCPServer.get_lead_reportFs����� ��:�&� 5�&2�n�n�� �#� �I�I�I� � � � �� � � � �A��+�+�A�.�.� ;� ;�� �#�8�8�:�:�:� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;� ;���� ;� ;� ;� ;��*�*�,�,�K�!�$�&�{�C�C�C�D���� ��� � � � �L�L�:�q�:�:� ;� ;� ;�!�$�&�7\�TW�XY�TZ�TZ�7\�7\�]�]�]�^���� � � � � � ����� ���sC�AC�B�8 C�B�C� B� 6C� D$� A D�D$�D$c ��K� |�di��} tdd��5}tj|��}ddd��n #1swxYwYn#t$ri}YnwxYw|�|��tdd��5}tj||d���ddd��n #1swxYwYt�d|����ttd d t|� ������� ��g� ��S#t$rW}t�d |����ttd dt|����� ��g� ��cYd}~Sd}~wwxYw)zUpdate configurationrGznurturing_config.json�rN�w�)�indentzUpdated configuration: rRu1✅ Configuration updated successfully! Updated: rSrTzError updating config: u❌ Error updating config: )rj�open�json�load�FileNotFoundError�update�dumprWr`r r�list�keysrVrXrY)r2rP�config_updatesr�rGrZs r)rFz$LeadNurturingMCPServer.update_config`sQ���� �&�]�]�8�R�8�8�N� ��1�3�7�7�*�1�!�Y�q�\�\�F�*�*�*�*�*�*�*�*�*�*�*����*�*�*�*���$� � � ����� ���� �M�M�.� )� )� )��-�s�3�3� /�q�� �&�!�A�.�.�.�.� /� /� /� /� /� /� /� /� /� /� /���� /� /� /� /� �K�K�B�.�B�B� C� C� C�!�$��C�%)�.�*=�*=�*?�*?�%@�%@�C�C�������� ��� � � � �L�L�6�1�6�6� 7� 7� 7�!�$�&�7]�UX�YZ�U[�U[�7]�7]�^�^�^�_���� � � � � � ����� ���s��D�A�A � A� A�A�A�A�D� A'�$D�&A'�'(D�B3�' D�3B7�7D�:B7�;A!D� E>�'A E9�3E>�9E>c ��jK� |�d��}|s ttdd���g���S|jjst ��|j_d}d|jjrdnd �d |jjr|jj�d ��nd �d |jj �d�� ��}ddl m }ddl }|��}||d<d|d<||d<|�|��|�|��������}|jjj�������dd|i������t.�d|����ttdd|�����g���S#t2$rW} t.�d| ����ttddt7| �������g���cYd} ~ Sd} ~ wwxYw)zSend test emailrIrRu❌ Email address requiredrSrTz"Test Email - Lead Nurturing SystemzG This is a test email from your Lead Nurturing System. System Status: �Running�Stoppedz Last Run: rxryz Total Runs: zp If you receive this email, your system is working correctly! Best regards, Lead Nurturing System r)� EmailMessageN�Tozbrandon@quantralabs.com�From�Subject�me�raw)�userId�bodyzSent test email to u$✅ Test email sent successfully to zError sending test email: u❌ Error sending test email: )rjr rr/rrrrr�r�strip� email.messager��base64� set_content�urlsafe_b64encode�as_bytes�decode�service�users�messages�send�executerWr`rVrXrY) r2rP� test_email� test_subject� test_bodyr�r��msg�encodedrZs r)rHz&LeadNurturingMCPServer.send_test_email�s�����6 �"���w�/�/�J�� �%�(�f�;W�X�X�X�Y������:�&� 5�&2�n�n�� �#�@�L� �"�Z�2�A� � � � � �AE� �@S� `�4�:� � '� '�(;� <� <� <�Y`� � � �Z� "� � � ����� � 3� 2� 2� 2� 2� 2� �M�M�M��,�.�.�C�"�C��I�3�C��K�)�C� �N� �O�O�I� &� &� &��.�.�s�|�|�~�~�>�>�E�E�G�G�G� �J� � '� -� -� /� /� 8� 8� :� :� ?� ?���W�%� @� � ��g�i�i�i� �K�K�:�j�:�:� ;� ;� ;�!�$��L� �L�L�������� ��� � � � �L�L�9�a�9�9� :� :� :�!�$�&�7`�X[�\]�X^�X^�7`�7`�a�a�a�b���� � � � � � ����� ���s$�6G�FG� H2�A H-�'H2�-H2c ��K� |�dd��} tdd��5}|���}t|��|kr || d�n|}ddd��n #1swxYwYd�|��}t t ddt|���d |�d �� ��g� ��S#t$r#t t dd � ��g� ��cYSwxYw#t$rW}t� d|����t t ddt|����� ��g� ��cYd}~Sd}~wwxYw)zGet recent logsrLrMrr�N�rRu📋 **Recent Logs (Last z lines):** ``` z ```rSrTzNo log file foundzError getting logs: u❌ Error getting logs: ) rjr�� readlinesrn�joinr rr�rVrWrXrY)r2rPrLr�� log_lines� recent_logs�log_textrZs r)rKzLeadNurturingMCPServer.get_logs�s���� ��M�M�'�2�.�.�E� ��*�C�0�0�^�A� !� � � � �I�8;�I����8N�8N�)�U�F�G�G�"4�"4�T]�K�^�^�^�^�^�^�^�^�^�^�^����^�^�^�^��7�7�;�/�/��%�(�#�m��[�9I�9I�m�m�^f�m�m�m����������%� � � �%�(�f�;N�O�O�O�P������� ����� � � � � �L�L�3��3�3� 4� 4� 4�!�$�&�7Z�RU�VW�RX�RX�7Z�7Z�[�[�[�\���� � � � � � ����� ���s_�C0�C�5A,� C�,A0�0C�3A0�4A C�*C-�*C0�,C-�-C0�0 E�:A E �E� Er9c��K�|jj�r= t�d��|jjst ��|j_|jj���|jxjdz c_tj ��|j_ t�d|�d���tj |dz���d{V��nc#t$rV}|jxjdz c_t�d|����tj d���d{V��Yd}~nd}~wwxYw|jj��;dSdS) zBackground nurturing loopzStarting nurturing cycle...rtz'Nurturing cycle completed. Next run in z hours.iNzError in nurturing loop: i,)r/rrWr`rrrurrrvrrk�sleeprVrrX)r2r9rZs r)rmz&LeadNurturingMCPServer._nurturing_loop�sq�����j�#� )� )�� � �9�:�:�:��z�*�9�*6�.�.�D�J�'�� �#�7�7�9�9�9�� �%�%��*�%�%�&.�l�n�n�� �#�� � �]�n�]�]�]�^�^�^��m�N�T�$9�:�:�:�:�:�:�:�:�:�:��� )� )� )�� �&�&�!�+�&�&�� � �<��<�<�=�=�=��m�C�(�(�(�(�(�(�(�(�(�(�(�(�(�(����� )����!�j�#� )� )� )� )� )s�C C� D;�%A D6�6D;c ��NK�t�d��t��4�d{V��\}}|j�||t dd|j�dd���������d{V��ddd���d{V��dS#1�d{V��swxYwYdS)zRun the MCP serverz%Starting Lead Nurturing MCP Server...Nr-z1.0.0)�notification_options�experimental_capabilities)� server_name�server_version� capabilities)rWr`r r.�runr �get_capabilities)r2� read_stream� write_streams r)r�zLeadNurturingMCPServer.run�sW����� � �;�<�<�<��>�>� � � � � � � �%@�k�<��+�/�/���%� 7�#*�!%��!=�!=�-1�26�">�"�"���� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ���� � � � � � s�AB� B�!BN)r r!r"r#r3r0r1rrYrr r7rBrCrDrErFrHrKr&rmr�r'r(r)r+r+7s�������.�.�%�%�%� }�}�}�~6�6�6� �t�C��H�~� �.� � � � �D�d�3��8�n�������.��S�#�X���>�����6'�$�s�C�x�.�'�^�'�'�'�'�R�t�C��H�~��.�����4!�T�#�s�(�^�!��!�!�!�!�F8�t�C��H�~�8�.�8�8�8�8�t��S�#�X���>�����<)�C�)�)�)�)�.����r(r+c��ZK�t��}|����d{V��dS)zMain entry pointN)r+r�)r.s r)�mainr�s7���� #� %� %�F� �*�*�,�,���������r(�__main__),r#rkr��logging�osrfra�timer�typingrrrr� dataclassesr� mcp.serverr �mcp.server.modelsr �mcp.server.stdior � mcp.typesr r rrrrrr� lead_nurturerr� basicConfig�INFO� FileHandler� StreamHandler� getLoggerr rWrr+r�r�r'r(r)�<module>r�sI���� ���� � � � ����� � � � � � � � � � � � � � � � �������,�,�,�,�,�,�,�,�,�,�,�,�!�!�!�!�!�!�������3�3�3�3�3�3�)�)�)�)�)�)� � � � � � � � � � � � � � � � � � � � �'�&�&�&�&�&���� �,� A����,�-�-����������� �� �8� $� $�� �,�,�,�,�,�,�,� ��,�K�K�K�K�K�K�K�K�Z���  �z����G�K�����������r(

Latest Blog Posts

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/brandononchain/GMAIL-MCP-Agent'

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