NuGet依赖分析服务

一个C#应用程序,作为模型上下文协议(MCP)服务器,为大型语言模型(LLM)或其他开发工具提供.NET项目依赖(NuGet包)的上下文信息。

  • by plucked
  • C#
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 plucked/nuget-context-server

使用说明

NuGet上下文MCP服务器

一个C#应用程序,作为 模型上下文协议(MCP) 服务器,提供有关的上下文。NET项目对大型语言模型(LLM)或其他开发工具的依赖关系(NuGet包)。

概述

此服务器进行分析。NET解决方案(.sln)和项目(.csproj)提取NuGet包信息。它与NuGet提要交互以获取包详细信息、版本和元数据,使用SQLite在本地缓存结果以提高性能。这些功能通过模型上下文协议(MCP)作为工具公开,允许AI代理或其他工具以编程方式查询NuGet信息。

特性

服务器通过MCP公开以下工具:

  • AnalyzeProjectDependencies:分析a .sln 或 .csproj 文件以查找NuGet依赖项及其最新可用版本。
  • SearchNuGetPackages:在配置的NuGet提要中搜索与搜索词匹配的包,包括分页选项和预发布版本。
  • GetNuGetPackageVersions:列出特定包ID的所有可用版本(稳定版或预发布版)。
  • GetLatestNuGetPackageVersion:获取特定包ID的最新稳定或预发布版本字符串。
  • GetNuGetPackageDetails:检索特定包ID和可选版本的详细元数据(描述、作者、URL等)。

先决条件

  • .NET 9 SDK (或更高版本的兼容版本)

安装和建造

  1. 克隆存储库:
    git clone https://github.com/plucked/nuget-context-server
    cd nuget-context-server
    
  2. 构建服务器:
    dotnet build --configuration Release
    
    主可执行文件将位于 src/NuGetContextMcpServer.Host/bin/Release/net9.0/ 目录(根据实际构建输出调整路径)。

测试

此项目使用 单元测试 用于单元和集成测试 莫克 用于模拟单元测试中的依赖关系。

要运行所有测试,请导航到存储库根目录并执行:

dotnet test

注: 运行集成测试(NuGetContextMcpServer.Integration.Tests)要求 码头工人 因为它们可能使用测试容器。您可以从以下网址下载Docker Desktop 这里.

测试项目位于 tests/ 目录:

  • NuGetContextMcpServer.Application.Tests:应用层服务的单元测试。
  • NuGetContextMcpServer.Infrastructure.Tests:基础设施层组件的单元测试(例如缓存、解析)。
  • NuGetContextMcpServer.Integration.Tests:可能与实际文件系统或潜在外部资源交互的集成测试(尽管通常被模拟或使用本地测试资产)。

使用和配置

此服务器设计为由MCP客户端应用程序(如IDE扩展)运行。客户端负责启动服务器进程并与之通信,通常通过标准输入/输出(stdio)。

配置:

服务器使用 appsettings.json (以及特定于环境的覆盖,如 appsettings.Development.json)位于 src/NuGetContextMcpServer.Host 配置目录:

  • NuGetSettings:
    • QueryFeedUrl:NuGet v3提要索引的URL(默认为 https://api.nuget.org/v3/index.json).
    • Username (可选):经过身份验证的提要的用户名。
    • PasswordOrPat (可选):用于经过身份验证的提要的密码或个人访问令牌(PAT)。
  • CacheSettings:
    • DatabasePath:SQLite缓存文件的路径(默认为 nuget_cache.db 在工作目录中)。
    • DefaultExpirationMinutes:默认缓存持续时间(分钟)(默认值为60)。
  • 登录中: 通过中的Serilog设置进行配置 appsettings.json默认情况下,日志会写入文件。

MCP客户端配置示例(使用stdio):

MCP客户端通常需要类似于此的配置(语法可能因客户端而异):

{
  "mcpServers": {
    "nuget-context": {
      "command": "dotnet",
      "args": [
        "watch",
        "run",
        "--non-interactive",
        "--project",
        "src/NuGetContextMcpServer.Host/NuGetContextMcpServer.Host.csproj",
        "--",
        "--transport", "stdio"
      ],
      "cwd": ".",
      "disabled": false
    }
  }
}
  • command:要运行的可执行文件(dotnet).
  • args:传递给命令的参数。用途 dotnet watch run 以便开发人员在文件更改时自动重启服务器。这 --transport stdio 参数告诉服务器使用标准I/O进行MCP通信。对于生产或非手表场景,请更换 "watch" 随着 "run" 并删除 "--non-interactive".
  • cwd:运行命令的工作目录(通常是存储库根目录)。

建筑

服务器使用基于构建的分层架构。NET通用主机:

  • 主持人: 管理应用程序生命周期、依赖注入(DI)、配置、日志记录和MCP通信设置。
  • 应用: 定义服务接口,并包含核心应用程序逻辑和MCP工具定义。
  • 基础设施: 提供以下内容的具体实现:
    • NuGet提要交互(NuGet.Protocol).
    • 项目/解决方案解析(Microsoft.Build).
    • 缓存(Microsoft.Data.Sqlite).

贡献

欢迎投稿!请参阅 贡献指南 了解更多详情。

许可证

该项目根据 MIT许可证。请参阅 许可证 文件以获取详细信息。