You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单条命令将基于Streamable-HTTP的MCP服务器配置在MCPO代理后正常运行

如何通过单条命令将基于Streamable-HTTP的MCP服务器配置在MCPO代理后正常运行

我来帮你搞定这个单命令启动的问题!你现在能分别跑通服务器和代理,但想把它们合并成一条命令对吧?咱们一步步拆解问题,找到解决方案:

先搞清楚你之前的尝试为什么失败

你试的两个命令都有各自的问题:

  1. 第一个命令uvx mcpo ... -- http://127.0.0.1:8000/mcp:这是代理已运行服务器的用法,必须先单独启动MCP服务器才能生效,没法直接用它同时启动服务器和代理。
  2. 第二个命令uvx mcpo ... -- uv run server.py:MCPO的--后面只接受HTTP地址,不支持直接执行启动服务器的命令。如果想用MCPO直接托管服务器进程,那服务器得改成stdio传输模式,这和你要的streamable-HTTP不是一回事。

正确的单命令解决方案

我们需要用Shell的命令链,先启动MCP服务器,等它就绪后再启动MCPO代理,同时确保两个进程能协同运行。

第一步:给服务器指定固定端口

先修改你的MCP服务器代码,给streamable-HTTP传输指定固定端口(避免随机端口导致代理找不到服务器):

from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")

# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }
    return f"{styles.get(style, styles['friendly'])} for someone named {name}."

if __name__ == "__main__":
    # 新增固定端口配置,确保服务器稳定在8000端口启动
    mcp.run(transport="streamable-http", port=8000)

第二步:用Shell命令链启动服务

这里有两种可靠的单命令写法:

写法1:基础版(用睡眠等待服务器启动)

适合服务器启动速度快的场景:

# 把服务器放后台,等待2秒确保启动完成,再启动代理
uv run server.py & sleep 2 && uvx mcpo --port 8002 --api-key "top-secret" --server-type "streamable-http" -- http://127.0.0.1:8000/mcp && wait
  • &:把MCP服务器进程放到后台运行
  • sleep 2:给服务器留2秒启动时间(如果你的服务器启动慢,可以改成3-5秒)
  • wait:让终端不会直接退出,保持代理进程在前台

写法2:进阶版(用端口检查替代固定睡眠)

比基础版更可靠,会等服务器端口真正就绪后再启动代理:
首先安装端口检查工具wait-for-it:

pip install wait-for-it

然后执行单命令:

# 启动服务器,等待8000端口就绪后启动代理,关闭终端时自动杀掉服务器进程
trap 'pkill -f "uv run server.py"' EXIT; uv run server.py & wait-for-it 127.0.0.1:8000 -t 10 && uvx mcpo --port 8002 --api-key "top-secret" --server-type "streamable-http" -- http://127.0.0.1:8000/mcp
  • trap ... EXIT:确保你关闭终端或按Ctrl+C时,后台的MCP服务器进程会被自动杀掉,避免残留
  • wait-for-it ...:最多等10秒,直到8000端口能访问再启动代理

验证效果

执行完单命令后,你就可以通过http://localhost:8002/docs访问代理后的MCP接口了,功能和你分开启动时完全一致!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:08:02