拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FastAPI-MCP 调用响应较慢的 API 端点超时,如何注入自定义 httpx 客户端延长请求超时时间?

FastAPI-MCP 调用响应较慢的 API 端点超时如何注入自定义 httpx 客户端延长请求超时时间【免费下载链接】fastapi_mcpExpose your FastAPI endpoints as Model Context Protocol (MCP) tools, with Auth!项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi_mcp如果你的 FastAPI 项目里有些端点响应时间较长而客户端通过 FastAPI-MCP 调用对应工具时总是超时问题出在 MCP 服务端发起的 HTTP 请求超时时间上。FastAPI-MCP 的 FAQ 明确说明HTTP 请求默认 5 秒后超时要延长超时需要注入一个自定义的httpx.AsyncClient。本文给出一条最短可行路径构造带更长timeout的 httpx 客户端传给FastApiMCP再用 MCP Inspector 跑一遍慢端点对应的工具来验证。前提确认超时发生在 MCP 服务端这一侧在动手改代码之前先确认你的集成方式。默认情况下 FastAPI-MCP 通过 ASGI transport 与 FastAPI app 通信不经过真实的 HTTP 请求也无需 base URL见 Transport 文档。但无论使用哪种 transport只要没有显式传入http_client服务端内部都会创建自己的httpx.AsyncClient超时时间由该客户端决定。一个值得注意的文档差异FAQ 说默认超时是 5 秒而源码 server.py 中默认客户端写的是timeout10.0self._http_client http_client or httpx.AsyncClient( transporthttpx.ASGITransport(appself.fastapi, raise_app_exceptionsFalse), base_urlself._base_url, timeout10.0, )两处数字不一致文档未解释原因。对排障来说结论是同一的默认超时偏短且你无法通过参数单独调大它——只能整体注入自定义客户端。注入自定义 httpx 客户端延长超时在创建FastApiMCP时通过http_client参数传入自定义客户端即可。官方示例 Configure HTTP Timeout Example 的可直接运行的完整代码from examples.shared.apps.items import app # The FastAPI app from examples.shared.setup import setup_logging import httpx from fastapi_mcp import FastApiMCP setup_logging() mcp FastApiMCP(app, http_clienthttpx.AsyncClient(timeout20)) mcp.mount_http() if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)要点httpx.AsyncClient(timeout20)中timeout20表示把超时延长到 20 秒按你的端点实际响应时间自行调整。注入后FastApiMCP会使用你提供的客户端不再创建自己的默认客户端。如果你的 FastAPI app 不在本进程里还需要同时指定base_url。Transport 文档 展示了这种用法import httpx from fastapi import FastAPI from fastapi_mcp import FastApiMCP app FastAPI() custom_client httpx.AsyncClient( base_urlhttps://api.example.com, timeout30.0 ) mcp FastApiMCP( app, http_clientcustom_client ) mcp.mount()其中base_url指向真实的 API 服务地址示例中的https://api.example.com需要替换为你的地址timeout30.0是文档示例值。同进程集成则沿用上面的mount_http()写法即可。如果你还没安装 FastAPI-MCP安装命令为uv add fastapi-mcp或uv pip install fastapi-mcp/pip install fastapi-mcp见 Installation。用 MCP Inspector 验证慢端点能正常完成FAQ 中给出的验证方式是 MCP Inspector操作步骤启动你的 FastAPI 应用上面的示例用python 07_configure_http_timeout_example.py运行服务在http://127.0.0.1:8000/mcp。新开终端运行 Inspectornpx modelcontextprotocol/inspector输入挂载路径 URL 连接 MCP 服务器默认http://127.0.0.1:8000/mcp。在Tools部分点击List Tools确认端点已注册为工具。选中对应慢端点的工具填好必填参数点击Run Tool执行。如有需要查看服务端日志获取更多调试信息。判断标准注入客户端前响应时间超过默认超时的端点在Run Tool时会超时失败注入更长timeout后同一工具能在响应时间内正常返回。Inspector 的完整介绍见 FAQ 的 How do I test my FastApiMCP server is working? 一节。限制与边界超时时间只能在创建FastApiMCP时通过http_client设置项目文档中没有提供只调超时、不改客户端其他属性的独立参数。自定义客户端如果同时指定了base_url请确认该地址可达文档未描述注入客户端后默认 ASGI transport 行为是否改变跨进程场景请以实际请求结果为准。如果端点本身响应时间超过你设置的timeout调大超时治标不治本需要优化端点本身。【免费下载链接】fastapi_mcpExpose your FastAPI endpoints as Model Context Protocol (MCP) tools, with Auth!项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi_mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门