模型上下文协议服务器

一个基于.NET实现的模型上下文协议服务器,提供API允许AI模型在推理过程中请求额外上下文,支持OAuth OBO认证和Azure资源管理工具。

  • by anthony-c-martin
  • Bicep
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 anthony-c-martin/remote-mcp-dotnet-oauth

使用说明

模型上下文协议(MCP)服务器。NET实现

此项目包含一个。NET web应用程序实现模型上下文协议(MCP)服务器。该应用程序旨在部署到Azure应用程序服务。

该项目使用OAuth OBO,它允许用户通过MCP进行身份验证,然后使MCP能够代表用户访问下游API。在此示例中,它已被授予访问Azure资源管理器API的权限。

MCP服务器提供遵循模型上下文协议规范的API,允许AI模型在推理期间请求附加上下文。

主要特点

  • 在C#中完整实现MCP协议。NET使用 MCP csharp sdk
  • Azure应用服务集成
  • 自定义工具支持
  • 支持OAUth OBO,使服务器能够在用户上下文中访问经过身份验证的下游API。

项目结构

  • src/ -包含主要的C#项目文件
    • Program.cs -MCP服务器的入口点
    • Tools/ -包含模型可以通过MCP协议使用的自定义工具
      • AzureResourceManagerTools.cs -用于执行基本Azure资源管理器操作的工具
  • infra/ -使用二头肌将Azure基础架构作为代码包含在内
    • main.bicep -主要基础设施定义
    • resources.bicep -资源定义
    • main.bicepparam -部署参数

先决条件

地方发展

在本地运行服务器

  1. 克隆此存储库
  2. 导航到项目目录
    cd src
    
  3. 安装所需的软件包
    dotnet restore
    
  4. 运行项目:
    dotnet run
    
  5. MCP服务器将在 http://localhost:5000
  6. 完成后,在终端中按Ctrl+C停止应用程序

测试可用工具

服务器提供以下工具:

  • AzureResource管理器:
    • get_subscriptions -获取Azure订阅列表
    • get_resource_groups -获取特定Azure订阅中的Azure资源组列表

连接到本地MCP服务器

使用VS代码-复制代理模式

  1. 添加MCP服务器 从命令面板中,将URL添加到正在运行的服务器的HTTP端点:
    http://localhost:5000
    
  2. 列出MCP服务器 从命令面板启动服务器
  3. 在Copilot聊天代理模式下,输入提示以触发工具:
    Fetch my Azure subscriptions
    
  4. 当系统提示运行该工具时,点击同意 继续

使用MCP检查器

  1. 在一个 新终端窗口,安装并运行MCP检查器:
    npx @modelcontextprotocol/inspector
    
  2. 按住CTRL键并单击应用程序显示的URL(例如。http://localhost:5173/#resources)
  3. 将运输类型设置为 HTTP
  4. 将URL设置为正在运行的服务器的HTTP端点,然后 连接:
    http://localhost:5000
    
  5. 列出工具,单击工具,然后 运行工具

部署到Azure

  1. 登录到Azure:

    azd auth login
    
  2. 初始化您的环境:

    azd env new
    
  3. 部署应用程序:

    azd up
    
  4. 授予管理员同意(Entra门户用户界面)-仅限首次:

    • 在应用程序注册中打开Entra应用程序
    • 选择“管理”->“API权限”,然后按“授予管理员同意”

    这将:

    • 建造。net应用
    • 提供在二头肌模板中定义的Azure资源
    • 将应用程序部署到Azure应用服务

连接到远程MCP服务器

使用MCP检查器

使用web应用程序的URL:

https://<webappname>.azurewebsites.net

使用VS代码-GitHub Copilot

遵循与本地应用程序相同的过程,但使用您的应用程序服务URL:

https://<webappname>.azurewebsites.net

清理资源

使用完应用程序和相关资源后,您可以使用此命令从Azure中删除功能应用程序及其相关资源,从而避免产生任何进一步的成本:

azd down