:star: 要保持更新并收到更改通知,请在GitHub上给这个仓库加星!
</div>这是一个快速入门指南,提供了使用Azure容器应用设置远程模型上下文协议(MCP)服务器的基本构建模块。MCP服务器是使用Node.js和TypeScript构建的,并且可以在无服务器环境中运行各种工具和服务。该项目还实现了一个多层安全架构,结合基于JWT的身份验证和基于角色的访问控制(RBAC),以保护MCP服务器端点和工具的安全。
[!WARNING] 此处提供的代码仅用于演示目的。您的具体情况(包括企业内部规则、特定安全控制或其他保护机制)可能与此仓库中概述的不同。对于需要身份验证和授权的任何生产资产和面向客户的资产,始终进行安全审计和威胁建模。
模型上下文协议(MCP)是一种开放协议,允许大型语言模型(LLMs)以标准化的方式与外部工具和服务交互。MCP使LLMs能够访问和利用各种资源,如数据库、API和其他服务,以增强其能力并提供更准确和相关的响应。
以下是典型的MCP服务器设置的架构图:
flowchart TD
user(("fa:fa-users 用户"))
host["VS Code, Copilot, LlamaIndex, Langchain..."]
clientHttp[MCP HTTP客户端]
serverHttp([MCP HTTP服务器])
agent["代理(此演示不包括)"]
AzureOpenAI([Azure AI Foundry])
GitHub([GitHub模型])
OpenAI([OpenAI])
tools["fa:fa-wrench 工具"]
db[(sqlite DB)]
user --> hostGroup
subgraph hostGroup["MCP主机"]
host -.- agent
host aaa@ -.- clientHttp
end
agent -.- AzureOpenAI & GitHub & OpenAI
clientHttp aa@ ---> |"可流式传输HTTP(已认证)"| serverHttp
subgraph container["ACA或本地主机"]
serverHttp a@ -.- tools
tools b@ -.- 添加待办事项
tools c@ -.- 列出待办事项
tools d@ -.- 完成待办事项
tools e@ -.- 删除待办事项
end
添加待办事项 bb@ --> db
列出待办事项 cc@--> db
完成待办事项 dd@ --> db
删除待办事项 ee@ --> 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 aaa animate
class b animate
class c animate
class d animate
class e animate
class bb animate
class cc animate
class dd animate
class ee animate
class container highlight
Azure容器应用是一个完全托管的无服务器容器平台,简化了容器化应用程序的部署和操作。ACA还提供了无服务器GPU支持,因此您可以自带容器并将其部署到根据需求自动扩展的GPU支持环境中。
关键优势:
如果您希望在本地运行MCP服务器,可以按照以下步骤操作。
您需要在本地机器上安装以下工具:
一旦安装了先决条件,您可以按照以下步骤在本地运行MCP服务器:
git clone https://github.com/Azure-Samples/mcp-container-ts
cd mcp-container-ts
npm install
npm run generate-token -- --admin
[!NOTE] 您还可以通过使用
--admin、--user或--readonly标志来生成具有不同角色的令牌。生成的令牌将基于您选择的角色具有不同的权限(有关更多详细信息,请参阅src/auth/authorization.ts)。
这将在项目的根目录下的.env文件中追加(或创建)一个新的JWT配置。生成的令牌将用于对MCP服务器的请求进行身份验证。
[!IMPORTANT] 在生产环境中,您应该使用更安全的方法来管理和存储您的密钥和令牌。
npm run dev
您应在终端中看到如下输出:
mcp:db 2025-07-23T16:48:05.381Z PRAGMA journal_mode = WAL +0ms
mcp:db 2025-07-23T16:48:05.382Z CREATE TABLE IF NOT EXISTS todos (
mcp:db id INTEGER PRIMARY KEY AUTOINCREMENT,
mcp:db text TEXT NOT NULL,
mcp:db completed INTEGER NOT NULL DEFAULT 0
mcp:db ) +0ms
mcp:db 2025-07-23T16:48:05.382Z 数据库“todos”初始化完成。 +0ms
mcp:index 2025-07-23T16:48:05.449Z MCP无状态可流式传输HTTP服务器 +0ms
mcp:index 2025-07-23T16:48:05.449Z MCP端点:http://localhost:3000/mcp +0ms
mcp:index 2025-07-23T16:48:05.449Z 按Ctrl+C停止服务器 +0ms
[!NOTE] 当应用程序启动时,服务器会创建一个内存SQLite数据库。此数据库用于存储工具的状态及其与MCP服务器的交互。
要将MCP服务器部署到Azure容器应用,您可以使用Azure开发者CLI(azd)。这将允许您以最小的努力来预配和部署项目到Azure:
一旦安装了先决条件,您可以按照以下步骤将MCP服务器部署到Azure容器应用:
git clone https://github.com/azure-samples/mcp-container-ts.git
cd mcp-container-ts
azd auth login
对于GitHub Codespaces用户,如果上述命令失败,请尝试:
azd auth login --use-device-code
azd up
https://<env-name>.<container-id>.<region>.azurecontainerapps.io
[!NOTE] 如果您只是简单地测试部署,可以通过运行以下命令删除并清理所有已部署的资源,以避免产生任何费用:
azd down --purge --force
您有几个其他选项来开始使用此模板。最快捷的方式是GitHub Codespaces,因为它会为您设置所有工具,您可以在浏览器中运行MCP服务器。
您可以使用GitHub Codespaces虚拟运行此模板。该按钮会在浏览器中打开一个基于Web的VS Code实例:
[!NOTE] 如果您在GitHub Codespaces中运行MCP服务器,请确保将端口可见性更改为公共: 单击“端口”标签 → 右键单击打开的端口(默认为3000)→ 端口可见性 → 公共。
另一个相关选项是VS Code Dev Containers,它将使用Dev Containers扩展在本地VS Code中打开项目:
如果尚未安装,请安装Docker Desktop和VS Code Dev Containers扩展。
启动Docker Desktop(如果尚未安装,请安装)。
打开项目:
打开终端窗口
继续执行下一步骤,要么在本地运行MCP服务器,要么将其部署到Azure容器应用。
此仓库包含一个示例,展示了如何使用MCP服务器与OpenAI模型交互。示例位于[examples/](./examples/)目录中。
连接到MCP服务器的最快速方法是使用提供的.vscode/mcp.json配置文件,在您的VS Code环境中设置MCP服务器。此配置文件包含了MCP服务器所需的设置,包括URL和传输类型。
{
"inputs": [
{
"password": true,
"id": "mcp-server-token",
"description": "输入MCP服务器的令牌",
"type": "promptString",
}
],
"servers": {
"mcp-server": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-server-token}"
}
},
"mcp-server-remote": {
"type": "http",
"url": "https://<env-name>.<container-id>.<region>.azurecontainerapps.io/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-server-token}"
}
}
}
}
一旦打开了此文件,您可以点击内联操作按钮“开始”,这将连接MCP服务器并获取可用工具。
重要提示: 因为服务器使用JWT令牌进行保护,VS Code会提示您输入令牌。您需要从npm run generate-token命令创建的.env文件中复制"JWT_TOKEN"的值。
[!NOTE] 在实际场景中,您需要验证令牌并使用更安全的身份验证方法。这只是用于测试目的的演示令牌。了解更多关于如何保护您的服务器的信息这里。
对于本地开发,URL将是:
http://localhost:3000/mcp
对于Azure容器应用,URL将是:
https://<env-name>.<container-id>.<region>.azurecontainerapps.io/mcp
/mcp路径。我需要给Dan发一封电子邮件,请把它添加到我的待办事项列表中。
npm run inspect
可流式传输HTTP。Authorization和Bearer令牌,该令牌是npm run generate-token命令创建的.env文件中的"JWT_TOKEN"的值。# 对于本地开发,使用:
http://localhost:3000/mcp
# 或使用Azure容器应用的URL:
https://<env-name>.<container-id>.<region>.azurecontainerapps.io/mcp

我们鼓励您加入我们的Azure AI Foundry开发者社区,分享您的经验,提问并获得支持: