Skip to main content
Glama
Mulan Permissive Software License, Version 2
14
mcp_server.cpython-310.pyc7.52 kB
o W�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�RD:\Data\Money\2025\ai-fund-assistant\mcp-servers\http-for-mcp-server\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�r||vr||}q dS|S)N�.)�split� isinstancer-)�datar �keys�result�keyrrr�get_nested_value2s  r7c Cstz$t|ddd�� }t�|�}Wd�n1swYtdi|��WSty9}z t�d|����d}~ww)N�r�utf-8��encodingz"Failed to load API configuration: r)�open�json�loadr.� Exception�logger�error)� config_path�fZ config_data�errr�load_api_config<s ���rE�c �s�i}|j��D]$\}}||vr||||<q|jdur"|j||<q|jr,td|����q|j��}|jrn|j�d�}|dkrKd|j�d���|d<n#|dkrn|j�dd�}|j�d d �} |j�d �d krj| ||<n| ||<t � �4IdH��} zo|j � �d kr�| j|j |||d�IdH} nG|j � �dkr�| j|j |||d�IdH} n2|j � �dkr�| j|j |||d�IdH} n|j � �dkr�| j|j |||d�IdH} ntd|j ����| ��| ��WWd�IdHSty�} z t�d| ����d} ~ ww1IdH�swYdS)NzMissing required parameter: rZbearerzBearer �token� AuthorizationZapi_key�key_name� key_value��in�headerr%)r'r)�timeout�POST)r=r)rN�PUTZDELETEzUnsupported HTTP method: zHTTP request error: )r'�itemsrr� ValueErrorr)�copyr,�get�httpxZ AsyncClientr&�upperr$�post�put�deleteZraise_for_statusr=r?r@rA) �toolr'rNZprocessed_paramsr"Z param_configr)Z auth_typerIrJ�clientr*rDrrr�make_http_requestEsz�  �   �����#���r\cCsJ|s|Si}|��D]\}}t|t�r|}n|�d�}t||�||<q |S)Nr )rQr2rrTr7)r3�mappingr5Z output_key�sourcer rrr�transform_response�s  r_c@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)�selfrBrcrrr�__init__�s   zHttpMcpServer.__init__c Cs�z!t|jddd��}t�|�Wd�WS1swYWdStyD}zt�d|���ddddd d d �WYd}~Sd}~ww) Nr8r9r:zFailed to load config: �0.0.0.0�@F�info� rF)�host�port�debug� log_levelZ max_workersrN)r<rBr=r>r?r@rA)rkrCrDrrrrd�s(����zHttpMcpServer._load_configcCs|jjD]}|�|�qdS�N)rfr/�_register_tool�rk� tool_configrrrrh�s  �zHttpMcpServer._register_toolscs<��fdd�}�jj�j�jd�|�t�d�j���dS)Nc �s��zt�|�j�dd�d�IdH}�jrt|�j�}|WS|WStyC}zt�d�j�d|���dt |�iWYd}~Sd}~ww)NrNrF)rNzTool z execution failed: rA) r\rerTr*r_r?r@rAr"r)�kwargsZ response_dataZtransformed_datarDrwrr� tool_handler�s �  � ��z2HttpMcpServer._register_tool.<locals>.tool_handler)r"r#zRegistered API tool: )rgrZr"r#r@ro)rkrxrzrrwrrv�s��zHttpMcpServer._register_toolcsd�jj�td����fdd�}�fdd�}t�j�dd�td|d �td�jd �td |d �gd �}|S) Nz /messages/c �sl���|j|j|j�4IdH�\}}��||����IdHWd�IdHdS1IdHs/wYdSru)Z connect_sse�scopeZreceiveZ_send�runZcreate_initialization_options)�requestZ read_streamZ write_stream)r�sserr� handle_sse�s� � �.�z7HttpMcpServer._create_starlette_app.<locals>.handle_ssec �sf�zt�j��_���ddd�WSty2}zt�d|���dt|�d�WYd}~Sd}~ww)N�successz#Configuration reloaded successfully)�status�messagezFailed to reload config: rA)rErcrfrhr?r@rAr)r}rD)rkrr� reload_config�s�  ��z:HttpMcpServer._create_starlette_app.<locals>.reload_configrsFz/mcp/sse)Zendpoint)rjz /admin/reload)rsZroutes) rgZ _mcp_serverr r rerTr rZhandle_post_message)rkrr�rjr)rrkr~rri�s     �� z#HttpMcpServer._create_starlette_appNcCs\|p|j�dd�}|p|j�dd�}t�d|�d|���tj|j|||j�dd�d �dS) Nrqrmrrrnz.Starting HTTP-MCP middleware server at http://�:rtro)rqrrrt)rerTr@ro�uvicornr|rj)rkrqrrrrrr|�s  �zHttpMcpServer.run)rarb)NN) rrrrlrdrhrvrir|rrrrr`�s  $r`)rF)%r=Zlogging�os�typingrrrrrrUr�Z mcp.serverrrZmcp.server.sser Zpydanticr r Zstarlette.applicationsr Zstarlette.routingr rZ basicConfig�INFOZ getLoggerr@rrr!r.r7rEr\r_r`rrrr�<module>s2  �   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