使用说明
使用MCP执行RunPod Python代码
该项目使AI助手能够使用模型上下文协议(MCP)在RunPod基础设施上执行Python代码。它由两个主要部分组成:
- 执行Python代码的RunPod无服务器API
- 连接到RunPod API并为人工智能助手提供标准化接口的MCP服务器
系统架构
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ │ │ │ │ │
│ AI Assistant │────▶│ MCP Server │────▶│ RunPod API │
│ (e.g. Cline) │ │ (Python) │ │ (Serverless) │
│ │ │ │ │ │
└───────────────┘ └───────────────┘ └───────────────┘
交互顺序
统一建模语言
1.RunPod无服务器设置
先决条件
- Docker已安装
- 带有API密钥的RunPod帐户
- Docker和Python基础知识
第一步:构建并推送Docker镜像
Dockerfile包括常见的数据科学库和代码处理程序: 当前docker镜像:docker.io/79c2e466/code_handler_serverless
# Clone this repository
git clone https://github.com/yourusername/runpod-python-executor.git
cd runpod-python-executor
# Build the Docker image
docker build -t yourusername/runpod-python-executor:latest .
# Login to Docker Hub
docker login
# Push the image to Docker Hub
docker push yourusername/runpod-python-executor:latest
步骤2:在RunPod无服务器上部署
- 首选 RunPod.io
- 导航到无服务器→ 部署
- 请输入您的Docker镜像URL:
docker.io/79c2e466/code_handler_serverless - 配置设置:
- 工作类型:CPU或基本GPU
- 最小/最大工作人数:1/3(根据您的需求调整)
- 空闲超时:5分钟
- 点击“部署”
步骤3:获取端点ID
部署后,RunPod将生成一个端点ID。复制此ID,因为您需要它来配置MCP服务器。
您的无服务器API终结点将是: https://api.runpod.io/v2/{endpoint_id}/run
您可以使用以下方法测试您的端点:
curl -X POST \
https://api.runpod.io/v2/{endpoint_id}/runsync \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_RUNPOD_API_KEY' \
-d '{
"input": {
"code": "print(\"Hello, World!\")"
}
}'
2.MCP服务器设置
MCP服务器使用模型上下文协议将AI助手连接到RunPod端点。
先决条件
- 已安装Python 3.8+
- RunPod API密钥
- 上述步骤3中的RunPod端点ID
步骤1:安装需求
安装 将MCP添加到python项目中 我们建议使用uv来管理您的Python项目。在uv管理的python项目中,通过以下方式将mcp添加到依赖项中:
uv添加“mcp[cli]” 或者,对于使用pip作为依赖关系的项目:
pip安装mcp 运行独立的MCP开发工具 要使用uv运行mcp命令:
紫外线运行mcp
pip install mcp requests
步骤2:配置MCP服务器
创建一个名为的文件 runpod_mcp_server.py 使用所提供模板中的代码。更新以下环境变量:
# Update these values
RUNPOD_API_KEY = "your_runpod_api_key"
RUNPOD_ENDPOINT_ID = "your_endpoint_id" # From serverless deployment
步骤3:运行MCP服务器
cline添加mcp设置
"PythonServerlessExecutor": {
"command": "xx/.local/bin/uv",
"args": [
"run",
"xxx/mcp_server/runpod_serverless_mcp_server/server.py"
],
"disabled": false,
"autoApprove": []
},
步骤4:使用MCP服务器
连接后,您可以使用以下工具:
execute_python_code:在RunPod上运行Python代码check_runpod_status:检查与RunPod的连接状态
Cline的使用示例:
Can you run this Python code?
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title("Sine Wave")
plt.savefig("sine_wave.png")
print("Generated sine wave plot")
Cline将使用MCP服务器执行此代码并返回结果。
样品
运作原理
- AI助手(如Cline)收到运行Python代码的请求
- 它援引了
execute_python_code通过MCP协议使用工具 - MCP服务器将代码发送到RunPod无服务器端点
- RunPod执行Docker容器中的代码
- 结果(stdout、stderr、返回代码)返回给MCP服务器
- MCP服务器格式化结果并将其发送回AI助手
- AI助手向用户显示结果
安全考虑
- 代码执行发生在一个隔离的容器中
- 执行时间有限,以防止资源滥用
- 您应该为生产使用实施额外的安全措施
故障排除
- MCP服务器连接问题:检查您的API密钥和终结点ID
- 代码执行超时:您的代码可能太复杂或无限循环
- 缺失的图书馆:检查您的代码是否需要不在Dockerfile中的库
高级配置
您可以修改以下内容以调整行为:
MAX_EXECUTION_TIME:更改代码执行的超时时间- Dockerfile:根据需要添加或删除库
- 错误处理:为特定场景自定义错误消息
为什么无服务器而不是Pod创建
我们选择使用RunPod的无服务器基础设施,而不是创建完整的Pod,原因有几个:
- 日志访问限制:RunPod不提供直接的API从创建的Pod中检索日志。这使得在使用pod创建方法时难以捕获代码执行的输出。
- 连接复杂性:维护与Pod的持久连接需要额外的SSH或其他远程访问方法基础设施。
- 资源管理:Pod即使在空闲时也会保持运行并产生费用,而无服务器功能只对实际执行时间收费。
无服务器方法的缺点
- 冷启动延迟:当容器启动时,第一次执行可能会出现延迟(冷启动)。
- 无持久存储:每次执行都从一个新的环境开始,因此很难在执行之间保持状态。
- 资源限制:与全Pod相比,无服务器功能通常具有更有限的CPU、内存和磁盘分配。 4.有限的GPU访问:虽然可能,但无服务器中的GPU访问比专用Pod更有限,通常也更昂贵。