关于 ContextManager
ContextManager 是面向处理 C# 解决方案的 AI 编码 Agent 的 Roslyn MCP 服务。它提供精简的文件结构和依赖图工具,帮助 Agent 定位代码并评估修改影响,无需通读整个文件。
主要功能
- 01将 C# 文件结构提取为 JSON
- 02为 .sln 构建依赖图
- 03按名称搜索文件和方法
- 04检查依赖关系与影响路径
- 05文件变更时刷新图数据
适用场景
- 01在 C# 解决方案中定位相关代码
- 02修改前检查类型结构
- 03评估代码变更的下游影响
MCP 相关
它以 MCP stdio 服务运行,向连接的客户端提供文件检查和解决方案依赖图工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ContextManager
由 Roslyn 驱动,为 AI 编码 Agent 提供结构化 C# 上下文。
先导航,再阅读。
安装 • 工具 • 使用方法 • 常见问题 • 完整安装指南
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 中,因此该解决方案的每个会话都会共享它。
使用方法
从文件开始
当用户提到某个文件时,从那里开始:
inspect_file(path):读取类型,并将其节点 ID 构建为Namespace.TypeName。graph_get_dependencies(solutionPath, nodeId):查找值得阅读的邻接节点。- 仅对这些邻接节点调用
inspect_file。 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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。