AI Foundry APIM MCP服务器
用于Azure AI Foundry的MCP(模型上下文协议)服务器,将项目管理、模型部署、代理和聊天操作作为工具公开。支持本地开发(Azure CLI身份验证)和生产(OAuth令牌传递)。
快速开始
# Install
git clone
cd foundry-apim-mcp-server
uv sync
# Login to Azure (default auth mode)
az login
# Start the server
uv run foundry-mcp-server服务器启动于 http://localhost:8000/mcp (流式HTTP传输)。
来自您的MCP客户:
1. list_projects() # discover available projects
2. connect(account_name="...", project_name="...") # connect to one
3. list_models() # see deployed models
4. create_agent(name="my-agent", ...) # create an agent
5. chat(agent_name="my-agent", message="Hello!") # chat with it项目标签筛选器
重要提示: 默认情况下,list_projects仅返回具有以下条件的项目TechConnectAzure中的标签。 没有此标签的项目将被自动跳过。 要更改或禁用此筛选器,请编辑PROJECT_TAG_FILTER在foundry_apim_mcp_server/foundry_client.py: ``python PROJECT_TAG_FILTER = "TechConnect" # set to None to disable filtering``
工具
| 工具 | 说明 |
|---|---|
list_projects | 发现Azure订阅中的所有AI Foundry帐户和项目(无需连接) |
connect | 通过account_name+project_name(推荐)或直接端点URL连接到项目 |
list_connections | 列出网关连接,可选类型筛选器(ModelGateway, ApiManagement, AzureOpenAI, AzureAISearch, AzureBlob, CosmosDB, GroundingWithBingSearch) |
list_models | 列出具有可选发布者/名称筛选器的模型部署 |
list_agents | 列出连接项目中的代理 |
create_agent | 使用模型、网关连接和可选的MCP工具创建或更新代理 |
delete_agent | 按名称删除代理 |
chat | 向代理发送消息并获得响应(通过MCP工具批准处理) |
direct_chat | 直接调用模型,无需代理抽象 |
提示
指导LLM完成多步骤任务的预配置工作流:
| 提示 | 描述 |
|---|---|
setup_and_explore | 连接到项目并探索连接、模型和代理 |
create_and_test_agent | 创建一个具有网关连接的代理并对其进行测试 |
compare_gateways | 通过创建测试代理来比较不同的网关连接 |
认证
受控于 AUTH_MODE 环境变量:
| 模式 | AUTH_MODE value | 它是如何工作的 |
|---|---|---|
| DefaultAzureCredential (默认) | default_credential | 使用Azure CLI、托管身份、VS代码凭据等。 |
| 令牌传递 | passthrough | 将OAuth承载令牌从MCP客户端转发到Foundry |
本地开发 --只需登录一次,不需要其他配置:
az login
uv run foundry-mcp-server生产/远程 --MCP客户端必须发送Azure Entra ID承载令牌:
AUTH_MODE=passthrough uv run foundry-mcp-server环境变量
所有变量都是可选的。复制 .env.example 到 .env 开始:
cp .env.example .env| 变量 | 描述 | 默认值 |
|---|---|---|
AZURE_AI_FOUNDRY_CONNECTION_STRING | AI Foundry项目端点。如果您使用,则不需要 connect 在运行时。 | — |
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME | 的默认模型部署 create_agent / direct_chat (例如。 gpt-5-mini) | — |
AUTH_MODE | default_credential 或 passthrough | default_credential |
AZURE_TENANT_ID | DefaultAzureCredential | --的租户ID提示 |
AZURE_BEARER_TOKEN | 手动持票人代币(仅适用于 passthrough 开发期间的模式) | -- |
MCP_HOST | 将服务器绑定到的主机 | 127.0.0.1 |
MCP_PORT | 运行服务器的端口 | 8000 |
先决条件
- Python 3.11+
- 紫外线 (推荐)或pip
- Azure命令行界面(
az login)用于默认身份验证模式 - Azure AI Foundry项目
MCP客户端配置
VS代码/克劳德桌面
{
"mcpServers": {
"ai-foundry": {
"url": "http://localhost:8000/mcp"
}
}
}使用时 AUTH_MODE=passthrough,添加授权标头:
{
"mcpServers": {
"ai-foundry": {
"url": "http://localhost:8000/mcp",
"headers": {
"Authorization": "Bearer "
}
}
}
}AI铸造代理(作为MCP工具)
from azure.ai.projects.models import MCPTool
mcp_tool = MCPTool(
server_label="ai-foundry-mcp",
server_url="http://localhost:8000/mcp",
require_approval="never",
)码头工人
# Build
docker build -t foundry-mcp-server .
# Run with managed identity (e.g. on Azure Container Apps / ACI)
docker run -p 8000:8000 foundry-mcp-server
# Run with token passthrough
docker run -p 8000:8000 -e AUTH_MODE=passthrough foundry-mcp-server
# Run with an .env file
docker run -p 8000:8000 --env-file .env foundry-mcp-server图像默认为 MCP_HOST=0.0.0.0 因此,它监听容器内的所有接口。认证流程
此服务器确实 不 使用OBO(代表)流。
它支持两种模式,由 AUTH_MODE 环境变量:
| 模式 | AUTH_MODE | 它是如何工作的 |
|---|---|---|
| DefaultAzureCredential (默认) | default_credential | 使用标准Azure身份链:托管身份→ Azure命令行界面→ 环境变量→ VS代码凭证。在生产容器中,这通常解决为 管理身份. |
| 令牌传递 | passthrough | MCP客户端在 Authorization 头球服务器将该相同的令牌转发到Azure AI Foundry API。不涉及代币交换或OBO。 |
所需的Azure RBAC权限
标识(托管标识或用户主体)必须具有:
| 权限/角色 | 范围 | 为什么 |
|---|---|---|
| 读者 | 订阅或管理组 | list_projects 进行ARM管理平面调用以枚举订阅、认知服务帐户和项目(请参阅下面的操作) |
| 认知服务OpenAI用户 | AI Foundry项目资源 | 需要调用模型部署、创建/管理代理和聊天 |
| 认知服务贡献者 *(可选)* | AI Foundry项目资源 | 仅当您想通过服务器创建或删除代理时才需要 |
如果你只connect到已知的项目端点(跳过list_projects),the 读者 订阅中的角色不是必需的。
Specific ARM actions required by list_projects
如果使用自定义角色而不是内置角色 读者,授权这些操作:
| ARM操作 | 用于 |
|---|---|
Microsoft.Resources/subscriptions/read | 枚举可访问的订阅 |
Microsoft.CognitiveServices/accounts/read | 列出每个订阅的AI Foundry/认知服务帐户 |
Microsoft.CognitiveServices/accounts/projects/read | 列出每个帐户下的项目 |
环境变量引用
| 变量 | 必填 | 描述 | 默认值 |
|---|---|---|---|
AUTH_MODE | 没有 | default_credential 或 passthrough | default_credential |
AZURE_AI_FOUNDRY_CONNECTION_STRING | 否 | AI Foundry项目终结点。如果你打电话,就不需要了 connect 在运行时。 | — |
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME | 否 | 的默认模型部署 create_agent / direct_chat (例如。 gpt-5-mini) | — |
AZURE_TENANT_ID | 没有 | DefaultAzureCredential | --的租户ID提示 |
AZURE_BEARER_TOKEN | 否 | 手动持票人代币(仅适用于 passthrough 开发期间的模式) | -- |
AZURE_CLIENT_ID | 否 | 托管标识的客户端ID(使用用户分配的托管标识时设置) | -- |
MCP_HOST | 否 | 要将服务器绑定到的主机 | 127.0.0.1 (0.0.0.0 在Docker中) |
MCP_PORT | 无 | 运行服务器的端口 | 8000 |
发展
uv sync
# Run with auto-reload (FastMCP dev mode)
uv run fastmcp dev foundry_apim_mcp_server/server.py
# Or run directly
uv run python -m foundry_apim_mcp_server.server