Serverless Devs 助力:零代码快速部署你的 MCP Server

使用 Serverless Devs CLI 一键部署 MCP Server 到阿里云函数计算 FC,告别繁琐配置,快速体验 LLM 与真实世界的连接。

原文标题:从零开始开发 MCP Server

原文作者:阿里云开发者

冷月清谈:

本文介绍了如何使用 Serverless Devs CLI 工具快速开发和部署 Model Context Protocol (MCP) Server 到阿里云函数计算 (FC)。传统 MCP Server 开发部署流程繁琐,需要手动配置 SDK、处理依赖和进行云端部署。Serverless Devs 通过一键拉起项目、自动配置和云端部署,极大地简化了开发流程。文章详细说明了如何使用 Serverless Devs 初始化 MCP Server 项目、开发 Server 代码、打包代码,并将其部署到 Function AI。此外,还提供了三种接入客户端的方式,包括使用官方 Client、本地 Client 和在 FC 部署 Client。Serverless Devs 还提供了基于 Python 和 Java 的 Hello World 项目,以及大量可以一键部署的开源 Server。

怜星夜思:

1、MCP 协议在实际应用中,除了文章中提到的文件系统访问、API 集成和物联网控制,还能扩展到哪些更有趣或更有价值的交互能力?
2、文章提到了 Serverless Devs 简化了 MCP Server 的部署流程,你认为 Serverless 架构在 AI 应用开发中还有哪些优势和劣势?
3、文章中提到了多种接入 MCP Server 的方式,你认为哪种方式更适合在生产环境中使用?为什么?

原文内容

在大型语言模型(LLM)生态快速演进的今天,Model Context Protocol(MCP)作为连接 AI 能力与真实世界的标准化协议,正逐步成为智能体开发的事实标准。该协议通过定义 Resources(静态资源)、Prompts(提示词模板)和 Tools(可执行工具)三大核心能力,让开发者能够以模块化方式为 LLM 扩展文件系统访问、API 集成甚至物联网控制等交互能力。


然而当前 MCP Server 的开发部署仍存在显著痛点:开发者需要手动配置 Python/TypeScript SDK、处理依赖冲突,最终还需自行解决云端的 IaC 部署难题。这种碎片化体验使得从零构建 MCP Server 的成本过高。而通过 Serverless Devs CLI 工具,开发者能够一键拉起 MCP Server 项目,并在开发完成后一键部署到云端,显著缩短开发链路,提升 MCP Server 的开发效率。


本文将带你通过 Serverless Devs CLI 工具,开发并一键部署一个原生 SSE 的示例 MCP Server 到阿里云函数计算(FC),提供自带 LLM 的 Client ,可对部署好的 MCP Server 进行测试。


什么是 Serverless Devs?


Serverless Devs[1]是一个开源开放的 Serverless 开发者平台,致力于为开发者提供强大的工具链体系。通过该平台,开发者可以一键体验多云 Serverless 产品,极速部署 Serverless 项目。Serverless Devs 于 2020 年 10 月 23 日正式开源,并于 2022年 进入 CNCF 沙箱,成为首个入选的 Serverless 工具项目,目前项目已经服务于成千上万的开发者和企业用户。


Serverless Devs 包含 CLI 工具,Registry 各类热门 AI 应用模版、实用 AI 工具以及 AI 工作流),CICD 工具,并与函数计算 FC、FunctionAI 开发平台密切合作,为开发者提供更加便利的 Serverless+AI 服务。


从零开发 MCP Server

本地初始化 MCP Server

初始化 MCP Server 项目到本地需要借助 Serverless Devs 工具。可依照此文档[2]
进行安装。安装并配置完成后,通过以下指令初始化一个 Hello World MCP Server 项目:

s init start-fcai-mcp-nodejs


按照提示填入地域,函数名和配置好的 access,即可完成项目的初始化:



项目的目录结构如下:


.
├── build.yaml                  # 构建配置
├── code                        # 项目代码目录
│   ├── check_node_version.mjs  # 部署前检查脚本
│   ├── package-lock.json       
│   ├── package.json       
│   ├── src
│   │   └── index.ts            # 项目源码
│   ├── tsconfig.json
│   └── webpack.config.js
├── readme.md
└── s.yaml                      # 部署 YAML

开发 MCP Server


项目根目录下的 code 文件夹即是项目代码的目录,部署时只有这个文件夹里的内容会部署到函数计算 FC 上。打开 src/index.ts 文件,可以看到 CLI 已经帮你写好了一个简单的、可直接进行部署的Hello World MCP Server:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
// Create a new server instance every time a new connection is made to ensure concurrency
const createServer = () => {
  // Create server instance
  const server = new McpServer({
    name: "my-mcp-server",
    version: "1.0.0",
  });

  // Implement your tools here
  server.tool(
    “hello_world”,
    “Return string ‘hello world!’”,
    {
      // Define input parameters using zod. example: 
      // prefix: z.string().describe(‘prefix’).optional(),
    },
    async () => {
      console.log(“Hello World tool called”);
      return {
        content: [{
          type: “text”,
          text: ‘hello world!’,
        }]
      }
    },
  );
  return server;
}
// Create a new server instance
const server = createServer();
// Create a new stdio transport instance
const transport = new StdioServerTransport();
// Start the server
server.connect(transport).then(() => {
  console.log(“Server started”);
}).catch((err) => {
  console.error(“Error starting server:”, err);
});


这个 Server 包含一个名字为 hello_world 的工具,它只会返回一个字符串 'hello world!',且不需要任何输入参数。你可以参考当前代码的实现自行修改工具,且 CLI 已经帮你配置好了 package.json,你可以按照你开发任意 Node.js 项目的方式来开发这个 Server。


部署 MCP Server 到 Function AI

完成 Server 的开发后,你可以通过 Serverless Devs CLI 工具一键将你的 MCP Server 部署到Function AI。Serverless Devs 是通过 s.yaml 部署代码的,其需要包含所有部署需要的信息,包括实例规格、代码目录、触发器配置等等,而 CLI 已经帮你写好了,因此你不需要在意这些。


在部署之前,还需要对代码进行打包。在这里我们使用 webpack 进行打包,配置已经帮你写好了,因此你只需在 code 目录下执行以下指令:


注意:需要本地 node 版本为 20 或以上。


npm install # 如果你之前没有执行
npm run build


若 code 目录下出现了 dist 文件夹并包含以下文件,则说明构建成功:



此时,你已经准备好将这个 Server 部署到Function AI了!回到项目根目录,执行以下指令:


s deploy -y


若看到以下信息,则说明部署成功。部署成功后,Serverless Devs 会打印部署成功的函数的配置信息:


✔ [nodejs-stdio-hello-world] completed (37.35s)
🚀  Result for [deploy] of [start-mcp-server-nodejs]
====================
serviceName:               xxxxx
......配置信息


其中,projectName 和 serviceName 是部署好的项目和服务的名称,你可以登录阿里云Function AI控制台[3]查看。你还可以在配置信息中找到 internetUrl 字段,这个就是你的 MCP Server 的 URL,可以用于测试和集成到你自己的系统。


测试 MCP Server


你可以本地启动一方 inspector[4]测试部署好的 MCP,只需执行:


npx @modelcontextprotocol/inspector node build/index.js


或者,你也可以启动一个我们基于官方项目修改的,内置好了 LLM 的 inspector:


npx @serverless-devs/inspector node build/index.js


Transport Type 选择 SSE,复制之前部署获取到的 internetUrl ,在尾部添加 /sse,然后粘贴到 URL 输入框。点击 Connect,再切到 Tools,点击 List Tools,即可看到部署好的 Server 的工具信息,并能进行调试。



若你使用的是我们的包含大模型的 inspector,还可以切到 LLM,选择大模型,填入你的 API Key,测试大模型使用你的工具的效果:


需要先点击 List Tools,否则大模型无法使用工具



三种方式接入客户端

方式一:官方 Client


所有部署到函数计算 FC 的 MCP Server 都遵循 SSE 协议。对于已经支持 SSE 的官方 Client (例如Cursor),接入配置如下:


{
  "mcpServers": {
    "server-name": {
      "url": "<部署好的internetUrl>/sse",
      "env": { // 如果有的话
        "key": "value"
      }
    }
  }
}


对于暂未支持 SSE 的 Client,可以参考一些开源社区代理解决方案,例如:


  • mcp-proxy[5]

  • supergateway[6]


方式二:其他本地 Client


对于非官方的 Client,接入 MCP Server 需要使用官方的提供的 sdk 进行连接。具体开发方式可参考方文档[7]。一个示例 Node Client 如下:


import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

const client = new Client({
  name: “example-client”,
  version: “1.0.0”
}, {
  capabilities: {}
});

const transport = new SSEClientTransport(
  new URL(“<部署好的internetUrl>/sse”)
);
await client.connect(transport);


方式三:在 FC 部署一个 Client


如果你需要一个远端的 Client,你也可以在函数计算 FC 应用中心部署 inspector 到函数计算。你可以通过链接[8]一键部署。部署完成后,点击访问域名即可进入 inspector 界面。




结语


至此,你已经成功初始化,开发并部署了一个属于你自己的 SSE MCP Server!除了文章中示范的基于 Node 的 MCP Server Hello World 项目,Serverless Devs 还提供了基于 Python,Java 的 Hello World 项目,以及大量可以一键部署的开源 Server,包括高德地图、百度地图、Github 等等,详情可以查看这个代码仓库[9]。


欢迎您加入 Serverless 开发者技术学习群 钉钉群,群号:33947367 与我们交流。



[1]Serverless Devs

https://www.serverless-devs.com/

[2]Serverless Devs 快速入门文档

https://docs.serverless-devs.com/getting-started/

[3]阿里云 Function AI控制台

https://cap.console.aliyun.com/explore

[4]官方 inspector

https://github.com/modelcontextprotocol/inspector

[5]mcp-proxy

https://github.com/sparfenyuk/mcp-proxy

[6]supergateway

https://github.com/supercorp-ai/supergateway

[7]MCP 官方文档

https://modelcontextprotocol.io/docs/concepts/transports

[8]函数计算 FC 应用中心

https://fcnext.console.aliyun.com/applications/create?template=mcp-inspector

[9]mcp-servers
https://github.com/devsapp/mcp-serve

Serverless 的优势在于能够极大地加速 AI 应用的迭代速度。开发者可以专注于模型和业务逻辑的开发,而无需过多关注底层基础设施的管理。但是,Serverless 也可能引入新的安全风险,例如函数权限管理、API 安全等。选择 Serverless 需要权衡其带来的便利性和潜在的安全隐患。

我觉得可以结合AR/VR技术,创造更沉浸式的体验。想象一下,你戴着AR眼镜,LLM通过MCP控制虚拟环境中的物体,并根据你的语音指令进行互动,是不是很酷?或者结合脑机接口技术,直接用意识控制LLM,那想象空间就更大了!

从安全角度考虑,在生产环境中使用官方 SDK 自行开发 Client 可能更安全。因为这样可以更好地控制数据流向和访问权限,避免使用第三方 Client 引入潜在的安全风险。当然,这也需要开发者具备一定的安全意识和开发能力。

作为一个深度学习爱好者,我觉得serverless对于炼丹来说简直是福音,终于可以摆脱GPU服务器的管理地狱了,而且可以随时起停,省钱!但是如果模型非常大,冷启动时间可能难以接受。

Serverless 架构在 AI 应用开发中的优势显而易见:降低运维成本,自动弹性伸缩,按需付费。对于 MCP Server 这种需要处理大量并发请求的应用场景来说,Serverless 可以很好地应对流量高峰。劣势也很明显,冷启动问题,以及复杂的监控和调试。此外,Serverless 架构对应用的设计也有一定的要求,需要考虑无状态化、事件驱动等因素。

在生产环境中,我认为选择哪种接入方式取决于具体的业务场景和客户端类型。如果客户端已经支持 SSE 协议,那么直接使用官方 Client 是最简单的选择。如果客户端暂不支持,或者需要更强的定制能力,那么使用官方 SDK 进行开发是更灵活的方式。至于在 FC 部署 Client,可能适用于需要统一管理和监控所有客户端的场景。

我倾向于选择使用官方Client,毕竟是官方提供的,兼容性应该最好,而且出了问题也方便找官方支持。省时省力才是王道!

从技术角度来看,MCP 的潜力在于其标准化接口。这意味着我们可以将 LLM 的能力扩展到任何可以通过 API 或其他协议控制的系统。考虑到未来 Web3 的发展,将 LLM 与区块链数据以及智能合约连接,也许可以创造出全新的去中心化应用,例如智能投顾或者去中心化自治组织(DAO)的管理。

这个问题很有意思!除了文中提到的,我觉得MCP还可以扩展到很多领域。比如在游戏中,可以利用MCP连接游戏内的AI角色和外部知识库,让NPC的行为更加智能和个性化。又或者在智能家居领域,MCP可以作为连接各种智能设备的中枢,让LLM能够更灵活地控制家里的电器,实现更高级的自动化场景。甚至可以想象,在医疗领域,通过MCP将LLM与医疗设备连接,辅助医生进行诊断和治疗,当然这需要非常严格的安全和隐私保护。