Azure容器应用程序-AI和MCP游乐场
该项目展示了如何将MCP协议与OpenAI、Azure OpenAI和GitHub模型一起使用。它提供了一个与TODO列表代理交互的简单演示终端应用程序。 代理可以访问MCP服务器提供的一组工具。
MCP组件
目前的实施包括三个主要部分:
- MCP主机:与MCP服务器和LLM提供者交互的主要应用程序。主机通知LLM提供者,并为用户提供与代理交互的终端接口。
- MCP客户端:使用MCP协议与MCP服务器通信的客户端。该应用程序为HTTP和SSE(服务器发送事件)协议提供两个MCP客户端。
- MCP服务器:实现MCP协议并与DocumentDB数据库通信的服务器。该应用程序提供了两种MCP服务器实现:一种使用HTTP,另一种使用SSE(服务器发送事件)。
- LLM提供者:根据MCP主机的输入生成响应的语言模型提供者(例如OpenAI、Azure OpenAI、GitHub Models)。
- DocumentDB本地:用于存储代理和工具状态的数据库。
- 工具:代理可以用来执行操作的一组工具,例如在购物清单中添加或列出项目。
flowchart TD
user(("fa:fa-users User"))
host["VS Code, Copilot, LlamaIndex, Langchain..."]
client[MCP SSE Client]
clientHttp[MCP HTTP Client]
server([MCP SSE Server])
serverHttp([MCP HTTP Server])
agent[Agent]
AzureOpenAI([Azure OpenAI])
GitHub([GitHub Models])
OpenAI([OpenAI])
tools["fa:fa-wrench Tools"]
db[(DocumentDB Local)]
user --> hostGroup
subgraph hostGroup["MCP Host"]
host -.- client & clientHttp & agent
end
agent -.- AzureOpenAI & GitHub & OpenAI
client a@ ---> |"Server Sent Events"| server
clientHttp aa@ ---> |"Streamable HTTP"| serverHttp
subgraph container["ACA Container (*)"]
server -.- tools
serverHttp -.- tools
tools -.- add_todo
tools -.- list_todos
tools -.- complete_todo
tools -.- delete_todo
end
add_todo b@ --> db
list_todos c@--> db
complete_todo d@ --> db
delete_todo e@ --> db
%% styles
classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;
classDef highlight fill:#9B77E8,color:#fff,stroke:#5EB4D8,stroke-width:2px
class a animate
class aa animate
class b animate
class c animate
class d animate
class e animate
class container highlight
MCP服务器支持的特性和功能
此演示应用程序提供了两种MCP服务器实现:一种使用HTTP,另一种使用SSE(服务器发送事件)。MCP主机可以连接到两台服务器,让您选择最适合您需求的服务器。
| 功能 | 已完成 |
|---|---|
| SSE(传统) | ✅ |
| HTTP流媒体 | ✅ |
| AuthN(基于令牌) | wip |
| 工具 | ✅ |
| 资源 | #3 |
| 提示 | #4 |
| 采样 | #5 |
快速入门(使用Docker)
要使用Docker开始此项目,请按照以下步骤操作:
- 克隆存储库:
git clone https://github.com/Azure-Samples/azure-container-apps-ai-mcp.git
cd azure-container-apps-ai-mcp- 启动Docker容器:
docker-compose up地方发展
要开始此项目,请按照以下步骤操作:
先决条件
- Node.js和npm(版本22或更高)
- Docker(建议用于运行MCP服务器,以及Docker中的DocumentDB Local)
- 与OpenAI兼容的端点:
- 一个OpenAI API密钥 - 或者,如果你想使用GitHub模型,可以使用GitHub代币:https://gh.io/models - 或者,如果你正在使用Azure OpenAI,你需要有一个 Azure OpenAI资源 以及相应的端点。
安装
- 克隆存储库。
- 安装依赖项:
npm install --prefix mcp-host
npm install --prefix mcp-server-http
npm install --prefix mcp-server-sse配置LLM提供程序以使用
此示例支持以下LLM提供商:
| 提供程序 | 支持的API |
|---|---|
| Azure OpenAI | 响应API |
| OpenAI | 响应API |
| GitHub模型 | ChatCompletion API |
Azure OpenAI
\[!注意\] 在Docker容器(本地)中运行时,不支持使用托管身份访问Azure OpenAI。您可以在不使用Docker的情况下在本地运行代码,也可以使用不同的身份验证方法,如AZURE_OPENAI_API_KEY密钥身份验证。
为了使用无密钥身份验证,使用Azure托管身份,您需要提供 AZURE_OPENAI_ENDPOINT 环境变量 .env 文件:
AZURE_OPENAI_ENDPOINT="https://.openai.azure.com"
MODEL="gpt-4.1"
# (optional) Set the Azure OpenAI API key if you are not using Managed Identity
# AZURE_OPENAI_API_KEY=your_azure_openai_api_key并确保使用 Azure命令行界面 登录您的Azure帐户并按照说明选择订阅:
az loginOpenAI
要使用OpenAI API,您需要设置 OPENAI_API_KEY 钥匙在 .env 文件:
OPENAI_API_KEY=your_openai_api_key
MODEL="gpt-5"GitHub模型
要使用GitHub模型,您需要设置 GITHUB_TOKEN 在 .env 文件:
GITHUB_TOKEN=your_github_token
MODEL="openai/gpt-5"运行MCP服务器
在DevContainer中运行(推荐)
此项目包括一个DevContainer配置,允许您在容器化环境中运行MCP服务器。这是运行MCP服务器的推荐方式,因为它确保所有依赖项都已正确安装和配置。
](https://codespaces.new/manekinekko/azure-container-apps-ai-mcp) 
在DevContainer中打开项目后,您可以使用下面的Docker部分运行MCP服务器。
在Docker中运行
您可以使用提供的Docker Compose文件在Docker容器中运行这两个MCP服务器。这对于测试和开发目的很有用。为此,请执行以下步骤:
- 确保你的机器上安装了Docker。类型
docker compose在您的终端中检查是否安装了Docker Compose。 - 导航到项目的根目录,运行以下命令以构建和启动容器:
docker compose up -d --build此命令将构建并启动HTTP和SSE MCP服务器以及DocumentDB数据库容器。
- 在单独的终端中运行以下命令访问MCP主机终端:
docker exec -it mcp-host bash- 在容器内,您可以运行MCP主机并与LLM代理交互,如上文“用法”部分所述。
在Docker之外运行
- 首先,在单独的终端中运行MCP服务器:
npm start --prefix mcp-server-http
npm start --prefix mcp-server-sse\[!注意\] 出于演示目的,MCP主机(见下文)被配置为连接到两台服务器(在端口3000和3001上)。但是,这不是必需的,您可以选择使用哪个服务器。如果服务器不可用,主机将打印错误并继续扫描其他服务器。如果没有可用的服务器,则代理将无法使用任何工具。
- 在单独的终端中运行MCP主机:
npm start --prefix mcp-host您应该能够使用MCP主机与LLM代理交互。试着问一个关于在购物清单中添加或列出项目的问题。然后,主机将尝试从MCP服务器获取和调用工具。
调试和检查
您可以使用 DEBUG 用于为MCP主机启用详细日志记录的环境变量:
DEBUG=mcp:* npm start --prefix mcp-host默认情况下,两个MCP服务器都启用了调试。
许可证
该项目根据MIT许可证获得许可。请参阅 许可证 文件以获取详细信息。
