Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
mcp_resources.cpython-313.pyc16.3 kB
� �6#h�2��`�SrSSKJrJrJrJrJr SSKrSSKrSSK r SSK r SSK r \R"\RS\R"\RS9/S9 \R "S5r"SS 5r"S S 5r\"5r"S S 5r\"5rS\S\\\4S\\\4S\4Sjrg)u� NetBrain MCP 资源模块 此模块提供了MCP资源管理和提供功能。 MCP资源是客户端可以访问的数据对象,通过URI标识。 �)�Dict�List�Any�Optional�UnionNz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�stream)�level�format�handlers� mcp_resourcesc�0�\rSrSrSrSrSrSrSrSr Sr S r g ) � ResourceType��device� credential�topology�system�config�log�report�N) �__name__� __module__� __qualname__�__firstlineno__�DEVICE� CREDENTIAL�TOPOLOGY�SYSTEM�CONFIG�LOG�REPORT�__static_attributes__r��F:\NetBrainMCP\mcp_resources.pyrrs%�� �F��J��H� �F� �F� �C� �Fr$rc ���\rSrSrSrSrS\S\4SjrSS\S \S \ \ S \ \\ 44S jjr S\S \S \ \ \\44SjrS\S \4SjrSS\ \S \4SjjrS \\ \\ 44SjrSrg)�ResourceManager�$u0MCP资源管理器,负责资源注册和提供c�6�0Ul0Ul0Ul0UlSUl[ R R[ R"5S5Ul [ R RUR5(dC[ R"UR5 [RSUR35 [RS5 g![a+n[RS[!U535 SnANFSnAff=f)Ni,�resource_cacheu已创建资源缓存目录: u 无法创建资源缓存目录: u资源管理器初始化完成)� resources�resource_patternsr*�cache_expiration�default_cache_ttl�os�path�join�getcwd� cache_dir�exists�makedirs�logger�info� Exception�warning�str)�self�es r%�__init__�ResourceManager.__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�^^^�UUU4SjnU$)u� 注册资源装饰器 Args: uri_pattern: 资源URI模式,如"device://{id}" resource_type: 资源类型 Returns: 装饰器函数 c�>�TTR;a[RSTS35 UTS.TRT'[RSTSTS35 U$)Nu资源URI模式已存在: �,将被覆盖)�func�typeu已注册资源: u (类型: �))r,r6r9r7)rDr@r;r?s ���r%� decorator�4ResourceManager.register_resource.<locals>.decoratorDse����d�4�4�4����!;�K�=��X�Y��%�3�D� "� "�;� /� �K�K�+�K�=� �=�/�QR�S� T��Kr$r)r;r?r@rGs``` r%�register_resource�!ResourceManager.register_resource9s��� ��r$N�uri� use_cache� cache_ttl�returnc ���# �U(a�XR;a�XR;aVURU[RR5:�a'[R SU35 URU$[R SU35 XR;a URU XR;a URU U(a�UR U5n[RRU5(a�[USSS9n[R"U5nSSS5 SW;a�[RRUS5nU[RR5:�a=[R SU35 US URU'XpRU'US $Sn 0n UR"R%5H&up�UR'X5n U (dMU S n U n O U (d[RS U35 S SU30$[)U 5(aU "S0U D6IShv�N OU nU(a�X�RU'U=(d UR*n[RR5[R,"US9-nXpRU'UR U5n[USSS9n[R."UUR15S.USSS9 SSS5 U$U$!,(df  GN�=f![a,n[RS [!U535 SnAGN�SnAff=fGN!,(df  U$=f![a,n[RS[!U535 SnAU$SnAff=f![a>n[R3SUS[!U535 S S[!U530sSnA$SnAff=f7f)u� 获取资源 Args: uri: 资源URI use_cache: 是否使用缓存 cache_ttl: 缓存生存时间(秒) Returns: 资源内容 u从缓存获取资源: u资源缓存已过期: �rzutf-8)�encodingN� expirationu从文件缓存加载资源: �datau 加载资源缓存文件失败: rDu&未找到匹配的资源处理函数: �erroru资源不存在: )�seconds�w)rSrRF��� ensure_ascii�indentu 保存资源缓存文件失败: u获取资源失败: u , 错误: r)r*r-�datetime�nowr6r7�_get_cache_filenamer/r0r4�open�json�load� fromisoformatr8r9r:r,�items�_match_uri_pattern�callabler.� timedelta�dump� isoformatrT)r;rKrLrM� cache_file�f� cache_datarRr<� handler_func� parameters�patternr7� match_result�result�ttls r%� get_resource�ResourceManager.get_resourceRs���� �� 3� 3�3��+�+�+��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�1�1�#�6�#-�f�#5�5� � �� �!�3�3�9�9�;�M�G��2�2�3�@�L��|�#�F�|� �)� �� <�� �N�N�C�C�5�I� J��0���6�7� 7� >�9A�,�9O�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��DO.� L�L �-BL�;:O.�91O.�+N#�M�A1N#�9M*�)M�>M*�N#�O.�N#� O.� L�L� M�&!M �O.� M�O.�N#� M'�"M*�%N#�&O.�'M*�* N �4!N�N#�O.�N � N#�# O+�-3O&� O+�!O.�&O+�+O.rmc��URS5nURS5n[U5[U5:wag0n[[X455H2unupxSU;aSU;aUR S5n X�U 'M+Xx:wdM2 g U$)uh 匹配URI模式 Args: uri: 资源URI pattern: URI模式 Returns: 匹配参数或None �/N�{�}z{})�split�len� enumerate�zip�strip) r;rKrm� pattern_parts� uri_parts�params�i� pattern_part�uri_part� param_names r%rc�"ResourceManager._match_uri_pattern�s��� � � �c�*� ��I�I�c�N� � �}� ��Y�� /����+4�S��5R�+S� '�A�'� ��l�"�s�l�':�)�/�/��5� �%-�z�"��)��,T�� r$c���URSS5RSS5RSS5RSS5n[RRURUS35$)uV 获取缓存文件名 Args: uri: 资源URI Returns: 缓存文件路径 �:�_rt�.�\�.json)�replacer/r0r1r3)r;rK�safe_uris r%r]�#ResourceManager._get_cache_filename�s]���;�;�s�C�(�0�0��c�:�B�B�3��L�T�T�UY�[^�_���w�w�|�|�D�N�N�x�j��,>�?�?r$c��U(a�XR;a URU XR;a URU URU5n[RR U5(a[R "U5 [RSU35 gURR5 URR5 [RR UR5(a}[R"UR5HYnURS5(dM[R "[RRURU55 M[ [RS5 g![a+n[RS[!U535 SnAgSnAff=f)u� 清除资源缓存 Args: uri: 要清除的特定资源URI,如果为None则清除所有缓存 Returns: 是否成功清除缓存 u已清除资源缓存: r�u已清除所有资源缓存Tu清除缓存失败: NF)r*r-r]r/r0r4�remover6r7�clearr3�listdir�endswithr1r8rTr:)r;rKrh�filenamer<s r%� clear_cache�ResourceManager.clear_cache�sK�� ���-�-�-��+�+�C�0��/�/�/��-�-�c�2�"�5�5�c�:� ��7�7�>�>�*�-�-��I�I�j�)�� � �5�c�U�;�<���#�#�)�)�+��%�%�+�+�-��7�7�>�>�$�.�.�1�1�$&�J�J�t�~�~�$>��#�,�,�W�5�5��I�I�b�g�g�l�l�4�>�>�8�&L�M�%?�� � �9�:���� � �L�L�/��A��x�8� 9��� �s&�B"F�%BF�AF� G�$!G � Gc ���/nURR5HSup#URUUS[US5(a#USR(aUSROSS.5 MU U$)u> 列出可用的资源类型 Returns: 资源类型列表 rErD� 无描述)r?rE� description)r,rb�appendrd�__doc__)r;r+rmr7s r%�list_available_resources�(ResourceManager.list_available_resourcessv��� �!�3�3�9�9�;�M�G� � � �&��V� �7?��V� �7M�7M�RV�W]�R^�Rf�Rf�t�F�|�3�3�lw�� �<��r$)r3r-r.r*r,r+)TN)N)rrrrr�r=r:rI�boolr�intrrrqrcr]r�rr�r#rr$r%r'r'$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�~�*>�r$r'c��\rSrSrSrSrS\4SjrS\S\\4Sjr S\S\ \\ 4S\\4S jr S\ \ \\44S jrS rg ) �PromptTemplateManageriu6MCP提示模板管理器,负责模板注册和渲染c�<�0Ul[RS5 g)Nu$提示模板管理器初始化完成)� templatesr6r7)r;s r%r=�PromptTemplateManager.__init__s������ � �:�;r$�namec�^^�UU4SjnU$)u] 注册提示模板装饰器 Args: name: 模板名称 Returns: 装饰器函数 c�>�TTR;a[RSTS35 UTRT'[RST35 U$)Nu提示模板已存在: rCu已注册提示模板: )r�r6r9r7)rDr�r;s ��r%rG�:PromptTemplateManager.register_template.<locals>.decorator'sL����t�~�~�%����!8���o�N�O�#'�D�N�N�4� � �K�K�1�$��8� 9��Kr$r)r;r�rGs`` r%�register_template�'PromptTemplateManager.register_templates��� ��r$rNc�r�XR;agURUn[U5(aU"5$U$)uX 获取提示模板 Args: name: 模板名称 Returns: 模板内容或None N)r�rd)r;r�� template_funcs r%� get_template�"PromptTemplateManager.get_template2s6�� �~�~� %�����t�,� �"*�=�"9�"9�}��L�}�Lr$�contextc �D�URU5nU(dgUnUR5HpupVSUS3n[U[5(aUR Xv5nM3[U[ 5(dMJUR U[ R"USSS95nMr U$)u{ 渲染提示模板 Args: name: 模板名称 context: 渲染上下文 Returns: 渲染后的模板或None Nz{{z}}FrWrX)r�rb� isinstancer:r��dictr_�dumps)r;r�r��templatero�key�value� placeholders r%�render_template�%PromptTemplateManager.render_templateBs����$�$�T�*������!�-�-�/�J�C� ���T�*�K��%��%�%���� �;���E�4�(�(���� �T�Z�Z��TY�bc�5d�e�� *�� r$c���URR5VVs/sH7upU[U5(aUR(a UROSS.PM9 snn$s snnf)u> 列出所有可用的提示模板 Returns: 模板列表 r�)r�r�)r�rbrdr�)r;r�rDs r%�list_templates�$PromptTemplateManager.list_templates\sY��#�n�n�2�2�4�  � 5� ���/7��~�~�$�,�,�t�|�|�T_� �5�  � �� s�>A )r�N)rrrrr�r=r:r�rr�rrr�rr�r#rr$r%r�r�so��@�<��c��*M��M��#��M� �C��$�s�C�x�.��X�c�]��4  ��T�#�s�(�^� 4�  r$r�� template_namer�� resource_urisrNc��[RU5nU(dSUS3$UR5H upESUS3X'M [RX5$)u� 渲染带有资源的提示模板 Args: template_name: 模板名称 context: 渲染上下文 resource_uris: 资源URI映射 Returns: 渲染后的模板 u错误:未找到模板 '�'z{{ z }})�template_managerr�rbr�)r�r�r�r�r�rKs r%�render_template_with_resourcesr�osb�� �,�,�]�;�H� �+�M�?�!�<�<�"�'�'�)����s�e�5�)�� �*� � +� +�M� C�Cr$)r��typingrrrrr�logging�sysr_r/r[� basicConfig�INFO� StreamHandler�stdout� getLoggerr6rr'�resource_managerr�r�r:r�rr$r%�<module>r�s����4�3�� � � ����� �,�,� A����S�Z�Z�0��� � � �?� +����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