关于 🧠 sam-serverless-mcp-server
这是一个使用 AWS SAM 部署的 MCP 服务模板,以 AWS Lambda 函数运行并通过 Amazon API Gateway 对外提供接口。项目面向构建或本地测试 HTTP MCP 服务的开发者,并附带基础加法工具示例。
主要功能
- 01基于 SDK 的精简 MCP 服务配置
- 02部署为单个 AWS Lambda 函数
- 03在 /mcp 提供 HTTP POST 端点
- 04使用 SAM 进行本地开发
- 05加法工具与 JSON-RPC 交互示例
- 06Jest 测试
适用场景
- 01在 AWS 构建无服务器 MCP 端点
- 02用 SAM 在本地测试 MCP 请求
- 03基于示例工具改造自定义服务
MCP 相关
实现一个 MCP 服务,通过 Amazon API Gateway 暴露 /mcp HTTP POST 端点。示例包含加法工具,并支持 MCP JSON-RPC 请求。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🧠 sam-serverless-mcp-server
一个极简的模型上下文协议(MCP)服务,部署在 AWS Lambda 上,并通过 Amazon API Gateway 对外提供服务,使用 Serverless Application Model(SAM)进行部署。 此模板基于 Frédéric Barthelet 的出色成果:他开发了一个 middy 中间件,用于将模型上下文协议(MCP)服务集成到 AWS Lambda 函数中,详见此仓库
长话短说
🛠 功能
- 🪄 使用 @modelcontextprotocol/sdk 搭建极简 MCP 服务
- 🚀 部署为单个 AWS Lambda 函数
- 🌐 通过 API Gateway 在 /mcp 暴露 HTTP POST 端点
- 🔄 支持通过 SAM 进行本地开发
- 🧪 包含一个简单的示例工具(add),并支持 JSON-RPC 交互
📦 项目结构
sam-serverless-mcp-server/
├── __tests__/ # Jest tests
├── src/ # Source code
│ └── index.js # MCP server handler
├── .gitignore # Git ignore file
├── buildspec.yml # Buildspec file for AWS CodeBuild and CodePipeline (CI/CD)
├── jest.config.mjs # Jest config file
├── package.json # Project dependencies
├── package-lock.json # Project lock file
├── README.md # This documentation file
├── samconfig.toml # Serverless Application Model config
└── template.yml # Serverless Application Model template
🛠 前置条件
🚀 开始使用
- 安装依赖:
npm install
- 使用 SAM 在本地运行
sam local start-api
本地端点地址:
POST http://localhost:3000/mcp
切换到 Api Gateway V2(HTTP API)
如果要使用 API Gateway V2,可以修改 template.yml 文件,在 Events 部分使用 HttpApi 代替 Api。这样就能使用 HTTP API,而不是 REST API。
这样就能使用 HTTP API,而不是 REST API。
Events:
McpHttpApi:
Type: HttpApi # 👈 This switches to HTTP API (v2)
Properties:
Path: /mcp
Method: POST
🧪 使用 curl 请求进行测试
列出工具
curl --location 'http://localhost:3000/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/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 中间件,用于将模型上下文协议(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
只需运行:
sam build
sam deploy --guided
部署完成后,MCP 服务将在命令输出的 URL 上运行。
📘 许可证
MIT — 欢迎 fork、修改并部署你自己的版本!
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。