使用 Mcp 操作云服务资源
前面鼓吹 MCP 的时候,我把 MCP 形容为一座桥,大模型和存量的 IT 系统藉由 MCP 的连接,让大模型的能力能够轻松地直接作用到在线的存量系统之中。市面上出现了 API 网关/注册发现工具直接对接 MCP 的产品,也直接证明了这个新东西的吸引力。
每个公有云,都有数量庞大的 API,头部厂商还提供了对应的 CLI 工具,方便快速进行集成,对接 MCP 可以说是得天独厚了,下面就用 MCP 的 Python SDK 编写一个简单的 AWS EC2 查询,并把它集成到 Claude App 中。
UV
MCP 官方文档中,Python 的项目初始化、依赖和运行都是用 uv 来承载的,为了方便起见,可以先把 UV 装上,安装很简单:
# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
macOS 中的 Homebrew 也可以直接部署 UV。
编码
有了 uv 之后,就可以初始化一下我们的新项目,例如:
$ uv init cloud-mcp-server
Initialized project `cloud-mcp-server` at `/Users/[xxx]/cloud-mcp-server`
$ cd mcp-server-demo
$ ls -a
.git .gitignore .python-version README.md main.py pyproject.toml
可以看到这中间已经生成了几个主要文件,其中 pyproject.toml 包含了当前项目的基本信息:
[project]
name = "cloud-mcp-server"
version = "0.1.0"
description = "A Sample MCP Server for AWS EC2"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []
接下来要初始化我们要用到的依赖包,SDK 需要使用 mcp 相关的包,而要使用 AWS SDK,则需要安装 boto3,同样可以用 uv 命令实现:
$ uv add "mcp[cli]" "boto3"
Using CPython 3.13.2 interpreter at: /opt/homebrew/opt/python@3.13/bin/python3.13
Creating virtual environment at: .venv
Resolved 35 packages in 1.29s
Prepared 7 packages in 13.04s
Installed 33 packages in 89ms
+ annotated-types==0.7.0
+ anyio==4.9.0
+ boto3==1.37.28
+ botocore==1.37.28
+ certifi==2025.1.31
...
接下来编辑 main.py,在其中加入一个查询 ec2 实例的 tool:
from mcp.server.fastmcp import FastMCP
# Create an MCP server
mcp = FastMCP("aws-operator")
@mcp.tool()
# 只有一个参数,region_id
def list_ec2(region_id: str) -> list:
import os
import boto3
# 从环境中读取 AWS 凭据,并初始化客户端
aws_access_key_id = os.getenv("AWS_ACCESS_KEY_ID")
aws_secret_access_key = os.getenv("AWS_SECRET_ACCESS_KEY")
session = boto3.Session(aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key)
# 调用 AWS API
ec2 = boto3.client('ec2', region_name=region_id)
response = ec2.describe_instances()
instance_list = []
for reservation in response["Reservations"]:
for instance in reservation["Instances"]:
instance_list.append(instance)
return instance_list
安装和提问
完成编辑后,将 MCP Server 载入 Claude App:
$ uv run mcp install \
-f .env \
--with boto3 main.py
[04/07/25 21:52:38] INFO Added server 'aws-operator' to Claude config
INFO Successfully installed aws-operator in Claude app
然后打开 Claude App,会看到锤子图标已经出现,也能在工具列表中看到我们的 list_ec2 方法:
Available MCP tools
Claude can use tools provided by specialized servers using Model Context Protocol. Learn more about MCP.
list_ec2
From server: aws-operator
接下来尝试提问:
Q:我在欧洲有没有购买 ec2 实例?
我可以帮您检查您在欧洲是否有购买EC2实例。我需要先了解您在欧洲哪个区域可能有实例。让我们来查看一下。 我将帮您检查欧洲各个AWS区域的EC2实例。AWS在欧洲有以下几个区域:
eu-west-1 (爱尔兰) eu-west-2 (伦敦) eu-west-3 (巴黎) eu-central-1 (法兰克福) eu-north-1 (斯德哥尔摩) eu-south-1 (米兰) ... 根据我的查询结果,在我能够成功查询的欧洲AWS区域(爱尔兰、伦敦、巴黎、法兰克福和斯德哥尔摩)中,没有找到您的EC2实例。尝试查询米兰区域(eu-south-1)时出现了凭证验证错误。
Q:查找我所有在北美洲和亚洲的 EC2 实例,用表格形式列出 EC2 的关键数据
... 经检查北美洲和亚洲的AWS区域,共找到2个运行中的EC2实例,详情如下:
| 区域 | 实例ID | 实例名称 | 实例类型 | 状态 | 公网IP | 私网IP | AMI ID | 启动时间 |
| us-east-1 | i-066d6788cf6d6b85f | us113 | t2.micro | running | 13.218.36.31 | 172.31.21.105 | ami-00a929b66ed6e0de6 | 2025-04-07T09:01:41Z |
| us-west-2 | i-07d219e7fdea42897 | us2 | t2.micro | running | 44.243.226.237 | 172.31.39.36 | ami-087f352c165340ea1 | 2025-04-07T09:02:39Z |
注意事项
- 在亚洲区域未发现任何实例
- 在ap-east-1区域(香港)查询时出现凭证验证错误
- 所有找到的实例均位于北美洲区域(美国东部和美国西部)
- 两个实例均使用t2.micro配置并且状态为运行中
然后
例子很粗陋,例如没有保护敏感数据、没有进行异常处理等。LLM 很贵,用它做编排也是非常不合理的。这里展示的主要是这样一种可能,将一些存量的关键服务接入 MCP 之后,即使是一个未经训练、微调的公共/开源大模型,也可以和我们自身的业务结合起来,发挥更接地气的大模型能力。
