关于 🧠 serverless-mcp-server
这是一个通过 Serverless Framework 将 MCP 服务部署到 AWS Lambda,并由 Amazon API Gateway 提供 HTTP 访问的基础模板,适合构建 MCP 工具的开发者。它包含本地离线开发支持和示例 add 工具。
主要功能
- 01部署到 AWS Lambda
- 02API Gateway HTTP POST 端点
- 03使用 serverless-offline 本地开发
- 04示例 add 工具
- 05Jest 测试
适用场景
- 01在 AWS Lambda 部署 MCP 服务
- 02在本地测试 MCP 请求
- 03基于精简模板扩展服务
MCP 相关
通过 /mcp HTTP POST 端点向 MCP 客户端提供服务。示例 add 工具展示 JSON-RPC 交互。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🧠 serverless-mcp-server
一个超级简单的 Model Context Protocol(MCP)服务,部署在 AWS Lambda 上,并通过 Amazon API Gateway 对外提供服务,使用 Serverless Framework 部署。 此项目骨架基于 Frédéric Barthelet 的出色工作:他开发了一个 middy 中间件,用于在 此仓库中将 Model Context Protocol(MCP)服务集成到 AWS Lambda 函数。
长话短说
🛠 功能
- 🪄 使用 @modelcontextprotocol/sdk 搭建最简 MCP 服务
- 🚀 部署为单个 AWS Lambda 函数
- 🌐 通过 API Gateway 在 /mcp 提供 HTTP POST 端点
- 🔄 支持通过 serverless-offline 进行本地开发
- 🧪 包含一个简单示例工具(add),并支持 JSON-RPC 交互
📦 项目结构
serverless-mcp-server/
├── src/ # Source code
│ └── index.js # MCP server handler
├── .gitignore # Git ignore file
├── package.json # Project dependencies
├── package-lock.json # Project lock file
├── README.md # This documentation file
└── serverless.yml # Serverless Framework config
🛠 先决条件
- Node.js v22+
- Open Source Serverless 或 Serverless Framework v3+
- Serverless Offline
🚀 开始使用
- 安装依赖项:
npm install
- 全局安装 open source severless(如果尚未安装):
npm install -g osls
- 使用 serverless-offline 在本地运行
npm sls offline
本地端点地址:
POST http://localhost:3000/dev/mcp
请注意,使用 serverless-offline 时会默认添加 /dev/ 阶段,以反映 Api Gateway V1(REST API)的行为。
切换到 Api Gateway V2(HTTP API)
如果要使用 API Gateway V2,可以将 serverless.yml 文件中 events 部分的 http 改为 httpApi。这样即可使用 HTTP API,而不是 REST API。
这样即可使用 HTTP API,而不是 REST API。
functions:
mcpServer:
handler: src/index.handler
events:
- httpApi:
path: mcp
method: post
本地端点地址:
POST http://localhost:3000/mcp
请注意,使用 API Gateway V2 时不需要 /dev/ 阶段。
请注意,相应地修改测试用的 curl 和 postman 请求。
🧪 使用 MCP inspector 进行测试
运行
npx @modelcontextprotocol/inspector node src/index.mjs
这将在端口 6274 上启动 MCP inspector。随后,你可以在浏览器中访问 http://127.0.0.1:6274 打开 inspector。
在 inspector 中配置参数:
- 将
Transport Type设为HTTP Streamable - 将
URL设为http://localhost:3000/dev/mcp - 点击 connect
你将在 inspector 中看到工具列表及其参数。
🧪 使用 curl 请求进行测试
列出工具
curl --location 'http://localhost:3000/dev/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}'
➕ 使用 add 工具
curl --location 'http://localhost:3000/dev/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "add",
"arguments": {
"a": 5,
"b": 3
}
}
}'
🧪 使用 jest 进行测试
__tests__ 文件夹中包含一些基本测试。你可以通过以下命令运行:
npm run test
🧬 代码解析
此代码基于 Frédéric Barthelet 的出色工作:他开发了一个 middy 中间件,用于在 此仓库中将 Model Context Protocol(MCP)服务集成到 AWS Lambda 函数。
src/index.js
import middy from "@middy/core";
import httpErrorHandler from "@middy/http-error-handler";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import mcpMiddleware from "middy-mcp";
const server = new McpServer({
name: "Lambda hosted MCP Server",
version: "1.0.0",
});
server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }],
}));
export const handler = middy()
.use(mcpMiddleware({ server }))
.use(httpErrorHandler());
📡 部署到 AWS
只需运行:
sls deploy
部署完成后,MCP 服务将在命令输出的 URL 上运行。
🔖 引用
以下通讯曾引用此仓库:
- Serverless Advocate Newsletter #33,作者:Lee Gilmore(AWS Hero)
📘 许可证
MIT — 欢迎分叉、修改并部署你自己的版本!
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。