Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
mcp_resources.cpython-312.pyc18.1 kB
� /I1h�5��J�dZddlmZmZmZmZmZddlZddlZddl Z ddl Z ddl Z Gd�de j�Z Gd�dej�Zej ej"dej$ej&� �g� �ej(j*D]-Zeeej$�s�ej1ed���/ej2d �ZGd �d �ZGd�d�Ze�ZGd�d�Ze�Zde dee efdee e fde fd�Z!y)u� NetBrain MCP 资源模块 此模块提供了MCP资源管理和提供功能。 MCP资源是客户端可以访问的数据对象,通过URI标识。 �)�Dict�List�Any�Optional�UnionNc���eZdZ�fd�Z�xZS)�JsonEncoderWithChinesec�F��t|t�r|St�|� |�S�N)� isinstance�str�super�default)�self�obj� __class__s ��F:\NetBrainMCP\mcp_resources.pyrzJsonEncoderWithChinese.defaults!��� �c�3� ��J��w��s�#�#�)�__name__� __module__� __qualname__r� __classcell__�rs@rr r s ���$�$rr c�*��eZdZd�fd� Z�fd�Z�xZS)� JsonFormatterc�(��t�|�|||�yr )r�__init__)r�fmt�datefmt�stylers �rrzJsonFormatter.__init__s��� ����g�u�-rc�f��t�|�|�}|jdd��jd�S)N�utf-8�replace)�errors)r�format�encode�decode)r�record� log_recordrs �rr%zJsonFormatter.formats2����W�^�F�+� �� � ��� �;�B�B�7�K�Kr)NN�%)rrrrr%rrs@rrrs���.�L�Lrrz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�stream)�levelr%�handlers� mcp_resourcesc�,�eZdZdZdZdZdZdZdZdZ dZ y ) � ResourceType�device� credential�topology�system�config�log�report�scanN) rrr�DEVICE� CREDENTIAL�TOPOLOGY�SYSTEM�CONFIG�LOG�REPORT�SCAN�rrr0r0/s*�� �F��J��H� �F� �F� �C� �F� �Drr0c ��eZdZdZd�Zdedefd�Zddeded ee d e ee ffd �Z ded ed ee eeffd �Z ded efd�Zddeed efd�Zd ee ee ffd�Zy)�ResourceManageru0MCP资源管理器,负责资源注册和提供c�&�i|_i|_i|_i|_d|_t j jt j�d�|_ t j j|j�sB t j|j�tjd|j���tjd�y#t$r+}tjdt!|����Yd}~�Ed}~wwxYw)Ni,�resource_cacheu已创建资源缓存目录: u 无法创建资源缓存目录: u资源管理器初始化完成)� resources�resource_patternsrE�cache_expiration�default_cache_ttl�os�path�join�getcwd� cache_dir�exists�makedirs�logger�info� Exception�warningr )r�es rrzResourceManager.__init__=s������!#��� ��� "���!$��������b�i�i�k�3C�D����w�w�~�~�d�n�n�-� L�� � �D�N�N�+�� � �;�D�N�N�;K�L�M� � � �4�5��� L����!A�#�a�&��J�K�K�� L�s�AC� D�%!D � D� uri_pattern� resource_typec��������fd�}|S)u� 注册资源装饰器 Args: uri_pattern: 资源URI模式,如"device://{id}" resource_type: 资源类型 Returns: 装饰器函数 c�����jvrtjd��d��|�d��j�<tjd��d��d��|S)Nu资源URI模式已存在: �,将被覆盖)�func�typeu已注册资源: u (类型: �))rGrQrTrR)r[rWrrVs ���r� decoratorz4ResourceManager.register_resource.<locals>.decoratorZse����d�4�4�4����!;�K�=��X�Y��%�3�D� "� "�;� /� �K�K�+�K�=� �=�/�QR�S� T��KrrA)rrVrWr^s``` r�register_resourcez!ResourceManager.register_resourceOs��� ��rN�uri� use_cache� cache_ttl�returnc ��~K�|r�||jvr�||jvrU|j|tjj�kDr'tj d|���|j|Stj d|���||jvr |j|=||jvr |j|=|r�|j |�}tjj|�r� t|dd��5}tj|�}ddd�dvr�tjj|d�}|tjj�kDr>tj d|���|d |j|<||j|<|d Sd} i} |j"j%�D]"\} } |j'|| �} | s�| d } | } n| stjd |���d d|��iS t)| �r| di| ���d{���n| }|r�||j|<|xs |j*}tjj�tj,|��z}||j|< |j |�}t|dd��5}tj.||j1�d�|dd��ddd�|S|S#1swY���xYw#t$r,}tjd t!|����Yd}~��{d}~wwxYw7��#1swY|SxYw#t$r,}tjdt!|����Yd}~|Sd}~wwxYw#t$r>}tj3d|�dt!|����d dt!|���icYd}~Sd}~wwxYw�w)u� 获取资源 Args: uri: 资源URI use_cache: 是否使用缓存 cache_ttl: 缓存生存时间(秒) Returns: 资源内容 u从缓存获取资源: u资源缓存已过期: �rr")�encodingN� expirationu从文件缓存加载资源: �datau 加载资源缓存文件失败: r[u&未找到匹配的资源处理函数: �erroru资源不存在: )�seconds�w)rhrgF��� ensure_ascii�indentu 保存资源缓存文件失败: u获取资源失败: u , 错误: rA)rErH�datetime�nowrQrR�_get_cache_filenamerJrKrO�open�json�load� fromisoformatrSrTr rG�items�_match_uri_pattern�callablerI� timedelta�dump� isoformatri)rr`rarb� cache_file�f� cache_datargrU� handler_func� parameters�patternrR� match_result�result�ttls r� get_resourcezResourceManager.get_resourcehs����� ��� 3� 3�3��d�+�+�+��0E�0E�c�0J�X�M^�M^�Mb�Mb�Md�0d�� � �5�c�U�;�<��*�*�3�/�/�� � �5�c�U�;�<��$�-�-�-��+�+�C�0��$�/�/�/��-�-�c�2� ��1�1�#�6�J��w�w�~�~�j�)� P��j�#��@�A�%)�Y�Y�q�\� �A�$�z�1�%-�%6�%6�%D�%D�Z�P\�E]�%^� �%��(9�(9�(=�(=�(?�?�"�K�K�*G��u�(M�N�7A�&�7I�D�/�/��4�9C�D�1�1�#�6�#-�f�#5�5� � �� �!�3�3�9�9�;�M�G�T��2�2�3��@�L��#�F�|� �)� �� <�� �N�N�C�C�5�I� J��0���6�7� 7� >�9A�,�9O�<�5�*�5�5�5�Ua�F��+1��#�#�C�(��9�4�#9�#9��%�.�.�2�2�4�x�7I�7I�RU�7V�V� �-7��%�%�c�*�P�!%�!9�!9�#�!>�J��j�#��@�A�� � �$*�*4�*>�*>�*@�#��5��<�A��M�6�M�gA�@��!�P��N�N�%E�c�!�f�X�#N�O�O��P��(6��A��M��!�P��N�N�%E�c�!�f�X�#N�O�O��M��P��� >� �L�L�/��u�J�s�1�v�h�G� H��3�C��F�8�<�=� =�� >�s��C4N=�7K3�K&�B K3�'9N=�!+N=� M3�#L+�$A+M3�L;�/+L.�L;�"M3�#N=�$M3�%N=�&K0�+K3�3 L(�<!L#�N=�#L(�(N=�+M3�.L8�3L;�6M3�7N=�8L;�; M0�!M+�%M3�*N=�+M0�0M3�3 N:�<3N5�/N:�0N=�5N:�:N=r�c� �|jd�}|jd�}t|�t|�k7ryi}tt||��D].\}\}}d|vrd|vr|j d�} ||| <�(||k7s�.y|S)u� 匹配URI模式 Args: uri: 资源URI pattern: URI模式 Returns: 匹配参数或None �/N�{�}z{})�split�len� enumerate�zip�strip) rr`r�� pattern_parts� uri_parts�params�i� pattern_part�uri_part� param_names rrxz"ResourceManager._match_uri_pattern�s��� � � �c�*� ��I�I�c�N� � �}� ��Y�� /����+4�S�� �5R�+S� '�A�'� �h��l�"�s�l�':�)�/�/��5� �%-��z�"���)��,T�� rc���|jdd�jdd�jdd�jdd�}tjj|j|�d��S)u� 获取缓存文件名 Args: uri: 资源URI Returns: 缓存文件路径 �:�_r��.�\�.json)r#rJrKrLrN)rr`�safe_uris rrrz#ResourceManager._get_cache_filename�s]���;�;�s�C�(�0�0��c�:�B�B�3��L�T�T�UY�[^�_���w�w�|�|�D�N�N�x�j��,>�?�?rc�j� |r�||jvr |j|=||jvr |j|=|j|�}tjj |�rtj |�tjd|���y|jj�|jj�tjj |j�rstj|j�D]Q}|jd�s�tj tjj|j|���Stjd�y#t$r+}tjdt!|����Yd}~yd}~wwxYw)u� 清除资源缓存 Args: uri: 要清除的特定资源URI,如果为None则清除所有缓存 Returns: 是否成功清除缓存 u已清除资源缓存: r�u已清除所有资源缓存Tu清除缓存失败: NF)rErHrrrJrKrO�removerQrR�clearrN�listdir�endswithrLrSrir )rr`r}�filenamerUs r� clear_cachezResourceManager.clear_cache�sF�� ���$�-�-�-��+�+�C�0��$�/�/�/��-�-�c�2�"�5�5�c�:� ��7�7�>�>�*�-��I�I�j�)�� � �5�c�U�;�<���#�#�)�)�+��%�%�+�+�-��7�7�>�>�$�.�.�1�$&�J�J�t�~�~�$>��#�,�,�W�5��I�I�b�g�g�l�l�4�>�>�8�&L�M�%?�� � �9�:���� � �L�L�/��A��x�8� 9��� �s&�BE>�BE>�)AE>�> F2�!F-�-F2c ���g}|jj�D]I\}}|j||dt|d�r|djr|djndd���K|S)uf 列出可用的资源类型 Returns: 资源类型列表 r\r[� 无描述)rVr\� description)rGrw�appendry�__doc__)rrFr�rRs r�list_available_resourcesz(ResourceManager.list_available_resourcessu��� �!�3�3�9�9�;�M�G�T� � � �&��V� �7?��V� �7M�RV�W]�R^�Rf�Rf�t�F�|�3�3�lw�� �<��r)TNr )rrrr�rr r_�boolr�intrrr�rxrrr�rr�rArrrCrC:s���:�6�$�S����2U>�c�U>�d�U>�h�WZ�m�U>�gk�lo�qt�lt�gu�U>�n�c��C��H�T�#�s�(�^�<T��B @�s� @�s� @�&�x��}�&��&�P�$�t�C��H�~�*>�rrCc�x�eZdZdZd�Zdefd�Zdedeefd�Zdede ee fdeefd�Z de e eeffd �Z y ) �PromptTemplateManageru6MCP提示模板管理器,负责模板注册和渲染c�<�i|_tjd�y)Nu$提示模板管理器初始化完成)� templatesrQrR)rs rrzPromptTemplateManager.__init__/s������ � �:�;r�namec������fd�}|S)u� 注册提示模板装饰器 Args: name: 模板名称 Returns: 装饰器函数 c�����jvrtjd��d��|�j�<tjd����|S)Nu提示模板已存在: rZu已注册提示模板: )r�rQrTrR)r[r�rs ��rr^z:PromptTemplateManager.register_template.<locals>.decorator=sL����t�~�~�%����!8���o�N�O�#'�D�N�N�4� � �K�K�1�$��8� 9��KrrA)rr�r^s`` r�register_templatez'PromptTemplateManager.register_template3s��� ��rrcc�f�||jvry|j|}t|�r|�S|S)u� 获取提示模板 Args: name: 模板名称 Returns: 模板内容或None N)r�ry)rr�� template_funcs r� get_templatez"PromptTemplateManager.get_templateHs5�� �t�~�~� %�����t�,� �"*�=�"9�}��L�}�Lr�contextc �&�|j|�}|sy|}|j�D]g\}}d|�d�}t|t�r|j ||�}�/t|t �s�@|j |t j|dd���}�i|S)u� 渲染提示模板 Args: name: 模板名称 context: 渲染上下文 Returns: 渲染后的模板或None Nz{{z}}Frlrm)r�rwr r r#�dictrt�dumps)rr�r��templater��key�value� placeholders r�render_templatez%PromptTemplateManager.render_templateXs����$�$�T�*������!�-�-�/�J�C�� ���T�*�K��%��%���� �U�;���E�4�(���� �T�Z�Z��TY�bc�5d�e�� *�� rc��|jj�D��cgc]-\}}|t|�r|jr |jndd���/c}}Scc}}w)uf 列出所有可用的提示模板 Returns: 模板列表 r�)r�r�)r�rwryr�)rr�r[s r�list_templatesz$PromptTemplateManager.list_templatesrsY��#�n�n�2�2�4�  � 5� ��d��/7��~�$�,�,�t�|�|�T_� �5�  � �� s�2AN)rrrr�rr r�rr�rrr�rr�rArrr�r�,so��@�<��c��*M��M��#��M� �C��$�s�C�x�.��X�c�]��4  ��T�#�s�(�^� 4�  rr�� template_namer�� resource_urisrcc��tj|�}|sd|�d�S|j�D]\}}d|�d�||<�tj||�S)u� 渲染带有资源的提示模板 Args: template_name: 模板名称 context: 渲染上下文 resource_uris: 资源URI映射 Returns: 渲染后的模板 u错误:未找到模板 '�'z{{ z }})�template_managerr�rwr�)r�r�r�r�r�r`s r�render_template_with_resourcesr��sh�� �,�,�]�;�H� �+�M�?�!�<�<�"�'�'�)���S��s�e�5�)��� �*� � +� +�M�7� C�Cr)"r��typingrrrrr�logging�sysrtrJrp� JSONEncoderr � Formatterr� basicConfig�INFO� StreamHandler�stdout�rootr-�handlerr � setFormatter� getLoggerrQr0rC�resource_managerr�r�r r�rArr�<module>r�s@���4�3�� � � ��$�T�-�-�$� L�G�%�%�L����� �,�,� A�����S�Z�Z�0����|�|�$�$�G��'�7�0�0�1����]�+a�b�c�%� �� � �?� +����l�l�^#�$��S �S �l)�*��D�#�D��S�#�X��D�_c�dg�il�dl�_m�D�ru�Dr

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/NorthLaneMS/NetBrain_MCP'

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