如何将 MCP Server (FastMCP) 配置为公网访问(监听 0.0.0.0)

    • 引言
    • 常见错误尝试
    • 根本原因:从源码解析
    • 正确的解决方案
    • 总结

引言

在使用 Model Context Protocol(MCP) 框架开发自定义工具服务器时,我们经常使用 FastMCP 来快速构建服务。当选择 streamable-http 作为传输模式时,一个常见的需求是将服务暴露在 0.0.0.0 上,以便可以从局域网或公网进行访问,而不仅仅是本地的 127.0.0.1。然而,很多开发者在尝试配置 host 时会遇到 TypeError 的问题。本文将详细解析这个问题的根本原因,并提供正确的解决方案。

常见错误尝试

当你启动一个基础的 FastMCP 服务器时,它默认监听在 http://127.0.0.1:8000

# oci-compute-mcp-server.py
from mcp.server.fastmcp import FastMCP# 初始化 FastMCP 服务器
mcp = FastMCP("oci-compute")# ... 其他工具定义 ...if __name__ == "__main__":mcp.run(transport="streamable-http")

输出:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

为了让它监听在 0.0.0.0,很多开发者会自然地尝试在 run() 方法中添加 host 参数:

# 错误尝试 1
mcp.run(transport="streamable-http", host="0.0.0.0")

这会导致一个直接的错误:

TypeError: FastMCP.run() got an unexpected keyword argument 'host'

另一个常见的尝试是查阅文档或猜测 API,可能会使用类似 transport_options 的参数:

# 错误尝试 2
mcp.run(transport="streamable-http", transport_options={"host": "0.0.0.0", "port": 8000})

不幸的是,这同样会失败:

TypeError: FastMCP.run() got an unexpected keyword argument 'transport_options'

那么,正确的配置方式究竟是什么呢?

根本原因:从源码解析

遇到这种 “unexpected keyword argument” 的问题时,最好的方法是直接查看 FastMCP 类的源代码。

通过分析 mcp/server/fastmcp/server.py 文件,我们可以发现两个关键点:

  1. run() 方法的签名

    def run(self,transport: Literal["stdio", "sse", "streamable-http"] = "stdio",mount_path: str | None = None,
    ) -> None:# ...
    

    从签名中可以明确看到,run() 方法只接受 transportmount_path 两个参数。这解释了为什么我们传递 hosttransport_options 会报错。

  2. __init__() 构造函数的签名

    class FastMCP(Generic[LifespanResultT]):def __init__(self,name: str | None = None,# ... 其他参数 ...host: str = "127.0.0.1",port: int = 8000,# ... 其他参数 ...):self.settings = Settings(# ...host=host,port=port,# ...)# ...
    

    真正的玄机在这里!hostport 参数实际上是在 FastMCP 类的 构造函数 中定义的。这些配置项在服务器实例化时被读取,并存储在内部的 settings 对象中,run() 方法在启动 uvicorn 服务器时会使用这些预先配置好的设置。

正确的解决方案

基于源码的分析,正确的做法是在创建 FastMCP 实例时就传入 hostport

下面是正确的代码示例:

# oci-compute-mcp-server.py
from mcp.server.fastmcp import FastMCP# 正确做法:在实例化时传入 host 和 port
mcp = FastMCP("oci-compute", host="0.0.0.0", port=8000)# ... 其他工具定义 ...if __name__ == "__main__":# run() 方法保持不变mcp.run(transport="streamable-http")

现在,当你再次运行服务器时,将会看到期望的输出:

INFO:     Started server process [xxxxx]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

服务器现在已经成功监听在所有网络接口上,可以从外部设备进行访问了。

总结

FastMCP 服务器配置为公网访问的关键在于:网络配置(如 hostport)必须在 FastMCP 类的构造函数中指定,而不是在 run() 方法中

希望这篇文章能帮助你避免在配置 MCP Server 时走弯路。当遇到类似的 API 使用问题时,深入阅读源代码往往是找到答案最直接、最有效的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919183.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919183.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919183.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络

Delay Tolerant Networks – DTNs 延迟容忍网络架构归属Delay Tolerant Networks – DTNs 延迟容忍网络应用实例例子 1:瑞典北部的萨米人 (Saami reindeer herders)例子 2:太平洋中的动物传感网络DTNs路由方式——存储&转发DTNs移动模型Random walk …

计算机视觉(opencv)实战二——图像边界扩展cv2.copyMakeBorder()

OpenCV copyMakeBorder() 图像边界扩展详解与实战在图像处理和计算机视觉中,有时需要在原始图像的四周增加边界(Padding)。这种操作在很多场景中都有应用,比如:卷积神经网络(CNN)中的图像预处理…

ansible管理变量和事实

ansible管理变量和事实与实施任务控制 在 Ansible 中,变量和事实(Facts)就像给剧本(Playbook)配备的 “信息工具箱”,让你的自动化配置管理更灵活、更智能。 变量:提前准备的 “预设信息” 变…

STM32--寄存器与标准库函数--基本定时器

目录 前言 基本定时器概念 定时时间 定时器时钟确定 倍频锁相环被正确配置为168MHz 定时器的库函数操作 代码 定时器的寄存器操作 代码 寄存器 后言 前言 使用平台:STM32F407ZET6 使用数据手册:STM32F407数据手册.pdf 使用参考手册&…

PCA 实现多向量压缩:首个主成分的深层意义

PCA 实现多向量压缩 第一个主成分(components_[0])正是数据协方差矩阵中最大特征值对应的特征向量。 ,layer_attention_vector[layer] 被赋值为 pca.components_[0],这确实是一个特征向量,具体来说是 PCA 分解得到的第一个主成分(主特征向量)。 关于它的维度: 假设 c…

网络常识-DNS如何解析

DNS(Domain Name System,域名系统)是互联网的“地址簿”,负责将人类易记的域名(如www.example.com)转换为计算机可识别的IP地址(如192.168.1.1)。其工作流程可以简单理解为“从域名到…

Java中 23 种设计模式介绍,附带示例

文章目录设计模式六大原则设计模式分类1、创建型模式(Creational Patterns)2、结构型模式(Structural Patterns)3、行为型模式(Behavioral Patterns)一、创建型模式(Creational Patterns&#x…

嵌入式开发入门——电子元器件~电磁继电器、蜂鸣器

文章目录电磁继电器定义关键参数实物蜂鸣器实物内部结构分类关键参数电磁继电器 定义 概述:电磁继电器是利用电磁感应原理职称的一种电磁开关,他能通过:低电压、低电流的电路,来控制高电压、高电流的电路。 关键参数 线圈电压…

ROS2基础

1.helloworld案例1.创建功能包(C)终端下,进入ws00_helloworld/src目录,使用如下指令创建一个C 功能包:ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld执行完毕&a…

Python爬虫实战:研究pygalmesh,构建Thingiverse平台三维网格数据处理系统

1. 引言 1.1 研究背景 在数字化浪潮席卷全球的当下,三维建模技术已成为连接虚拟与现实的核心纽带,广泛渗透于工程设计、地理信息系统(GIS)、虚拟现实(VR)、增强现实(AR)、医学影像等关键领域。例如,在建筑工程中,BIM(建筑信息模型)技术依赖高精度三维网格实现施工…

开发者说 | EmbodiedGen:为具身智能打造可交互3D世界生成引擎

概述 具身智能的发展离不开高质量、多样化的可交互3D仿真环境。为突破传统构建方式的瓶颈,我们提出了EmbodiedGen,一个基于生成式AI技术的自动化3D世界生成引擎,助力低成本、高效率地创建真实且可交互的3D场景。用户仅需输入任务定义或场景图…

GitHub Copilot:AI编程助手的架构演进与真实世界影响

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 1. 技术背景与核心架构 GitHub Copilot 是由 GitHub 与 OpenAI 联合开…

PDF OCR + 大模型:让文档理解不止停留在识字

在企业数字化的实际场景中,PDF OCR 已经很普遍了:从扫描件提取文本、表格到生成可搜索 PDF。但这类技术往往停留在"把图片变成文字",对文档背后的语义、逻辑、业务价值理解不足。 而当 OCR 遇上大语言模型(LLM&#xff…

半敏捷卫星观测调度系统的设计与实现

半敏捷卫星观测调度系统的设计与实现 摘要 本文详细阐述了一个基于Python的半敏捷卫星观测调度系统的设计与实现过程。系统针对半敏捷卫星特有的机动能力限制,综合考虑了地面目标观测需求、卫星资源约束、能源管理等多重因素,提出了一种混合启发式算法解…

软件测试中,常用的抓包工具有哪些?抓包的原理是什么?

回答重点在软件测试中,常用的抓包工具主要有:1)Fiddler2)Wireshark3)Charles4)Postman(它的拦截器功能也可以用于抓包)5)tcpdump抓包的原理大致是通过安装在本地的抓包工…

Cesium学习(二)-地形可视化处理

Cesium地形可视化是其核心功能之一,允许开发者在3D地球中展示真实的地形数据。以下是关于Cesium地形可视化的详细处理方法: 文章目录1. 启用地形可视化基本地形加载自定义地形提供者2. 地形相关操作地形高度采样地形夸张效果3. 地形可视化设置地形照明效…

《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》

《告别 if-else 迷宫:Python 策略模式 (Strategy Pattern) 的优雅之道》 大家好,我是你的朋友,一位与 Python 代码相伴多年的开发者。在我们的编程生涯中,几乎都曾与一种“代码怪兽”搏斗过,它就是那冗长、复杂、牵一发而动全身的 if-elif-else 结构。 每当一个新的需求…

Redis--day7--黑马点评--优惠券秒杀

(以下内容全部来自上述课程)优惠券秒杀 1. 全局唯一ID 每个店铺都可以发布优惠券:当用户抢购时,就会生成订单并保存到tb voucher order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显受单表数据量的限制…

Vue 与 React 深度对比:设计哲学、技术差异与应用场景

一、核心设计理念对比 特性 Vue React 设计目标 渐进式框架,降低学习曲线 构建大型应用,保持灵活性 设计哲学 “约定优于配置” “配置优于约定” 核心思想 响应式数据绑定 函数式编程 + 虚拟DOM 模板语言 HTML-based 模板 JSX(JavaScript XML) 状态管理 内置响应式系统 依…

软件开发 - foreground 与 background

foreground 与 background 1、foreground词性含义n.前景;最突出的位置.v使突出;强调# 例词in the 【foreground】(在最显眼的位置)【foreground】 task(前台任务)【foreground】 color(前景色&a…