C#语言智能服务器

OmniSharp MCP服务器为Claude Code CLI提供C#语言智能支持,实现完整的IDE功能。

  • by omer2307
  • C#
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 omer2307/omnisharp-mcp

使用说明

OmniSharp MCP服务器

一个模型上下文协议(MCP)服务器,通过封装OmniSharp语言服务器为Claude Code CLI提供C#语言智能。

它的作用

此MCP服务器为Claude Code提供了完整的C#IDE功能:

  • 查找符号 -按名称搜索类、方法、属性
  • 转到定义 -跳转到定义符号的位置
  • 查找引用 -查找代码库中符号的所有用法
  • 查找实现 -查找实现接口的类
  • 获取类型信息 -获取类型信息和文档
  • 获取诊断 -获取编译器错误和警告
  • 代码补全 -获取自动完成建议
  • 签名帮助 -获取方法参数提示
  • 重命名预览 -预览重命名会改变什么
  • 已分解的源代码 -视图已反编译。NET框架代码

先决条件

安装

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服务器将:

  1. 立即启动(以便Claude Code可以连接)
  2. 下载OmniSharp HTTP服务器(约50MB)至 ~/.omnisharp-mcp/omnisharp/
  3. 启动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服务器连接失败

  1. 检查 /mcp 在Claude Code中查看服务器状态
  2. 验证中的路径 mcp.json 是正确的
  3. 确保 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 '{}'

许可证

麻省理工学院