突破传统MCP限制:使用Streamable HTTP实现高效远程命令执行

在人工智能应用开发中,模型控制协议(MCP)扮演着重要角色。然而,传统的MCP版本往往存在功能限制,今天我们将探索如何通过升级到MCP 1.16.0,利用全新的streamable_http_app功能,构建一个高效的远程命令执行系统。

环境准备与升级

首先,我们需要安装必要的依赖包,并确保使用最新版本的MCP:

1
2
3
4
5
6
7
8
9
10
pip install mcp uvicorn fastapi

# 检查当前MCP版本
pip show mcp

# 升级到支持streamable_http功能的最新版本
pip install --upgrade mcp

# 或者指定版本安装
pip install mcp==1.16.0 --upgrade

升级到MCP 1.16.0后,我们将获得对streamable_http_app的支持,这为构建流式HTTP应用打开了新的大门。

构建Streamable HTTP服务器

我们的服务器设计为一个无状态服务,能够执行Linux命令并返回结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import subprocess
from mcp.server.fastmcp import FastMCP
import uvicorn

# 创建无状态服务器
mcp = FastMCP("StatelessServer", stateless_http=False)

@mcp.tool()
def linux_exec_cmd(cmd: str) -> str:
"""执行linux命令"""
return subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout

# 创建streamable HTTP应用
app = mcp.streamable_http_app()

if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)

启动服务器:

1
uv run server-sample.py

服务器将在本地8000端口启动,准备好接收客户端请求。

开发Streamable客户端

客户端代码负责与服务器建立连接并调用远程工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
import asyncio
import sys

async def connect_to_streamble_server(server_url: str):
# 连接到streamable HTTP服务器
async with streamablehttp_client(url=server_url) as (
read_stream,
write_stream,
_,
):
# 使用客户端流创建会话
async with ClientSession(read_stream, write_stream) as session:
# 初始化连接
await session.initialize()
# 列出可用工具
tools = await session.list_tools()
print("Tools:", tools)

# 调用工具
result = await session.call_tool(
name="linux_exec_cmd",
arguments={"cmd": "dir"}
)
print("result: ", result)

async def main():
if len(sys.argv) < 2:
print("Usage: uv run client.py <URL of Streamble HTTP MCP server>")
sys.exit(1)

await connect_to_streamble_server(server_url=sys.argv[1])

if __name__ == "__main__":
asyncio.run(main())

运行客户端测试:

1
uv run client.py http://localhost:8000/mcp

技术亮点

1. 流式HTTP传输

MCP 1.16.0引入的streamable_http_app提供了更高效的通信机制,支持实时数据流传输。

2. 无状态设计

服务器采用无状态架构,每个请求独立处理,提高了系统的可扩展性和可靠性。

3. 异步通信

基于asyncio的异步编程模型确保了高并发性能,能够同时处理多个客户端请求。

4. 跨平台兼容

虽然示例中使用的是Windows的dir命令,但同样的代码可以轻松适配Linux系统的ls命令,实现真正的跨平台远程命令执行。

应用场景

这种基于MCP Streamable HTTP的技术方案适用于:

  • 远程服务器管理:安全地执行远程服务器维护命令
  • 自动化运维:集成到CI/CD流水线中执行部署脚本
  • 监控系统:定期执行系统状态检查命令
  • 教育平台:为学生提供安全的命令执行环境

总结

通过升级到MCP 1.16.0并利用streamable_http_app功能,我们成功构建了一个高效、可靠的远程命令执行系统。这个方案不仅解决了传统MCP版本的功能限制,还为开发者提供了更强大的工具来构建复杂的AI应用。

随着MCP协议的不断发展,我们有理由相信,未来会出现更多创新的应用场景和解决方案。现在就升级你的MCP版本,开始探索Streamable HTTP的无限可能吧!


温馨提示:在实际生产环境中使用远程命令执行功能时,请务必考虑安全性因素,实施适当的认证和授权机制。