GCP基础设施MCP服务器
🎥 视频演示
Démonstration du serveur MCP GCP
*了解如何使用Claude以自然语言部署GCP基础设施*
备注 :上面的动画GIF将自动启动。对于带声音的完整视频, 下载MP4文件.
______________________________________________________________________
MCP(模型上下文协议)服务器,通过Claude以自然语言管理GCP(谷歌云平台)基础设施。该服务器允许您使用Terraform部署和管理虚拟机、管理SSH密钥和部署基础设施。
⚠️ 重要警告-安全 这个项目是 仅用于介绍人工智能工作 而且不应该 不用于生产 没有重大的安全变化。 🔴 未实现OAuth身份验证 :MCP服务器可公开访问,无需身份验证。任何有权访问服务器URL的人都可以使用它,并可能访问您的GCP资源。 ⚠️ 只能在隔离的开发环境中使用,或使用适当的安全措施(防火墙、身份验证等)。
📋 关于与Claude一起使用的说明 为了使Claude能够轻松地使用MCP服务器进行身份验证,它是 强烈推荐 利用者 使用https的域名 而不是IP或HTTP地址。Claude需要安全连接(https)才能与外部MCP服务器正常工作。
功能
🔑 SSH密钥管理
- 生成SSH密钥 :自动创建SSH密钥对(私有/公共)
- 储存钥匙 :SSH密钥的安全存储(内存和磁盘
~/.ssh_mcp) - 列出钥匙 :查看所有可用的SSH密钥
- 添加现有密钥 :导入您自己的SSH密钥
☁️ 虚拟机GCP(计算引擎)格式
- 列出实例 :查看GCP项目中的所有虚拟机
- 创建实例 :部署具有自定义配置的新虚拟机
- 启动/停止实例 :检查VM的状态
- 删除实例 :清理资源
- 获取详细信息 :查看VM的详细信息(IP、磁盘等)
🔐 远程SSH执行
- 执行命令 :通过SSH在虚拟机上运行命令
- 上传文件 :通过SFTP将文件传输到虚拟机
🏗️ 基础设施作为Terraform的代码
- 初始地形 :准备Terraform项目
- 计划 :在应用更改之前查看更改
- 应用 :部署基础设施
- 摧毁 :清理Terraform资源
💬 自然语言
- 以法语解释请求,以便于使用
安装
先决条件
- Python 3.8+
- 配置项目的GCP帐户
- GCP服务密钥文件(service account key.json)
- 具有SSL/TLS证书的域名 (建议与Claude一起使用)
- 使用HTTPS的反向代理(Nginx/Apache) 配置(推荐)
安装步骤
- 克隆存储库:
git clone
cd - 安装依赖项:
pip3 install -r requirements.txt- 配置者配置凭据GCP:
- 放置您的文件 service-account-key.json 在项目目录中 - 确保帐户服务具有必要的权限: - 计算引擎管理员 - 服务帐户用户
- (可选)如果要使用Terraform功能,请安装Terraform:
# Ubuntu/Debian
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform使用
使用域名配置HTTPS(推荐)
为了让Claude轻松进行身份验证,请使用https和域名配置服务器:
- 获取SSL证书 (建议使用Let's Encrypt):
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d votre-domaine.com- 配置Nginx商业反向代理 :
server {
listen 443 ssl;
server_name votre-domaine.com;
ssl_certificate /etc/letsencrypt/live/votre-domaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votre-domaine.com/privkey.pem;
location / {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}- 重新启动nginx :
sudo systemctl restart nginx启动服务器
python3 mcp_server.py服务器将启动 http://0.0.0.0:5001 (通过反向代理使用HTTPS进行生产)
Claude桌面中的配置
要通过HTTPS与Claude一起使用MCP服务器,请配置服务器的URL:
{
"mcpServers": {
"gcp-infrastructure": {
"url": "https://votre-domaine.com",
"headers": {
"Content-Type": "application/json"
}
}
}
}备注 :将您的域名与https一起使用(例如: https://mcp.votre-domaine.com)以便Claude能够正确验证自己。
仅限本地使用,也可以使用直接命令:
{
"mcpServers": {
"gcp-infrastructure": {
"command": "python3",
"args": ["/opt/git/mcp_server.py"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/opt/git/service-account-key.json"
}
}
}
}可用工具
SSH密钥管理
ssh_generate_key
生成新的SSH密钥对。
设置 :
key_name(必填):密钥名称description(可选):密钥描述
示例:
{
"key_name": "ma-cle-vm",
"description": "Clé pour mes VMs GCP"
}ssh_list_keys
列出所有可用的SSH密钥。
ssh_add_key
添加现有SSH密钥。
设置 :
key_name(必填):密钥名称private_key(必需):PEM格式的私钥public_key(必需):公钥description(可选):描述
虚拟机GCP管理
gcp_list_instances
列出所有VM实例。
设置 :
zone(可选):GCP区域(默认值:us-central1-a)
gcp_create_instance
创建新的VM实例。
设置 :
instance_name(请求):实例编号machine_type(可选):机器类型(默认:E2介质)disk_size_gb(可选):磁盘大小(GB)(默认值:10)image_family(可选):映像族(默认值:debian-11)ssh_key_name(可选):要使用的SSH密钥的名称
示例:
{
"instance_name": "mon-serveur-web",
"machine_type": "e2-medium",
"disk_size_gb": 20,
"image_family": "debian-11",
"ssh_key_name": "ma-cle-vm"
}gcp_start_instance
启动VM实例。
设置 :
instance_name(请求):实例编号zone(可选):GCP区域
gcp_stop_instance
停止VM实例。
设置 :
instance_name(请求):实例编号zone(可选):GCP区域
gcp_delete_instance
删除VM实例。
设置 :
instance_name(请求):实例编号zone(可选):GCP区域
gcp_get_instance
获取实例的详细信息。
设置 :
instance_name(请求):实例编号zone(可选):GCP区域
SSH执行
ssh_execute
在远程计算机上运行ssh命令。
设置 :
host(必需):IP地址或主机名username(必需):SSH用户名command(必需):要执行的命令ssh_key_name(必需):要使用的SSH密钥的名称
示例:
{
"host": "35.123.45.67",
"username": "debian",
"command": "sudo apt update && sudo apt install -y nginx",
"ssh_key_name": "ma-cle-vm"
}ssh_upload_file
通过SSH上传文件。
设置 :
host(必需):IP地址或主机名username(必需):SSH用户名local_path(必需):本地文件路径remote_path(必需):文件的远程路径ssh_key_name(必需):要使用的SSH密钥的名称
地形
terraform_init
在目录中初始化Terraform。
设置 :
working_dir(必需):Terraform工作目录
terraform_plan
计划Terraform部署。
设置 :
working_dir(必需):Terraform工作目录var_file(可选):变量文件
terraform_apply
应用Terraform部署。
设置 :
working_dir(必需):Terraform工作目录var_file(可选):变量文件auto_approve(可选):自动批准(默认值:true)
terraform_destroy
破坏Terraform基础设施。
设置 :
working_dir(必需):Terraform工作目录auto_approve(可选):自动批准(默认值:true)
自然语言
gcp_natural_query
用自然语言解释请求。
设置 :
query(必填):法语请求
示例:
{
"query": "Crée une nouvelle VM pour mon serveur web"
}Claude的使用示例
示例1:使用SSH密钥创建虚拟机
Utilisateur : Je veux créer une VM sur GCP pour héberger un site web
Claude : Je vais vous aider à créer une VM. D'abord, générons une clé SSH :
[utilise ssh_generate_key]
Maintenant, créons la VM avec cette clé :
[utilise gcp_create_instance avec la clé SSH]
Votre VM est en cours de création ! Une fois démarrée, vous pourrez vous y connecter.示例2:在虚拟机上安装软件
Utilisateur : Installe nginx sur ma VM "mon-serveur-web"
Claude : Je vais d'abord obtenir l'adresse IP de votre VM :
[utilise gcp_get_instance]
Maintenant j'installe nginx via SSH :
[utilise ssh_execute avec la commande d'installation]
Nginx est maintenant installé sur votre VM !示例3:使用Terraform部署
Utilisateur : Déploie l'infrastructure définie dans /opt/terraform/infrastructure
Claude : Je vais initialiser Terraform :
[utilise terraform_init]
Voyons ce qui va être créé :
[utilise terraform_plan]
Tout semble correct. J'applique maintenant :
[utilise terraform_apply]
Infrastructure déployée avec succès !建筑
SSH密钥的存储
SSH密钥安全存储:
- 在记忆中 :用于执行期间的快速访问
- 在磁盘上 :在
~/.ssh_mcp/具有限制权限(私钥600,公钥644)
配置GCP
- 项目 :冲浪板-473817-p5
- 默认区域 :美国中央1-a
- 凭证 :service-account-key.json
安全
⚠️ 关键警告
此MCP服务器不实现OAuth身份验证或其他安全机制。
安全风险:
- 🔴 未经身份验证的公共访问 :任何拥有URL的人都可以使用您的服务器
- 🔴 GCP资源展示 :对虚拟机、SSH密钥和基础架构的潜在访问
- 🔴 限速通行证 :易受拒绝服务攻击
- 🔴 审计日志 :无法跟踪谁使用了服务器
生产建议:
- ✅ 实现OAuth 2.0 或其他认证机制
- ✅ 必须使用HTTPS (证书SSL有效)
- ✅ 配置程序 限制IP访问
- ✅ 添加速率限制 为了防止滥用
- ✅ 启用审核日志 跟踪所有动作
- ✅ 使用反向代理 (nginx/traefik)具有身份验证
- ✅ 限制GCP权限 最低限度的必要
良好做法
- SSH密钥 :以限制权限存储(600)
- 服务账号 :使用具有最低权限要求的GCP凭据
- 私钥 :从未在API响应中公开(仅返回公钥)
- HTTPS是必需的 :在生产中始终使用HTTPS,从不使用HTTP
- 域名 :为Claude使用具有SSL证书的有效域名
GCP要求的权限
服务帐户必须至少具有:
roles/compute.instanceAdmin.v1roles/iam.serviceAccountUser
故障排除
服务器无法启动
- 确保已安装所有依赖项:
pip3 install -r requirements.txt - 检查文件是否
service-account-key.json存在且有效
GCP连接错误
- 验证帐户服务是否具有正确的权限
- 检查GCP项目代码是否正确(
GCP_PROJECT_ID)
SSH错误
- 验证SSH密钥是否存在:使用
ssh_list_keys - 验证VM在其元数据中是否具有公钥
- 验证GCP防火墙是否允许SSH端口(22)
Terraform错误
- 确保已安装Terraform:
terraform --version - 检查工作目录是否包含有效的Terraform文件
API 参考
端点REST
得到/
服务器信息
GET/健康
服务员健康检查
POST/mcp
端点主体MCP(JSON-RPC 2.0)
关于这个项目
这个GitHub存储库仅用于展示人工智能方面的工作。
该项目演示了模型上下文协议(MCP)服务器与谷歌云平台的集成,使Claude(和其他人工智能助手)能够以自然语言管理云基础设施。
教育目标:
- MCP协议使用演示
- 与GCP API集成
- 通过对话AI进行基础设施管理
- 社区代码示例
⚠️ 在没有重大安全变化的情况下,不要在生产中使用。
贡献者
欢迎捐款!不要犹豫打开问题或拉取请求。
许可证
MIT许可证
支持
如果您有任何问题,请在GitHub上打开问题。
