使用Azure容器应用开始远程MCP服务器(Node.js/TypeScript)之旅
 
](https://codespaces.new/Azure-Samples/mcp-container-ts?hide_repo_select=true&ref=main&quickstart=true) ](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/Azure-Samples/mcp-container-ts)
 
:star: 要随时了解最新动态并接收更改通知,请在GitHub上为这个仓库点星标!
](https://github.com/Azure-Samples/mcp-container-ts)
这是一份快速入门指南,提供了使用Azure Container Apps设置远程模型上下文协议(MCP)服务器的基本构建模块。MCP服务器是使用Node.js和TypeScript构建的,可以在无服务器环境中运行各种工具和服务。此项目还实现了一个多层安全架构,结合了基于JWT的认证和基于角色的访问控制(RBAC),以保障MCP服务器端点和工具的安全。
\[!警告\] 此处提供的代码仅供演示之用。您的具体场景(包括企业内部规则、特定的安全控制措施或其他保护机制)可能与本仓库中概述的内容有所不同。对于任何需要认证和授权的生产环境资产和面向客户的资产,务必进行安全审计和威胁建模。
旅行助理服务器
除了原有的TODO演示工具外,该示例现在还代理了六个基于Python的旅行助手MCP服务器(航班、酒店、活动、财务、地理编码器、天气)。TypeScript主机在容器内启动每个进程,聚合它们的工具模式,并通过相同的Streamable HTTP端点以JWT/RBAC保护的形式暴露出来。在本地运行或部署之前,请确保以下环境变量已设置:
SERPAPI_KEY– 由航班、酒店、活动和金融服务器所要求。WEATHERSTACK_API_KEY– 可选,解锁天气服务器中的WeatherStack查询功能。PYTHON_BIN(可选)——如果需要,覆盖Python可执行文件python3在您的平台上不可用。
在部署过程中,这些值可以通过您的(系统/工具/配置等)来提供 .env,AZD(Azure DevOps)环境配置,或Azure密钥。Docker镜像会自动安装Python 3.12和旅行服务器。
什么是MCP?
模型上下文协议(MCP)是一种开放协议,它允许大型语言模型(LLMs)以标准化的方式与外部工具和服务进行交互。MCP使大型语言模型能够访问和利用各种资源,如数据库、应用程序编程接口(API)和其他服务,以增强其能力并提供更准确、更相关的响应。
以下是典型MCP服务器设置的架构图:
flowchart TD
user(("fa:fa-users User"))
host["VS Code, Copilot, LlamaIndex, Langchain..."]
clientHttp[MCP HTTP Client]
serverHttp([MCP HTTP Server])
agent["Agents (not included in this demo)"]
AzureOpenAI([Azure AI Foundry])
GitHub([GitHub Models])
OpenAI([OpenAI])
tools["fa:fa-wrench Tools"]
db[(sqlite DB)]
user --> hostGroup
subgraph hostGroup["MCP Host"]
host -.- agent
host aaa@ -.- clientHttp
end
agent -.- AzureOpenAI & GitHub & OpenAI
clientHttp aa@ ---> |"Streamable HTTP (authenticated)"| serverHttp
subgraph container["ACA or localhost"]
serverHttp a@ -.- tools
tools b@ -.- add_todo
tools c@ -.- list_todos
tools d@ -.- complete_todo
tools e@ -.- delete_todo
end
add_todo bb@ --> db
list_todos cc@--> db
complete_todo dd@ --> db
delete_todo ee@ --> 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 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 容器应用?
Azure Container Apps 是一个完全托管的无服务器容器平台,它简化了容器化应用程序的部署和操作。Azure Container Apps(简称 ACA)还提供了无服务器 GPU 支持,使您能够自带容器并将其部署到基于 GPU 的环境中,这些环境会根据需求自动扩展。
主要优势:
- 自动扩展——闲置时缩至零,使用时扩展
- 按秒计费——仅为您实际使用的计算资源付费
- 易用性——加快开发人员的工作速度,并轻松将任何容器部署到云端并在GPU上运行
- 无需基础设施管理——专注于您的模型和应用
- 企业级功能——开箱即用,支持自带虚拟网络、托管身份、私有端点等,并提供全面的数据治理
先决条件
- 安装最新版本的 VS Code(Visual Studio Code,简称VS Code)
- 安装 和 扩展(或延伸)
在本地运行MCP服务器
如果您希望在本地运行MCP服务器,可以按照以下步骤操作。
您需要在本地机器上安装以下工具:
- git 需要克隆该存储库。
- 以及npm。
一旦安装了所有先决条件,您就可以按照以下步骤在本地运行MCP服务器:
- 克隆此仓库:
git clone https://github.com/Azure-Samples/mcp-container-ts
cd mcp-container-ts- 安装项目依赖项
npm install- 生成一个新的JWT配置:
npm run generate-token -- --admin\[!NOTE\](注:此标记通常用于指示注意事项或提示,具体翻译可能根据上下文有所调整,此处直译为“\[!注意\]”,实际使用时可能需要根据语境调整为“注意”、“提示”等更自然的表达) 你也可以通过使用(某种方法或工具)生成具有不同角色的令牌--admin,--user或者--readonly标志。生成的令牌将根据您选择的角色拥有不同的权限(参见src/auth/authorization.ts(欲了解更多详情)。
这将追加(或创建)一个新的JWT配置到 .env 项目根目录下的文件。生成的令牌将用于验证对MCP服务器的请求。
\[!重要\] 在生产环境中,您应该使用更安全的方法来管理您的密钥和令牌。
- 启动开发服务器
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 Database "todos" initialized. +0ms
mcp:index 2025-07-23T16:48:05.449Z MCP Stateless Streamable HTTP Server +0ms
mcp:index 2025-07-23T16:48:05.449Z MCP endpoint: http://localhost:3000/mcp +0ms
mcp:index 2025-07-23T16:48:05.449Z Press Ctrl+C to stop the server +0ms- 要访问并使用MCP服务器,请阅读 使用您的MCP服务器 以下部分。
\[!NOTE\] (注:此标记通常用于提醒或注释,具体翻译可能需根据上下文调整,但在此处可直接保留原样或译为“注意”) 当应用程序启动时,服务器将创建一个 内存中的 SQLite 数据库。该数据库用于存储工具的状态及其与MCP服务器的交互情况。
将MCP服务器部署到Azure容器应用
要将MCP服务器部署到Azure容器应用中,您可以使用Azure开发者命令行界面(azd)。这将使您能够以最少的努力在Azure上配置和部署项目:
- 安装 Azure 开发者 CLI。
一旦安装了所有先决条件,您就可以按照以下步骤将MCP服务器部署到Azure容器应用中:
- 克隆这个仓库
git clone https://github.com/azure-samples/mcp-container-ts.git
cd mcp-container-ts- 登录到您的Azure帐户
azd auth login对于GitHub Codespaces用户,如果之前的命令失败,请尝试:
azd auth login --use-device-code- 提供并部署项目(运行此命令时,请确保您处于克隆仓库的文件夹中):
azd up- 部署完成后,您可以使用输出中提供的URL访问MCP服务器。URL大致如下所示:
https://...azurecontainerapps.io- 要访问并使用MCP服务器,请阅读 使用你的MCP服务器 以下部分。
\[!NOTE\] (注:此标记通常用于表示后续内容为注意事项或提示) 如果你只是在测试部署,可以通过运行以下命令来移除并清理所有已部署的资源,以避免产生任何费用: ``bash azd down --purge --force ``其他安装选项
你有几种其他选择来开始使用这个模板。最快的方式是使用GitHub Codespaces,因为它会为你设置所有工具,并且你可以在浏览器中运行MCP服务器。
GitHub Codespaces(GitHub 代码空间)
你可以使用 GitHub Codespaces 在线运行这个模板。点击按钮后,将在你的浏览器中打开一个基于网页的 VS Code 实例:
- 打开模板(这可能需要几分钟时间):
](https://codespaces.new/Azure-Samples/mcp-container-ts)
- 打开一个终端窗口
- 继续执行下一步操作,以在本地运行MCP服务器或将它部署到Azure容器应用中。
\[!NOTE\](注:此标记通常用于表示以下内容为注意事项或提示) 如果你在GitHub Codespaces中运行mcp服务器,请确保将端口可见性设置为“公共”: 点击“端口”选项卡 → 右键点击已打开的端口(默认为3000)→ 端口可见性 → 公开。
VS Code 开发容器
一个相关的选项是VS Code开发容器,它会在你本地的VS Code中打开项目,使用的是 Dev Containers 扩展:
- 安装 并且 VS Code 开发容器扩展 如果尚未安装。
- 启动 Docker Desktop(如果尚未安装,请先进行安装)
- 打开项目:

- 打开一个终端窗口
- 继续执行下一步操作,以在本地运行MCP服务器或将它部署到Azure Container Apps。
使用您的MCP服务器
选项0 - 使用提供的客户端示例
此存储库包含一个示例,展示了如何使用MCP服务器与OpenAI模型进行交互。该示例位于 [examples/](./examples/) 目录。
选项1 - 在VS Code中使用mcp.json文件
连接到MCP服务器的最快方式是使用提供的(工具/方法) .vscode/mcp.json 在您的VS Code环境中,使用配置文件来设置MCP服务器。此配置文件包含MCP服务器所需的设置,包括URL和传输类型。
{
"inputs": [
{
"password": true,
"id": "mcp-server-token",
"description": "Enter the token for the MCP server",
"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://...azurecontainerapps.io/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-server-token}"
}
}
}
}一旦打开这个文件,您可以点击内嵌的“开始”操作按钮,该按钮将连接到MCP服务器并获取可用的工具。
重要提示: 因为服务器使用JWT令牌进行保护,所以VS Code会提示您输入该令牌。您需要复制令牌的值 "JWT_TOKEN" 来自 .env 由(某人/某程序)创建的文件 npm run generate-token 命令。
\[!NOTE\](注:此标记通常用于表示以下内容为注意事项或提示) 在实际应用场景中,您应该验证令牌并使用更安全的身份验证方法。这只是用于测试目的的演示令牌。了解更多关于如何保护您的服务器的信息 在这里。
选项2 - 手动将MCP服务器添加到VS Code
- 从命令面板中添加MCP服务器,并将URL添加到您正在运行的服务器的HTTP端点:
对于本地开发,URL将是:
http://localhost:3000/mcp对于 Azure 容器应用,URL 将为:
https://...azurecontainerapps.io/mcp- 选择 HTTP(HTTP 或 服务器发送事件) 用于添加的MCP服务器类型。
- 输入您正在运行的HTTP终端点的URL,包括
/mcp最后的路径。 - 输入服务器ID。(可以是您想要的任意名称)
- 选择您希望在此处运行的位置:是在您的用户设置中(对所有应用程序可用)还是在您的工作区设置中(仅对此应用程序可用)
- 在Copilot聊天代理模式下,输入提示以触发工具,例如,选择一些代码并输入此提示
I need to send an email to Dan, please add that to my todo list.- 当提示运行该工具时,请点击“继续”以表示同意,
- 完成后,在终端窗口中按Ctrl+C以停止func.exe宿主进程,然后从命令面板中列出MCP服务器并停止本地服务器。
选项3 - MCP检查器
- 在一个新的终端窗口中,安装并运行 MCP 检测器
npm run inspect- 按住CTRL键点击以从终端中显示的URL加载MCP Inspector网络应用(例如:http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=xyz)
- 将传输类型设置为
Streamable HTTP。 - 添加认证头:
Authorization以及Bearer令牌,即(其)值为"JWT_TOKEN"来自.env由(某人/某程序)创建的文件npm run generate-token命令。 - 将URL设置为您的运行服务器的HTTP端点并连接:
# for local development, use:
http://localhost:3000/mcp
# or use the Azure Container Apps URL:
https://...azurecontainerapps.io/mcp- 列出工具。点击一个工具并运行工具。
下一步
- 了解更多关于 模型上下文协议
- 了解更多关于 Azure 容器应用
- 了解更多关于 Azure AI Foundry(可译为“Azure AI 制造厂”或根据上下文简化为“Azure AI 工厂”,但“Foundry”在此处可能隐喻为一个提供AI服务和解决方案的平台或基础设施,因此也可意译为“Azure AI 服务平台/基础设施”)
- 了解更多关于 来自微软的相关MCP(Microsoft Certified Professional,微软认证专业人员)努力/举措
加入社区
我们鼓励您加入我们的Azure AI Foundry开发者社区,分享您的经验、提出问题并获取支持:
- aka.ms/foundry/discord(该网址可直接访问,无需翻译) - 加入我们的Discord社区,进行实时讨论并获取支持。
- aka.ms/foundry/forum 翻译为中文是:“aka.ms/foundry 论坛” - 访问我们的Azure AI Foundry开发者论坛,提出问题并分享您的知识。
