ContextManager MCP server
2026년 11월 2일 커밋Roslyn을 사용하여 전체 파일을 읽지 않고도 솔루션을 탐색할 수 있도록 AI 코딩 에이전트에게 구조적 C# 컨텍스트와 의존성 그래프를 제공합니다.
다른 이름 nushey/ContextManager
- 스타
- 1
- Tools
- 7
- 다운로드, 30일
- —
- 최신 버전
- 1.3.5
- 마지막 커밋
- 2026년 11월 2일
- 라이선스
- MIT
ContextManager MCP란?
ContextManager은(는) MCP server입니다. Roslyn을 사용하여 전체 파일을 읽지 않고도 솔루션을 탐색할 수 있도록 AI 코딩 에이전트에게 구조적 C# 컨텍스트와 의존성 그래프를 제공합니다. 7개 도구를 제공합니다. 예: inspect_file, inspect_context, project_scan.
프로젝트 README에서 생성된 요약
ContextManager MCP server 정보
ContextManager는 AI 코딩 에이전트가 모든 코드 라인을 읽지 않고도 복잡한 C# 솔루션을 탐색할 수 있게 해줍니다. 이 MCP server는 Roslyn을 사용하여 구조적 데이터를 분석함으로써, 에이전트가 컴팩트한 JSON 계약을 통해 타입, public member, 생성자 의존성을 이해할 수 있도록 지원합니다. 이러한 방식은 전체 파일을 가져올 필요를 없애 컨텍스트 윈도우 공간과 처리 시간을 절약합니다.
개발자는 Claude Desktop, Cursor, Claude Code와 같은 클라이언트와 함께 이 server를 로컬에서 사용할 수 있습니다. 이 server는 .sln 파일의 지식 그래프를 구축하여 작동하며, 이 그래프는 솔루션 옆의 로컬 디렉토리에 저장됩니다. 이 그래프를 통해 이름으로 메서드를 찾는 graph_search나 변경 사항이 시스템의 다른 부분에 미치는 영향을 확인하는 graph_impact_analysis와 같은 도구로 고급 탐색이 가능합니다. 대부분의 기능은 모든 플랫폼에서 작동하지만, .NET Framework 4.8 솔루션을 스캔하려면 Windows와 Visual Studio Build Tools가 필요합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
ContextManager MCP 도구 7
README에서 감지됨inspect_fileinspect_contextproject_scangraph_searchgraph_get_dependenciesgraph_impact_analysisgraph_path_find
| inspect_file | — | |
| inspect_context | — | |
| project_scan | — | |
| graph_search | — | |
| graph_get_dependencies | — | |
| graph_impact_analysis | — | |
| graph_path_find | — |
자동 검사
2026년 11월 13일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능nushey/contextmanager is public and reachablegithub.com/nushey/contextmanager ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-02github.com/nushey/contextmanager ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음7 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기ContextManager is an MCP server that saves an agent from reading whole C# files. It does two things:
- Inspects files. It turns a
.csfile into a JSON contract with its types, public members, constructor dependencies, base types, interfaces, and events. Method bodies, private members, and XML docs are left out; each method carries its line range so the agent can read only the body it needs. - Maps the solution. It builds a knowledge graph of a
.slnso the agent can find which files matter, and how risky a change is, before opening any of them.
Install
You need the .NET 10 SDK or later.
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
The installer installs or updates the ContextManager .NET global tool and runs
context-manager setup, a wizard that adds the server to the MCP clients you pick (Claude Code,
Claude Desktop, Codex, Antigravity, Kilo Code, Cursor, Devin, Opencode).
To install by hand instead:
dotnet tool install -g ContextManager
claude mcp add --scope user context-manager -- context-manager # Claude Code
For other clients, flags, config-file paths, and troubleshooting, see INSTALL.md.
project_scanon.NET Framework 4.8solutions only works on Windows and needs Visual Studio Build Tools with the .NET desktop build tools workload. Everything else works on any platform.
Tools
| Tool | What it returns |
|---|---|
inspect_file |
The structural contract of one .cs file. |
inspect_context |
A compact view of up to 15 .cs files plus the references between them; unresolved lists the user types missing from the set. |
project_scan |
Builds or refreshes the solution's graph and reports its coverage. |
graph_search |
Files and methods matching possible names, grouped by file with namespaces and method node IDs. |
graph_get_dependencies |
The neighbors of a node, rolled up to their declaring type, with edge counts per kind. |
graph_impact_analysis |
Every type that depends on a node, directly or transitively, with its file. |
graph_path_find |
The shortest dependency path between two nodes. |
Graph tools take the path of the .sln and keep the graph up to date on their own: before
answering, they re-extract only what changed since the last scan. The graph is saved in
.context-manager/<solution name>.graph.json next to the .sln, so every session on that solution
shares it.
How to use it
Start from a file
When the user mentions a file, start there:
inspect_file(path): read the type and build its node ID asNamespace.TypeName.graph_get_dependencies(solutionPath, nodeId): find the neighbors worth reading.inspect_fileon those neighbors only.graph_impact_analysis(solutionPath, nodeId): check the blast radius before changing anything.
A short impact list means the change is contained. A long one means the type's public contract is load-bearing and should be preserved; it does not mean the agent has to read every file in it.
Node IDs use Roslyn's fully qualified format, for example MyApp.Orders.OrderService or
MyApp.Orders.OrderService.GetOrderAsync(System.Guid). Pass the IDs that the graph tools return
as they are.
// 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"
}
}
Find code by name
When you know roughly what something is called but not which file it is in, and you have no node ID,
call graph_search with several candidate names:
{"solutionPath":"/abs/path/MyApp.sln","queries":["Login","Authentication","SignIn"]}
What it searches. A term matches when it appears anywhere in a file name (without .cs) or a
method name (without its signature). Matching is ordinal and ignores case, and any one term is enough.
It searches every method already in the graph, private ones included, and finds constructors under
their type name. It does not search directory paths, parameter types, method bodies, or namespaces.
Valid terms. Terms are trimmed and must have at least 3 characters. An empty list, or a single
term that is too short, rejects the whole query before the graph is synchronized, with code
invalid_query and message
Provide at least one query term; each term must be at least 3 characters long after trimming whitespace.
Order and limit. Exact matches come first, then partial ones; within each group, results keep
the order in which they appear in the graph. A name that matches several terms does not rank higher.
The search keeps at most 50 matches, and the limit counts matches, not files: each matching file
counts once and each matching method ID counts once, even when several terms match it. There is no
pagination. When truncated is true, at least one match was left out; use more specific names to
narrow the search.
{"results":[{"file":"/abs/path/Auth/Session.cs","namespaces":["MyApp.Auth"],"fileMatched":false,"methods":[{"name":"Login","nodeId":"MyApp.Auth.Session.Login()"}]}],"truncated":false}
Response. The response is one line of compact JSON, grouped by file. Every file entry has file,
namespaces, fileMatched, and methods, and empty arrays stay as []. namespaces lists every
namespace in the file. fileMatched is true when the file's own name is one of the matches kept
within the limit. A file can also appear only because one of its methods was kept, even if its name
matched too but fell outside the limit. With no matches, the response is
{"results":[],"truncated":false}.
From there, call inspect_file on a returned file, or pass a method's nodeId unchanged to the
other graph tools. A graph saved by an older version is re-extracted once to add names and
namespaces; later queries reuse the updated graph while nothing changes.
To make your agent follow these workflows, copy docs/AGENTS-template.md
into the AGENTS.md of your project.
FAQ
Is it a background service? No. It is an MCP stdio server: the client starts it when a session opens and stops it when the session ends.
What state does it keep? Only the graph files written next to each .sln. The inspection tools
read the files you pass and keep nothing.
Does it read my whole solution? Only the graph tools do. inspect_file and inspect_context
read just the files you give them.
Build and test
dotnet build
dotnet test
License
MIT © nushey
ContextManager MCP 질문
ContextManager MCP는 어떤 도구를 제공하나요?
7개 도구를 제공합니다. 예: inspect_file, inspect_context, project_scan, graph_search, graph_get_dependencies.
ContextManager는 백그라운드 서비스인가요?
아니요, 세션이 시작될 때 클라이언트가 실행하고 세션이 종료되면 중지되는 MCP stdio server입니다.
서버가 제 솔루션 전체를 읽나요?
그래프 도구만 솔루션 전체를 읽으며, 검사 도구는 사용자가 제공한 특정 파일만 읽습니다.
서버가 유지하는 상태는 어떤 종류인가요?
각 .sln 파일 옆에 작성되는 그래프 파일만 유지합니다.