返回市场
MCP容器TS

MCP容器TS

作者:Azure-Samples40 星标更新:2025-10-28

项目介绍

<!-- --- name: 远程MCP与Azure容器应用(Node.js/TypeScript/JavaScript) description: 在Azure容器应用上运行远程Node.js MCP服务器。 languages: - typescript - javascript - nodejs - bicep - azdeveloper products: - azure-container-apps - azure page_type: sample urlFragment: mcp-container-ts --- -->

使用Azure容器应用(Node.js/TypeScript)开始远程MCP服务器

<div align="center">

加入Azure AI Foundry社区Discord 加入Azure AI Foundry开发者论坛 <br> 在GitHub Codespaces中打开项目 在GitHub Codespaces中打开项目 Node版本 TypeScript License

:star: 要保持更新并收到更改通知,请在GitHub上给这个仓库加星!

GitHub仓库星星数 GitHub fork数 GitHub观察者数

</div>

这是一个快速入门指南,提供了使用Azure容器应用设置远程模型上下文协议(MCP)服务器的基本构建模块。MCP服务器是使用Node.js和TypeScript构建的,并且可以在无服务器环境中运行各种工具和服务。该项目还实现了一个多层安全架构,结合基于JWT的身份验证和基于角色的访问控制(RBAC),以保护MCP服务器端点和工具的安全。

[!WARNING] 此处提供的代码仅用于演示目的。您的具体情况(包括企业内部规则、特定安全控制或其他保护机制)可能与此仓库中概述的不同。对于需要身份验证和授权的任何生产资产和面向客户的资产,始终进行安全审计和威胁建模。

什么是MCP?

模型上下文协议(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容器应用?

Azure容器应用是一个完全托管的无服务器容器平台,简化了容器化应用程序的部署和操作。ACA还提供了无服务器GPU支持,因此您可以自带容器并将其部署到根据需求自动扩展的GPU支持环境中。

关键优势:

  • 自动扩展 – 空闲时扩展至零,使用时扩展
  • 按秒计费 – 仅支付您使用的计算资源
  • 易用性 - 加速开发人员速度,轻松将任何容器带到云中的GPU上运行
  • 无需基础设施管理 – 关注您的模型和应用
  • 企业级特性 – 开箱即用地支持自带虚拟网络、托管标识、私有端点等,并具有完整的数据治理

先决条件

  1. 安装最新版本的VS Code
  2. 安装GitHub CopilotGitHub Copilot Chat扩展

在本地运行MCP服务器

如果您希望在本地运行MCP服务器,可以按照以下步骤操作。

您需要在本地机器上安装以下工具:

一旦安装了先决条件,您可以按照以下步骤在本地运行MCP服务器:

  1. 克隆此仓库:
git clone https://github.com/Azure-Samples/mcp-container-ts
cd mcp-container-ts
  1. 安装项目依赖项
npm install
  1. 生成新的JWT配置:
npm run generate-token -- --admin

[!NOTE] 您还可以通过使用--admin--user--readonly标志来生成具有不同角色的令牌。生成的令牌将基于您选择的角色具有不同的权限(有关更多详细信息,请参阅src/auth/authorization.ts)。

这将在项目的根目录下的.env文件中追加(或创建)一个新的JWT配置。生成的令牌将用于对MCP服务器的请求进行身份验证。

[!IMPORTANT] 在生产环境中,您应该使用更安全的方法来管理和存储您的密钥和令牌。

  1. 启动开发服务器
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
  1. 要访问和使用MCP服务器,请阅读下方的使用您的MCP服务器部分。
<br>

[!NOTE] 当应用程序启动时,服务器会创建一个内存SQLite数据库。此数据库用于存储工具的状态及其与MCP服务器的交互。

将MCP服务器部署到Azure容器应用

要将MCP服务器部署到Azure容器应用,您可以使用Azure开发者CLI(azd)。这将允许您以最小的努力来预配和部署项目到Azure:

一旦安装了先决条件,您可以按照以下步骤将MCP服务器部署到Azure容器应用:

  1. 克隆此仓库
git clone https://github.com/azure-samples/mcp-container-ts.git
cd mcp-container-ts
  1. 登录到您的Azure帐户
azd auth login

对于GitHub Codespaces用户,如果上述命令失败,请尝试:

azd auth login --use-device-code
  1. 预配和部署项目(确保在克隆的仓库文件夹中运行此命令):
azd up
  1. 部署完成后,您可以使用输出中提供的URL访问MCP服务器。URL看起来像这样:
https://<env-name>.<container-id>.<region>.azurecontainerapps.io
  1. 要访问和使用MCP服务器,请阅读下方的使用您的MCP服务器部分。

[!NOTE] 如果您只是简单地测试部署,可以通过运行以下命令删除并清理所有已部署的资源,以避免产生任何费用:

azd down --purge --force

其他安装选项

您有几个其他选项来开始使用此模板。最快捷的方式是GitHub Codespaces,因为它会为您设置所有工具,您可以在浏览器中运行MCP服务器。

GitHub Codespaces

您可以使用GitHub Codespaces虚拟运行此模板。该按钮会在浏览器中打开一个基于Web的VS Code实例:

  1. 打开模板(这可能需要几分钟时间):

    在GitHub Codespaces中打开

  2. 打开终端窗口

  3. 继续执行下一步骤,要么在本地运行MCP服务器,要么将其部署到Azure容器应用。

[!NOTE] 如果您在GitHub Codespaces中运行MCP服务器,请确保将端口可见性更改为公共: 单击“端口”标签 → 右键单击打开的端口(默认为3000)→ 端口可见性 → 公共。

VS Code Dev Containers

另一个相关选项是VS Code Dev Containers,它将使用Dev Containers扩展在本地VS Code中打开项目:

  1. 如果尚未安装,请安装Docker DesktopVS Code Dev Containers扩展

  2. 启动Docker Desktop(如果尚未安装,请安装)。

  3. 打开项目:

    在Dev Containers中打开

  4. 打开终端窗口

  5. 继续执行下一步骤,要么在本地运行MCP服务器,要么将其部署到Azure容器应用。

使用您的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": "输入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] 在实际场景中,您需要验证令牌并使用更安全的身份验证方法。这只是用于测试目的的演示令牌。了解更多关于如何保护您的服务器的信息这里

选项2 - 手动添加MCP服务器到VS Code

  1. 从命令面板添加MCP服务器,并添加运行服务器的HTTP端点的URL:

对于本地开发,URL将是:

http://localhost:3000/mcp

对于Azure容器应用,URL将是:

https://<env-name>.<container-id>.<region>.azurecontainerapps.io/mcp
  1. 选择**HTTP(HTTP或服务器发送事件)**作为要添加的MCP服务器类型。
  2. 输入您的运行HTTP端点的URL,包括结尾的/mcp路径。
  3. 输入服务器ID。(这可以是您想要的任何名称)
  4. 选择您是否要在用户设置中运行(对您所有应用都可用)或在工作区设置中运行(仅对此应用可用)。
  5. 在Copilot聊天代理模式下输入提示以触发工具,例如,选择一些代码并输入此提示
我需要给Dan发一封电子邮件,请把它添加到我的待办事项列表中。
  1. 当提示运行工具时,通过点击继续来同意,
  2. 完成后,在终端窗口中按Ctrl+C停止func.exe主机进程,并从命令面板中列出MCP服务器以停止本地服务器。

选项3 - MCP Inspector

  1. 在新的终端窗口中,安装并运行MCP Inspector
npm run inspect
  1. CTRL点击以从终端显示的URL加载MCP Inspector Web应用(例如http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=xyz)
  2. 设置传输类型为可流式传输HTTP
  3. 添加认证头:Authorization和Bearer令牌,该令牌是npm run generate-token命令创建的.env文件中的"JWT_TOKEN"的值。
  4. 设置URL为您的运行服务器的HTTP端点并连接:
# 对于本地开发,使用:
http://localhost:3000/mcp

# 或使用Azure容器应用的URL:
https://<env-name>.<container-id>.<region>.azurecontainerapps.io/mcp
  1. 列出工具。点击一个工具并运行工具。

alt

下一步

加入社区

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