Skip to content

apkd/RoslynQuery

Repository files navigation

              `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' 

MIT License Test status badge GitHub commit activity GitHub last commit

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.

Installation

Roslyn compiler/workspace libraries are bundled with the app, but real .sln, .slnx, and .csproj loading depends on the machine's installed MSBuild/.NET SDK through Microsoft.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:

stdio | Windows (Native)
[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
stdio | Windows (WSL)
[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
stdio | Linux
[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 = true
Claude Code

Claude Code adds MCP servers with claude mcp add.

stdio | Windows (Native)
claude mcp add --transport stdio roslyn -- C:\src\RoslynQuery\RoslynQuery.Server\publish\win-x64\roslynquery.exe
stdio | Windows (WSL)
claude mcp add --transport stdio roslyn -- /mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe
stdio | Linux
claude mcp add --transport stdio roslyn -- /home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery
Cursor

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.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe"
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe"
    }
  }
}
stdio | Linux
{
  "mcpServers": {
    "roslyn": {
      "command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery"
    }
  }
}
Windsurf

Windsurf stores MCP servers in ~/.codeium/windsurf/mcp_config.json.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": []
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": []
    }
  }
}
stdio | Linux
{
  "mcpServers": {
    "roslyn": {
      "command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
      "args": []
    }
  }
}
Cline

Cline stores MCP settings in cline_mcp_settings.json.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": [],
      "disabled": false
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": [],
      "disabled": false
    }
  }
}
stdio | Linux
{
  "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:

stdio | Windows (Native)
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\RoslynQuery
stdio | Windows (WSL)
name: 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/RoslynQuery
stdio | Linux
name: 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/RoslynQuery
Gemini CLI

Gemini CLI stores MCP configuration in ~/.gemini/settings.json for user scope or .gemini/settings.json for project scope.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "cwd": "C:\\src\\RoslynQuery"
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "cwd": "/mnt/c/src/RoslynQuery"
    }
  }
}
stdio | Linux
{
  "mcpServers": {
    "roslyn": {
      "command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
      "cwd": "/home/you/src/RoslynQuery"
    }
  }
}

Equivalent CLI commands:

Local stdio
gemini mcp add roslyn /home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery
GitHub Copilot CLI

GitHub Copilot CLI stores MCP servers in ~/.copilot/mcp-config.json.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "type": "local",
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": [],
      "env": {},
      "tools": ["*"]
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "type": "local",
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": [],
      "env": {},
      "tools": ["*"]
    }
  }
}
stdio | Linux
{
  "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.

stdio | Windows (Native)
{
  "servers": {
    "roslyn": {
      "type": "stdio",
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": []
    }
  }
}
stdio | Windows (WSL)
{
  "servers": {
    "roslyn": {
      "type": "stdio",
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": []
    }
  }
}
stdio | Linux
{
  "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.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": [],
      "cwd": "C:\\src\\RoslynQuery"
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": [],
      "cwd": "/mnt/c/src/RoslynQuery"
    }
  }
}
stdio | Linux
{
  "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.

stdio | Windows (Native)
{
  "context_servers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": []
    }
  }
}
stdio | Windows (WSL)
{
  "context_servers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": []
    }
  }
}
stdio | Linux
{
  "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.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": [],
      "cwd": "C:\\src\\RoslynQuery",
      "disabled": false
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": [],
      "cwd": "/mnt/c/src/RoslynQuery",
      "disabled": false
    }
  }
}
stdio | Linux
{
  "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.

stdio | Windows (Native)
{
  "mcpServers": {
    "roslyn": {
      "command": "C:\\src\\RoslynQuery\\RoslynQuery.Server\\publish\\win-x64\\roslynquery.exe",
      "args": []
    }
  }
}
stdio | Windows (WSL)
{
  "mcpServers": {
    "roslyn": {
      "command": "/mnt/c/src/RoslynQuery/RoslynQuery.Server/publish/win-x64/roslynquery.exe",
      "args": []
    }
  }
}
stdio | Linux
{
  "mcpServers": {
    "roslyn": {
      "command": "/home/you/src/RoslynQuery/RoslynQuery.Server/publish/linux-x64/roslynquery",
      "args": []
    }
  }
}

Implemented Tools

Workspace lifecycle

  • 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.

Search and analysis

  • 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.

Agent guidance

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`.

About

An MCP server that exposes IDE-like semantic queries over a C# workspace.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages