返回市场
NuGet上下文服务器

NuGet上下文服务器

作者:plucked3 星标更新:2025-05-21

项目介绍

NuGet 上下文 MCP 服务器

License: MIT smithery 徽章 .NET 测试

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

概述

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

功能

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

  • AnalyzeProjectDependencies:分析 .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/ 目录中(根据实际构建输出调整路径)。

测试

该项目使用 NUnit 进行单元和集成测试,并使用 Moq 在单元测试中模拟依赖关系。

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

dotnet test

注意: 运行集成测试(NuGetContextMcpServer.Integration.Tests)需要安装并运行 Docker,因为它们可能会利用测试容器。您可以从 这里 下载 Docker Desktop。

测试项目位于 tests/ 目录中:

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

使用与配置

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

配置:

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

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

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

一个 MCP 客户端通常需要类似以下配置(语法可能因客户端而异):

{
  "mcpServers": {
    "nuget-context": {
      "command": "dotnet",
      "args": [
        "watch",
        "run",
        "--non-interactive",
        "--project",
        "src/NuGetContextMcpServer.Host/NuGetContextMc