New in version: 2.2.11

概述

当以Web服务器形式运行FastMCP时,您的MCP工具、资源和提示可能需要访问底层的HTTP请求信息,例如请求头、客户端IP或查询参数。

FastMCP 提供了一种简洁的方式,通过依赖函数来访问HTTP请求信息。

访问HTTP请求

推荐通过get_http_request()依赖函数来访问当前HTTP请求:

from fastmcp import FastMCP
from fastmcp.server.dependencies import get_http_request
from starlette.requests import Request

mcp = FastMCP(name="HTTPRequestDemo")

@mcp.tool()
async def user_agent_info() -> dict:
    """Return information about the user agent."""
    # Get the HTTP request
    request: Request = get_http_request()
    
    # Access request data
    user_agent = request.headers.get("user-agent", "Unknown")
    client_ip = request.client.host if request.client else "Unknown"
    
    return {
        "user_agent": user_agent,
        "client_ip": client_ip,
        "path": request.url.path,
    }

这种方法在请求执行的任何环节都适用,而不仅限于您的MCP函数内部。它在以下场景特别有用:

  1. 您需要在辅助函数中访问HTTP信息
  2. 您正在调用需要HTTP请求数据的嵌套函数
  3. 您正在使用中间件或其他请求处理代码

重要说明

  • HTTP请求仅在FastMCP作为Web应用程序的一部分运行时可用
  • 在非Web请求上下文中访问HTTP请求会引发RuntimeError
  • get_http_request() 函数返回一个标准的 Starlette Request 对象

常见使用场景

访问请求头信息

from fastmcp.server.dependencies import get_http_request

@mcp.tool()
async def get_auth_info() -> dict:
    """Get authentication information from request headers."""
    request = get_http_request()
    
    # Get authorization header
    auth_header = request.headers.get("authorization", "")
    
    # Check for Bearer token
    is_bearer = auth_header.startswith("Bearer ")
    
    return {
        "has_auth": bool(auth_header),
        "auth_type": "Bearer" if is_bearer else "Other" if auth_header else "None"
    }