Skip to main content
Glama
Mulan Permissive Software License, Version 2
14
mcp_server.cpython-39.pyc7.49 kB
a ��g�!�@sddlZddlZddlZddlmZmZmZmZmZddl Z ddl Z ddl m Z m Z ddlmZddlmZmZddlmZddlmZmZejejdd �e�d �ZGd d �d e�ZGd d�de�ZGdd�de�ZGdd�de�Zdd�Z dd�Z!ddd�Z"dd�Z#Gdd�d�Z$dS)�N)�Any�Dict�List�Optional�Union)�FastMCP�Server)�SseServerTransport)� BaseModel�Field)� Starlette)�Route�Mountz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)�level�format� mcp_serverc@s6eZdZUeed<eed<dZeed<dZeed<dS)�ApiParam�type�descF�requiredN�default) �__name__� __module__� __qualname__�str�__annotations__r�boolrr�rr�+E:\data\mcp-server\http-4-mcp\mcp_server.pyrs  rc@s&eZdZUeed<dZeeed<dS)�ApiResponseField�pathNr)rrrrrrrrrrrrs rc@s�eZdZUeed<eed<eed<dZeed<eeefed<ee d�Z eeefed<ee d�Z eee ee ffed <d Zeeeefed <d Zeeeefed <d S) �ApiTool�name� description�url�GET�method�params)�default_factory�headers�responseN�response_transform�auth)rrrrrr&rrr �dictr)r*rrr+rrr,rrrrr!#s  "r!c@seZdZUeeed<dS)� ApiConfig�toolsN)rrrrr!rrrrrr..s r.cCs>|�d�}|}|D]&}t|t�r2||vr2||}qdSq|S)N�.)�split� isinstancer-)�datar �keys�result�keyrrr�get_nested_value2s  r7c Cs�zHt|ddd��}t�|�}Wd�n1s00Ytfi|��WSty~}zt�d|����WYd}~n d}~00dS)N�r�utf-8��encodingz"Failed to load API configuration: )�open�json�loadr.� Exception�logger�error)� config_path�fZ config_data�errr�load_api_config<s(rE�c �s@i}|j��D]H\}}||vr,||||<q|jdurB|j||<q|jrtd|����q|j��}|jr�|j�d�}|dkr�d|j�d���|d<nF|dkr�|j�dd�}|j�d d �} |j�d �d kr�| ||<n| ||<t � �4IdH��8} z�|j � �d k�r| j|j |||d�IdH} n�|j � �dk�rH| j|j |||d�IdH} nh|j � �dk�rt| j|j |||d�IdH} n<|j � �dk�r�| j|j |||d�IdH} ntd|j ����| ��| ��WWd�IdHSt�y } zt�d| ����WYd} ~ n d} ~ 00Wd�IdH�q<1IdH�s20YdS)NzMissing required parameter: rZbearerzBearer ZtokenZ AuthorizationZapi_key�key_name� key_value��in�headerr%)r'r)�timeoutZPOST)r=r)rLZPUTZDELETEzUnsupported HTTP method: zHTTP request error: )r'�itemsrr� ValueErrorr)�copyr,�get�httpxZ AsyncClientr&�upperr$ZpostZput�deleteZraise_for_statusr=r?r@rA) �toolr'rLZprocessed_paramsr"Z param_configr)Z auth_typerGrHZclientr*rDrrr�make_http_requestEsn     ����rUcCsJ|s|Si}|��D]0\}}t|t�r,|}n |�d�}t||�||<q|S)Nr )rMr2rrPr7)r3�mappingr5Z output_key�sourcer rrr�transform_response�s  rXc@s@eZdZddd�Zdd�Zdd�Zd d �Zd d �Zddd�Zd S)� HttpMcpServer�config/config.json�config/apis.jsoncCs@||_||_|��|_t|�|_td�|_|��|� �|_ dS)NZhttp_mcp_server) rB� apis_path� _load_config�configrE� api_configr�mcp�_register_tools�_create_starlette_app�app)�selfrBr\rrr�__init__�s   zHttpMcpServer.__init__c Cs�z@t|jddd��}t�|�Wd�WS1s40YWnFty�}z.t�d|���ddddd d d �WYd}~Sd}~00dS) Nr8r9r:zFailed to load config: �0.0.0.0�@F�info� rF)�host�port�debug� log_levelZ max_workersrL)r<rBr=r>r?r@rA)rdrCrDrrrr]�s.�zHttpMcpServer._load_configcCs|jjD]}|�|�qdS�N)r_r/�_register_tool�rd� tool_configrrrra�s zHttpMcpServer._register_toolscs<��fdd�}�jj�j�jd�|�t�d�j���dS)Nc �s�z<t�|�j�dd�d�IdH}�jr8t|�j�}|WS|WSty�}z0t�d�j�d|���dt |�iWYd}~Sd}~00dS)NrLrF)rLzTool z execution failed: rA) rUr^rPr*rXr?r@rAr"r)�kwargsZ response_dataZtransformed_datarDrprr� tool_handler�s �  z2HttpMcpServer._register_tool.<locals>.tool_handler)r"r#zRegistered API tool: )r`rTr"r#r@rh)rdrqrsrrprro�s��zHttpMcpServer._register_toolcsd�jj�td����fdd�}�fdd�}t�j�dd�td|d �td�jd �td |d �gd �}|S) Nz /messages/c �sh��|j|j|j�4IdH�2\}}��||����IdHWd�IdHqd1IdHsZ0YdSrn)Z connect_sseZscopeZreceiveZ_send�runZcreate_initialization_options)�requestZ read_streamZ write_stream)r�sserr� handle_sse�s� �z7HttpMcpServer._create_starlette_app.<locals>.handle_ssec �shz t�j��_���ddd�WStyb}z*t�d|���dt|�d�WYd}~Sd}~00dS)NZsuccessz#Configuration reloaded successfully)�status�messagezFailed to reload config: rA)rEr\r_rar?r@rAr)rurD)rdrr� reload_config�s  z:HttpMcpServer._create_starlette_app.<locals>.reload_configrlFz/mcp/sse)Zendpoint)rcz /admin/reload)rlZroutes) r`Z _mcp_serverr r r^rPr rZhandle_post_message)rdrwrzrcr)rrdrvrrb�s     �� z#HttpMcpServer._create_starlette_appNcCs\|p|j�dd�}|p"|j�dd�}t�d|�d|���tj|j|||j�dd�d �dS) Nrjrfrkrgz.Starting HTTP-MCP middleware server at http://�:rmrh)rjrkrm)r^rPr@rh�uvicornrtrc)rdrjrkrrrrt�s �zHttpMcpServer.run)rZr[)NN) rrrrer]rarorbrtrrrrrY�s  $rY)rF)%r=Zlogging�os�typingrrrrrrQr|Z mcp.serverrrZmcp.server.sser Zpydanticr r Zstarlette.applicationsr Zstarlette.routingr rZ basicConfig�INFOZ getLoggerr@rrr!r.r7rErUrXrYrrrr�<module>s0  �    A

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/Tght1211/http-4-mcp'

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