Skip to main content

Command Palette

Search for a command to run...

使用 Mcp 操作云服务资源

Published
•2 min read•View as Markdown

前面鼓吹 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

AI Agent 的“莫兰迪时刻”

一个新范式真正走向大众,往往不是从所有人都正确理解它开始,而是从它开始被反复引用、简化、误读,甚至滥用开始。 今天的 AI Agent,可能正走到这样一个时刻。 这篇文章的念头,来自我最近收听《大内密谈》vol.1434《审美升级or消费主义?从莫兰迪在中国聊起》时的一些联想。节目从莫兰迪色在中国的走红,谈到作品价格、知识产权、商业流量与消费主义。[9] 我听着听着想到另一个熟悉的技术史问题:为

Oct 5, 20263 min read

FDE 是传统运维产品厂商的出路吗?

很多传统运维产品厂商,已经不缺产品了。 从 ITSM、CMDB、监控、自动化,到 IAM、数据中心管理和各类大屏,一个成熟厂商往往都能拿出一张很完整的产品地图。销售材料上看,客户运维部门的日常工作几乎都被覆盖了。 但项目一落地,味道就变了。 产品越多,集成越重;模块越全,边界越模糊;客户越大,定制越深。到了后期,项目成功本身也会变成麻烦:现场改出来的东西回不到主干,配置越来越像黑箱,谁都不敢轻易升

Jun 29, 20263 min read

绵里藏针才是 AIOps 的本质?

Agent 让运维编排变得柔性、可变、甚至自演进;但真正敢进入生产环境的 AIOps,仍然离不开坚实、受控、可审计、可回退的自动化底座。 从 Gartner 提出 AIOps 概念到现在,也大概有十年了。这么多年来,这个领域好像发生了很多变化,又好像没什么“本质”的变化。技术上,我们经历了传统机器学习、深度学习和神经网络、以及大模型和智能体这样“翻天覆地”的变化;业务上,我们面对的是更多品种、更大

May 31, 20263 min read

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

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

Mar 9, 20261 min read
【

【伪】架构师

346 posts