MCP服务怎么用HTTP部署?从本机端点到客户端验证

用 Python SDK v2 把 MCP 工具部署到本机 Streamable HTTP 端点,附独立客户端、结果断言和连接排错;说明监听地址、端点路径及远端 HTTPS/认证尚需完成的工作。

MCP 的 HTTP 部署,最先要验证的是服务器能在指定地址响应协议、客户端能发现工具并得到正确结果。本文使用官方 Python SDK v2 的 Streamable HTTP,在本机 127.0.0.1:8865/mcp 提供一个整数翻倍工具。读者可以先完成这条最小链路,再处理远端访问、HTTPS 与认证。

这个部署示例适用于什么情况

代码已在 Windows、Python 3.11、mcp==2.2.0 上运行验证,核验日期为 2026 年 10 月 1 日。服务仅监听本机回环地址,没有身份认证,也没有生产环境压测;不能据此认为公网部署已完成。选择 Streamable HTTP 的依据是官方 SDK 对 URL 客户端的支持,不需要把旧 SSE 配置复制进来。

MCP服务怎么用HTTP部署?从本机端点到客户端验证

stdio 通常由客户端启动本地子进程;HTTP 模式则需要先启动一个持续运行的服务,客户端通过地址连接。两者可以暴露相同工具,但启动方式与连接配置不同。

mkdir C:\mcp-demo
cd C:\mcp-demo
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install "mcp==2.2.0"

启动一个明确绑定地址的服务器

把以下内容保存为 http_server.py:

from mcp.server import MCPServer

mcp = MCPServer("LocalHttpDemo")

@mcp.tool()
def double(value: int) -> int:
    """Double an integer; no external service is called."""
    return value * 2

if __name__ == "__main__":
    mcp.run(transport="streamable-http", host="127.0.0.1", port=8865, json_response=True)
.\.venv\Scripts\python.exe .\http_server.py

保持这个终端运行。在代码中,host="127.0.0.1" 限定本机访问,port=8865 与后面客户端地址保持一致,json_response=True 选择 JSON 响应模式。整数翻倍工具不调用外部接口、也不修改数据。

/mcp 是本例的 MCP 端点路径。用浏览器直接打开地址,看见空白或方法、请求头相关错误,都不能单独说明服务坏了:MCP 客户端会发送协议请求及必要请求头,普通地址栏访问不是完整验收。

用独立客户端检查发现与调用

新建 http_client.py,在第二个终端使用同一虚拟环境运行:

import asyncio
from mcp import Client

async def main():
    async with Client("http://127.0.0.1:8865/mcp",
                      read_timeout_seconds=10) as client:
        listed = await client.list_tools()
        print([tool.name for tool in listed.tools])
        result = await client.call_tool("double", {"value": 7})
        if result.is_error:
            raise RuntimeError(str(result.content))
        assert result.structured_content == {"result": 14}
        print(result.structured_content)

if __name__ == "__main__":
    asyncio.run(main())
cd C:\mcp-demo
.\.venv\Scripts\python.exe .\http_client.py

本次实际测试中,工具列表包含 double,传入 {"value":7} 后得到 {"result":14} 且错误标志为假。读者应核对列表和断言都通过,不能只凭端口能连接就宣布 MCP 部署成功。

SDK 的 Client 会处理连接生命周期与协议消息。本教程不手写 curl 会话,是为了避免把缺少协商、请求头或会话状态的问题误认成业务工具故障。

常见故障:每次只改变一个变量

现象 排查操作 复查标准
连接被拒绝 检查服务终端是否退出、监听端口是否仍为 8865;运行 Test-NetConnection 127.0.0.1 -Port 8865 端口可达后,再跑 MCP 客户端
地址能连但返回 404 确认 URL 结尾有 /mcp,没有误用 /sse 或网站首页 客户端能列出 double
提示端口占用 选一个未占用端口,同时修改服务端与客户端;不要关闭用途不明的进程 新端口上重新完成发现和调用
远端电脑连接失败 确认服务仍只监听 127.0.0.1;远端电脑的 localhost 指的是它自己 先明确网络拓扑和访问入口,再测试协议
参数错或工具失败 检查工具名 double 与整数参数 value,读取 is_error 和错误内容 固定输入 7 应返回 14

从本机验证走向远端服务,还需要哪些工作

如果希望另一台机器访问,不能只把 URL 中的 127.0.0.1 换成公网 IP。还需要合适的监听地址、网络路由或反向代理,并配置 HTTPS、认证与访问范围。SDK 的传输安全检查与允许的 Host/Origin 也要按实际域名设置;不要为图省事直接关闭安全检查。

本示例没有实现这些远端能力。正式服务应给工具设置超时、并发和资源限制,明确进程重启方式;如果有写入操作,还需要权限验证、审计与幂等。先沿用本文的确定输入复测,再增加真实工具,才容易定位是哪一层改变导致失败。

相关问答

HTTP 服务能让客户端自己启动吗? 本文的 URL 客户端只连接地址,服务进程需预先运行。若希望客户端管理一个本地子进程,应选择 stdio;两种配置不要混用。

Streamable HTTP 是否必须返回流? 不是。官方 SDK 暴露 json_response 选项,本例用 JSON 响应完成请求;如果你的应用需要通知、事件或恢复行为,应按相应协议与 SDK 功能单独验证。

参考:MCPServer 的运行方法及 HTTP 配置参数;官方 URL Client 示例与结果处理;MCP 标准传输与 HTTP 安全要求。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30222.html

赞 (0)
AI小管家的头像AI小管家
DeepSeek 自动化测试怎么做?用 unittest 验证金额计算函数
上一篇 1天前
DeepSeek 代码无法运行怎么办?排查 Python 的 ModuleNotFoundError
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部