Skip to main content
Glama

NetBrain MCP

by NorthLaneMS
server.cpython-313.pyc44 kB
� tp&hl��� �SSKJr SSKJrJrJrJr SSKrSSKrSSK r SSK r SSK r SSK r SSK J r Jr SSKJrJrJrJrJrJrJr SSKJrJrJr SSKJrJr SSKJrJ r J!r!J"r"J#r#J$r$ SSK%r%\RL"\RNS \RP"\ RRS 9/S 9 \RT"S 5r+\"S 5r,\,R[5SYS\\.S\\.S\\.S\\.S\\\.\44 Sjj5r/\,R[5SZS\.S\.S\.S\.S\.S\.S\.S\.S\.S\.S\\.\44Sjj5r0\,R[5S\.S\\\.\44Sj5r1\,R[5S[S\.S\.S\.S\.S\.S\.S\.S\.S\.S\\\.\44Sjj5r2\,R[5S\.S\34S j5r4\,R[5S\S\.S!\.S"\.S#\.S$\\5S%\.S&\.S\\.\44S'jj5r6\,R[5S\\\.\44S(j5r7\,R[5S\.S)\.S\\.\44S*j5r8\,R[5S\.S)\.S\\.\44S+j5r9\,R[5S]S\.S)\.S,\.S-\5S\\.\44 S.jj5r:\,R[5S]S\.S)\.S/\.S-\5S\\\.\44 S0jj5r;\,R[5S\\\.\44S1j5r<\,R[5S\\\.\44S2j5r=\,R[5S^S4\.S5\3S\\.\44S6jj5r>\,R[5S_S4\\.S\\.\44S7jj5r?\,R[5S\\\.\44S8j5r@\,R[5S`S9\.S:\.S;\.S\\.\44S<jj5rA\R�"S=\R�5S\.S\.4S>j5rD\R�"S?\R�5S\.S\\.\44S@j5rF\R�"SA\R�5S\.S\\.\44SBj5rH\R�"SC\R�5S\.S\\.\44SDj5rI\R�"SE\R�5S\.S\\.\44SFj5rJ\R�"SG\R�5S\\.\44SHj5rL\R�"SI\R�5S\\.\44SJj5rM\,R�SK5S4\.S\4SLj5rO\,R�SM5S\.S\.4SNj5rQSOrR\,R[5SaSP\.S!\.S"\.S\.S$\5S#\.S&\\.SQ\5S\\.\44SRjj5rS\,R[5SbSP\.S!\.S"\.S\.S$\5SQ\5S\\.\44SSjj5rT\,R[5ScS\.S)\.S,\.S-\5S\\.\44 STjj5rU\VSU:XaESSKWrWSSKXrXSVrY\WR�"\YS3SW9r[\[R�5 \]"SX5 \,R�5 gg)d�)�FastMCP)�Dict�List�Optional�AnyN)� tool_manager� ToolCategory)�device_manager� NetworkDevice�DeviceCredential� DeviceVendor� DeviceType� DeviceStatus�ConnectionProtocol)�connection_manager� CommandResult�SCRAPLI_IMPORT_SUCCESS)�resource_manager� ResourceType)�template_manager�render_template_with_resources�Message� UserMessage�AssistantMessage� SystemMessagez4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�stream)�level�format�handlers� netbrain_mcpz NetBrain MCP�vendor� device_type�status�tag�returnc���# �U(a [U5OSnU(a [U5OSnU(a [U5OSn[R"UUUUS9nUVs/sHo�R 5PM sn$s snf7f)u� 列出网络设备,支持过滤 Args: vendor: 设备厂商,可选值:cisco, huawei, h3c, juniper, arista, fortinet, checkpoint, other device_type: 设备类型,可选值:router, switch, firewall, load_balancer, wireless_controller, access_point, other status: 设备状态,可选值:online, offline, unreachable, maintenance, unknown tag: 标签过滤 Returns: 设备列表 N)r!r"r#r$)r rrr � list_devices�to_dict) r!r"r#r$� vendor_enum�device_type_enum� status_enum�devices�devices �F:\NetBrainMCP\server.pyr'r'5so���(+1�,�v�&�d�K�2=�z�+�.�4��*0�,�v�&�d�K��)�)��$�� � �G�,3� 3�7��N�N� �7� 3�3�� 3�s�AA;�A6�3A;�name� ip_address�platform�model� os_version�location� description�tagsc ��4# �[U5n [U5n U(dmUR5S:XaSnOVUR5S:XaSnO?UR5S:XaSnO(UR5S:XaSnOUR5n/n U (aEU RS 5V s/sH)o�R 5(dMU R 5PM+ n n [ UUU U UUUUUU S 9 n[ R"U5nUR5$s sn f7f) uu 添加新的网络设备 Args: name: 设备名称 ip_address: 设备IP地址 device_type: 设备类型,可选值:router, switch, firewall, load_balancer, wireless_controller, access_point, other vendor: 设备厂商,可选值:cisco, huawei, h3c, juniper, arista, fortinet, checkpoint, other platform: 设备平台(scrapli平台类型),如 cisco_iosxe, huawei_vrp, juniper_junos 等 model: 设备型号 os_version: 操作系统版本 location: 设备位置 description: 设备描述 tags: 设备标签,使用逗号分隔多个标签 Returns: 新添加的设备信息 �cisco� cisco_iosxe�huawei� huawei_vrp�juniper� juniper_junos�arista� arista_eos�,) r/r0r"r!r1r2r3r4r5r6) rr �lower�split�stripr r � add_devicer()r/r0r"r!r1r2r3r4r5r6r*r)�tag_listr$r-� device_ids r.rDrDXs����@"�+�.���v�&�K� � �<�<�>�W� $�$�H� �\�\�^�x� '�#�H� �\�\�^�y� (�&�H� �\�\�^�x� '�#�H� �,�,�.�)�H��H� �+/�:�:�c�?�J�?�C�i�i�k�K�C�I�I�K�?��J�� ��$������� � �F��)�)�&�1�I� �>�>� ���'K�s�B'D�)D�D�?DrFc��f# �[R"U5nU(aUR5$g7f)u_ 获取设备详细信息 Args: device_id: 设备ID Returns: 设备信息或None N�r � get_devicer(�rFr-s r.rIrI�s*���� &� &�y� 1�F� ��~�~��� �s�/1c ���# �0n U(aXS'U(aX)S'U(aX9S'U(aXIS'U(a[U5U S'U(aXiS'U(aXyS'U(aIURS5V s/sH)o�R5(dMU R5PM+ n n X�S '[R"U40U D6n U (aU R 5$g s sn f7f) u� 更新设备信息 Args: device_id: 设备ID name: 设备名称 ip_address: 设备IP地址 model: 设备型号 os_version: 操作系统版本 status: 设备状态,可选值:online, offline, unreachable, maintenance, unknown location: 设备位置 description: 设备描述 tags: 设备标签,使用逗号分隔多个标签 Returns: 更新后的设备信息或None r/r0r2r3r#r4r5r@r6N)rrBrCr � update_devicer() rFr/r0r2r3r#r4r5r6� update_kwargsr$rEr-s r.rLrL�s����<�M� � $�f���&0�l�#� �!&�g���&0�l�#� �".�v�"6� �h���$,�j�!��'2�m�$� �+/�:�:�c�?�J�?�C�i�i�k�K�C�I�I�K�?��J� (�f��� )� )�)� E�}� E�F� ��~�~��� ��K�s�A4C �6C�C�&:C c��6# �[R"U5$7f)uR 删除设备 Args: device_id: 设备ID Returns: 是否删除成功 )r � delete_device)rFs r.rOrO�s��� � '� '� � 2�2�s��username�password�protocol�port�enable_password� ssh_key_filec ��# �UR5S:XaU(d U(dSSS.$UR5S:waU(dSUR5S3S.$[UR55nUc^U[R:XaSnOGU[R:XaSnO0U[R :XaSnOU[R :XaS nOS n[RS US US USU35 U(a[RSU35 [UUUUUUUS9n[R"U5n SX�S.$7f)ug 添加设备凭据 Args: name: 凭据名称 username: 用户名 password: 密码 protocol: 连接协议,可选值:ssh, telnet, snmp, http, https, netconf port: 端口号,可选(默认SSH=22, Telnet=23) enable_password: 特权模式密码(思科设备) ssh_key_file: SSH密钥文件路径 Returns: 凭据ID �sshFu-SSH连接需要提供密码或SSH密钥文件��success�messageu连接需要提供密码���Pi�ru添加凭据: name=� , username=� , protocol=�, port=u使用SSH密钥文件: )r/rPrQrRrSrTrUT)rY�idr/) rA�upperr�SSH�TELNET�HTTP�HTTPS�logger�infor r �add_credential) r/rPrQrRrSrTrU� protocol_enum� credential� credential_ids r.riri�sA���4�~�~��5� ��,� �-\�]�]� ��� �U� "�8� ����0@�/A�AY�-Z�[�[�'�x�~�~�'7�8�M� �|� �.�2�2� 2��D� �0�7�7� 7��D� �0�5�5� 5��D� �0�6�6� 6��D��D� �K�K�%�d�V�;�x�j� �H�:�U\�]a�\b�c�d��� � �-�l�^�<�=�"� ���� �'�!��J�#�1�1�*�=�M��=� ?�?�s�D=D?c ��# �[R"5nUVs/sH]nURURURUR UR RURURS.PM_ sn$s snf7f)�5 列出所有设备凭据 Returns: 凭据列表 �rar/rPrQrRrSrU� r �list_credentialsrar/rPrQrR�valuerSrU�� credentials�creds r.rqrq:s{���!�1�1�3�K� � � �D��'�'��I�I�� � �� � �� � �+�+��I�I� �-�-� � � � �� �s�B�A$B�Brlc��� # �[R"U5n[R"U5nU(dSSU3S.$U(dSSU3S.$[R SUR SUR SUR 35 [R SURRS UR=(d S 35 [R"X#5IS hv�N upEU(GaS nS nUS U3n[RRU5n U (Ga�U R(Ga�[U RS5(a�[ R""U RR$5(a#U RR%5IS hv�N nO2[ R&"U RR$5IS hv�N n[R SU35 SSKJn [US5(aUR,(a UR,OS n SU R/5;aSn OSU R/5;aSn OSn [R SU SU 35 [U RS5(Ga/[ R0"S5IS hv�N [ R""U RR25(aMU RR3U 5IS hv�N n [U S5(a U R4nOh[7U 5nO\[ R&"U RR2U 5IS hv�N n [U S5(a U R4nO [7U 5n[R S[9U535 [9U5S:�aUS SS-nO[R;S5 S nS(S)UR SUR S*3URRUUS+.$[RCS,UR SUR S-U35 SS,U3S.$GNaGN�GNyGN�GNYN�![<a�n[R;S![7U535 [R2"UUW S"S#9IS hv�N unnU(a:UR>(a)UR@n[9U5S:�aUS SS-nS nAGNS$nS nAGN![<a2n[RCS%[7U535 S$nS nAS nAGNQS nAff=fS nAff=f![<a.n[R;S&[7U535 S'nS nAGN�S nAff=f7f).uq 连接到网络设备 Args: device_id: 设备ID credential_id: 凭据ID Returns: 连接结果 F�设备不存在: rX�凭据不存在: u尝试连接设备: � (u) 使用凭据: u连接协议: u , 端口: u默认N��_� get_promptu成功获取设备提示符: r��Scraplir1r:�display versionr8� show versionu#尝试获取版本信息,平台: u ,命令: � send_command��resultu#成功获取版本信息,长度: i��...u$连接对象没有send_command方法u<无法获取版本信息:连接对象不支持发送命令u获取版本信息时出错: �<�rFrl�command�timeout�无法获取版本信息u)备用方法获取版本信息也失败: u#获取设备详细信息时出错: u获取版本信息时出错Tu成功连接到设备: �))rYrZrR�prompt� version_info�连接设备失败: u ), 错误: )"r rI�get_credentialrgrhr/r0rRrrrSr�connect_device�active_connections�get� connection�hasattr�asyncio�iscoroutinefunctionr|� to_thread�scraplir~r1rA�sleepr�r��str�len�warning� ExceptionrY�output�error)rFrlr-rkrYr�r�r��connection_key� connectorr~r1r��resp�er�r{�e2s r.r�r�Qs����� &� &�y� 1�F��.�.�}�=�J� � �/@�� �-L�M�M� � �/@���-P�Q�Q� �K�K�&�v�{�{�m�2�f�6G�6G�5H�HX�Yc�Yh�Yh�Xi�j�k� �K�K�.��!4�!4�!:�!:� ;�:�j�o�o�Fa�Ya�Eb�c�d�.�<�<�V�P�P�N�G����� �P 9� )�{�!�M�?�;�N�*�=�=�A�A�.�Q�I��Y�1�1�1��9�/�/��>�>��2�2�9�3G�3G�3R�3R�S�S�'0�';�';�'F�'F�'H�!H��'.�'8�'8��9M�9M�9X�9X�'Y�!Y���K�K�"?��x� H�I�>B�/�3:�&�*�2M�2M�RX�Ra�Ra�v���gi�H� �8�>�>�#3�3�"3�� �H�N�N�$4�4�"0��"0���K�K�"E�h�Z�{�[b�Zc� d�e��y�3�3�^�D�D�%�m�m�A�.�.�.�"�6�6�y�7K�7K�7X�7X�Y�Y�)2�)=�)=�)J�)J�7�)S�#S�D�&�t�X�6�6�/3�{�{� �/2�4�y� �*1�):�):�9�;O�;O�;\�;\�^e�)f�#f�D�&�t�X�6�6�/3�{�{� �/2�4�y� �� � �&I�#�l�J[�I\�$]�^��|�,�s�2�+7���+=��+E�L�����'M�N�'e� �4�0���� �R��@Q�@Q�?R�RS�T�"�+�+�1�1��(�  � � � � �+�F�K�K�=��6�;L�;L�:M�[�Y^�X_�`�a� �/C�E�7�-K�L�L�EQ� "I�!Y�./�$T�$g��!�B��N�N�%B�3�q�6�(�#K�L�B�*<�*I�*I�&/�*7�$+�$&� +�%�%� ���"�f�n�n�+1�=�=�L�"�<�0�3�6�/;�D�S�/A�E�/I� ��+E�L��$�B�� � �'P�QT�UW�QX�PY�%Z�[�'A� � ��B��#B��(� 9� �N�N�@��Q���I� J�8�L�� 9�s!�C"U0�$Q�%U0�8B'T5�Q� 2T5�Q �T5�0B6Q�&Q�'AQ�8Q�9AQ�Q�A%Q�;U0�<Q�A3U0�T5� T5�Q�Q�Q� T2� !T-�S.�R�AS.� T5�$U0�&S.�(T5�,U0�. T*�8#T%�T-�T5�#U0�%T*�*T-�-T2�2T5�5 U-�?#U(�"U0�(U-�-U0c��v# �[R"X5IShv�N up#U(aSSS.$SSU3S.$N7f)u� 断开与网络设备的连接 Args: device_id: 设备ID credential_id: 凭据ID Returns: 断开连接结果 NTu成功断开连接rXFu断开连接失败: )r�disconnect_device)rFrlrYr�s r.r�r��sD���.�?�?� �Y�Y�N�G���,@�A�A� �/C�E�7�-K�L�L� Z�s �9�7�9r�r�c���# �[R"UUUUS9IShv�N upEU(aHURURURUR UR R5S.$SUSUSS.$N]7f)u� 向网络设备发送命令 Args: device_id: 设备ID credential_id: 凭据ID command: 要执行的命令 timeout: 命令超时时间(秒) Returns: 命令执行结果 r�N�rYr�r�� error_message�execution_timeFrz)rr�rYr�r�r�r�� isoformat)rFrlr�r�r�r�s r.r�r��s����(-�9�9��#��� ��M�F���~�~��~�~��m�m�#�1�1�$�3�3�=�=�?�  � ����"�"�  � �!�s�A=�A;�AA=�commandsc ��# �URS5Vs/sH)oDR5(dMUR5PM+ nnU(dSSS./$[R"UUUUS9IShv�N upgU(aYUVs/sHKnURUR UR URURR5S.PMM sn$UV s/sH n SU SUSS.PM sn $s snfN�s snfs sn f7f) u 向网络设备发送多个命令 Args: device_id: 设备ID credential_id: 凭据ID commands: 要执行的命令列表,使用分号(;)分隔多个命令 timeout: 每个命令的超时时间(秒) Returns: 命令执行结果列表 �;Fu未提供有效的命令rX)rFrlr�r�Nr�rz) rBrCr� send_commandsrYr�r�r�r�r�) rFrlr�r��cmd� command_list�resultsr�r�r�s r.r�r�s���(,4�>�>�#�+>�N�+>�C�)�)�+�K�C�I�I�K�+>�L�N� �!�.H�I�J�J�.�;�;��#��� ��N�G��"�  �"�� "�>�>�!�>�>� �-�-�!'�!5�!5�"(�"7�"7�"A�"A�"C�  �"�  � �&(�  �(�� !�"��!&�"&�  �(�  � ��3O� ��  ��  �s@�D�C/�C/�)D�/C4�0D�AC6�D�C;�, D�6 Dc��4# �[R"5$7f)uD 获取当前活动的设备连接 Returns: 活动连接列表 )r�get_active_connections��r.r�r�Hs��� � 4� 4� 6�6���c��4# �[R"5$7f)u5 列出可用的MCP资源 Returns: 资源列表 )r�list_available_resourcesr�r�r.�list_resourcesr�Ts��� � 4� 4� 6�6�r�T�uri� use_cachec��J# �[R"X5IShv�N $N7f)uu 获取指定URI的资源 Args: uri: 资源URI use_cache: 是否使用缓存 Returns: 资源内容 N)r� get_resource)r�r�s r.r�r�^s���"�.�.�s�>� >�>� >�s �#�!�#c��v# �[R"U5nU(aU(aSSU3S.$SSS.$SSS.$7f)u� 清除资源缓存 Args: uri: 要清除的特定资源URI,如果为None则清除所有缓存 Returns: 操作结果 Tu已清除资源缓存: rXu已清除所有资源缓存Fu清除缓存失败)r� clear_cache)r�rYs r.�clear_resource_cacher�lsH����*�*�3�/�G�� �#�2I�#��0O�P� P�#�0M�N� N� �-A�B�B�s�79c��4# �[R"5$7f)u8 列出可用的提示模板 Returns: 模板列表 )r�list_templatesr�r�r.r�r��s��� � *� *� ,�,�r�� template_name�context� resource_urisc��# �0nUR5(a.[R"U5n[U[5(d0n0nUR5(aVURS5nUH?nSU;dM URSS5upxUR5XGR5'MA U(a[UUU[S9IS hv�N n O[R"X5n U (aH[U [5(a.U V s/sHn U RU RS .PM n n S U S .$S U S .$SSU3S.$![R a [ RSU35 SSS.s$f=fN�s sn f![ a<n [ R#S[%U 535 SS[%U 53S.sS n A $S n A ff=f7f)u� 渲染提示模板 Args: template_name: 模板名称 context: JSON格式的渲染上下文,如 {"name": "value"} resource_uris: 资源URI映射,格式为 "key1=uri1,key2=uri2" Returns: 渲染结果 u无法解析context JSON: Fu无效的JSON上下文格式rXr@�=r�)r�r�r�rN)�role�contentT)rY�messages)rY�rendered_templateu渲染模板失败: u渲染模板异常: )rC�json�loads� isinstance�dict�JSONDecodeErrorrgr�rBrrr�render_template�listr�r�r�r�r�) r�r�r�� context_dict� resource_dict� uri_pairs�pair�keyr�r��msgr�r�s r.r�r��s����"2N�� � �=�=�?�?� U�#�z�z�'�2� �!�,��5�5�#%�L� � � � � � � �%�+�+�C�0�I�!���$�;�#�z�z�#�q�1�H�C�14����M�)�)�+�.�"� �9�+�$�+�!1� ��F�&�5�5�m�R�F� ��&�$�'�'� "(� �"(�#�!$���#&�;�;��"(� �� $(�X�>�>�$(�f�E�E�$�3G� ��1W�X� X��O�'�'� U����!;�G�9�E�F�#(�5S�T�T� U������ �N�� � �+�C��F�8�4�5� �/C�C��F�8�-L�M�M��N�s��G �F�-E� 1F�>AF�E:�;F� #E<�/F�5G �6F�:G �;F�G �1E7�4F�5G �6E7�7F�<F� G� 1G�<G�=G �G�G zgreeting/{name}c��# �SUS3$7f)u获取个性化问候语u 你好,u!欢迎使用NetBrain MCP!r�)r/s r.� get_greetingr��s����t�f�:� ;�;�s� zdevice/{device_id}c��r# �[R"U5nU(aUR5$SSU30$7f)u获取设备资源r�rwrHrJs r.�get_device_resourcer��s:���� &� &�y� 1�F� ��~�~��� �(�� �4� 5�5�s�57zdevice/{device_id}/configc���# �[R"U5nU(dSSU30$[R"5nU(dSS0$UR=(d USRn[R "U5nUR [R:XaSnOeUR [R:XaSnODUR [R:XaSnO#UR [R:XaSnOSn[R"X5IShv�N upgU(dSS U30$[R"UUUS S 9IShv�N up�[R"X5IShv�N U(aEUR (a4UUR"S UR$UR&R)5S .$SSU=(d S30$N�N�Nd![*an SS[-U 530sSn A $Sn A ff=f7f)u获取设备配置资源r�rw�没有可用的凭据rzshow running-configzdisplay current-configurationzshow configurationNr�r�r��running)rF� device_name� config_type�config_content� timestampu获取配置失败: � 未知错误u获取配置时发生错误: �r rIrqrlrar�r!r �CISCO�HUAWEI�H3C�JUNIPERrr�r�r�rYr/r�r�r�r�r�� rFr-rtrlrkr�rYr�r�r�s r.�get_device_configr��s����� &� &�y� 1�F� ��,�Y�K�8�9�9�!�1�1�3�K� ��0�1�1��(�(�=�K��N�,=�,=�M��.�.�}�=�J��}�}� �*�*�*�'�� ���,�-�-� -�1�� ���,�*�*� *�1�� ���,�.�.� .�&��'��C�1�@�@��T�T�����3�E�7�;�<� <�1�=�=��'���  � � ��!�2�2�9�L�L�L� �f�n�n�&�%�{�{�(�"(�-�-�#�2�2�<�<�>� � ��3�E�4K�^�3L�M�N� N�1U�  � M�� �C��8��Q���A�B�B��C�s��DG<�G�G� G�3G<�4G�G�G�.G�/AG�>G<�?G�G<�G�G�G� G9�G4�.G9�/G<�4G9�9G<zdevice/{device_id}/interfacesc���# �[R"U5nU(dSSU30$[R"5nU(dSS0$UR=(d USRn[R "U5nUR [R:XaSnOeUR [R:XaSnODUR [R:XaSnO#UR [R:XaSnOSn[R"X5IShv�N upgU(dSS U30$[R"UUUS S 9IShv�N up�[R"X5IShv�N U(aDUR (a3UUR"UR$UR&R)5S .$SS U=(d S30$N�N�Nc![*an SS[-U 530sSn A $Sn A ff=f7f)u获取设备接口资源r�rwr�rzshow interfaceszdisplay interfacezshow interfaces detailNr��r�)rFr��interfaces_outputr�u获取接口信息失败: r�u#获取接口信息时发生错误: r�r�s r.�get_device_interfacesr�s����� &� &�y� 1�F� ��,�Y�K�8�9�9�!�1�1�3�K� ��0�1�1��(�(�=�K��N�,=�,=�M��.�.�}�=�J��}�}� �*�*�*�#�� ���,�-�-� -�%�� ���,�*�*� *�%�� ���,�.�.� .�*��#��I�1�@�@��T�T�����3�E�7�;�<� <�1�=�=��'���  � � ��!�2�2�9�L�L�L� �f�n�n�&�%�{�{�%+�]�]�#�2�2�<�<�>� � ��9�%�:Q�>�9R�S�T� T�/U�  � M�� �I��>�s�1�v�h�G�H�H��I���DG;�G�G� G�3G;�4G�G�G�.G�/AG�=G;�>G� G;�G�G�G� G8�G3�-G8�.G;�3G8�8G;zdevice/{device_id}/routesc���# �[R"U5nU(dSSU30$[R"5nU(dSS0$UR=(d USRn[R "U5nUR [R:XaSnOeUR [R:XaSnODUR [R:XaSnO#UR [R:XaSnOSn[R"X5IShv�N upgU(dSS U30$[R"UUUS S 9IShv�N up�[R"X5IShv�N U(aDUR (a3UUR"UR$UR&R)5S .$SS U=(d S30$N�N�Nc![*an SS[-U 530sSn A $Sn A ff=f7f)u获取设备路由表资源r�rwr�rz show ip routezdisplay ip routing-tablez show routeNr�r�r�)rFr�� routes_outputr�u获取路由表失败: r�u 获取路由表时发生错误: r�r�s r.�get_device_routesr�Ss����� &� &�y� 1�F� ��,�Y�K�8�9�9�!�1�1�3�K� ��0�1�1��(�(�=�K��N�,=�,=�M��.�.�}�=�J��}�}� �*�*�*�!�� ���,�-�-� -�,�� ���,�*�*� *�,�� ���,�.�.� .���!��F�1�@�@��T�T�����3�E�7�;�<� <�1�=�=��'���  � � ��!�2�2�9�L�L�L� �f�n�n�&�%�{�{�!'���#�2�2�<�<�>� � ��6�u�7N��6O�P�Q� Q�/U�  � M�� �F��;�C��F�8�D�E�E��F�r�rtc ��# �[R"5nSUVs/sH]nURURURUR UR RURURS.PM_ sn0$s snf7f)rnrtrorprss r.�list_credentials_resourcer��s����!�1�1�3�K��$�  �$���g�g�� � � �M�M� �M�M� �M�M�/�/�� � � $� 1� 1� �$�  � � ��  �s�B �A$B� B z system/statusc���# �[[R"55n[[R"55n[[R "55nSUUUSS.$7f)u获取系统状态资源r�z0.1.0)r#� devices_count�credentials_countr��version)r�r r'rqrr�)r�r�r�s r.�get_system_statusr��s^�����3�3�5�6�M��N�;�;�=�>���/�F�F�H�I���&�.�0��  ��s�A#A%z{uri}c��z# �[RSU35 [R"U5IShv�N $N7f)u-MCP资源处理器,处理所有资源请求u处理资源请求: N)rgrhrr�)r�s r.�mcp_resource_handlerr��s2��� �K�K�&�s�e�,�-�!�.�.�s�3� 3�3� 3�s �2;�9�;z{name}c��# �[RSU35 [R"U5nU(aUR=(d UR $SUS3$7f)u3MCP提示模板处理器,处理所有模板请求u处理模板请求: u错误: 未找到模板 '�')rgrhr� get_templater5r/)r/�templates r.�mcp_prompt_handlerr�sR��� �K�K�&�t�f�-�.��,�,�T�2�H���#�#�4�x�}�}�4� &�t�f�A� .�.�s�AAc ���[SSS[RSS9n[R"U5n[ SS[ R[RSS [RUS S S /S 9 n[R"U5 [ SS[ R[RSS[RUSSS /S 9 n[R"U5 [R!S5 g)u!添加一些示例设备和凭据u 示例凭据�admin�admin123r[)r/rPrQrRrSu思科路由器示例z 192.168.1.1zISR 4431z IOS-XE 16.9.3u!这是一个示例思科路由器�core�example) r/r0r"r!r2r3r#rlr5r6u华为交换机示例z 192.168.1.2z S5720-56C-EI� V200R010C00u!这是一个示例华为交换机�accessu示例设备添加完成N)r rrcr rir r�ROUTERr r�r�ONLINErD�SWITCHr�rgrh)rkrl� cisco_device� huawei_devices r.�add_example_devicesr�s���"� ���#�'�'� � �J�#�1�1�*�=�M�!� $� ��%�%��!�!��"��"�"�#�7��i� � �L����l�+�"� $� ��%�%��"�"�� ��"�"�#�7�� � "� �M����m�,� �K�K�*�+r��host�connect_timeoutc ��6# �[(dSSS.$SSKJn UR5S:XaSnUR5S:Hn U (aUS :XaS n[R S US US USUSU3 5 U(aA[R S[ U5S[[U5535 [U5nUUSUUUUS-S.n U (aSU S'[R S5 OSU S'[R S5 U (dHU(aA[RRU5(aXjS'[R SU35 O&U(aX*S'[R S5 OSSS.$U R5n SU ;aSU S'SU ;a SUS3U S'[R S U 35 U"S10U D6n U R5 U R5n SU;aS!nO S"U;aS#nOS#nU RU5n[UR 5S$:�aUR S%S$S&-O UR nU R'5 S)S*U 3U US+.$!["a-n[R%S'[U535 S(nS%nANLS%nAff=f![(anSS,[U53S.sS%nA$S%nAf["aRn[ U5R*n[U5n[R-S-US.U35 SS/US.U3UUS0.sS%nA$S%nAff=f7f)2u� 测试Scrapli连接(直接使用Scrapli) Args: host: 设备主机名或IP地址 username: 用户名 password: 密码(与ssh_key_file至少提供一个) platform: 平台类型,如cisco_iosxe, huawei_vrp等 port: 端口号(默认22,Telnet使用23) protocol: 连接协议,ssh或telnet ssh_key_file: SSH密钥文件路径,可选 connect_timeout: 连接超时时间(秒) Returns: 连接测试结果 FuRScrapli库导入失败,请确保已安装: pip install scrapli scrapli-communityrXrr}r:r;�telnetr[r\u连接参数: host=r^z , platform=r`r_u密码类型: u , 长度: �)r� auth_username�auth_strict_keyr1rS�timeout_socket�timeout_transport� transportu使用Telnet连接�paramikou使用SSH连接 (paramiko)�auth_private_keyu使用SSH密钥认证: � auth_passwordu使用密码认证u$必须提供密码或SSH密钥文件z******u[使用密钥文件: �]uScrapli测试连接参数: rr8r���Nr�u获取版本信息失败: r�Tu 连接成功!设备提示符: )rYrZr�r�uScrapli库未安装: uScrapli连接测试失败: z - u连接失败: )rYrZ� error_type� error_detailsr�)rr�r~rArgrh�typer�r��os�path�exists�copy�openr|r�r�r�r��close� ImportError�__name__r�)rrPrQr1rSrRrUrr~� is_telnet� device_params� safe_params�connr�r�r�r�r�r� error_msgs r.�test_scrapli_connectionr.�s2���8 "� !��k� � � e �#� �>�>� �x� '�#�H��N�N�$��0� � �����D�� � �)�$��{�8�*�K�PX�z�Y`�ae�`f�fq�rz�q{�|�}� � �K�K�.��h��(8� �3�s�8�}�CU�BV�W� X��8�}�H��%�$� ��-�!0�1�!4� � � �)1�M�+� &� �K�K�,� -�*4�M�+� &� �K�K�4� 5��\�b�g�g�n�n�\�.J�.J�0<�,� -� �K�K�1�,��@� A� �-5�/� *� �K�K�,� -�$�1W�X� X�$�(�(�*� � �k� )�+3�K�� (� �� ,�0E�l�^�ST�.U�K�*� +�� � �1�+��?�@��'��'�� � � � ����"�� 6��8�#�+���H�$�(��(���$�$�W�-�D�8;�D�K�K�8H�3�8N�4�;�;�t��,�u�4�TX�T_�T_�L� � � � ��9�&��B��(�  � ��� 6� �N�N�7��A��x�@� A�5�L�� 6�� �O� �/D�S��V�H�-M�N�N�� �  ��!�W�%�%� ���F� �� � �2�:�,�c�)��M�N��'� �|�3�y�k�B�$�&�  � ��  �s��L�E'J�;L�<A*J�'AI�J�L� J�'#J� J�J�J� L�!J7�1L�2L�7 L�AL� L� L�L�Lc ��<# �[UUUUUSUS9IShv�N $N7f)u2 测试Telnet连接(快速测试) Args: host: 设备主机名或IP地址 username: 用户名 password: 密码 platform: 平台类型,如cisco_iosxe, huawei_vrp等 port: 端口号(默认23) connect_timeout: 连接超时时间(秒) Returns: 连接测试结果 r)rrPrQr1rSrRrN)r.)rrPrQr1rSrs r.�test_telnet_connectionr0~s3���0)� ���� ��'�� �� �s ���c��# �[R"U5n[R"U5nU(dSSU3S.$U(dSSU3S.$UR[R :waSSURR 3S.$[RSURSURSU35 [RS US 35 [R"UUUUS 9IS hv�N upgU(a�UR(a,[RS [UR535 O"[R!SUR"35 URUR$URUR"UR&R)5S.$[R+SU35 SUSUS S.$N�7f)u 向Telnet连接的网络设备发送命令(使用更长的超时时间) Args: device_id: 设备ID credential_id: 凭据ID command: 要执行的命令 timeout: 命令超时时间(秒,默认比普通命令更长) Returns: 命令执行结果 FrwrXrxu8此函数仅支持Telnet连接,当前凭据协议为: u通过Telnet向设备 ryu) 发送命令: u超时设置: u秒r�Nu#命令执行成功,输出长度: u命令执行失败: r�u执行命令失败: rz)r rIr�rRrrdrrrgrhr/r0rr�rYr�r�r�r�r�r�r�r�)rFrlr�r�r-rkr�r�s r.�send_telnet_commandr2�s����(� &� &�y� 1�F��.�.�}�=�J� � �/@�� �-L�M�M� � �/@���-P�Q�Q����0�7�7�7� �/g�hr�h{�h{�iB�iB�hC�.D�E� E� �K�K�(���� �R��8I�8I�7J�JZ�[b�Zc�d�e� �K�K�.�� ��-�.�-�9�9��#��� ��M�F�� �>�>� �K�K�=�c�&�-�-�>P�=Q�R� S� �N�N�1�&�2F�2F�1G�H� I��~�~��~�~��m�m�#�1�1�$�3�3�=�=�?�  � � � � �+�E�7�3�4����"�"�  � �/�s�C*G�,G�-CG�__main__c�<�SSKJn [R"USSS9 g)u启动Web服务器r��appz0.0.0.0i�)rrSN)�web.appr6�uvicorn�runr5s r.�start_web_serverr:�s���� � �C�i�d�3r�)�target�daemonu>NetBrain MCP Web界面已启动,访问 http://localhost:8080)NNNN)rzrzrzrzrzrz)rzrzrzrzrzrzrzrz)rzrWNrzrz)r�)T)N)z{}rz)Nr9r[rWN�)r9r\r=)r�)_�mcp.server.fastmcpr�typingrrrrr��logging�sysr!�globr�rr �network_devicesr r r r rrr�device_connectorrrr� mcp_resourcesrr�template_systemrrrrrr�device_prompts� basicConfig�INFO� StreamHandler�stdout� getLoggerrg�mcp�toolr�r'rDrIrL�boolrO�intrirqr�r�r�r�r�r�r�r�r�r��register_resource�SYSTEMr��DEVICEr��CONFIGr�r�r�� CREDENTIALr�r��resourcer�r�rrr.r0r2r(� threadingr8r:�Thread� web_thread�start�printr9r�r�r.�<module>r\s� ��&�,�,��� � � � �4����W�V�� ������ �,�,� A����S�Z�Z�0��� � � �>� *���n������� �!%� �� 4� �S�M� 4��#�� 4� �S�M� 4� �#�� 4�  �$�s�C�x�.�� 4� � 4�D���� ������E� �E��E��E� � E� � E� � E��E��E��E� �E� �#�s�(�^�E� �E�N���� �� ���c�3�h��(@� � � �������������5��5� �5��5� � 5� � 5� � 5��5��5� �5��d�3��8�n��5� �5�n���� 3�3� 3�4� 3� � 3����������A@� �A@��A@��A@�� A@� �3�-� A@� � A@��A@� �#�s�(�^�A@� �A@�F������T�#�s�(�^� 4�� ��,����|M�C�|M��|M��S�#�X��|M� �|M�|����M�s�M�3�M�4��S��>�M� �M�&���� � ) ��) ��) ��) �� ) �  �#�s�(�^� ) � �) �V���� � 5 ��5 ��5 ��5 �� 5 �  �$�s�C�x�.�� 5 � �5 �n����7�d�4��S��>�&:�7� �7�����7�d�4��S��>�2�7� �7����� ?�C� ?�D� ?�D��c��N� ?� � ?�����C�H�S�M�C�T�#�s�(�^�C� �C�*����-�d�4��S��>�2�-� �-�������BN��BN� �BN��BN� �#�s�(�^� BN� �BN�N�#�#�$5�|�7J�7J�K�<�S�<�S�<�L�<��#�#�$8�,�:M�:M�N�6��6��c�3�h��6�O�6��#�#�$?��AT�AT�U�7C�s�7C�t�C��H�~�7C�V�7C�r�#�#�$C�\�EX�EX�Y�5I�3�5I�4��S��>�5I�Z�5I�n�#�#�$?��AT�AT�U�5F�s�5F�t�C��H�~�5F�V�5F�n�#�#�M�<�3J�3J�K���c�3�h���L��.�#�#�O�\�5H�5H�I� ��c�3�h�� �J� ����g��4�C�4�C�4��4� ���H��/�3�/�3�/��/�*,�`�����!���"&��F � �F ��F ��F �� F � � F � � F ��3�-�F ��F � �#�s�(�^�F � �F �P���� "��� � ������� � � � � � �#�s�(�^�� ��B���� � B ��B ��B ��B �� B �  �#�s�(�^� B � �B �J �z����4� �!�!�)9�$�G�J����� � J�K��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/NorthLaneMS/NetBrain_MCP'

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