🧠 无服务器mcp服务器
一个超级简单的模型上下文协议(MCP)服务器,部署在AWS Lambda上,通过Amazon API网关公开,使用无服务器框架部署。
长话短说
🛠 特性
- 🪄 使用@modelcontextprotocol/sdk进行最低限度的MCP服务器设置
- 🚀 作为单个AWS Lambda函数部署
- 🌐 通过位于/mcp的API网关公开的HTTP POST端点
- 🔄 通过无服务器离线支持本地开发
- 🧪 包括一个具有JSON-RPC交互的简单示例工具(add)
📦 项目结构
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+
- 开源无服务器 或无服务器框架v3+
- 无服务器离线
🚀 入门指南
- 安装依赖项:
npm install- 全局安装开源无服务器(如果尚未安装):
npm install -g osls- 使用无服务器脱机在本地运行
npm sls offline本地端点将在以下位置可用: 发布 http://localhost:3000/dev/mcp
请注意 /dev/ stage在使用serverless-offline时默认添加,反映Api网关V1(REST Api)行为。
切换到Api网关V2(HTTP Api)
如果您想使用API网关V2,您可以更改 serverless.yml 要使用的文件 httpApi 而不是 http 在 events 部分。这将允许您使用HTTP API而不是REST API。 这将允许您使用HTTP API而不是REST API。
functions:
mcpServer:
handler: src/index.handler
events:
- httpApi:
path: mcp
method: post本地端点将在以下位置可用: 发布 http://localhost:3000/mcp
请注意 /dev/ 在使用API网关V2时不需要阶段。 请注意,您应该相应地更改测试curl和邮递员请求。
🧪 使用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
}'➕ 使用添加工具
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
}
}
}'🧪 Test with 是
其中包括一些基本测试 __tests__ 文件夹。您可以使用以下方式运行它们:
npm run test🧬 代码分解
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上运行。
🔖 语录
以下通讯中引用了该存储库:
- 无服务器倡导者通讯#33 靠近 李·吉尔摩 (AWS英雄)
📘 许可证
麻省理工学院——请随意分叉、调整和部署您自己的版本!
