本项目展示了如何使用MCP协议与OpenAI、Azure OpenAI和GitHub模型进行交互。它提供了一个简单的终端演示应用程序,该程序与一个待办事项列表代理进行互动。 代理可以访问由MCP服务器提供的工具集。
当前实现主要包括三个主要组件:
flowchart TD
user(("fa:fa-users 用户"))
host["VS Code, Copilot, LlamaIndex, Langchain..."]
client[MCP SSE 客户端]
clientHttp[MCP HTTP 客户端]
server([MCP SSE 服务器])
serverHttp([MCP HTTP 服务器])
agent[代理]
AzureOpenAI([Azure OpenAI])
GitHub([GitHub 模型])
OpenAI([OpenAI])
tools["fa:fa-wrench 工具"]
db[(本地DocumentDB)]
user --> hostGroup
subgraph hostGroup["MCP 主机"]
host -.- client & clientHttp & agent
end
agent -.- AzureOpenAI & GitHub & OpenAI
client a@ ---> |"服务器发送事件"| server
clientHttp aa@ ---> |"可流式传输的HTTP"| serverHttp
subgraph container["ACA 容器 (*)"]
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
%% 样式
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服务器实现:一种使用HTTP,另一种使用SSE(服务器发送事件)。MCP主机可以连接到这两种服务器,允许您选择最适合需求的一种。
| 功能 | 完成情况 |
|---|---|
| SSE (旧版) | ✅ |
| HTTP 流式传输 | ✅ |
| 认证 (基于令牌) | 进行中 |
| 工具 | ✅ |
| 资源 | #3 |
| 提示 | #4 |
| 抽样 | #5 |
要使用Docker开始这个项目,请按照以下步骤操作:
git clone https://github.com/Azure-Samples/azure-container-apps-ai-mcp.git
cd azure-container-apps-ai-mcp
docker-compose up
要开始这个项目,请按照以下步骤操作:
npm install --prefix mcp-host
npm install --prefix mcp-server-http
npm install --prefix mcp-server-sse
此样本支持以下语言模型提供商:
| 提供商 | 支持的API |
|---|---|
| Azure OpenAI | 响应API |
| OpenAI | 响应API |
| GitHub 模型 | 对话完成API |
[!注意] 当在Docker容器(本地)中运行时,不支持使用托管身份访问Azure OpenAI。您可以选择在没有Docker的情况下本地运行代码,或者使用其他认证方法,如AZURE_OPENAI_API_KEY密钥认证。
为了使用无密钥认证并使用Azure托管身份,您需要在.env文件中提供AZURE_OPENAI_ENDPOINT环境变量:
AZURE_OPENAI_ENDPOINT="https://<ai-foundry-openai-project>.openai.azure.com"
MODEL="gpt-4.1"
# (可选)如果您不使用托管身份,则设置Azure OpenAI API密钥
# AZURE_OPENAI_API_KEY=your_azure_openai_api_key
确保使用Azure CLI登录您的Azure帐户并按照说明选择订阅:
az login
要使用OpenAI API,您需要在.env文件中设置您的OPENAI_API_KEY密钥:
OPENAI_API_KEY=your_openai_api_key
MODEL="gpt-5"
要使用GitHub模型,您需要在.env文件中设置您的GITHUB_TOKEN:
GITHUB_TOKEN=your_github_token
MODEL="openai/gpt-5"
此项目包括一个DevContainer配置,允许您在一个容器化的环境中运行MCP服务器。这是推荐的运行方式,因为它确保了所有依赖项都已正确安装和配置。
一旦您在DevContainer中打开了项目,就可以按照下面的Docker部分所述运行MCP服务器。
您可以使用提供的Docker Compose文件在Docker容器中运行两个MCP服务器。这对于测试和开发非常有用。要这样做,请遵循以下步骤:
docker compose以检查是否已安装Docker Compose。docker compose up -d --build
此命令将构建并启动HTTP和SSE MCP服务器以及DocumentDB数据库容器。
docker exec -it mcp-host bash
npm start --prefix mcp-server-http
npm start --prefix mcp-server-sse
[!注意] 为了演示目的,MCP主机(如下所示)被配置为连接到两个服务器(端口3000和3001)。然而,这不是必需的,您可以选择使用哪个服务器。如果某个服务器不可用,主机将打印错误并继续扫描其他服务器。如果没有可用的服务器,代理将无法使用任何工具。
npm start --prefix mcp-host
您应该能够使用MCP主机与语言模型代理进行交互。尝试询问有关添加或列出购物清单中的项目的操作。主机将尝试从MCP服务器获取并调用工具。
您可以使用DEBUG环境变量启用MCP主机的详细日志记录:
DEBUG=mcp:* npm start --prefix mcp-host
调试默认情况下对两个MCP服务器都是开启的。
本项目根据MIT许可证发布。详情请参阅LICENSE文件。