部署在Azure Function上的自定义MCP服务器认证失败问题
问题描述
我使用fastMCP搭建自托管MCP服务器,并按照官方指南部署到Azure Function中。已严格遵循「启用内置服务器授权与认证」的步骤,但连接远程MCP服务器时持续报错;尝试使用AccessKey方式启动远程服务器也出现相同错误。
VS Code中的报错信息:
2026-05-23 15:23:49.535 [info] Waiting for server to respond to
initializerequest...
部署在Azure Function中的server.py代码:
from typing import Any import sys import logging from mcp.server.fastmcp import FastMCP # 降低MCP SDK日志级别 logging.getLogger("mcp").setLevel(logging.WARNING) # 初始化FastMCP服务器 mcp = FastMCP("weather", stateless_http=True) # 添加一个示例工具 @mcp.tool() def greet(name: str = "World") -> str: """按名称问候某人。""" return f"Wolla!!, {name}!" if __name__ == "__main__": try: # 启动服务器 print("Starting MCP server...") mcp.run(transport="streamable-http") except Exception as e: print(f"运行MCP服务器时出错: {e}", file=sys.stderr)
排查解决方案
- 确认Azure Function触发配置:FastMCP使用
streamable-http传输时,必须用HTTP触发类型,建议将Function路由设置为/{*route},确保所有MCP请求能被正确接收。 - 校验认证一致性:无论是内置授权还是AccessKey方式,要保证客户端的认证参数和Azure Function的访问控制设置完全匹配。比如用AccessKey时,客户端请求头要带上
Authorization: Bearer <你的AccessKey>,同时Azure端要允许该Key的访问权限。 - 查看服务端日志:不要只依赖客户端日志,登录Azure Portal查看Function的执行日志,排查是否存在服务端报错(如请求拦截、依赖缺失、端口配置问题)。
- 本地先验证功能:先在本地运行该代码,用MCP客户端连接测试。如果本地正常,再排查部署到Azure后的环境差异——比如网络限制、环境变量是否正确、Python依赖版本是否与本地一致(尤其是fastMCP版本)。
- 匹配无状态模式:初始化FastMCP时设置了
stateless_http=True,要确保客户端也使用无状态HTTP模式连接,两者模式必须统一。
内容的提问来源于stack exchange,提问作者ANIRBAN DAS
相关产品推荐
相关产品推荐

