Skip to main content
Glama

MCP-Python

by rhabraken
server.cpython-313.pyc10.7 kB
� ཫg���R�SSKrSSKrSSKrSSKJr SSKJrJr SSKJr SSK J r J r J r SSK Jr \"5 SSjrSr\"5r\"\R&R)S S 55r\R&R)S 5r\"S 5r\R1S \3S9S\4Sj5r\R1S\3S9S\S\4Sj5r\R1S\3S9S\\S\4Sj5rSr\R1\"5S9SS\S\\S\4Sjj5r \!S:Xa\RE5 gg)�N)�Optional)�datetime�date)�FastMCP)� create_engine�inspect�text)� load_dotenvc�B�[RSn[USSU0S9$)N�DB_URL� AUTOCOMMIT�readonly)�isolation_level�execution_options)�os�environr)r�connection_strings �-/Users/rick/Projects/mcp-python/app/server.py� get_enginer s(��� � �8�,�� �*�L�]g�iq�\r� s�s�c �^�[SS9nUR5nURnSURRSSR SURR 55SURSURS URS 3 sSSS5 $!,(df  g=f) NT�rz Connected to z version �.c3�8# �UHn[U5v� M g7f�N)�str)�.0�xs r� <genexpr>�get_db_info.<locals>.<genexpr>s���#W�4V�q�C��F�F�4V�s�z database 'z' on z as user '�') r�connect�url�dialect�name�join�server_version_info�database�host�username)�engine�connr#s r� get_db_infor-s��� �� &�F� ��� �T��j�j������ 3� 3�4�5��8�8�#W�F�N�N�4V�4V�#W�W�X�Y� �\�\�N�%����z�:��L�L�>��,� � � �s �A:B� B,�EXECUTE_QUERY_MAX_CHARSi��CLAUDE_LOCAL_FILES_PATHz MCP Alchemyz;Return all table names in the database separated by comma. )� description�returnc�j�[5n[U5nSRUR55$)N�, �rrr&�get_table_names)r+� inspectors r�all_table_namesr7"s*�� �\�F����I� �9�9�Y�.�.�0� 1�1rzXReturn all table names in the database containing the substring 'q' separated by comma. �qc�^�[5n[U5nSRU4SjUR555$)Nr3c3�8># �UHnTU;dM Uv� M g7fr�)rrr8s �rr�%filter_table_names.<locals>.<genexpr>.s����F� ;�1�q�A�v�Q�Q� ;�s� � r4)r8r+r6s` r�filter_table_namesr=(s3����\�F����I� �9�9�F� � 9� 9� ;�F� F�Frz>Returns schema and relation information for the given tables. � table_namesc�n^^�Sm[5n[U5mSRUU4SjU55$)Nc ���URU5nURU5n[URU5S5nUS3/nSS1nUH�nSU;aUS UR S5nX�;aS/O/[ UR S55/-UR 5V V s/sHup�U (dMX�;aU OU S U 3PM sn n -n URS US 3S RU 5-5 M� U(acURS S/5 UHJn S RU S5n U SnS RU S5nURSU SUSU35 ML SRU5$s sn n f)N�constrained_columns�:�nullable� autoincrement�commentr%z primary key�type�=z �: r3�z Relationships:�referred_table�referred_columnsz z -> r� ) � get_columns�get_foreign_keys�set�get_pk_constraint�popr�items�appendr&�extend)r6� table_name�columns� foreign_keys� primary_keys�result� show_key_only�columnr%�k�v� column_parts�fkrArJrKs r�format�"schema_definitions.<locals>.format2s����'�'� �3�� �1�1�*�=� ��9�6�6�z�B�CX�Y�Z� ��L��"�#��$�_�5� ��F��F�"��9�%��:�:�f�%�D�/3�/C�]�O��PS�� � �6�"�Q$�P%�%�\b�\h�\h�\j�'p�\j�TX�TU�no�(O�Q�-?���s�!�A�3�Z�(O�\j�'p�q�L� �M�M�D���b�/�D�I�I�l�,C�C� D� � � �M�M�2�3�4� 5�"��&*�i�i��3H�0I�&J�#�!#�$4�!5��#'�9�9�R�0B�-C�#D� �� � ��':�&;�4��?O�q�Qa�Pb�c�d� #� �y�y�� � ��(qs �! E0 �2E0 rLc3�6># �UHnT"TU5v� M g7frr;)rrUr`r6s ��rr�%schema_definitions.<locals>.<genexpr>Os����Q�[�z�V�I�z�2�2�[�s�)rrr&)r>r+r`r6s @@r�schema_definitionsrd0s/���!�6�\�F����I� �9�9�Q�[�Q� Q�Qrc��S[S3/n[(aURS5 UR[5 SR U5$)Nz]Execute a SQL query and return results in a readable format. Results will be truncated after z characters.zSClaude Desktop may fetch the full result set via an url for analysis and artifacts.� )r.�CLAUDE_FILES_PATHrS�DB_INFOr&)�partss r�execute_query_descriptionrjQsR�� g�h�hA�AM� N� �E��� � � �j�k� �L�L��� �8�8�E�?�r�query�paramsc�^ �Sm U 4SjnU 4Sjn[SS9nUR5nUR[U5U=(d 05nUR(dSUR S3sSSS5 $UR 5nUR5nU(d SSS5 gUn U"Xy5n [U 5[:�a@[U 5S :�a1U SS n U"Xy5n [U 5[:�a[U 5S :�aM1U S [U5S 3- n [U 5[U5:aU S - n U"X�5=n (aX�- n U sSSS5 $!,(df  g=f![an S[U 53sSn A $Sn A ff=f)Nc�v�Ucg[U[[45(aUR5$[ U5$)z<Format a value for display, handling None and datetime types�NULL)� isinstancerr� isoformatr)�vals r� format_value�#execute_query.<locals>.format_value\s1�� �;�� �c�H�d�+� ,� ,��=�=�?� "��3�x�rc ��>�/n[US5HZup4URUS35 [X5H!upVURUST"U535 M# URS5 M\ SRU5$)z&Format rows in a clean vertical format�z. rowrHrIrL)� enumeraterS�zipr&)rV�rows�output�i�row�colrrrss �r�format_results�%execute_query.<locals>.format_resultsdsx�������a�(�F�A� �M�M�Q�C�u�+� &���-���� � ���R� �S�(9�':�;�<�.� �M�M�"� � )� �y�y�� � rc�>�[(dgU4SjnUVs/sH o2"U5PM nn[R"[R"U5R 55R 5nUS3n[[RR[U5S5n[R"XG5 SSS5 SUS3$s snf!,(df  N=f)z1Save complete result set for Claude if configuredrIc�@>�UVs/sH nT"U5PM sn$s snfrr;)r|rrrss �r� serialize_row�?execute_query.<locals>.save_full_results.<locals>.serialize_rowss ���14�5��#�L��%��5� 5��5s�z.json�wNzJ Full result set url: https://cdn.jsdelivr.net/pyodide/claude-local-files/z� (format: [[row1_value1, row1_value2, ...], [row2_value1, row2_value2, ...], ...]]) (ALWAYS prefer fetching this url in artifacts instead of hardcoding the values if at all possible)) rg�hashlib�sha256�json�dumps�encode� hexdigest�openr�pathr&�dump) ryrVr�r|�data� file_hash� file_name�frss �r�save_full_results�(execute_query.<locals>.save_full_resultsns���� � �� 6�/3�3�d�s� �c�"�d��3��N�N�4�:�:�d�#3�#:�#:�#<�=�G�G�I� � �k��'� � �"�'�'�,�,�0�)�<�c� B�a� �I�I�d� �C�Z�Zc�Yd� r� r� s��4�C� B�s�C �$C� CFrz Success: z rows affectedzNo rows returnedrv�����z Result: z rowsz (output truncated)zError: ) rr"�executer � returns_rows�rowcount�keys�fetchall�lenr.� Exceptionr)rkrlr~r�r+� connectionrYrV�all_rows�displayed_rowsrz� full_results�erss @r� execute_queryr�Zsl����!�s�( "��U�+�� �^�^� ���'�'��U� �V�\�r�B�F��&�&�"�6�?�?�"3�>�B� � � �k�k�m�G����(�H��)�� �&�N�#�G�<�F��f�+� 7�7�C��<O�RS�<S�!/���!4��'��@���f�+� 7�7�C��<O�RS�<S� � �3�x�=�/��7� 7�F��>�"�S��]�2��/�/��0��C�C�|�C��&���9� � ��: �"���Q���!�!��"�s[�E&�AE�0 E&�:(E�"E&�+AE�AE� E&� E#�E&�#E&�& F�0 F�=F�F�__main__)Tr)#rr�r��typingrrr�mcp.server.fastmcpr� sqlalchemyrrr �dotenvr rr-rh�intr�getr.rg�mcp�toolrr7r=�listrdrj�dictr��__name__�runr;rr�<module>r�s������#�&�3�3�� � �t�-� �-���b�j�j�n�n�-F��M�N���J�J�N�N�#<�=���m������S�T[�S\�]��^�2��2�_�2� ���j�kr�js�t� ��G�#�G�#�G��G� ���V�W^�V_�`��a�R�D��I�R�#�R�b�R�@����/�1��2�G"��G"�h�t�n�G"��G"�3�G"�R �z���G�G�I�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/rhabraken/mcp-python'

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