Serverless MCP 是一个基于 AWS Lambda、CloudFront 和 Cognito 认证的 Model Context Protocol (MCP) 无服务器实现方案。该项目借助 OAuth 2.0 认证,通过 Server-Sent Events 实现实时流式传输,并采用 JSON-RPC 2.0 消息格式,为在云端托管 MCP 服务器提供了完整的基础设施,同时具备可扩展的无服务器架构。此实现支持符合 RFC 标准的 OAuth 2.0,涵盖 OAuth 2.0 授权服务器元数据(RFC 8414)、OAuth 2.0 动态客户端注册协议(RFC 7591)和 OAuth 2.0 受保护资源元数据(RFC 9728),还拥有与官方 Model Context Protocol TypeScript SDK 兼容的自定义传输实现。
项目包含两个主要的 CDK 堆栈:
git clone https://github.com/hteek/serverless-mcp.git
cd serverless-mcp
pnpm install
config/default.ts 中配置域名设置:export default {
domainName: 'your-domain.com',
github: {
owner: 'your-github-username',
repo: 'your-repo-name',
},
hostedZoneId: 'YOUR_ROUTE53_HOSTED_ZONE_ID',
project: 'your-project-name',
};
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPTransport('https://your-domain.com/mcp');
const client = new Client(
{ name: 'my-client', version: '1.0.0' },
{ capabilities: {} }
);
await client.connect(transport);
本项目提供了多个 AWS Cost Explorer 工具的使用示例,以下是部分工具的调用示例:
获取当前日期,用于相对日期查询:
{
"name": "get_today_date"
}
获取 AWS Cost Explorer 维度(如 SERVICE、REGION 等)的可用值:
{
"name": "get_dimension_values",
"arguments": {
"dimensionKey": "SERVICE",
"startDate": "2024-01-01",
"endDate": "2024-01-31"
}
}
获取特定标签键的可用值:
{
"name": "get_tag_values",
"arguments": {
"tagKey": "Environment",
"startDate": "2024-01-01",
"endDate": "2024-01-31"
}
}
在 config/ 目录下创建特定环境的配置文件:
config/development.tsconfig/production.tsconfig/staging.ts修改 cdk.json 以调整 CDK 功能标志和行为。
git checkout -b feature/new-feature。pnpm lint && pnpm test。git commit。若遇到问题或有疑问:
pnpm build - 将 TypeScript 编译为 JavaScript。pnpm watch - 监听更改并编译。pnpm test - 运行 Vitest 单元测试。pnpm cdk deploy - 将基础设施部署到 AWS。pnpm cdk diff - 比较已部署堆栈与当前状态。pnpm cdk synth - 生成 CloudFormation 模板。pnpm cdk destroy - 删除所有 AWS 资源。pnpm build。# 部署两个堆栈
pnpm cdk deploy --all
# 部署特定堆栈
pnpm cdk deploy serverless-mcp
pnpm cdk deploy serverless-mcp-github-oidc
# 预览更改
pnpm cdk diff
# 生成 CloudFormation 模板
pnpm cdk synth
本项目包含三个 GitHub Actions 工作流用于自动化部署:
ci.yml)
main 分支和拉取请求。main 时部署到 AWS。development 环境和 AWS_ACCOUNT 变量。manual-deploy.yml)
deploy.yml)
pnpm cdk deploy serverless-mcp-github-oidc
development 环境。AWS_ACCOUNT 并设置为你的 AWS 账户 ID。github-actions-role。main 分支。serverless-mcp 堆栈。main 分支上点击“Run workflow”。部署后,MCP 服务器将在以下地址可用:
https://your-domain.com/mcphttps://auth.your-domain.comgreeting://[name]greeting://world 返回 "Hello, world!"使用任何与 MCP 兼容的客户端连接到 MCP 服务器:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPTransport('https://your-domain.com/mcp');
const client = new Client(
{ name: 'my-client', version: '1.0.0' },
{ capabilities: {} }
);
await client.connect(transport);
本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。