MCP服务器功能

一个基于AWS Lambda和API Gateway的简单MCP服务器,支持本地开发和JSON-RPC交互。

  • by eleva
  • JavaScript
  • 本地部署
  • 17 星标
  • 更新于
在 GitHub 查看 eleva/serverless-mcp-server

使用说明

🧠 无服务器mcp服务器

一个超级简单的模型上下文协议(MCP)服务器,部署在AWS Lambda上,通过Amazon API网关公开,使用无服务器框架部署。 这个骨架是基于 Frédéric Barthelet:开发了一个中间件,用于模型上下文协议(MCP)服务器与AWS Lambda功能的集成 此回购

说来话长

📖在dev.to上阅读完整文章

🛠 特征

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

🛠 先决条件

🚀 入门指南

  1. 安装依赖项:
npm install
  1. 全局安装开源无服务器(如果尚未安装):
npm install -g osls
  1. 使用无服务器脱机在本地运行
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和邮递员请求。

🧪 测试用 MCP检查员

跑

npx @modelcontextprotocol/inspector node src/index.mjs

这将启动端口6274上的MCP检查器。然后,您可以在浏览器中打开检查器,网址为 http://127.0.0.1:6274. 在检查器中配置参数:

  • 选择 HTTP Streamable 作为 Transport Type
  • 集 URL 到 http://localhost:3000/dev/mcp
  • 点击连接

您将能够在检查器中看到工具列表及其参数。

🧪 使用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
    }
  }
}'

🧪 用笑话测试

其中包括一些基本测试 __tests__ 文件夹。您可以使用以下方式运行它们:

npm run test

🧬 代码分解

这段代码基于以下出色的工作 Frédéric Barthelet:开发了一个中间件,用于模型上下文协议(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上运行。

🔖 语录

以下通讯中引用了该存储库:

📘 许可证

麻省理工学院——请随意分叉、调整和部署您自己的版本!