mcpField
🧠
🧠 sam-serverless-mcp-server

🧠 sam-serverless-mcp-server

本地服务
github.com/eleva云与基础设施179 周前更新

关于 🧠 sam-serverless-mcp-server

这是一个使用 AWS SAM 部署的 MCP 服务模板,以 AWS Lambda 函数运行并通过 Amazon API Gateway 对外提供接口。项目面向构建或本地测试 HTTP MCP 服务的开发者,并附带基础加法工具示例。

主要功能

  1. 01基于 SDK 的精简 MCP 服务配置
  2. 02部署为单个 AWS Lambda 函数
  3. 03在 /mcp 提供 HTTP POST 端点
  4. 04使用 SAM 进行本地开发
  5. 05加法工具与 JSON-RPC 交互示例
  6. 06Jest 测试

适用场景

  1. 01在 AWS 构建无服务器 MCP 端点
  2. 02用 SAM 在本地测试 MCP 请求
  3. 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 函数中,详见此仓库

长话短说

📖 在 dev.to 阅读本系列文章

🛠 功能

  • 🪄 使用 @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

🛠 前置条件

🚀 开始使用

  1. 安装依赖:
npm install
  1. 使用 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、修改并部署你自己的版本!

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。