使用AWS Lambda和SAM实现模型上下文协议(MCP)。
该项目提供了一个无服务器的MCP实现,具有两个不同的接口:
系统配置(管理):
系统使用(客户端):
您可以使用以下Mermaid语法可视化系统:
graph TD
客户端 --> MCP[/"MCP Lambda\n(/sse & /message)"/]
MCP -->|读/写| SessionTable[(会话表)]
MCP -->|查询| RegistrationTable[(注册表)]
MCP -->|调用| RegisteredLambda["已注册的Lambda工具"]
管理员[管理员] --> RegistrationLambda[/"注册Lambda\n(/register)"/]
RegistrationLambda -->|写入| RegistrationTable
本节适用于需要配置和管理MCP服务器的系统管理员。
npx @markvp/mcp-lambda-sam deploy
该命令将交互式地提示进行管理员配置:
要访问MCP端点,用户和客户端必须具有IAM权限以调用相关的函数URL。
mcp-registration函数URLmcp函数URL您可以通过IAM策略或aws lambda add-permission(见下文)授予访问权限。
要授予调用注册函数URL的权限:
aws lambda add-permission \
--function-name <registration-function-name> \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
要授予调用MCP函数URL(SSE和消息)的权限:
aws lambda add-permission \
--function-name <mcp-function-name> \
--statement-id allow-mcp \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
将<registration-function-name>和<mcp-function-name>替换为实际的Lambda函数名。
使用这些端点来管理MCP工具、资源和提示:
awscurl -X POST ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"type": "tool",
"name": "example",
"description": "示例工具",
"lambdaArn": "arn:aws:lambda:region:account:function:name",
"parameters": {
"input": "string"
}
}'
awscurl -X PUT ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda \
-d '...'
awscurl -X DELETE ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda
awscurl ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda
管理员需要这些权限来管理注册:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": "arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp-registration",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}]
}
本节适用于希望使用MCP服务器的客户端。
客户端需要这些权限来使用MCP服务器:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": [
"arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp",
],
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}
]
}
const sse = new EventSource(SSE_URL, {
headers: {
Authorization: 'AWS4-HMAC-SHA256 ...', // 必须是AWS SigV4签名
}
});
sse.onmessage = (event) => {
console.log(JSON.parse(event.data));
};
awscurl -X GET "${MCP_URL}/sse" \
--region ap-southeast-2 \
--service lambda
第一个事件将包含一个sessionId。在发送消息时使用它。
awscurl -X POST "${MCP_URL}/message?sessionId=session-123" \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "example",
"params": {
"input": "hello"
}
}'
401:无效/缺少AWS凭证403:权限不足404:无效的会话ID429:超出速率限制连接问题:
命令执行错误:
要使用AWS SAM CLI本地部署此应用程序或部署到AWS:
sam --version
sam build
sam deploy --guided
您可以不带--guided重新运行sam deploy以使用保存的配置。
您可以采用四种方式安装和部署此应用程序:
最简单的部署MCP服务器的方式是通过AWS Serverless Application Repository (SAR):
StackIdentifier:此MCP服务器实例的唯一IDVpcEnabled:如果在VPC中部署,则设置为trueVpcId和SubnetIds:仅当VpcEnabled为true时提供或者,您也可以通过AWS CLI部署:
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:ap-southeast-2:522814717816:applications/mcp-l
lambda-sam \
--stack-name your-stack-name \
--capabilities CAPABILITY_IAM \
--parameter-overrides '[{"name":"StackIdentifier","value":"your-stack-id"}]'
npx @markvp/mcp-lambda-sam deploy
该命令将交互式地提示进行管理员配置:
安装包:
npm install @markvp/mcp-lambda-sam
安装包后,您可以编程使用它:
import { deploy } from '@markvp/mcp-lambda-sam';
// 使用示例
deploy();
安装包:
npm install @markvp/mcp-lambda-sam
在进行开发更改后,可以手动部署:
npm run deploy
# 安装依赖
npm install
# 代码检查
npm run lint
# 运行测试
npm test
# 构建
npm run build
# 部署
npm run deploy
如果您正在为此项目做出贡献,并且需要将更新发布到SAR:
npm run package:sar
npm run publish:sar
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "serverlessrepo:CreateCloudFormationTemplate",
"Resource": "arn:aws:serverlessrepo:${region}:${account-id}:applications/mcp-lambda-sam"
}
]
}
MIT