OffshoreVps
教程2026年10月6日阅读约 6 分钟作者:OffshoreVps 团队

如何在 VPS 上托管 MCP 服务器

运行远程 Model Context Protocol 服务器:本地与远程的对比、Python 示例、systemd 服务、带令牌的 HTTPS,以及安全检查清单。

Model Context Protocol(MCP)让 AI 助手可以调用你所运行服务器上的工具并读取数据。许多 MCP 服务器在本地运行,但当多个人、工具或智能体需要共享相同能力时,VPS 上的远程服务器就很有用。本指南涵盖设置选择和一个安全的基线。

VPS 上的终端窗口,显示托管 MCP 服务器所用的命令,以“sudo adduser --disabled-password --gecos "" mcp”开头
本指南中你将在服务器上运行的那类命令。

本地还是远程 MCP?

  • 本地(stdio)。客户端在你自己的机器上将服务器作为子进程启动。简单且私密,但只能在那台机器上使用。
  • 远程(HTTP)。服务器运行在 VPS 上,客户端通过 HTTPS 连接。这就是你要托管的方式。它适合共享工具、长时间运行的任务以及需要固定 IP 的工具。

请查看当前的 MCP 规范,了解你的客户端支持哪种传输方式。远程服务器通常选用 Streamable HTTP。典型工作负载的规格见我们的 MCP 服务器托管页面。

步骤 1:准备服务器

使用全新的 Ubuntu LTS 服务器,并按照如何保护新 VPS 中的步骤操作。为该服务创建一个用户。

sudo adduser --disabled-password --gecos "" mcp

步骤 2:运行服务器

使用官方 SDK 或现有服务器。这个 Python 示例使用 MCP SDK 的 FastMCP 辅助工具:

sudo -iu mcp
python3 -m venv ~/venv && . ~/venv/bin/activate
pip install "mcp[cli]"
# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("demo", host="127.0.0.1", port=8000)

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

if __name__ == "__main__":
    mcp.run(transport="streamable-http")
本指南的步骤依次为:1. 本地还是远程 MCP?;2. 准备服务器;3. 运行服务器;4. 作为服务运行;5. HTTPS 与身份验证;6. 安全检查清单
本指南的步骤,按顺序排列。

步骤 3:作为服务运行

[Unit]
Description=MCP server
After=network-online.target

[Service]
User=mcp
WorkingDirectory=/home/mcp
ExecStart=/home/mcp/venv/bin/python server.py
Restart=always

[Install]
WantedBy=multi-user.target

将其保存为 /etc/systemd/system/mcp.service,并运行 sudo systemctl enable --now mcp。

步骤 4:HTTPS 与身份验证

MCP 服务器可以运行代码并读取数据,因此绝不要让它开放。将其置于带 TLS 的反向代理之后,并要求提供令牌:

mcp.example.com {
  @noauth not header Authorization "Bearer YOUR_LONG_RANDOM_TOKEN"
  respond @noauth 401
  reverse_proxy 127.0.0.1:8000
}

对于生产环境,请按照 MCP 授权规范使用 OAuth,而不是共用一个令牌。

安全检查清单

  • 只授予工具所需的最小权限。除非确有必要,否则不要给工具 shell 访问权限。
  • 将机密信息保存在环境文件中,并设置 chmod 600。
  • 记录工具调用日志,以便了解发生了什么。
  • 保持端口绑定到 127.0.0.1,只暴露代理。