Skip to main content
Glama

ClickUp Operator

by noah-vh
responses.cpython-312.pyc28.8 kB
� �MMgRN��Z�ddlmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z m Z ddlmZddlmZddlmZddlmZddlZddlZdd lmZdd lmZdd lmZdd lmZm Z m!Z!dd l"m#Z#m$Z$m%Z%Gd�d�Z&Gd�de&�Z'Gd�de&�Z(Gd�de&�Z)Gd�de&�Z*ejVe,e-e.fZ/ej`e/Z1ejde/Z3ejVe3e1fZ4Gd�de&�Z5Gd�de6�Z7Gd�de6�Z8ejrd�Z:Gd�d e&�Z;y)!�)� annotationsN)�datetime)�format_datetime� formatdate)�partial)� guess_type)� token_hex)�quote)� md5_hexdigest)�BackgroundTask)�iterate_in_threadpool)�URL�Headers�MutableHeaders)�Receive�Scope�Sendc���eZdZdZdZ d d d�Zd d�Zd dd�Zedd��Z d dd�Z d dd�Z dd �Z y)�ResponseN�utf-8c��||_|�||_||_|j|�|_|j |�y�N)� status_code� media_type� background�render�body� init_headers��self�contentr�headersrrs �_C:\Users\noahv\Documents\GitHub\clickup-operator\.venv\Lib\site-packages\starlette/responses.py�__init__zResponse.__init__s>��'��� � !�(�D�O�$����K�K��(�� � ���'�"�c�n�|�yt|ttf�r|S|j|j�S)Nr%)� isinstance�bytes� memoryview�encode�charset�r r!s r#rzResponse.render.s1�� �?�� �g��z�2� 3��N��~�~�d�l�l�+�+r%c��|�g}d}d}nj|j�D��cgc]5\}}|j�jd�|jd�f��7}}}|D�cgc]}|d�� }}d|v}d|v}t|dd�} | �U|rS|jdksD|jdvs6t t | ��} |jd| jd�f�|j} | �Y|rW| jd �r$d | j�vr| d |jzz } |jd| jd�f�||_ ycc}}wcc}w) NT�latin-1rscontent-lengths content-typer��)��i0ztext/zcharset=z ; charset=) �items�lowerr*�getattrr�str�len�appendr� startswithr+� raw_headers) r r"r8�populate_content_length�populate_content_type�k�v�h�keysr�content_length� content_types r#rzResponse.init_headers5s[�� �?�57�K�&*� #�$(� !�Za�Zg�Zg�Zi�j�Zi�RV�RS�UV�A�G�G�I�,�,�Y�7����)�9L�M�Zi�K�j�"-�.�+�Q�A�a�D�+�D�.�&7�t�&C� #�$3�4�$?� !��t�V�T�*�� � �'��%�%��+�t�/?�/?�:�/M� ��T��^�N� � � � 1�>�3H�3H��3S�T� U���� � � #�(=��&�&�w�/�J�l�FX�FX�FZ�4Z�� �t�|�|� ;�;� � � � ���1D�1D�Y�1O�P� Q�&����)k��.s �:E� E c�h�t|d�st|j��|_|jS)N�_headers)�raw)�hasattrrr8rB)r s r#r"zResponse.headersQs(���t�Z�(�*�t�/?�/?�@�D�M��}�}�r%c ���tjj�} || |<|�|| |d<|�,t|t�rt |d��| |d<n|| |d<|�|| |d<|�|| |d<|rd| |d<|rd| |d<| �!| j �d vsJd ��| | |d <| jd � �j�} |jjd| jd�f�y)Nzmax-ageT��usegmt�expires�path�domain�secure�httponly)�strict�lax�nonez1samesite must be either 'strict', 'lax' or 'none'�samesite�)�headers set-cookier.) �http�cookies� SimpleCookier'rrr2�output�stripr8r6r*) r �key�value�max_agerHrIrJrKrLrP�cookie� cookie_vals r#� set_cookiezResponse.set_cookieWs.��04�|�|�/H�/H�/J����s� � � �%,�F�3�K� � "� � ��'�8�,�)8���)N��s� �I�&�)0��s� �I�&� � �"&�F�3�K�� � � �$*�F�3�K�� !� �$(�F�3�K�� !� �&*�F�3�K� � #� � ��>�>�#�(�� C�C�  C�� '/�F�3�K� � #��]�]�"�]�-�3�3�5� � ������ �0A�0A�)�0L� M�Nr%c �6�|j|dd|||||��y)Nr)rZrHrIrJrKrLrP)r])r rXrIrJrKrLrPs r#� delete_cookiezResponse.delete_cookie~s-�� ��� �������� � r%c��K�|ddk(rdnd}||dz|j|jd���d{���||dz|jd���d{���|j�|j��d{���yy7�J7�,7� �w) N�type� websocketz websocket.rQ�http.response.start�ra�statusr"�http.response.body)rar)rr8rr)r �scope�receive�send�prefixs r#�__call__zResponse.__call__�s�����!&�v��+�!=��2����!6�6��*�*��+�+� � � � ��F�%9�9�4�9�9�M�N�N�N� �?�?� &��/�/�#� #� #� '� �� O�� $�s3�3B�B�B�B�#B�9B�:B�B�B)Nr/NNN� r!� typing.Anyr�intr"�typing.Mapping[str, str] | Noner� str | Noner�BackgroundTask | None�return�None)r!rmrrzbytes | memoryviewr)r"rorrrs)rrr)rQNN�/NFFrN)rXr4rYr4rZz int | NonerHzdatetime | str | int | NonerIrprJrprK�boolrLrurP�.typing.Literal['lax', 'strict', 'none'] | Nonerrrs)rtNFFrN)rXr4rIr4rJrprKrurLrurPrvrrrs�rgrrhrrirrrrs) �__name__� __module__� __qualname__rr+r$rr�propertyr"r]r_rk�r%r#rrsh���J��G�#��37�!%�,0� #�� #�� #�1� #� � #� *� #� � #�,�'�8�����"�/3��!���CH�%O� �%O��%O�� %O� -� %O� � %O��%O��%O��%O�A�%O� �%O�T�!���CH� � � �� ��  � �  � �  �A� � � �( $r%rc��eZdZdZy)� HTMLResponsez text/htmlN�rxryrzrr|r%r#r~r~�s���Jr%r~c��eZdZdZy)�PlainTextResponse� text/plainNrr|r%r#r�r��s���Jr%r�c�L��eZdZdZ d d�fd� Zdd�Z�xZS)� JSONResponsezapplication/jsonc�,��t�|�|||||�yr)�superr$)r r!rr"rr� __class__s �r#r$zJSONResponse.__init__�s��� ����+�w� �J�Or%c�T�tj|dddd��jd�S)NF)�,�:)� ensure_ascii� allow_nan�indent� separatorsr)�json�dumpsr*r,s r#rzJSONResponse.render�s-���z�z� ����!�  � �&��/�  r%�r/NNNrl)r!rmrrr()rxryrzrr$r� __classcell__�r�s@r#r�r��sa���#�J� �37�!%�,0� P��P��P�1� P� � P� *� P� �P�r%r�c�:��eZdZ d d�fd� Z�xZS)�RedirectResponsec�r��t�|�d|||��tt|�d��|jd<y)Nr%)r!rr"rz:/%#?=@[]!$&'()*+,;)�safe�location)r�r$r r4r")r �urlrr"rr�s �r#r$zRedirectResponse.__init__�s6��� ����+�w�[e��f�#(��S��8M�#N�� � �Z� r%)i3NN) r�z str | URLrrnr"rorrqrrrs)rxryrzr$r�r�s@r#r�r��sO����37�,0� O� �O��O�1� O� *� O� � O�Or%r�c�X�eZdZUded< d d d�Zd d�Zd d�Zd d�Zy) �StreamingResponse�AsyncContentStream� body_iteratorNc���t|tj�r||_nt |�|_||_|� |j n||_||_|j|�yr) r'�typing� AsyncIterabler�r rrrrrs r#r$zStreamingResponse.__init__�sX�� �g�v�3�3� 4�!(�D� �!6�w�!?�D� �&���-7�-?�$�/�/�Z���$��� ���'�"r%c��BK� |��d{���}|ddk(ry�7��w)Nrazhttp.disconnectr|)r rh�messages r#�listen_for_disconnectz'StreamingResponse.listen_for_disconnect�s*�����#�I�o�G��v��"3�3���%�s � ��c��JK�|d|j|jd���d{���|j23d{���}t|tt f�s|j |j�}|d|dd���d{����O7�_7�L7� 6|dddd���d{���7y�w)NrcrdrfT�rar� more_bodyr%F)rr8r�r'r(r)r*r+)r ri�chunks r#�stream_responsez!StreamingResponse.stream_response�s������-��*�*��+�+� � � � � �-�-� Y�%��e�e�Z�%8�9�� � �T�\�\�2��� 4�e�RV�W�X� X� X� �� Y�� Y��.� �0�#�E�R�S�S�S�sN�$B#�B�B#�B �B�B �AB#�B �B#�B � B#� B#�B�B#c���K�tj�4�d{����d�fd� }�j|t|j|��|t|j |���d{���ddd��d{���|j �|j ��d{���yy7��7�<7�.#1�d{���7swY�>xYw7�!�w)Nc��d�K�|��d{����jj�y7��wr)� cancel_scope�cancel)�func� task_groups �r#�wrapz(StreamingResponse.__call__.<locals>.wrap�s'������f� � ��'�'�.�.�0��s � 0�.� 0)r�z+typing.Callable[[], typing.Awaitable[None]]rrrs)�anyio�create_task_group� start_soonrr�r�r)r rgrhrir�r�s @r#rkzStreamingResponse.__call__�s�������*�*�,�,� � 1� � !� !�$���0D�0D�d�(K� L��w�t�9�9�7�C�D� D� D�-�,� �?�?� &��/�/�#� #� #� '�-�� E��-��,�,�,�� $�sc�C�B'�C�A B-�,B)�-B-�1 C�<B+�=#C� C�!C�)B-�+C�-B?�3B6 �4B?�;Cr�) r!� ContentStreamrrnr"rorrprrqrrrs)rhrrrrs)rirrrrsrw)rxryrz�__annotations__r$r�r�rkr|r%r#r�r��se��%�%� �37�!%�,0� #��#��#�1� #� � #� *� #� �#�"� T� $r%r�c��eZdZddd�Zy)�MalformedRangeHeaderc��||_yr)r!r,s r#r$zMalformedRangeHeader.__init__ s ���� r%N)zMalformed range header.)r!r4rrrs�rxryrzr$r|r%r#r�r� s��r%r�c��eZdZdd�Zy)�RangeNotSatisfiablec��||_yr)�max_size)r r�s r#r$zRangeNotSatisfiable.__init__s �� �� r%N)r�rnrrrsr�r|r%r#r�r�s��!r%r�z (\d*)-(\d*)c���eZdZdZ d d d�Zdd�Zdd�Zdd�Z dd�Z dd�Z e dd ��Z e dd ��Z dd �Zy)� FileResponseiNc ��||_||_||_|�tjdt �|�t |xs|�dxsd}||_||_|j|�|jjdd�|j�Zt|j�} | |jk7r| �d| ��} n| �d|j�d�} |jjd | �||_ |�|j|�yy) Nz;The 'method' parameter is not used, and it will be removed.rr�z accept-rangesr(z; filename*=utf-8''z ; filename="�"zcontent-disposition)rIr�filename�warnings�warn�DeprecationWarningrrrrr"� setdefaultr � stat_result�set_stat_headers) r rIrr"rrr�r��method�content_disposition_type�content_disposition_filename�content_dispositions r#r$zFileResponse.__init__s ���� �&��� �� � � � �M�M�M�"� � � �#�H�$4��5�a�8�H�L�J�$���$��� ���'�"� � � �����9� �=�=� $�+0����+?� (�+�t�}�}�<�)A�(B�BU�Vr�Us�&t�#�)A�(B�,�t�}�}�o�]^�&_�#� �L�L� #� #�$9�;N� O�&��� � "� � !� !�+� .� #r%c��t|j�}t|jd��}t|j�dzt|j�z}dt |j �d���d�}|j jd|�|j jd|�|j jd |�y) NTrF�-r�F��usedforsecurity�content-lengthz last-modified�etag)r4�st_sizer�st_mtimer r*r"r�)r r�r?� last_modified� etag_baser�s r#r�zFileResponse.set_stat_headers>s����[�0�0�1��"�;�#7�#7��E� �� �,�,�-��3�c�+�:M�:M�6N�N� ��=��!1�!1�!3�U�K�L�A�N�� � � ��� 0�.�A� � � �����?� � � �����-r%c���K�|dj�dk(}|j�� tjj t j |j��d{���}|j|�|j}t j|�s%td|j�d���|j}t|��}|jd�}|jd�} |�| �-|j| |�s|j!||��d{���n� |j#||j$�} t1| �dk(r0| d\} }|j3|| ||j$|��d{���n&|j5|| |j$|��d{���|j6�|j7��d{���yy7��b#t$rtd|j�d���wxYw7��#t&$r2} t)| j*d � �|||��d{���7cYd} ~ Sd} ~ wt,$r9} t)d d d | j.��i��} | |||��d{���7cYd} ~ Sd} ~ wwxYw7��7��7���w)Nr��HEADz File at path z is not a file.z does not exist.)rg�rangezif-rangei�)ri�z Content-Rangez*/)rr"�r)�upperr�r�� to_thread�run_sync�os�statrIr��st_mode�S_ISREG� RuntimeError�FileNotFoundErrorr�get�_should_use_range�_handle_simple�_parse_range_headerr�r�r�r!r�r�r5�_handle_single_range�_handle_multiple_rangesr)r rgrhri�send_header_onlyr��moder"� http_range� http_if_range�ranges�exc�response�start�ends r#rkzFileResponse.__call__HsL����!&�x��!6�!6�!8�F�!B�� � � � #� S�$)�O�O�$<�$<�R�W�W�d�i�i�$P�P� ��%�%�k�2�#�*�*���|�|�D�)�&��t�y�y�k��'Q�R�R��*�*�K���&���[�[��)� �� � �J�/� � � �-�";�D�DZ�DZ�[h�ju�Dv��%�%�d�,<�=� =� =� <��1�1�*�k�>Q�>Q�R���6�{�a��#�A�Y� ��s��/�/��e�S�+�BU�BU�Wg�h�h�h��2�2�4���AT�AT�Vf�g�g�g� �?�?� &��/�/�#� #� #� '�AQ��$� P�"�]�4�9�9�+�=M�#N�O�O� P�� >��(� c�L�.�s�{�{��L�U�T[�]a�b�b�b�b��&� <�,���Z\�]`�]i�]i�\j�Xk�Fl�m��%�e�W�d�;�;�;�;�� <�� i��g�� $�s��#I2�;G�!G�"G�7BI2�G,�I2�G.�98I2�1I,�2&I2�I.�#I2�<I0�=I2�G�#G)�)I2�. I)�7"H$�H�H$�I)�I2�$ I)�0)I$�I�I$�I)�I2�$I)�)I2�.I2�0I2c��K�|d|j|jd���d{���|r|dddd���d{���ytj|jd���d{���4�d{���}d }|rR|j |j ��d{���}t|�|j k(}|d||d���d{���|r�Rddd��d{���y7��7��7�x7�q7�L7�"7�#1�d{���7swYyxYw�w) Nrcrdrfr%Fr��rb�r�T)rr8r�� open_filerI�read� chunk_sizer5)r rir��filer�r�s r#r�zFileResponse._handle_simpleos������1�T�=M�=M�Z^�Zj�Zj�k�l�l�l� �� 4�c�PU�V�W� W� W�"�_�_�T�Y�Y�T�B�B�B�B�d� � ��"&�)�)�D�O�O�"<�<�E� #�E� �d�o�o� =�I��(<�e�Zc�d�e�e�e� �C�B�B� m�� W��B��B��=��e�� C��B�B�B�s��$C>�C�C>�C�)C>�&C�'C>�/C!�0C>�3#C)�C#�+C)�C%�C)� C>�C'�C>�C>�C>�!C>�#C)�%C)�'C>�)C;�/C2 �0C;�7C>c���K�d|�d|dz �d|��|jd<t||z �|jd<|dd|jd ���d{���|r|d d d d ���d{���ytj|j d���d{���4�d{���}|j |��d{���d}|rt|jt|j||z ���d{���}|t|�z }t|�|jk(xr||k}|d ||d ���d{���|r�tddd��d{���y7��7��7��7��7��7�c7�$7�#1�d{���7swYyxYw�w)Nzbytes r�r�rt� content-ranger�rc��rdrfr%Fr�r�r�T) r"r4r8r�r�rI�seekr��minr�r5) r rir�r�� file_sizer�r�r�r�s r#r�z!FileResponse._handle_single_range{sX����+1���q��q�� ��9�+�(N�� � �_�%�),�S�5�[�)9�� � �%�&��1�S�T�M]�M]�^�_�_�_� �� 4�c�PU�V�W� W� W�"�_�_�T�Y�Y�T�B�B�B�B�d��i�i��&�&�&� � ��"&�)�)�C�����u��,M�"N�N�E��S��Z�'�E� #�E� �d�o�o� =� M�%�#�+�I��(<�e�Zc�d�e�e�e�  �C�B�B� `�� W��B��B��&��O��f��C��B�B�B�s��AE'�E�E'�(E�))E'�E�E'�E�E'�E�4E �53E�(E �)AE�)E�*E�1 E'�<E�=E'�E'�E'�E'� E� E�E�E'�E$�E �E$� E'c ��K�td�}|j||||jd�\}}d|��|jd<t|�|jd<|dd|jd���d{���|r|d d d d ���d{���yt j |jd ���d{���4�d{���}|D]�\} } |d || | �dd ���d{���|j| ��d{���| | krX|jt|j| | z ���d{���} | t| �z } |d | dd ���d{���| | kr�X|d ddd ���d{�����|d d|�d�jd�d d ���d{���ddd��d{���y7��57��"7��7��7��7��7��7�h7�P7�)7�#1�d{���7swYyxYw�w)N� z content-typezmultipart/byteranges; boundary=r�r�rcr�rdrfr%Fr�r�r�T� z --z-- r.)r �generate_multipartr"r4r8r�r�rIr�r�r�r�r5r*) r rir�r�r��boundaryr?�header_generatorr�r�r�r�s r#r�z$FileResponse._handle_multiple_ranges�s������R�=��+/�+B�+B� �H�i����n�)E�, �(��(�+J�(��(T�� � �_�%�),�^�)<�� � �%�&��1�S�T�M]�M]�^�_�_�_� �� 4�c�PU�V�W� W� W�"�_�_�T�Y�Y�T�B�B�B�B�d�"(�J�E�3��(<�FV�W\�^a�Fb�qu�v�w�w�w��)�)�E�*�*�*��#�+�&*�i�i��D�O�O�S�5�[�0Q�&R� R����U��+��"�,@�%�^b�#c�d�d�d� �#�+��(<�e�Z^�_�`�`�`�#)�� 4�"&�x�j�� 5� <� <�Y� G�%*�����C�B�B� `�� W��B��B��w��*�� R��d��`����C��B�B�B�s��A3G�5F*�6G� F-� )G�5F0�6G�>F2�?G�G�!F4�"G�:F6�;4G�/F8�0!G�F:� G�G�+F<�,(G�F>�G� G�$G�%G�-G�0G�2G�4G�6G�8G�:G�<G�>G�G�G�G � G�Gc���t|j�dzt|j�z}dt|j �d���d�}|t |jd��k(xs||k(S)Nr�r�Fr�TrF)r4r�r�r r*r)�clsr�r�r�r�s r#r�zFileResponse._should_use_range�sj��� �,�,�-��3�c�+�:M�:M�6N�N� ��=��!1�!1�!3�U�K�L�A�N��� �;�+?�+?�� M�M�f�Q^�bf�Qf�fr%c�~��g} |jdd�\}}|j�j �}|dk7r td��t j |�D�cgc]Y}|dk7rR|drt|d�n�t|d�z |dr'|dr"t|d��krt|d�dzn�f��[}}t|�dk(r td��t�fd�|D��r t���td �|D��r td ��t|�dk(r|Sg}|D]v\}}tt|��D]G} || \} } || kDr�|| kr|j| ||f��Ft|| �t|| �f|| <�c|j||f��x|S#t$r t��wxYwcc}w) N�=r�r(zOnly support bytes range)rQrQrz%Range header: range must be requestedc3�F�K�|]\}}d|cxkxr�knc ���y�w)rNr|)�.0r��_r�s �r#� <genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>�s#�����C�F���q�A��*��*�+�F�s�!c3�,K�|] \}}||kD���y�wrr|)r r�r�s r#r z3FileResponse._parse_range_header.<locals>.<genexpr>�s����4�V�z�u�c�u�s�{�V�s�z)Range header: start must be less than end)�split� ValueErrorr�rWr2�_RANGE_PATTERN�findallrnr5�anyr�r��insertr��maxr6) r�r�r��units�range_r �resultr�r��p�p_start�p_ends ` r#r�z FileResponse._parse_range_header�s����(*�� )�&�,�,�S�!�4�M�E�6�� � � �#�#�%�� �G� �&�'A�B� B�$�+�+�F�3�  � 4���H�}� �q�T��A�a�D� �y�3�q��t�9�'<�!"�1��!�A�$�3�q��t�9�y�3H��A�a�D� �A� �i� �4� � � �v�;�!� �&�'N�O� O� �C�F�C� C�%�i�0� 0� �4�V�4� 4�&�'R�S� S� �v�;�!� ��M�)+�� �J�E�3��3�v�;�'��!'�������5�=���7�]��M�M�!�e�S�\�2��!$�U�G�!4�c�#�u�o� F�F�1�I��(�� � �u�c�l�+�!�� ��[� )�&�(� (� )�� s�F#�AF:�#F7c������t��}d|zt��ztt���z�t�fd�|D��d|zz}|���fd�fS)a� Multipart response headers generator. ``` --{boundary}\n Content-Type: {content_type}\n Content-Range: bytes {start}-{end-1}/{max_size}\n \n ..........content...........\n --{boundary}\n Content-Type: {content_type}\n Content-Range: bytes {start}-{end-1}/{max_size}\n \n ..........content...........\n --{boundary}--\n ``` �,c3��K�|]<\}}tt|��tt|dz ��z�z||z z���>y�w)r�N)r5r4)r r�r��static_header_part_lens �r#r z2FileResponse.generate_multipart.<locals>.<genexpr>sK����� �%� ��s���U��_�s�3�s�Q�w�<�0� 0�3I� I��U�{� �$�s�AA�c �L��d��d��d|�d|dz �d��d� jd�S) Nz--z Content-Type: z Content-Range: bytes r�r�rtz r.)r*)r�r�rr@r�s ���r#�<lambda>z1FileResponse.generate_multipart.<locals>.<lambda> sJ����X�J�!�!-��/(�(-�w�a��A��w�a��z�B���f�Y��  r%)r5r4�sum)r r�rr�r@� boundary_lenr?rs ``` @r#rzFileResponse.generate_multipart�sn���0�8�}� �!#�l�!2�S��5F�!F��S�QY�]�I[�![��� �%� � � � � �  �� � � � r%)r/NNNNNN� attachment)rIzstr | os.PathLike[str]rrnr"rorrprrqr�rpr�zos.stat_result | Noner�rpr�r4rrrs)r��os.stat_resultrrrsrw)rirr�rurrrs) rirr�rnr�rnr�rnr�rurrrs) rirr��list[tuple[int, int]]r�rnr�rurrrs)r�r4r�r%rrru)r�r4r�rnrrr&) r�z typing.Sequence[tuple[int, int]]rr4r�rnr@r4rrz.tuple[int, typing.Callable[[int, int], bytes]])rxryrzr�r$r�rkr�r�r�� classmethodr�� staticmethodr�rr|r%r#r�r�sl���J� �37�!%�,0�#�-1�!�(4�#/�$�#/��#/�1� #/� � #/� *� #/��#/�+�#/��#/�#&�#/� �#/�J.�%$�N f�f��f�!$�f�+.�f�;>�f�RV�f� �f�$!��!�&�!�� !� � !� � !�F�g��g� �1��1�f) �0�) ��) �� ) � � ) � 8� ) r%r�)<� __future__r� http.cookiesrSr�r��rer�r�r�r� email.utilsrr� functoolsr� mimetypesr�secretsr � urllib.parser r��anyio.to_thread�starlette._compatr �starlette.backgroundr �starlette.concurrencyr �starlette.datastructuresrrr�starlette.typesrrrrr~r�r�r��Unionr4r(r)�Content�Iterable�SyncContentStreamr�r�r�r�� Exceptionr�r��compilerr�r|r%r#�<module>r=s��"�� � � � � ���3�� ��� ��+�/�7�A�A�0�0�C$�C$�L�8������8��. O�x� O� �,�,�s�E�:�-� .���O�O�G�,���)�)�'�2��� � �/�1B�B�C� �4$��4$�n�9�� !�)�!� ����N�+��} �8�} 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/noah-vh/mcp-server-clickup'

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