借助 serverless 将 MCP 服务部署到云端

之前一篇文章《# Model Context Protocol(MCP) 编程极速入门》我们讲的都是如何使用本地的 MCP 服务,但是有时我们希望直接把 MCP 服务部署到云端来直接调用,就省去了本地下载启动的烦恼了。此时,我们就需要来使用 MCP 的 SSE 的协议来实现了。

此时,我们先来写 SSE 协议的 MCP 服务。实现起来很简单,只需要将我们最后的 run 命令中的 transport 参数设置为 sse 即可。下面还是以上面的网络搜索为例子,来实现一下 ,具体代码如下:

python 复制代码
# sse_web_search.py
import httpx

from mcp.server import FastMCP


app = FastMCP('web-search', port=9000)


@app.tool()
async def web_search(query: str) -> str:
    """
    搜索互联网内容

    Args:
        query: 要搜索内容

    Returns:
        搜索结果的总结
    """
    async with httpx.AsyncClient() as client:
        response = await client.post(
            'https://open.bigmodel.cn/api/paas/v4/tools',
            headers={
                'Authorization': 'YOUR API KEY'},
            json={
                'tool': 'web-search-pro',
                'messages': [
                    {'role': 'user', 'content': query}
                ],
                'stream': False
            }
        )

        res_data = []
        for choice in response.json()['choices']:
            for message in choice['message']['tool_calls']:
                search_results = message.get('search_result')
                if not search_results:
                    continue
                for result in search_results:
                    res_data.append(result['content'])

        return '\n\n\n'.join(res_data)


if __name__ == "__main__":
    app.run(transport='sse')

FastMCP 中,有几个可以设置 SSE 协议相关的参数:

  • host: 服务地址,默认为 0.0.0.0
  • port: 服务端口,默认为 8000。上述代码中,我设置为 9000
  • sse_path:sse 的路由,默认为 /sse

此时,我们就可以直接写一个客户端的代码来进行测试了。具体代码如下:

python 复制代码
import asyncio
from mcp.client.sse import sse_client
from mcp import ClientSession


async def main():
    async with sse_client('http://localhost:9000/sse') as streams:
        async with ClientSession(*streams) as session:
            await session.initialize()

            res = await session.call_tool('web_search', {'query': '杭州今天天气'})
            print(res)


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

我们可以看到,他正常工作了,并搜索到了内容:

当然,我们也可以使用 mcp dev sse_web_search.py 的方式来测试。这里要注意的是,Transport Type 需要改成 SSE,然后下面填写我们的本地服务地址。

当一切都测试没有问题后,我们就来将他通过 severless 的方式来部署到云端。这里我们选择的是阿里云的函数计算服务。首先我们先进入到阿里云的 函数计算 FC 3.0函数 菜单,并点击 创建函数 来创建我们的服务。地址是:fcnext.console.aliyun.com/cn-hangzhou...

我们这里选择 Web函数 ,运行环境我们选择 Python 10。代码上传方式这里可以根据大家需求来,因为我这里就一个 python 文件,所以我这里就直接选择使用示例代码了,这样我后面直接把我的代码覆盖进去了就行了。启动命令和监听端口我这里都保留为默认(端口需要和代码中一致)。

环境变量大家可以将代码中用到的 apikey 可以设置为一个环境变量,这里我就不设置了。最后设置完成截图如下:

在高级设置中,为了方便调试,我启动了日志功能。

设置完成后,点创建即可。他就跳转到代码编辑部分,然后我们把之前的代码复制进去即可。

完成后,我们来安装下依赖。我们点击右上角的编辑层。这里默认会有个默认的 flask 的层,因为开始的模板用的是 flask,这里我们就不需要了。我们删除他,再添加一个 mcp 的层。选择添加官方公共层,然后搜索 mcp 就能看到了一个 python 版的 MCP 层,里面包含了 MCP 所有用到的依赖。

如果你还有其他第三方的,可以先搜索下看看公共层中是否有,没有就可以自行构建一个自定义的层。点击这里就可以,只需要提供一个 requirements 列表就可以了,这里就不赘述了。

当我们都设置完成后,点击右下角的部署即可。

然后我们又回到了我们代码编辑的页面,此时,我们再点击左上角的部署代码。稍等一两秒就会提示代码部署成功。此时,我们的 MCP 服务就被部署到了云端。

然后,我们切换到配置触发器中,就可以看到我们用来访问的 URL 地址了。当然,你也可以绑定自己的域名。

然后,我们就可以用我们上面的客户端代码进行测试了。

python 复制代码
import asyncio
from mcp.client.sse import sse_client
from mcp import ClientSession


async def main():
    async with sse_client('https://mcp-test-whhergsbso.cn-hangzhou.fcapp.run/sse') as streams:
        async with ClientSession(*streams) as session:
            await session.initialize()

            res = await session.call_tool('web_search', {'query': '杭州今天天气'})
            print(res)


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

如果我们发现在客户端有报也不用慌,我们可以直接在日志中找到对应出错的请求点击请求日志查看报错来修复。

到这里,我们的 MCP 服务就被部署到了云端,我们就可以在任何地方直接来使用它了。

比如,在 Cherry-Studio 中,我们可以这样来设置:

Cline 中:

Cursor 中:

json 复制代码
{
  "mcpServers": {
    "web-search": {
      "url": "https://mcp-test-whhergsbso.cn-hangzhou.fcapp.run/sse"
    }
  }
}

更多教程请查看:github.com/liaokongVFX...

相关推荐
字节跳动视频云技术团队1 小时前
共探 AI 硬件未来图景,火山引擎“智变浪潮”技术沙龙圆满落幕
aigc·openai·线下活动
火山引擎边缘云1 小时前
共探 AI 硬件未来图景,火山引擎“智变浪潮”技术沙龙圆满落幕
aigc·边缘计算
Captaincc3 小时前
模型上下文协议 (MCP):现状剖析、安全威胁与未来研究方向
mcp
Captaincc3 小时前
如何在 Copilot Studio 使用MCP扩展代理
ai编程·mcp
量子位3 小时前
米哈游蔡浩宇新作 iPhone 实机演示:10 分钟就被 AI 小美撩到脸红,她的命运由我拯救
人工智能·aigc
Captaincc3 小时前
AWS MCP Servers:开源套件,将 AWS 最佳实践无缝融入开发流程
aws·mcp
Captaincc3 小时前
Dify MCP 插件指南:一键连接 Zapier,轻松调用 7000+ App 工具
mcp
Captaincc3 小时前
利用 MCP 服务器增强 Amazon Bedrock Agents 的能力
mcp
Captaincc3 小时前
把MCP和AI代理部署在无服务器架构上,大幅提升业务性能
ai编程·mcp
Captaincc3 小时前
从 0 到 1 玩转 MCP:AI 的「万能插头」,代码手把手教你!
ai编程·mcp