Skip to main content
Glama

JSON DB MCP Server

by OSoliman330
main.cpython-312.pyc9.1 kB
� Qi�h�� ���ddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z m Z ddlmZej j#ej j%e�d�Zej*�Zdeeeeeefffd�Zdeeeeeeffddfd �Zdeeeeeeffd eddfd �Zdeeeeeeffd ed ede eeeeeefffd �Zd edeeefdeeeffd�Zd ed edeeeffd�Zd edeeeeffd�Zd ed eddfd�Z d ed edeeefdeeeffd�Z!e d��Z"e"jGd�e d�fd edeeeffd��Z$e"jKd�d ed efd��Z&e"jKd�d efd��Z'e"jQd�d ed efd��Z)e"jUd�e d�fd ed edeeeffd��Z+ed��Z,e,j[d d!d"�#�d edeeeffd$��Z.e,j[d%d&d'�#�d ed efd(��Z/e,j[d)d*d+�#�d efd,��Z0e,j[d-d.d/�#�d ed efd0��Z1e,j[d1d2d3�#�d ed edeeeffd4��Z2e,jg�Z4e"jkd5e4�e"jKd6�d7��Z6e7d8k(rddl8Z8e8jrd9d:d;d<�=�yy)>�N)�Any�Dict�List�Optional�Tuple)�FastAPI� HTTPException�Body)�FastMCPzdb.json�returnc��tjjt�siSt tdd��5} t j |�cddd�S#t j$ricYcddd�SwxYw#1swYyxYw)z5Load DB from disk; return {} if file missing/invalid.�r�utf-8��encodingN)�os�path�exists�DB_PATH�open�json�load�JSONDecodeError)�fhs �+/home/osoliman/workspace/mcp-server/main.py�load_dbrsu�� �7�7�>�>�'� "�� � �g�s�W� -��� ��9�9�R�=�����#�#� ��I� �� ����s(�A<�A�A9�-A<�8A9�9A<�<B�dbc���tdz}t|dd��5}tj||dd��ddd�t j |t�y#1swY�$xYw) zAtomic write to disk.z.tmp�wrr�F)�indent� ensure_asciiN)rrr�dumpr�replace)r�tmprs r�save_dbr&sO�� �F� �C� �c�3�� )�8�R� � � �"�b���7�8��J�J�s�G��8�8�s �A�A� collectionc��||vrg||<yy�N�)rr's r�ensure_collectionr+"s�������:����item_idc��t|j|g��D]1\}}t|jd��t|�k(s�-||fcSy)N�id)NN)� enumerate�get�str)rr'r-�idx�its r� find_itemr5&sN���R�V�V�J��3�4����R� �r�v�v�d�|� ��G� � ,���7�N�� r,�payloadc�,�t5t�}t||�tt j ��}d|i}t |t�r|j|�||j|�t|�|cddd�S#1swYyxYw)Nr/) �_lockrr+r2�uuid�uuid4� isinstance�dict�update�appendr&)r'r6rr-�items r� _db_add_itemr@0sv�� � � �Y���"�j�)��d�j�j�l�#���g��� �g�t� $� �K�K�� � �:����d�#��� �� � � �s �A9B � Bc��t5t�}t|||�\}}|� tdd���|cddd�S#1swYyxYw�Ni�zItem not found)� status_code�detail)r8rr5r )r'r-r�_r?s r� _db_get_itemrF<sI�� �� �Y���B� �G�4���4� �<��C�8H�I� I�� ���s �+<�Ac�r�t5t�}|j|g�cddd�S#1swYyxYwr))r8rr1)r'rs r�_db_list_itemsrHDs/�� �&� �Y���v�v�j�"�%�&�&�&�s�-�6c���t5t�}t|||�\}}|� tdd���||j |�t |�ddd�y#1swYyxYwrB)r8rr5r �popr&)r'r-rr3r?s r�_db_delete_itemrKIs_�� �� �Y���b�*�g�6� ��T� �<��C�8H�I� I� �:����3���� � ���s �A A�A"c���t5t�}t|||�\}}|� tdd���t |t �r|j |�||||<t|�|cddd�S#1swYyxYwrB)r8rr5r r;r<r=r&)r'r-r6rr3r?s r�_db_update_itemrMRst�� � � �Y���b�*�g�6� ��T� �<��C�8H�I� I� �g�t� $� �K�K�� �"��:��s���� �� � � �s �AA0�0A9z JSON DB API)�title�/db/{collection}.c�$�t||�}d|d�S�NT)�okr?�r@)r'r6r?s r�add_itemrTbs�� � �G� ,�D��� %�%r,z/db/{collection}/{item_id}c��t||�Sr)�rF�r'r-s r�get_itemrXg��� � �G� ,�,r,c��t|�Sr)�rH�r's r� list_itemsr]k� �� �*� %�%r,c�"�t||�ddiS�NrRT�rKrWs r� delete_itemrbo����J��(� �$�<�r,c�&�t|||�}d|d�SrQ�rM)r'r-r6r?s r� update_itemrfts�� �:�w�� 8�D��� %�%r,�JsonCollectionsDB)�namez db.add_itemz Add DB itemzAdd item to JSON DB)rhrN� descriptionc� �dt||�d�SrQrS)r'r6s r� mcp_add_itemrk}s��� �Z�� A� B�Br,z db.get_itemz Get DB itemzGet item by idc��t||�Sr)rVrWs r� mcp_get_itemrm�rYr,z db.list_itemsz List DB itemszList items in a collectionc��t|�Sr)r[r\s r�mcp_list_itemsro�r^r,zdb.delete_itemzDelete DB itemzDelete item by idc�"�t||�ddiSr`rarWs r�mcp_delete_itemrq�rcr,zdb.update_itemzUpdate DB itemzUpdate an itemc�"�dt|||�d�SrQre)r'r-r6s r�mcp_update_itemrs�s���� �G�W� M� N�Nr,z/mcp�/c��dddd�S)NTrOz/mcp/)rR�rest�mcp_sser*r*r,r�healthrx�s��� 2�w� G�Gr,�__main__zmain:appz0.0.0.0i@T)�host�port�reload):rrr9� threading�typingrrrrr�fastapirr r �fastmcpr r�join�dirname�__file__r�Lockr8r2rr&r+�intr5r@rFrHrKrM�app�postrTr1rXr]�deleterb�putrf�mcp�toolrkrmrorqrs�sse_app� mcp_sse_app�mountrx�__name__�uvicorn�runr*r,r�<module>r�sh�� � � ��3�3�0�0�� �'�'�,�,�r�w�w���x�0�)� <��� �������c�4��S�#�X��/�/�0����S�$�t�C��H�~�.�.�/��D���$�s�D��c�3�h��$8�8�9��s��t��� �S�$�t�C��H�~�&� &�'��58��CF�� �8�C�=�(�4��S��>�2� 2�3�� �S� �4��S��>� �d�3��8�n� ��S��3��4��S��>��&�s�&�t�D��c��N�';�&� ���c��d�� �� �c� �D��c��N� �t�TW�Y\�T\�~� ��M�"����� ��8<�S� �&��&�t�C��H�~�&��&���� %�&�-��-�s�-�'�-���� ��&�3�&��&���� (�)��C��#��*����� %�&�IM�c��&�C�&�#�&��S�#�X��&�'�&� �&�'�����}�M�?T��U�C�S�C�4��S��>�C�V�C����}�M�?O��P�-�S�-�3�-�Q�-�����o�C_��`�&�s�&�a�&�����'7�EX��Y����c��Z������'7�EU��V�O��O�c�O�D��c��N�O�W�O��k�k�m� �� � �&�+�������H��H� �z����G�K�K� ���d�C�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/OSoliman330/json-db-mcp'

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