
    k7i              
       n   % S r SSKJr  SSKJr  SSKJrJr  SSKr	SSK
Jr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJr  SSKJrJr  SSKJr  \" \S9r\\S'    " S S\5      rS\S\ \   4S jr!\RD                  " \!S9r# S#S\S\\$S4   S\\%\$\4   S-  S4   S\	RL                  RN                  4S jjr(\RD                  " \(S9r) " S S\5      r*S\S\ \	RL                  RV                     4S jr,\RD                  " \,S9r-S\S\\\$-  S4   S\ \   4S  jr.\RD                  " \.S9r/ " S! S"\5      r0g)$z=A middleware for injecting tools into the MCP server context.    )Sequence)Logger)	AnnotatedAnyN)ReadResourceContents)Prompt)AnyUrl)override)Context)CallNext
MiddlewareMiddlewareContext)Tool
ToolResult)
get_logger)nameloggerc                   8   \ rS rSrSrS\\   4S jr\S\	\
R                  R                     S\\
R                  R                  \\   4   S\\   4S j5       r\S\	\
R                  R                     S\\
R                  R                  \4   S\4S	 j5       rS
rg)ToolInjectionMiddleware   z2A middleware for injecting tools into the context.toolsc                 ^    Xl         U Vs0 s H  o"R                  U_M     snU l        gs  snf )z)Initialize the tool injection middleware.N)_tools_to_injectr   _tools_to_inject_by_name)selfr   tools      b/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/server/middleware/tool_injection.py__init__ ToolInjectionMiddleware.__init__   s/    05(-:
(-IItO:
% :
s   *context	call_nextreturnc                 J   #    / U R                   QU" U5      I Sh  vN Q$  N7f)zInject tools into the response.N)r   )r   r    r!   s      r   on_list_tools%ToolInjectionMiddleware.on_list_tools   s)      C&&By/A)ABB)As   #!#c                 (  #    UR                   R                  U R                  ;   aW  U R                  UR                   R                     nUR                  UR                   R                  =(       d    0 S9I Sh  vN $ U" U5      I Sh  vN $  N N7f)z'Intercept tool calls to injected tools.)	argumentsN)messager   r   runr'   )r   r    r!   r   s       r   on_call_tool$ToolInjectionMiddleware.on_call_tool(   ss      ??4#@#@@001E1EFDGOO,E,E,KLLLw''' M's$   A7B9B:B	B
BB)r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   r   r
   r   mcptypesListToolsRequestr   r$   CallToolRequestParamsr   r*   __static_attributes__     r   r   r      s    <
htn 
 C"399#=#=>C CII66FGC 
$	C C 
("399#B#BC
( CII;;ZGH
( 
	
( 
(r7   r   r    r"   c                 >   #    U R                  5       I Sh  vN $  N7f)z%List prompts available on the server.N)list_promptsr    s    r   r9   r9   6   s     %%''''   )fnr   z!The name of the prompt to render.r'   z$The arguments to pass to the prompt.c                 <   #    U R                  XS9I Sh  vN $  N7f)z(Render a prompt available on the server.)r   r'   N)
get_prompt)r    r   r'   s      r   r>   r>   @   s!      ###CCCC   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )PromptToolMiddlewareP   z=A middleware for injecting prompts as tools into the context.c                 8   > [         [        /n[        TU ]  US9  g N)r   )list_prompts_toolget_prompt_toolsuperr   r   r   	__class__s     r   r   PromptToolMiddleware.__init__S   s    .@u%r7   r6   r"   Nr,   r-   r.   r/   r0   r   r5   __classcell__rI   s   @r   rA   rA   P   s    G& &r7   rA   c                 >   #    U R                  5       I Sh  vN $  N7f)z'List resources available on the server.N)list_resourcesr:   s    r   rP   rP   X   s     ''))))r;   uriz The URI of the resource to read.c                 <   #    U R                  US9I Sh  vN $  N7f)z(Read a resource available on the server.)rQ   N)read_resource)r    rQ   s     r   rS   rS   b   s!     
 &&3&////r?   c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )ResourceToolMiddlewareo   z?A middleware for injecting resources as tools into the context.c                 8   > [         [        /n[        TU ]  US9  g rD   )list_resources_toolread_resource_toolrG   r   rH   s     r   r   ResourceToolMiddleware.__init__r   s    02DEu%r7   r6   rK   rL   rN   s   @r   rU   rU   o   s    I& &r7   rU   )N)1r0   collections.abcr   loggingr   typingr   r   	mcp.typesr1    mcp.server.lowlevel.helper_typesr   r   pydanticr	   typing_extensionsr
   fastmcp.server.contextr   $fastmcp.server.middleware.middlewarer   r   r   fastmcp.tools.toolr   r   fastmcp.utilities.loggingr   r,   r   __annotations__r   listr9   from_functionrE   strdictr2   GetPromptResultr>   rF   rA   ResourcerP   rX   rS   rY   rU   r6   r7   r   <module>rm      s   C $  !  A   & * X X / 0* *(j (B( (DL (
 &&  	DD
C<<
=D S#XEED 	YYD $$
&2 &*' *d3993E3E.F *
 (( 
00	6C<!CC	D0 

0 '' 
&4 &r7   