Skip to main content

Command Palette

Search for a command to run...

使用 Mcp 操作云服务资源

Updated
2 min read

前面鼓吹 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私网IPAMI ID启动时间
us-east-1i-066d6788cf6d6b85fus113t2.microrunning13.218.36.31172.31.21.105ami-00a929b66ed6e0de62025-04-07T09:01:41Z
us-west-2i-07d219e7fdea42897us2t2.microrunning44.243.226.237172.31.39.36ami-087f352c165340ea12025-04-07T09:02:39Z

注意事项

  • 在亚洲区域未发现任何实例
  • 在ap-east-1区域(香港)查询时出现凭证验证错误
  • 所有找到的实例均位于北美洲区域(美国东部和美国西部)
  • 两个实例均使用t2.micro配置并且状态为运行中

然后

例子很粗陋,例如没有保护敏感数据、没有进行异常处理等。LLM 很贵,用它做编排也是非常不合理的。这里展示的主要是这样一种可能,将一些存量的关键服务接入 MCP 之后,即使是一个未经训练、微调的公共/开源大模型,也可以和我们自身的业务结合起来,发挥更接地气的大模型能力。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts