AWS多账户连接服务器

一个本地MCP服务器,通过SSO认证连接AI代理(如Cursor、Claude Desktop等)到多个AWS账户的服务。

  • by doei
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 doei/cloudwatch-mcp-server

使用说明

aws-mcp服务器

一个本地MCP服务器,使用SSO身份验证将AI代理(Cursor、Claude Desktop等)跨多个AWS帐户连接到AWS服务。

特性

  • CloudWatch日志 --查询日志 开发, 暂存,以及 产品 环境
  • 简单队列服务 --列出队列、发送消息、检查队列属性
  • 使用基于配置文件的凭据进行AWS SSO身份验证
  • 七种工具:SSO登录、列表日志组、列表日志流、Insights查询、列表队列、发送消息、获取队列属性
  • 查询 一次通话中有多个日志组 (最多10个)
  • 接受 ISO 8601或Unix纪元秒 对于时间范围
  • 项目配置 (aws-mcp.json 在您的仓库根目录下,自动发现)将已知的日志组名称和队列名称烘焙成工具描述
  • 配置解析警告在启动时显示给代理(已包含在工具描述中)和stderr
  • 自动身份验证错误检测,带有有用的重试说明
  • 响应截断为50000个字符,以保持上下文可管理

先决条件

  • Node.js 18+
  • 配置了SSO的AWS CLI v2(aws configure sso)
  • 在中配置的AWS SSO配置文件 ~/.aws/config (见下面的账户和个人资料映射)

设置

cd aws-mcp-server
npm install
npm run build

光标MCP配置

添加以下内容 ~/.cursor/mcp.json (全球)或 <project>/.cursor/mcp.json (每个项目):

{
  "mcpServers": {
    "aws": {
      "command": "node",
      "args": ["/absolute/path/to/aws-mcp-server/dist/index.js"]
    }
  }
}

替换 /absolute/path/to/aws-mcp-server 使用系统上的实际路径(例如。 /Users/yourname/aws-mcp-server).

保存后重新启动游标 mcp.json.

账户和个人资料映射

环境 Env Var
dev AWS_DEV_PROFILE
分期付款 AWS_STAGING_PROFILE
prod AWS_PROD_PROFILE

将这些环境变量设置为您的AWS SSO配置文件名称(例如。 export AWS_DEV_PROFILE=myorg-dev).

另外设置:

环境变量 描述
AWS_REGION 所有API调用的AWS区域(例如。 eu-west-1)

项目配置(可选)

删除一个名为的文件 aws-mcp.json 在项目的根目录中描述其日志组和队列。

{
  "logGroups": [
    { "logGroupName": "myorg/dev/myapp", "description": "Main application logs (dev)" },
    { "logGroupName": "myorg/prod/myapp", "description": "Main application logs (prod)" }
  ],
  "queues": [
    { "queueName": "order-processing", "description": "Processes new orders" },
    { "queueName": "email-notifications", "description": "Sends email notifications" }
  ]
}

名称和描述被烘焙到工具描述中,以实现代理的可发现性,因此代理不需要来回发现来知道哪些资源是相关的。

发现

启动时,服务器按以下顺序解析配置文件:

  1. 如果 AWS_PROJECT_CONFIG 如果设置了,则使用该路径(绝对或相对于服务器的CWD)。适用于绝对路径或不寻常的布局。
  2. 否则,服务器将从其当前工作目录中查找 aws-mcp.json,在第一个匹配处或封闭的git存储库根处停止。
  3. 如果找不到任何内容,则所有工具都可以在没有项目上下文的情况下工作。

启动时,发现结果和任何解析警告都会记录到stderr中,警告也会被注入到工具描述中,以便代理可以向您显示。

工具

aws_sso_login

启动环境的AWS SSO登录,打开浏览器窗口。

参数 类型 必填 说明
环境 "dev" | "staging" | "prod" 是 目标AWS环境

使用说明: 调用此工具后,代理将提示您在浏览器中批准登录。只有在浏览器中确认后才能重试原始请求。


cloudwatch_list_log_groups

列出具有可选名称前缀过滤的CloudWatch日志组。

参数 类型 必填 默认 说明
环境 "dev" | "staging" | "prod" 是 -- 目标AWS环境
前缀 string 否 -- 按日志组名称前缀筛选
限制 number 否 50 要返回的最大日志组数

退货: 一大批 { logGroupName, retentionInDays }.


cloudwatch_list_log_streams

列出日志组中的日志流,最近处于活动状态的日志流排在第一位。

参数 类型 必填 默认 说明
环境 "dev" | "staging" | "prod" 是 -- 目标AWS环境
log_group_name string 是 -- 完整日志组名称
限制 number 否 20 要返回的最大流数

退货: 一大批 { logStreamName, lastEventTime }.


cloudwatch_insights_query

运行CloudWatch Logs Insights查询并轮询结果。支持在一次呼叫中查询多个日志组。

参数 类型 必填 默认 说明
环境 "dev" | "staging" | "prod" 是 -- 目标AWS环境
log_group_names string | string[] 是 -- 日志组名称或最多10个日志组名称的数组
查询 string 是 -- 记录Insights查询字符串
开始时间 string | number 是 -- ISO 8601字符串或Unix纪元秒
结束时间 string | number 否 现在 ISO 8601字符串或Unix纪元秒

退货: 结果行对象数组,或带有查询ID的“仍在运行”消息。

示例查询:

fields @timestamp, @message | sort @timestamp desc | limit 20
fields @timestamp, @message | sort @timestamp desc | limit 5
fields @timestamp, @message | filter @message like /(?i)error/ | sort @timestamp desc | limit 50
fields @timestamp, @message | filter someField = "value" | sort @timestamp desc | limit 50
stats count(*) by someField | sort count(*) desc
fields @timestamp, requestId, duration | filter duration > 1000 | sort duration desc

要发现不熟悉的日志组中的可用字段,请运行一个最近的小查询(例如。 limit 5 在过去的一个小时里)并检查原材料 @message 在编写结构化过滤器之前。


sqs_list_queues

列出指定环境中的SQS队列。

参数 类型 必填 默认 说明
环境 "dev" | "staging" | "prod" 是 -- 目标AWS环境
前缀 string 否 -- 按名称前缀筛选队列
限制 number 否 50 返回的最大队列数

退货: 一大批 { queueUrl, queueName }.


sqs_send_message

向SQS队列发送消息。支持标准和FIFO队列、消息属性和延迟传递。

参数 类型 必填 默认 说明
环境 "dev" | "staging" | "prod" 是 -- 目标AWS环境
queue_url string 是 -- 完整的SQS队列URL
message_body string 是 -- 消息内容(纯文本或JSON)
message_group_id string 否 -- 消息组ID(FIFO队列需要)
重复数据删除_id string 无 -- 重复数据消除令牌(FIFO不需要基于内容的重复数据消除)
延迟_秒 number 否 -- 延迟交付N秒(0-900)
消息属性 Record<string, {type, value}> 否 -- 自定义消息属性(type:“字符串”、“数字”或“二进制”)

退货: { messageId, sequenceNumber?, md5OfMessageBody }.


sqs_get_queue_attributes

检索SQS队列的属性——消息计数、配置和ARN。

参数 类型 必填 说明
环境 "dev" | "staging" | "prod" 是 目标AWS环境
queue_url string 是 完整的SQS队列URL

退货: 队列属性,包括消息计数、保留期、可见性超时、FIFO状态等。


身份验证错误

如果任何工具返回身份验证错误,代理将自动建议调用 aws_sso_login。一旦您批准浏览器登录,请重试原始请求。

从v1迁移(cloudwatch mcp服务器)

如果您要从原始版本升级 cloudwatch-mcp-server:

  1. 环境变量已重命名 --共享变量现在使用 AWS_ 前缀:

    • CW_REGION → AWS_REGION
    • CW_DEV_PROFILE → AWS_DEV_PROFILE
    • CW_STAGING_PROFILE → AWS_STAGING_PROFILE
    • CW_PROD_PROFILE → AWS_PROD_PROFILE
    • CW_PROJECT_CONFIG → AWS_PROJECT_CONFIG
  2. 日志组前缀已删除 — CW_DEV_LOG_PREFIX, CW_STAGING_LOG_PREFIX,以及 CW_PROD_LOG_PREFIX 不再需要。项目配置中的日志组现在使用全名,而不是相对于前缀的后缀。

  3. SSO工具已重命名 — cloudwatch_sso_login → aws_sso_login.

  4. 项目配置文件名 --重命名文件 aws.project.json 到 aws-mcp.json 并把它放在项目的根上。旧名称仍被发现具有向后兼容性,但会发出弃用警告。使用新名称,服务器通过从CWD向上走到封闭的git根目录来自动发现文件,因此每个项目 .cursor/mcp.json (他唯一的工作就是设定 AWS_PROJECT_CONFIG=./aws.project.json)不再需要,可以删除。 AWS_PROJECT_CONFIG 如果需要,它仍然可以作为显式覆盖。

  5. 项目配置字段名称 --JSON文件支持可选 queues 旁边的数组 logGroups。每个日志组条目都使用 logGroupName (完整的CloudWatch日志组名称),每个队列条目使用 queueName.遗产 suffix 和 name 字段仍然可以接受向后兼容性,但会发出弃用警告——这些警告在启动时出现在stderr中,并被注入到工具描述中,以便代理可以显示它们。

  6. cloudwatch_sample_logs 移除 --这个工具是一个薄薄的包装 cloudwatch_insights_query。要检查原始日志条目,请运行 cloudwatch_insights_query 与一个小 limit (例如。 fields @timestamp, @message | sort @timestamp desc | limit 5)最近 start_time.

  7. MCP配置键 --考虑重命名 "cloudwatch" 到 "aws" 在你的 mcp.json.