Skip to main content
Glama
cnYui

File Manager MCP Server

by cnYui
tools.cpython-311.pyc15.8 kB
� �u�h\*� ���dZddlZddlZddlZddlmZddlmZddlZej e ��Z dde de de fd �Zdde d e de fd �Zdde de d e de fd�Zdde de de fd�Zdde de de de fd�Zddee de de de fd�ZdS)uf文件管理器MCP工具实现 这个模块包含了所有文件系统操作工具的具体实现。 �N)�Path)�ListF�path� show_hidden�returnc ��zK� t|��}|���sd|�d�S|���sd|�d�Sg}|���D]�}|s|j�d��r�|���rdnd} |���r|���jnd}|� |dkr|�d |j�d |�d �n |�d |j������#ttf$r#|� |�d |j�d ���Y��wxYw|sd |�d�Sd |�d�}|d� t|����z }|S#t$r d|�d�cYSt$r9}t�d|����dt#|����cYd}~Sd}~wwxYw)u�列出目录内容 Args: path: 目录路径 show_hidden: 是否显示隐藏文件 Returns: 目录内容的字符串表示 �错误: 路径 '� ' 不存在� 错误: '�' 不是一个目录�.�目录�文件�-�: � (� 字节)� (无法访问)u目录 'u' 为空,没有内容� ' 的内容: � u"错误: 没有权限访问目录 '�'u列出目录失败: u%错误: 列出目录时发生异常: N)r�exists�is_dir�iterdir�name� startswith�is_file�stat�st_size�append�OSError�PermissionError�join�sorted� Exception�logger�error�str) rr�dir_path�items�item� item_type�size�result�es �N/Users/wujianxiang/dev/mcpDevelop/desktopFileManager/file_manager_mcp/tools.py�list_directoryr1sW����"@���:�:����� � � 8�7�d�7�7�7� 7���� � � :�9�t�9�9�9� 9����$�$�&�&� I� I�D�� �4�9�#7�#7��#<�#<� ��$(�K�K�M�M�?���x�I� I�.2�l�l�n�n�E�t�y�y�{�{�*�*�#��� � �D�TW�K�K� �H�H�T�Y�H�H�$�H�H�H�H�`i�]x�]x�mq�mv�]x�]x�y�y�y�y���_�-� I� I� I�� � � �G�G�T�Y�G�G�G�H�H�H�H�H� I����� <�;�d�;�;�;� ;�0�D�0�0�0���$�)�)�F�5�M�M�*�*�*��� �� �<�<�<�;�D�;�;�;�;�;�;� �@�@�@�� � �/�A�/�/�0�0�0�?�s�1�v�v�?�?�?�?�?�?�?�?�����@���sZ�(E&�E&�A E&�A$C:�9E&�:1D.�+E&�-D.�. E&�9,E&�&F:�8 F:�.F5�/F:�5F:�utf-8�encodingc��@K� t|��}|���sd|�d�S|���sd|�d�S|���j}|dkr d|�d|�d�St |d|� ��5}|���}d d d ��n #1swxYwYd |�d |��S#t$r d |�d|�d�cYSt$r d|�d�cYSt$r9}t� d|����dt|����cYd }~Sd }~wwxYw)u�读取文件内容 Args: path: 文件路径 encoding: 文件编码 Returns: 文件内容或错误信息 �错误: 文件 'r r u' 不是一个文件i�u ' 太大 (u 字节),超过10MB限制�r�r3Nu文件 'ru错误: 无法使用 u 编码读取文件 'u',可能是二进制文件u"错误: 没有权限读取文件 'ru读取文件失败: u%错误: 读取文件时发生异常: ) rrrrr�open�read�UnicodeDecodeErrorr"r%r&r'r()rr3� file_path� file_size�f�contentr/s r0� read_filer??s�����@���J�J� ����!�!� 8�7�d�7�7�7� 7�� � �"�"� :�9�t�9�9�9� 9��N�N�$�$�,� � �'� '� '�\�d�\�\�i�\�\�\� \� �)�S�8� 4� 4� 4� ���f�f�h�h�G� � � � � � � � � � � ���� � � � �8�$�7�7�g�7�7�7�� �i�i�i�h�x�h�h�d�h�h�h�h�h�h� �<�<�<�;�D�;�;�;�;�;�;� �@�@�@�� � �/�A�/�/�0�0�0�?�s�1�v�v�?�?�?�?�?�?�?�?�����@���s^�(B5�B5�'B5�/B5�B"� B5�"B&�&B5�)B&�* B5�5D� D� D�$.D�D�D�r>c��K� t|��}|j�dd���|���rd|�d�St |d|���5}|�|��ddd��n #1swxYwY|���j}d|�d |�d �S#t$r d |�d �cYSt$r9}t� d |����dt|����cYd}~Sd}~wwxYw)u�创建文件 Args: path: 文件路径 content: 文件内容 encoding: 文件编码 Returns: 操作结果信息 T��parents�exist_okr5u ' 已存在�wr7Nu成功创建文件 'z' (ru错误: 没有权限在 'u' 创建文件u创建文件失败: u%错误: 创建文件时发生异常: ) r�parent�mkdirrr8�writerrr"r%r&r'r()rr>r3r;r=r<r/s r0� create_filerIds�����@���J�J� � ����t�d��;�;�;� � � � � � 8�7�d�7�7�7� 7��)�S�8� 4� 4� 4� �� �G�G�G� � � � � � � � � � � � � � ���� � � � ��N�N�$�$�,� �B�d�B�B�y�B�B�B�B�� �@�@�@�?�4�?�?�?�?�?�?� �@�@�@�� � �/�A�/�/�0�0�0�?�s�1�v�v�?�?�?�?�?�?�?�?�����@���sN�AB*� B*�A=�1 B*�=B�B*�B�$B*�*C>�< C>�.C9�3C>�9C>� recursivec��RK� t|��}|���sd|�d�S|���r|���d|�d�S|���r]|rt j|��d|�d�St|�����rd|�d�S|� ��d |�d�Sd |�d �S#t$r d |�d�cYSt$r9}t� d |����dt|����cYd}~Sd}~wwxYw)u�删除文件或目录 Args: path: 文件或目录路径 recursive: 是否递归删除目录 Returns: 操作结果信息 r r u成功删除文件 'ru成功递归删除目录 'u' 及其所有内容�错误: 目录 'u-' 不为空,请使用 recursive=true 参数u成功删除空目录 'r u ' 既不是文件也不是目录u错误: 没有权限删除 'u删除失败: u错误: 删除时发生异常: N)rrr�unlinkr�shutil�rmtree�anyr�rmdirr"r%r&r'r()rrJ� target_pathr/s r0� delete_filerS�s�����:��4�j�j� ��!�!�#�#� 8�7�d�7�7�7� 7� � � � � � F� � � � � � �1�$�1�1�1� 1� � � � !� !� F�� 9�� �k�*�*�*�N�D�N�N�N�N��{�*�*�,�,�-�-�b�a�d�a�a�a�a��!�!�#�#�#�8��8�8�8�8�E�t�E�E�E� E�� �6�6�6�5�d�5�5�5�5�5�5� �:�:�:�� � �)�a�)�)�*�*�*�9��Q���9�9�9�9�9�9�9�9�����:���s@�(C�-C�/C� &C�2C� C�D&�$ D&�-.D!�D&�!D&T� directory�patternc��K� t|��}|���sd|�d�S|���sd|�d�S|r,t|dz |z ��}t j|d���}n&t||z ��}t j|��}|s d|�d |�d �Sg}t |��D]�}t|��}|�|��} |���rd nd } |���r|���j nd } | d krd| �d�nd} |� | �d| �| ������#ttf$r|� | �d| �d���Y��wxYwd|�d|�dt|���d�} | d�|��z } | S#t$r d|�d�cYSt$r9}t �d|����dt|����cYd}~Sd}~wwxYw)u�搜索文件 Args: directory: 搜索目录 pattern: 搜索模式(支持通配符) recursive: 是否递归搜索 Returns: 搜索结果 rLr r r z**T)rJu 在目录 'u' 中没有找到匹配 'u ' 的文件rrrrrr@rru ' 中搜索 'u ' 的结果 (u 个匹配): ru"错误: 没有权限搜索目录 'ru搜索文件失败: u%错误: 搜索文件时发生异常: N)rrrr(�globr$� relative_torrrr r!r"�lenr#r%r&r')rTrUrJ� search_path�search_pattern�matches�results�match� match_path� relative_pathr,r-� size_infor.r/s r0� search_filesrb�s�����(@��9�o�o� ��!�!�#�#� =�<�i�<�<�<� <��!�!�#�#� ?�>�y�>�>�>� >� � 0� ��t�!3�g�!=�>�>�N��i��$�?�?�?�G�G� ��w�!6�7�7�N��i��/�/�G�� Z�Y��Y�Y�W�Y�Y�Y� Y����G�_�_� O� O�E��e���J�&�2�2�;�?�?�M�$.�$5�$5�$7�$7�E���X�I� O�4>�4F�4F�4H�4H�Q�z���(�(�0�0�c��37�3�;�;�/��/�/�/�/�B� ����)�I�I�}�I�i�I�I�J�J�J�J���_�-� O� O� O����)�M�M�}�M�M�M�N�N�N�N�N� O����j�y�i�i�w�i�i�S�QX�\�\�i�i�i���$�)�)�G�$�$�$��� �� �A�A�A�@�I�@�@�@�@�@�@� �@�@�@�� � �/�A�/�/�0�0�0�?�s�1�v�v�?�?�?�?�?�?�?�?�����@���s[�(F5�F5�AF5�&AF5�6AE�F5�,E?�<F5�>E?�?5F5�5H � H �.H�>H �H � source_paths�destination_folder� overwritec ��\K� t|��}|���s5|�dd���t�d|����n|���sd|�d�S|sdSg}g}g}|D�]\} t|��}|���s|�|�d����@|���s|�|�d����m||jz } | ���r |s|�|j�d �����tj || ��| � ��j } |�|j�d | �d �����#t$r|�|�d ���Y��t$r3} |�|�d t| ���d ���Yd} ~ ��Vd} ~ wwxYwg} |rH| �dt!|���d|�d���| �d�|D����|rE| �dt!|���d���| �d�|D����|rE| �dt!|���d���| �d�|D����|s|s|sdSd�| ��S#t$r d|�d�cYSt$r9} t�d| ����dt| ����cYd} ~ Sd} ~ wwxYw)u�复制文件到目标文件夹 Args: source_paths: 源文件路径列表 destination_folder: 目标文件夹路径 overwrite: 是否覆盖已存在的文件 Returns: 复制操作结果信息 TrBu创建目标文件夹: u错误: 目标路径 'r u#错误: 没有提供源文件路径u (文件不存在)u (不是文件)u (文件已存在)rru (权限不足)�)Nu 成功复制 u 个文件到 'z':c��g|]}d|����S�z - ���.0�files r0� <listcomp>zcopy_files.<locals>.<listcomp>%��� H� H� H�4����� H� H� H�u 跳过 u 个文件:c��g|]}d|����Srirjrks r0rnzcopy_files.<locals>.<listcomp>)s�� I� I� I�4����� I� I� Irpu 失败 c��g|]}d|����Srirjrks r0rnzcopy_files.<locals>.<listcomp>-rorpu没有文件被处理ru+错误: 没有权限访问目标文件夹 'ru复制文件失败: u%错误: 复制文件时发生异常: )rrrGr&�inforr rrrN�copy2rrr"r%r(rY�extendr#r') rcrdre� dest_path� copied_files� skipped_files� failed_files� source_path�src_path�dest_file_pathr<r/� result_partss r0� copy_filesr~�s5����J@��+�,�,� ����!�!� U� �O�O�D�4�O� 8� 8� 8� �K�K�F�2D�F�F� G� G� G� G��!�!�#�#� U�T�,>�T�T�T� T�� 9�8�8�� �� �� �'� A� A�K� A�� �,�,�� ���(�(�� �'�'�;�(J�(J�(J�K�K�K�� �'�'�)�)�� �'�'�;�(G�(G�(G�H�H�H��"+�X�]�!:��"�(�(�*�*��9��!�(�(�H�M�)M�)M�)M�N�N�N��� �X�~�6�6�6�*�/�/�1�1�9� ��#�#�x�}�$K�$K� �$K�$K�$K�L�L�L�L��"� E� E� E��#�#�{�$C�$C�$C�D�D�D�D�D�� A� A� A��#�#�{�$?�$?�c�!�f�f�$?�$?�$?�@�@�@�@�@�@�@�@����� A����� � � J� � � � h��L�0A�0A� h� h�Rd� h� h� h� i� i� i� � � � H� H�<� H� H� H� I� I� I� � K� � � � K�C� �,>�,>� K� K� K� L� L� L� � � � I� I�=� I� I� I� J� J� J� � J� � � � J�C� �,=�,=� J� J� J� K� K� K� � � � H� H�<� H� H� H� I� I� I�� +�M� +�,� +�*�*��y�y��&�&�&�� �S�S�S�R�=O�R�R�R�R�R�R� �@�@�@�� � �/�A�/�/�0�0�0�?�s�1�v�v�?�?�?�?�?�?�?�?�����@���s��A1K�6K�: K�;E<�K�,E<�.K�/=E<�,K�-AE<�;K�<"G�K�! G�*(G�K�G�C#K�K�L+�) L+�2.L&� L+�&L+)F)r2)r@r2)T)�__doc__�osrNrW�pathlibr�typingr�logging� getLogger�__name__r&r(�boolr1r?rIrSrbr~rjrpr0�<module>r�s�����  � � � � � � � � � � � ����������������� �� �8� $� $��,@�,@�s�,@��,@�#�,@�,@�,@�,@�^"@�"@�#�"@��"@�3�"@�"@�"@�"@�J @� @�C� @�#� @�c� @�PS� @� @� @� @�F#:�#:�C�#:�D�#:�S�#:�#:�#:�#:�L3@�3@�#�3@��3@��3@�PS�3@�3@�3@�3@�lU@�U@�4��9�U@�#�U@�RV�U@�cf�U@�U@�U@�U@�U@�U@rp

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/cnYui/mcpDevelop'

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