`OooOOo. o .oOOOo.
o `o O .O o.
O O o o O
o .O O O o
OOooOO' .oOo. .oOo o O o 'OoOo. o O O o .oOo. `OoOo. O o
o o O o `Ooo. O o O o O O Oo o o O OooO' o o O
O O o O O o O o O o `o O' O o O O O o
O o `OoO' `OoO' Oo `OoOO o O `OoooO Oo `OoO'o `OoO' o `OoOO
o o
OoO' OoO'
A local MCP server that exposes IDE-like semantic queries over a C# workspace.
Coding agents these days are remarkably powerful, and often the best way to help them is to stay out of their way. RoslynQuery implements a small set of versatile commands that fill in the gaps in the text-oriented workflow without polluting the context.
Roslyn compiler/workspace libraries are bundled with the app, but real
.sln,.slnx, and.csprojloading depends on the machine's installed MSBuild/.NET SDK throughMicrosoft.Build.Locator.
You can either:
- Download the server executable from the releases page, or...
- Build it locally with
dotnet publish.
Now point your editor at the MCP executable:
Codex
For a basic stdio setup, add this to config.toml:
[mcp_servers.roslyn]
command = "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe"
cwd = "C:\\src\\RoslynQuery"
disabled_tools = []
tool_timeout_sec = 1800
enabled = true[mcp_servers.roslyn]
command = "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe"
cwd = "/mnt/c/src/RoslynQuery"
disabled_tools = []
tool_timeout_sec = 1800
enabled = true[mcp_servers.roslyn]
command = "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery"
cwd = "/home/you/src/RoslynQuery"
disabled_tools = []
tool_timeout_sec = 1800
enabled = trueClaude Code
Claude Code adds MCP servers with claude mcp add.
claude mcp add --transport stdio roslyn -- C:\src\RoslynQuery\RoslynQuery.Server\publish\win-x64\roslynquery.execlaude mcp add --transport stdio roslyn -- /mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.execlaude mcp add --transport stdio roslyn -- /home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynqueryCursor
Cursor uses mcp.json with a top-level mcpServers object. You can put it in ~/.cursor/mcp.json for a global setup or .cursor/mcp.json for a project-local setup.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery"
}
}
}Windsurf
Windsurf stores MCP servers in ~/.codeium/windsurf/mcp_config.json.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": []
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": []
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": []
}
}
}Cline
Cline stores MCP settings in cline_mcp_settings.json.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": [],
"disabled": false
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": [],
"disabled": false
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": [],
"disabled": false
}
}
}Continue
Continue uses YAML, typically as standalone files under .continue/mcpServers/
Create .continue/mcpServers/roslyn.yaml:
name: RoslynQuery
version: 0.0.1
schema: v1
mcpServers:
- name: roslyn
type: stdio
command: C:\src\RoslynQuery\RoslynQuery.Server\publish\win-x64\roslynquery.exe
cwd: C:\src\RoslynQueryname: RoslynQuery
version: 0.0.1
schema: v1
mcpServers:
- name: roslyn
type: stdio
command: /mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe
cwd: /mnt/c/src/RoslynQueryname: RoslynQuery
version: 0.0.1
schema: v1
mcpServers:
- name: roslyn
type: stdio
command: /home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery
cwd: /home/you/src/RoslynQueryGemini CLI
Gemini CLI stores MCP configuration in ~/.gemini/settings.json for user scope or .gemini/settings.json for project scope.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"cwd": "C:\\src\\RoslynQuery"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"cwd": "/mnt/c/src/RoslynQuery"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"cwd": "/home/you/src/RoslynQuery"
}
}
}Equivalent CLI commands:
gemini mcp add roslyn /home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynqueryGitHub Copilot CLI
GitHub Copilot CLI stores MCP servers in ~/.copilot/mcp-config.json.
{
"mcpServers": {
"roslyn": {
"type": "local",
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": [],
"env": {},
"tools": ["*"]
}
}
}{
"mcpServers": {
"roslyn": {
"type": "local",
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": [],
"env": {},
"tools": ["*"]
}
}
}{
"mcpServers": {
"roslyn": {
"type": "local",
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": [],
"env": {},
"tools": ["*"]
}
}
}Interactive alternative:
/mcp add
VS Code / GitHub Copilot Chat
VS Code uses mcp.json with a top-level servers object. For workspace scope, put it in .vscode/mcp.json; for user scope, open the user MCP configuration from the Command Palette.
{
"servers": {
"roslyn": {
"type": "stdio",
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": []
}
}
}{
"servers": {
"roslyn": {
"type": "stdio",
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": []
}
}
}{
"servers": {
"roslyn": {
"type": "stdio",
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": []
}
}
}Antigravity
You can get to the config file from Manage MCP Servers → View raw config.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": [],
"cwd": "C:\\src\\RoslynQuery"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": [],
"cwd": "/mnt/c/src/RoslynQuery"
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": [],
"cwd": "/home/you/src/RoslynQuery"
}
}
}Zed
Zed uses context_servers in its settings. For project scope, put this in .zed/settings.json; for user scope, add it to your user settings.
{
"context_servers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": []
}
}
}{
"context_servers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": []
}
}
}{
"context_servers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": []
}
}
}Roo Code
Roo Code stores global MCP configuration in mcp_settings.json. For project-local setup, create .roo/mcp.json.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": [],
"cwd": "C:\\src\\RoslynQuery",
"disabled": false
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": [],
"cwd": "/mnt/c/src/RoslynQuery",
"disabled": false
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": [],
"cwd": "/home/you/src/RoslynQuery",
"disabled": false
}
}
}JetBrains IDEs / Junie
Junie in JetBrains IDEs and Junie CLI use the same MCP config file format. Use ~/.junie/mcp/mcp.json for user scope or .junie/mcp/mcp.json in the project root for project scope.
{
"mcpServers": {
"roslyn": {
"command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
"args": []
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
"args": []
}
}
}{
"mcpServers": {
"roslyn": {
"command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
"args": []
}
}
}-
load_workspace: Opens the solution/project for analysis. Accepts a directory path,.sln,.slnx, or.csproj. Calling it again with the same path reloads the workspace from disk. -
status: Lists loaded projects and prints compilation diagnostics.
-
describe_symbol: Returns a set of useful details for a symbol. -
list_type_members: Lists members of a type symbol, optionally including inherited members. -
find_usages: Finds source references to a resolved symbol across the loaded workspace. -
find_related_symbols: Finds related symbols such as base types, implemented interfaces, derived types, implementations, overrides, overridden members, and containing symbols. -
view_il: Displays a compact view of a method's compiled IL representation.
The tool descriptions themselves should be enough to get you started out-of-the-box. If you want to, you can also include something like this in your agent instructions:
When working with C# solutions, use the Roslyn MCP tools to search and inspect symbols.
Start with `load_workspace`.