使用说明
OmniSharp MCP服务器
一个模型上下文协议(MCP)服务器,通过封装OmniSharp语言服务器为Claude Code CLI提供C#语言智能。
它的作用
此MCP服务器为Claude Code提供了完整的C#IDE功能:
- 查找符号 -按名称搜索类、方法、属性
- 转到定义 -跳转到定义符号的位置
- 查找引用 -查找代码库中符号的所有用法
- 查找实现 -查找实现接口的类
- 获取类型信息 -获取类型信息和文档
- 获取诊断 -获取编译器错误和警告
- 代码补全 -获取自动完成建议
- 签名帮助 -获取方法参数提示
- 重命名预览 -预览重命名会改变什么
- 已分解的源代码 -视图已反编译。NET框架代码
先决条件
- .NET SDK 9.0+ 安装
- Claude 代码命令行工具 安装
- C#解决方案文件(
.sln)
安装
1.克隆和构建
git clone https://github.com/your-repo/omnisharp-mcp.git
cd omnisharp-mcp
dotnet publish src/OmniSharpMCP/OmniSharpMCP.csproj -c Release -o publish
2.配置克劳德代码
创建MCP服务器并将其添加到您的Claude Code配置中。
每个项目需要什么
A.创建 .mcp.json 在项目根目录中:
{
"mcpServers": {
"csharp": {
"type": "stdio",
"command": "dotnet",
"args": ["/path/to/omnisharp-mcp/publish/OmniSharpMCP.dll"],
"env": {
"OMNISHARP_SOLUTION": "/path/to/your/project.sln"
}
}
}
}
B.编辑.claude/mcp.json文件的args和env值。
我项目中编辑的mcp.json文件示例:
{
"mcpServers": {
"csharp": {
"type": "stdio",
"command": "dotnet",
"args": ["/Users/omersomekhbeachbum/dev/omnisharp-mcp/publish/OmniSharpMCP.dll"],
"env": {
"OMNISHARP_SOLUTION": "/Users/omersomekhbeachbum/dev/rummystars-client/rummystars-client.sln"
}
}
}
}
3.启用MCP服务器
创建(如果尚未创建)和编辑 ~/.claude/settings.local.json:
{
"enabledMcpjsonServers": ["csharp"],
"enableAllProjectMcpServers": true
}
4.重新启动克劳德代码
只要所有claude实例都关闭,mcp就可以启动。
再次启动claude:
claude
验证服务器是否已连接:
/mcp
你应该看看 csharp 在已连接的服务器列表中。
允许claude使用omnisharp mcp工具
这是开箱即用的!这里不需要额外的配置。 每当claude实例运行时,他都有所有的工具,你不需要为他指定要使用的工具。根据提示,claude实例将决定哪些工具最适合他,以获得想要的结果。
首次运行
首次运行时,MCP服务器将:
- 立即启动(以便Claude Code可以连接)
- 下载OmniSharp HTTP服务器(约50MB)至
~/.omnisharp-mcp/omnisharp/ - 启动OmniSharp并在后台加载您的解决方案
注: OmniSharp加载您的解决方案时,第一次启动需要2-3分钟。在此期间,工具将返回错误。如果OmniSharp已经在运行,后续的初创公司会更快。
预热OmniSharp(可选)
为了避免等待OmniSharp加载,您可以预先启动它:
./warmup-omnisharp.sh
此脚本:
- 启动OmniSharp(如果尚未运行)
- 等待满载
- 使其保持运行,以实现即时工具可用性
macOS登录时自动启动
创建 ~/Library/LaunchAgents/com.omnisharp.mcp.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.omnisharp.mcp</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/share/dotnet/dotnet</string>
<string>/Users/YOUR_USERNAME/.omnisharp-mcp/omnisharp/OmniSharp.dll</string>
<string>-s</string>
<string>/path/to/your/project.sln</string>
<string>-p</string>
<string>2050</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>DOTNET_ROLL_FORWARD</key>
<string>LatestMajor</string>
</dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/omnisharp.log</string>
<key>StandardErrorPath</key>
<string>/tmp/omnisharp.log</string>
</dict>
</plist>
加载它:
launchctl load ~/Library/LaunchAgents/com.omnisharp.mcp.plist
可用工具
连接后,Claude Code可以访问这些工具:
| 工具 | 说明 |
|---|---|
find_symbols |
按名称模式搜索符号 |
go_to_definition |
导航到符号定义 |
find_references |
查找对某个符号的所有引用 |
find_implementations |
查找接口实现 |
get_type_info |
获取类型和文档信息 |
get_diagnostics |
获取文件的编译器错误/警告 |
get_completions |
获取代码完成建议 |
get_signature_help |
获取方法签名帮助 |
get_file_members |
获取文件的大纲 |
get_workspace_info |
获取解决方案/项目信息 |
preview_rename |
预览重命名更改 |
get_decompiled_source |
获取反编译的元数据源 |
建筑
Claude Code CLI
|
| (stdio - JSON-RPC)
v
OmniSharp MCP Server (this project)
|
| (HTTP - REST API)
v
OmniSharp HTTP Server (port 2050)
|
| (Roslyn)
v
Your C# Solution
MCP服务器充当网桥:
- 通过stdio接收Claude Code的工具调用
- 将它们转换为对OmniSharp的HTTP请求
- 将格式化的响应返回给Claude
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
OMNISHARP_SOLUTION |
通往您的道路 .sln 文件 |
必填 |
OMNISHARP_PORT |
OmniSharp HTTP端口 | 2050 |
OMNISHARP_PATH |
自定义OmniSharp DLL路径 | 自动下载 |
命令行参数
dotnet OmniSharpMCP.dll --solution /path/to/solution.sln --port 2050
故障排除
MCP服务器连接失败
- 检查
/mcp在Claude Code中查看服务器状态 - 验证中的路径
mcp.json是正确的 - 确保
settings.local.json有"csharp"在enabledMcpjsonServers
工具返回错误
OmniSharp可能仍在加载。检查状态:
curl -X POST http://localhost:2050/checkreadystatus -d '{}'
如果它回来了 {"Ready":false},等待OmniSharp完成加载。
OmniSharp无法启动
检查日志:
tail -f /tmp/omnisharp.log
常见问题:
- 未找到解决方案文件
- 未安装.NET SDK
- 2050港已在使用中
符号搜索返回空
OmniSharp需要时间进行索引。大型解决方案(如Unity项目)可能需要2-3分钟。
重置OmniSharp
# Kill existing processes
pkill -f "omnisharp/OmniSharp.dll"
# Delete downloaded OmniSharp (will re-download on next start)
rm -rf ~/.omnisharp-mcp/omnisharp
发展
从源头构建
cd omnisharp-mcp
dotnet build src/OmniSharpMCP/OmniSharpMCP.csproj
本地运行
OMNISHARP_SOLUTION="/path/to/solution.sln" dotnet run --project src/OmniSharpMCP/OmniSharpMCP.csproj
直接测试OmniSharp
# Find symbols
curl -X POST http://localhost:2050/findsymbols \
-H "Content-Type: application/json" \
-d '{"Filter": "MyClass"}'
# Check ready status
curl -X POST http://localhost:2050/checkreadystatus -d '{}'
许可证
麻省理工学院
