MCP Foundry机器学习集成
桥接Microsoft Foundry代理、模型上下文协议(MCP)和Azure机器学习
一个生产就绪的实现,展示了人工智能代理如何通过标准化的工具调用机制安全地触发企业机器学习工作流程。
🎯 项目目标
使Microsoft Foundry代理能够通过安全的MCP(模型上下文协议)服务器与Azure机器学习交互,从而创建 三层智能自动化堆栈 用于企业机器学习操作。
🏗️ 建筑
该项目实现了 三层智能自动化堆栈:
架构图
MCP Foundry Azure ML Integration Architecture
第1层——智能(铸造代理)
- 理解用户意图
- 选择正确的工具
- 处理工具输出
- 在对话中自然回应
第2层——集成(MCP服务器)
- “中间件导体”
- 将Python函数公开为安全的MCP工具
- 将呼叫从代理路由到企业系统
- 强制工具边界和验证
第3层——执行(Azure ML)
- 处理实际工作负载(管道、作业、培训、实验)
- 提供计算资源和扩展
- 确保治理和跟踪
架构流程
┌─────────────────────────────────────────────────────────────────┐
│ │
│ Foundry Agent (Layer 1) │
│ ├─ Interprets user requests │
│ ├─ Calls MCP tools │
│ └─ Processes responses │
│ │ │
│ ▼ │
│ MCP Server (Layer 2) │
│ ├─ greet(name) │
│ ├─ add_numbers(a, b) │
│ ├─ run_aml_pipeline(payload) │
│ ├─ list_aml_experiments() │
│ └─ get_aml_job_status(job_name) │
│ │ │
│ ▼ │
│ Azure ML (Layer 3) │
│ ├─ Executes pipelines │
│ ├─ Manages experiments │
│ ├─ Tracks jobs │
│ └─ Provides compute resources │
│ │
└─────────────────────────────────────────────────────────────────┘📦 项目结构
mcp-foundry-ml/
├── server.py # MCP Server entry point (FastAPI)
├── mcp_foundry_agent.py # Foundry Agent entry point (Interactive demo)
├── requirements.txt # Python dependencies
├── test-mcp-tools.http # REST Client tests for all MCP tools
├── .env # Environment variables (credentials) - NOT in git
├── .env.example # Template for .env file
├── README.md # This file
│
├── aml/ # Azure ML definitions
│ ├── jobs/
│ │ └── pipeline.yml # Demo pipeline definition
│ └── models/ # (Reserved for model registrations)
│
├── src/
│ ├── mcp_server/ # Layer 2: MCP Server
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI server with tool routing
│ │ ├── config.py # Server configuration
│ │ └── tools/ # MCP tools
│ │ ├── __init__.py
│ │ ├── utility_tools.py # Demo tools (greet, add_numbers)
│ │ └── azure_ml_tools.py # Azure ML tools (run_aml_pipeline, etc.)
│ │
│ └── foundry_agent/ # Layer 1: Foundry Agent
│ ├── __init__.py
│ ├── client.py # Interactive agent demo with tool calling
│ └── bridge.py # Azure ML operations bridge
│
├── scripts/
│ ├── setup.sh # Automated project setup
│ └── create-compute.sh # Create Azure ML compute cluster
│
└── docs/
├── IMPLEMENTATION_GUIDE.md # Detailed implementation walkthrough
├── PRESENTATION_GUIDE.md # Quick reference for tech talk
├── CHECKLIST.md # Project completion checklist
└── diagrams/ # Architecture diagrams🚀 快速开始
先决条件
- Python 3.9+ (用Python 3.13测试)
- Azure订阅 与:
- Azure AI Foundry项目 - Azure机器学习工作区 - 计算集群(由安装脚本自动创建)
- Azure命令行界面 已安装并验证
1.克隆和设置
# Navigate to project directory
cd mcp-foundry-ml
# Run automated setup script
chmod +x scripts/setup.sh
./scripts/setup.sh安装脚本将:
- ✅ 检查Python版本
- ✅ 创建虚拟环境
- ✅ 安装依赖项
- ✅ 验证Azure CLI身份验证
- ✅ 创建
.env文件模板 - ✅ 指导您完成配置
2.配置环境
复制 .env.example 到 .env 并填写您的Azure凭据:
cp .env.example .env
# Edit .env with your actual values所需的环境变量:
# Azure ML Configuration
AZURE_SUBSCRIPTION_ID=your-subscription-id
AZURE_RESOURCE_GROUP=your-resource-group
AZURE_ML_WORKSPACE=your-workspace-name
# Microsoft Foundry Agent Configuration
PROJECT_ENDPOINT=https://your-foundry-resource.services.ai.azure.com/projects/your-project
MODEL_DEPLOYMENT_NAME=your-model-deployment
AGENT_ID=your-agent-id
AGENT_NAME=your-agent-name
# API Key (if using key-based authentication)
AZURE_AI_PROJECT_API_KEY=your-api-key
# MCP Server Configuration
MCP_SERVER_URL=http://localhost:8000/mcp/call
MCP_SERVER_NAME=MCP Foundry Bridge Server
MCP_SERVER_HOST=0.0.0.0
MCP_SERVER_PORT=80003.创建Azure ML计算集群
# Automated script creates compute cluster for you
chmod +x scripts/create-compute.sh
./scripts/create-compute.sh这创建了一个 mcp-compute 集群(Standard_DS3_v2,自动缩放0-2个实例)。
4.运行MCP服务器
终端1-启动MCP服务器:
python3 server.py您将看到:
INFO: Uvicorn running on http://127.0.0.1:8000
INFO: Application startup complete.5.运行Foundry Agent演示(交互式)
终端2-启动代理演示:
python3 mcp_foundry_agent.py系统将提示您输入消息:
💬 Enter your message for the agent (or press Enter for default):
Default: 'Hi, use the MCP server to run my ML pipeline'
Your message: _示例提示:
"Run my ML pipeline"→ 将管道提交到Azure ML"List all experiments"→ 显示所有ML实验"Check job status"→ 获取特定作业的状态"Hello there"→ 呼叫问候工具
代理人将:
- ✅ 连接到Azure AI Foundry
- ✅ 了解您的请求
- ✅ 调用适当的MCP工具
- ✅ 显示结果
6.直接测试MCP工具(可选)
使用随附的REST客户端测试文件:
# Open test-mcp-tools.http in VS Code
# Click "Send Request" above each test或者使用curl:
curl -X POST http://localhost:8000/mcp/call \
-H "Content-Type: application/json" \
-d '{"tool_name": "greet", "parameters": {"name": "Azure Community"}}'7.公开暴露MCP服务器(可选-用于代理游乐场)
要在本地MCP服务器上使用Azure AI Foundry Agent Playground,请执行以下操作:
# Install ngrok
brew install --cask ngrok
# Authenticate (get token from https://dashboard.ngrok.com)
ngrok config add-authtoken YOUR_TOKEN
# Terminal 3 - Expose local server
ngrok http 8000你会得到一个公共URL,比如: https://your-subdomain.ngrok-free.app
在Azure AI Foundry代理游乐场中使用此URL:
https://your-subdomain.ngrok-free.app/mcp/call🛠️ 可用的MCP工具
MCP服务器公开了Foundry代理可以调用的以下工具:
核心Azure机器学习工具(企业集成)
以下是用于实际机器学习操作的生产工具:
run_aml_pipeline(pipeline_job_yaml, payload, experiment_name)
触发Azure ML管道作业。
参数:
pipeline_job_yaml(str):管道YAML的路径(默认:“aml/jobs/pipeline.yml”)payload(dict):要传递到管道的数据experiment_name(str):实验名称(默认:“mcp集成演示”)
例子:
run_aml_pipeline(
pipeline_job_yaml="aml/jobs/pipeline.yml",
payload={"message": "Process this data", "batch_size": 100},
experiment_name="my-ml-experiment"
)list_aml_experiments()
列出Azure ML工作区中的所有实验。
例子:
list_aml_experiments()
# Returns: {"status": "success", "experiments": [...], "count": 5}get_aml_job_status(job_name: str)
获取特定Azure ML作业的状态和详细信息。
例子:
get_aml_job_status("elastic_mountain_xyz123")
# Returns: {"status": "Running", "job_name": "elastic_mountain_xyz123", ...}演示/测试工具
这些工具演示了MCP工作流程,对测试很有用:
greet(name: str)
用于验证MCP工具调用的简单问候功能。
例子:
greet("Alice")
# Returns: "Hello, Alice! Welcome to the MCP Foundry ML integration."add_numbers(a: float, b: float)
添加两个数字-对于测试工具参数传递很有用。
例子:
add_numbers(5, 3)
# Returns: {"sum": 8, "inputs": {"a": 5, "b": 3}, "operation": "5 + 3 = 8"}📝 使用示例
示例1:测试MCP服务器
使用演示工具进行测试以验证集成:
# Test via browser
http://localhost:8000/
# Test via API
curl -X POST http://localhost:8000/mcp/call \
-H "Content-Type: application/json" \
-d '{"tool_name": "greet", "parameters": {"name": "Azure Community"}}'示例2:通过代理触发ML管道
Agent理解自然语言并触发ML操作:
要求代理运行ML管道:
User: "Run the ML pipeline with my training data"
Agent: [calls run_aml_pipeline tool]
Agent: "I've submitted the pipeline job. Job ID: elastic_mountain_xyz123. Status: Running."示例3:检查作业状态
User: "What's the status of job elastic_mountain_xyz123?"
Agent: [calls get_aml_job_status tool]
Agent: "The job is currently running. It started 5 minutes ago."🔐 认证
此项目支持多种Azure身份验证方法:
- Azure命令行界面 (建议当地开发)
az login- 管理身份 (用于生产部署)
- 系统分配的身份 - 用户分配的身份
- 环境变量
export AZURE_CLIENT_ID=
export AZURE_TENANT_ID=
export AZURE_CLIENT_SECRET=这 DefaultAzureCredential 从 azure-identity 自动按顺序尝试这些方法。
🧪 发展
添加新的MCP工具
- 在中创建工具功能
src/mcp_server/tools/:
def my_new_tool(param1: str, param2: int) -> dict:
"""Tool description."""
# Implementation
return {"result": "..."}- 在中注册
src/mcp_server/main.py:
@mcp.tool()
def my_new_tool(param1: str, param2: int) -> dict:
"""Tool description for the agent."""
return tools.my_new_tool(param1, param2)- 将其添加到中的允许工具列表中
src/foundry_agent/client.py:
for tool_name in ("greet", "add_numbers", "run_aml_pipeline", "my_new_tool"):
mcp_tool.allow_tool(tool_name)测试
测试单个组件:
# Test MCP tools directly
python -c "from src.mcp_server.tools import utility_tools; print(utility_tools.greet('Test'))"
# Test Azure ML bridge
python -c "from src.foundry_agent.bridge import McpAzureMlBridge; bridge = McpAzureMlBridge.from_env(); print(bridge.list_experiments())"📚 关键概念
什么是MCP(模型上下文协议)?
MCP是一种在LLM和企业系统之间创建稳定接口的协议。它实现了人工智能驱动的自动化:
- 可预测的:标准化的工具定义和回应
- 受控的:验证和批准机制
- 安全:适当的身份验证和授权
为什么是这种架构?
问题AI代理(如GPT-4)不能安全地直接调用企业系统。
解决方案:
- 铸造代理 提供自然语言理解
- MCP服务器 使用经过验证的工具充当安全网关
- Azure ML 处理实际的计算工作负载
这种分离确保了:
- 安全边界
- 正确的错误处理
- 可审计性
- 可扩展性
🤝 贡献
欢迎投稿!需要改进的领域:
- 其他Azure ML操作(模型部署、端点管理)
- 增强的错误处理和重试逻辑
- 监控和记录改进
- 集成测试
- 文档改进
📄 许可证
本项目按原样提供,用于教育和示范目的。
📖 文档
🎤 演示
该项目在 Azure NG社区技术电话会议-2025年11月
关键谈话要点:
- 问题:人工智能代理不能安全地直接调用企业系统
- 解决方案:MCP作为安全中间件层
- 实现:三层架构(智能、集成、执行)
- 好处:安全性、治理、标准化、可扩展性
🔗 资源
🆘 故障排除
常见问题
问题: ModuleNotFoundError: No module named 'mcp_server'
- 解决方案:确保从项目根目录运行
src/在...里sys.path
问题: KeyError: 'AZURE_SUBSCRIPTION_ID'
- 解决方案:配置您的
.env文件或设置环境变量
问题: Authentication failed
- 解决方案:运行
az login并确保您可以访问这些资源
问题:管道作业失败,显示“未找到计算”
- 解决方案:更新
aml/jobs/pipeline.yml使用您的实际计算集群名称
______________________________________________________________________
📁 关键文件说明
| 文件/文件夹 | 目的 |
|---|---|
| 服务器.py | MCP服务器入口点-在端口8000上启动FastAPI服务器 |
| mcpfoundry_agent.py | 交互式代理演示-提示用户输入并演示完整的工作流程 |
| test-mcp-tools.http | REST客户端测试-快速测试所有5个MCP工具 |
| .env | 您的凭据 -永远不要承诺!(已在.gitignore) |
| .env.示例 | .env模板-提交安全,没有秘密 |
| aml/jobs/pipeline.yml | Azure ML管道定义-简单演示管道 |
| aml/模型/ | 保留用于模型注册(目前未使用,用于未来扩展) |
| src/mcp_server/main.py | 带工具路由逻辑的FastAPI服务器 |
| src/mcp_server/tools/ | 工具实现(utility_tools.py、azure \_ml_tools.py) |
| src/foundry_agent/client.py | 带有交互式提示和基于关键字的工具选择的代理演示 |
| src/fundry_agent/bridge.py | Azure ML操作(提交管道、列出实验、获取作业状态) |
| scripts/setup.sh | 自动设置-检查前置条件、创建venv、安装deps、指导配置 |
| scripts/create-compute.sh | 创建Azure ML计算集群(mcp计算) |
| docs/IMPLEMENTATION_GUIDE.md | 详细的分步实施演练 |
| 文档/演示文稿_GUIDE.md | 技术讲座演示的快速参考 |
🔒 安全说明
✅ 所有凭据都存储在 .env 仅限文件 ✅ .env 在...里 .gitignore -从未承诺使用git ✅ 任何源代码中都没有硬编码的秘密 ✅ .env.example 可以安全共享-仅包含占位符
始终使用 .env.example 作为共享此项目时的模板。
______________________________________________________________________
内置于❤️ Azure NG社区技术讲座-2025年11月
