mcpField
C
ContextManager

ContextManager

本地服务
github.com/nushey开发工具11 周前更新

关于 ContextManager

ContextManager 是面向处理 C# 解决方案的 AI 编码 Agent 的 Roslyn MCP 服务。它提供精简的文件结构和依赖图工具,帮助 Agent 定位代码并评估修改影响,无需通读整个文件。

主要功能

  1. 01将 C# 文件结构提取为 JSON
  2. 02为 .sln 构建依赖图
  3. 03按名称搜索文件和方法
  4. 04检查依赖关系与影响路径
  5. 05文件变更时刷新图数据

适用场景

  1. 01在 C# 解决方案中定位相关代码
  2. 02修改前检查类型结构
  3. 03评估代码变更的下游影响

MCP 相关

它以 MCP stdio 服务运行,向连接的客户端提供文件检查和解决方案依赖图工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetContextManager1.3.5

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ContextManager 徽标

ContextManager

由 Roslyn 驱动,为 AI 编码 Agent 提供结构化 C# 上下文。
先导航,再阅读。

NuGet 版本

安装 • 工具 • 使用方法 • 常见问题 • 完整安装指南


ContextManager 是一个 MCP 服务,可让 Agent 不必阅读整个 C# 文件。它有两项功能:

  • 检查文件。 它会将 .cs 文件转换为 JSON 契约,其中包含类型、公共成员、构造函数依赖项、基类型、接口和事件。方法体、私有成员和 XML 文档不会纳入其中;每个方法都附带行范围,Agent 可以据此只读取所需的方法体。
  • 映射解决方案。 它会为 .sln 构建知识图谱,让 Agent 在打开任何文件之前就能找到相关文件,并判断更改的风险。

安装

你需要 .NET 10 SDK 或更高版本。

macOS / Linux:

curl -fsSL https://raw.githubusercontent.com/nushey/ContextManager/main/scripts/install.sh | bash

Windows(PowerShell):

irm https://raw.githubusercontent.com/nushey/ContextManager/main/scripts/install.ps1 | iex

安装程序会安装或更新 ContextManager .NET 全局工具,并运行 context-manager setup。该向导会将服务添加到你选择的 MCP 客户端(Claude Code、Claude Desktop、Codex、Antigravity、Kilo Code、Cursor、Devin、Opencode)。

如需手动安装:

dotnet tool install -g ContextManager
claude mcp add --scope user context-manager -- context-manager   # Claude Code

有关其他客户端、标志、配置文件路径和故障排除,请参阅 INSTALL.md。

project_scan 仅在 Windows 上适用于 .NET Framework 4.8 解决方案,并且需要安装带有 .NET desktop build tools 工作负载的 Visual Studio Build Tools。其他所有功能均可在任何平台上使用。

工具

工具返回内容
inspect_file一个 .cs 文件的结构化契约。
inspect_context最多 15 个 .cs 文件的精简视图,以及它们之间的引用;unresolved 列出集合中缺失的用户类型。
project_scan构建或刷新解决方案的图谱,并报告其覆盖范围。
graph_search匹配可能名称的文件和方法,按文件分组,并包含命名空间和方法节点 ID。
graph_get_dependencies某个节点的相邻节点,按其声明类型汇总,并按边类型统计数量。
graph_impact_analysis直接或传递依赖某个节点的所有类型,以及它们所在的文件。
graph_path_find两个节点之间最短的依赖路径。

图谱工具接收 .sln 的路径,并会自行保持图谱最新:在回答之前,它们只会重新提取上次扫描后发生变化的内容。图谱保存在 .sln 同目录下的 .context-manager/<solution name>.graph.json 中,因此该解决方案的每个会话都会共享它。

使用方法

从文件开始

当用户提到某个文件时,从那里开始:

  1. inspect_file(path):读取类型,并将其节点 ID 构建为 Namespace.TypeName。
  2. graph_get_dependencies(solutionPath, nodeId):查找值得阅读的邻接节点。
  3. 仅对这些邻接节点调用 inspect_file。
  4. graph_impact_analysis(solutionPath, nodeId):在更改任何内容之前检查影响范围。

影响列表较短,说明更改范围有限。列表较长,说明该类型的公共契约至关重要,应予以保留;这并不意味着 Agent 必须阅读其中的每个文件。

节点 ID 使用 Roslyn 的完全限定格式,例如 MyApp.Orders.OrderService 或 MyApp.Orders.OrderService.GetOrderAsync(System.Guid)。按原样传递图工具返回的 ID。

// graph_impact_analysis("/abs/path/MyApp.sln", "MyApp.Orders.IOrderRepository")
{
  "affectedIds": ["MyApp.Orders.OrderService", "MyApp.Api.OrdersController"],
  "affectedFiles": {
    "MyApp.Orders.OrderService": "/abs/path/Orders/OrderService.cs",
    "MyApp.Api.OrdersController": "/abs/path/Api/OrdersController.cs"
  }
}
按名称查找代码

如果你大致知道某个内容的名称,但不知道它在哪个文件中,而且没有节点 ID,请使用多个候选名称调用 graph_search:

{"solutionPath":"/abs/path/MyApp.sln","queries":["Login","Authentication","SignIn"]}

搜索内容。 当某个词出现在文件名(不含 .cs)或方法名(不含签名)的任意位置时,即视为匹配。匹配区分序数,不区分大小写;任意一个词匹配即可。它会搜索图中已有的所有方法,包括私有方法,并按类型名称查找构造函数。它不会搜索目录路径、参数类型、方法体或命名空间。

有效词项。 词项会经过去除首尾空格处理,且长度必须至少为 3 个字符。空列表或仅含一个长度不足的词项时,整个查询会在同步图之前被拒绝,错误代码为 invalid_query,错误消息为 Provide at least one query term; each term must be at least 3 characters long after trimming whitespace.

顺序和限制。 完全匹配项排在前面,其次是部分匹配项;在每组内,结果保留它们在图中出现的顺序。名称匹配多个词项不会获得更高排名。搜索最多保留 50 个匹配项,限制按匹配项而非文件计算:每个匹配文件计为一个,每个匹配的方法 ID 也计为一个,即使它同时匹配多个词项。没有分页。当 truncated 为 true 时,表示至少有一个匹配项被省略;请使用更具体的名称缩小搜索范围。

{"results":[{"file":"/abs/path/Auth/Session.cs","namespaces":["MyApp.Auth"],"fileMatched":false,"methods":[{"name":"Login","nodeId":"MyApp.Auth.Session.Login()"}]}],"truncated":false}

响应。 响应为一行紧凑的 JSON,按文件分组。每个文件条目都包含 file、namespaces、fileMatched 和 methods,空数组仍显示为 []。namespaces 列出文件中的所有命名空间。当文件自身名称是限制范围内保留的匹配项之一时,fileMatched 为 true。即使文件名也匹配但未进入限制范围,只要其中某个方法被保留,该文件仍可能出现在结果中。没有匹配项时,响应为 {"results":[],"truncated":false}。

接下来,对返回的 file 调用 inspect_file,或将某个方法的 nodeId 原样传递给其他图工具。由旧版本保存的图会重新提取一次,以添加名称和命名空间;之后,只要内容没有变化,后续查询都会复用更新后的图。

要让你的 Agent 遵循这些工作流,请将 docs/AGENTS-template.md 复制到项目的 AGENTS.md 中。

常见问题

它是后台服务吗? 不是。它是一个 MCP stdio 服务:客户端会在会话开始时启动它,并在会话结束时停止它。

它会保留哪些状态? 只有写入每个 .sln 文件旁边的图文件。检查工具只读取你传入的文件,不会保留任何内容。

它会读取我的整个解决方案吗? 只有图工具会这样做。inspect_file 和 inspect_context 只读取你提供的文件。

构建和测试

dotnet build
dotnet test

许可证

MIT © nushey

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。