使用说明
AWS Lambda上的无状态MCP服务器
这是一个在AWS Lambda和API网关上本地运行的示例MCP服务器,没有任何额外的桥接组件或自定义传输。由于 流式HTTP v2025-03-26中引入的传输。
先决条件
- AWS CLI(已配置凭据)
- Node.js 20+
- 纱线
说明
快速路径: 克隆→ yarn installall → 在本地运行服务器和客户端(可选)→ 部署方式 yarn buildall && yarn deploy 或推 main/qas/prod 通过GitHub Actions进行部署(在配置secrets之后)。
克隆项目
git clone <your-repo-url>
cd serverless-mcp
安装依赖项
从repo根目录(安装授权器、mcpserver和CDK):
yarn installall
或每个包裹:
(cd src/authorizer && yarn install)
(cd src/mcpserver && yarn install)
(cd cdk && yarn install)
在本地测试服务器
node src/mcpserver/index.js
服务器运行后,在单独的终端中运行客户端:
node src/mcpclient/index.js
使用CDK部署到AWS
从repo根目录:
yarn installall
yarn buildall
yarn deploy
这将部署 开发 默认堆栈(mcp-dev-stack).要从您的计算机部署另一个阶段或区域,请执行以下操作:
STAGE=qas REGION=ap-southeast-2 yarn deploy
或者从CDK软件包中: (cd cdk && yarn deploy) 安装deps后。
部署后,CDK将打印MCP端点。为客户端导出它:
export MCP_SERVER_ENDPOINT=<value from McpEndpoint output>
API网关端点可能需要大约一分钟的时间才能变为可用。
通过GitHub操作进行部署
部署使用可重用的工作流和基于分支的升级。每个环境(dev、qas、prod)都部署了一个带有前缀资源名称的单独堆栈(例如。 mcp-dev-stack, mcp-qas-stack, mcp-prod-stack).
| 触发器 | 工作流 | 环境 |
|---|---|---|
PR → main |
开发人员检查 | 仅运行CDK synth(无部署) |
推到 main |
开发部署 | dev |
推到 qas |
QAS部署 | qas |
推到 prod |
生产部署 | prod |
所有部署工作流也可以通过手动运行 workflow_dispatch (操作选项卡→ 选择工作流→ 运行工作流)。
所需机密(根据环境)
对于您使用的每种环境(dev, qas, prod),创造环境 设置→ 环境 并添加这些 秘密:
| 机密 | 描述 |
|---|---|
AWS_ACCESS_KEY_ID |
部署用户/角色的IAM访问密钥 |
AWS_SECRET_ACCESS_KEY |
IAM密钥 |
MANAGEMENT_API_KEY |
管理API密钥(由部署工作流使用;如果应用程序未使用,则设置为您选择的值) |
区域
工作流使用 ap-southeast-2 默认情况下。要使用其他区域,请编辑 aws-region 呼叫者工作流中的输入(dev_deploy.yaml, qas_deploy.yaml, prod_deploy.yaml).
AWS权限
您使用其密钥的IAM用户或角色必须具有部署CDK堆栈的权限(CloudFormation、Lambda、API网关、IAM、用于CDK资产的S3)。跑 cdk bootstrap 一旦进入您的帐户/区域,就向部署用户授予CDK分配给部署角色的策略。
使用客户端测试远程MCP服务器
node src/mcpclient/index.js
观察响应(端点URL将与您的部署匹配):
Connecting ENDPOINT_URL=https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/mcp
connected
listTools response: { tools: [ { name: 'ping', inputSchema: [Object] } ] }
callTool:ping response: { ... }
有状态与无状态的考虑
MCP服务器可以在两种模式下运行——无状态和有状态。此仓库演示了无状态模式。
在无状态模式下,客户端不会与MCP服务器建立持久的SSE连接。这意味着客户端将不会收到来自服务器的主动通知。另一方面,无状态模式允许您水平扩展服务器。
授权演示
此示例包括一个简单的API网关令牌授权器(Lambda)。默认情况下 /mcp 路线用途 没有授权。要启用自定义授权器,请编辑 cdk/lib/stateless-mcp-stack.ts:set authorizationType 到 AuthorizationType.CUSTOM 并通过 authorizer: tokenAuthorizer 在 addMethod 电话。
请参阅中的传输初始化 src/mcpclient/index.js 关于如何添加自定义 Authorization 标题(例如。 Bearer good_access_token 演示授权人)。
成本因素
此示例在您的帐户(Lambda,API网关)中提供付费资源。完成后记得销毁堆栈:
cd cdk
yarn destroy
了解MCP
许可证
该项目根据 知识共享署名-非商业4.0国际许可 (CC×NC 4.0)。你可以用它 教育和非商业目的 只有。不允许商业使用。看 许可证 全文。