C#语义代码分析与编辑服务

MCPsharp是一个为C#项目提供智能分析和语义代码编辑功能的MCP协议服务器,支持跨文件依赖分析、项目结构理解和基于Roslyn的语义操作。

  • by jas88
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 jas88/MCPsharp

使用说明

MCPsharp

用于智能C#项目分析和语义代码编辑的模型上下文协议(MCP)服务器。为Claude Code提供对C#项目的深入理解,包括跨文件依赖关系、项目结构和基于Roslyn的语义操作。

特性

  • MCP协议服务器 --基于stdio的JSON-RPC 2.0用于克劳德代码集成
  • 文件操作 --打开项目,列出带有glob模式的文件,读/写/编辑文件
  • 罗斯林集成 --直接使用Roslyn API进行C#语义分析(无子进程开销)
  • 语义编辑 --查找类,添加具有适当缩进的属性/方法
  • AI驱动的工具 --使用本地Ollama或云AI的自然语言代码库查询(实现 AI驱动的MCP模式)
  • 跨平台 --macOS、Linux和Windows支持

建筑

Claude Code
    ↓ MCP (stdio, JSON-RPC)
┌─────────────────────────────────┐
│ MCPsharp Server                 │
├─────────────────────────────────┤
│ • MCP Protocol Handler          │
│ • Project Context Manager       │
│ • File Operations Service       │
│ • Roslyn Workspace (Phase 1)    │
└─────────────────────────────────┘
    ↓ (in-process)
Roslyn APIs

看 docs/CONCEPT.md 完整的设计和 docs/ARCHITECTURE-DECISION.md 建筑选择。

构建

先决条件

  • .NET 9.0 SDK或更高版本
  • Git

构建命令

# Restore dependencies
dotnet restore

# Build
dotnet build

# Build in Release mode
dotnet build --configuration Release

# Run tests
dotnet test

# Run tests with coverage
dotnet test --collect:"XPlat Code Coverage"

发布独立二进制文件

# Linux x64
dotnet publish src/MCPsharp/MCPsharp.csproj -c Release -r linux-x64 --self-contained -o publish/linux-x64

# macOS arm64 (Apple Silicon)
dotnet publish src/MCPsharp/MCPsharp.csproj -c Release -r osx-arm64 --self-contained -o publish/osx-arm64

# macOS x64 (Intel)
dotnet publish src/MCPsharp/MCPsharp.csproj -c Release -r osx-x64 --self-contained -o publish/osx-x64

# Windows x64
dotnet publish src/MCPsharp/MCPsharp.csproj -c Release -r win-x64 --self-contained -o publish/win-x64

安装

Claude代码配置

添加到您的克劳德代码 claude_desktop_config.json:

{
  "mcpServers": {
    "csharp": {
      "command": "/path/to/mcpsharp",
      "args": ["/path/to/your/csharp/project"]
    }
  }
}

或者使用.NET run进行开发:

{
  "mcpServers": {
    "csharp": {
      "command": "dotnet",
      "args": ["run", "--project", "/path/to/MCPsharp/src/MCPsharp/MCPsharp.csproj", "/path/to/your/csharp/project"]
    }
  }
}

AI驱动工具设置

MCPsharp包括人工智能驱动的工具,这些工具使用本地或云人工智能来回答有关代码库的自然语言问题。这实现了 AI驱动的MCP模式 --人工智能在内部处理冗长的数据并返回简洁的答案,防止上下文污染。

支持的AI提供商

MCPsharp按以下顺序自动检测可用的AI提供商:

  1. 奥拉玛 (本地,免费,推荐)
  2. OpenRouter (基于云,需要API密钥)
  3. 无(AI工具已禁用)

选项1:Ollama(推荐)

在本地安装并运行Olama:

# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.com/install.sh | sh

# Start Ollama service
ollama serve

# Pull a code-specialized model
ollama pull qwen2.5-coder:3b

MCPsharp将在以下时间自动检测Ollama http://localhost:11434 和使用 qwen2.5-coder:3b 默认情况下。

环境变量:

  • OLLAMA_URL --ollama服务器URL(默认值: http://localhost:11434)
  • OLLAMA_MODEL --要使用的模型(默认值: qwen2.5-coder:3b)

选项2:OpenRouter

配置OpenRouter API密钥:

export OPENROUTER_API_KEY="your-api-key"

或者添加到您的配置文件中。MCPsharp将使用 anthropic/claude-3.5-sonnet 默认情况下。

选项3:禁用AI工具

集 AIProvider:Type 到 none 在配置中禁用AI驱动的工具。

使用AI工具

配置后,使用 ask_codebase 问自然语言问题的工具:

{
  "name": "ask_codebase",
  "arguments": {
    "question": "How does authentication work in this project?",
    "focus_path": "src/Auth"
  }
}

这 focus_path 参数是可选的。AI在内部分析你的代码库结构、代码和配置,并返回一个简洁的答案,其中包含file:line引用。

AI代码转换工具

除了只读查询外,MCPsharp还提供AI驱动的代码修改工具,这些工具使用 Roslyn AST转换 为保证正确性:

{
  "name": "ai_suggest_fix",
  "arguments": {
    "file_path": "src/MyService.cs",
    "description": "Fix the null reference exception in ProcessData",
    "line_number": 42,
    "apply_changes": false
  }
}

这 apply_changes 参数默认为 false 在应用更改之前预览更改。

为什么选择Roslyn AST而不是文本操作?

传统工具使用sed脚本、正则表达式或Python文本操作,可以:

  • 生成语法无效的代码
  • 中断编译
  • 损坏的代码结构
  • 引入细微的错误

MCPsharp的AI转换工具使用Roslyn的抽象语法树(AST)来:

  • ✅ 保证C#代码语法有效
  • ✅ 保持编译完整性
  • ✅ 维护代码结构和格式
  • ✅ 在返回更改之前验证更改
  • ✅ 使用语义感知进行重构

可用的转换工具:

  • ai_suggest_fix -使用Roslyn验证修复错误
  • ai_refactor -语义感知重构(保留行为)
  • ai_implement_feature -基于AST的代码生成

所有工具返回a 默认预览.Set apply_changes: true 直接修改文件。

用法

运行服务器

# Run on current directory (auto-loads .sln/.csproj if found)
dotnet run --project src/MCPsharp/MCPsharp.csproj

# Run on specific project
dotnet run --project src/MCPsharp/MCPsharp.csproj /path/to/project

# Or use published binary
./mcpsharp /path/to/project

自动加载:如果MCPsharp在包含以下内容的目录中启动 .sln 或 .csproj 文件,它将在启动时自动加载项目。解决方案文件(.sln)当两者都存在时,首选项目文件。

测试服务器

# Test initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | dotnet run --project src/MCPsharp/MCPsharp.csproj

# Test tools/list
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | dotnet run --project src/MCPsharp/MCPsharp.csproj

# Run manual test script
./tests/manual-test.sh

可用工具

服务器提供40个MCP工具:

文件操作:

  • project_open -打开项目目录
  • project_info -获取当前项目信息
  • file_list -列出具有可选glob模式的文件
  • file_read -读取文件内容
  • file_write -写入文件
  • file_edit -将文本编辑应用于文件

Roslyn/语义分析:

  • find_symbol -按名称查找符号
  • get_symbol_info -获取详细的符号信息
  • get_class_structure -获得完整的类结构
  • add_class_property -向类添加属性
  • add_class_method -向类添加方法
  • find_references -查找所有符号引用
  • find_implementations -查找接口实现
  • parse_project -解析.csproj文件

工作流程和配置:

  • get_workflows -获取GitHub操作工作流
  • parse_workflow -解析工作流YAML
  • validate_workflow_consistency -验证工作流与项目
  • get_config_schema -获取配置文件架构
  • merge_configs -合并配置文件

高级分析(第2阶段):

  • analyze_impact -分析代码更改的影响
  • trace_feature -跨文件跟踪功能
  • rename_symbol -在整个代码库中重命名符号
  • find_callers -查找方法的所有调用者
  • find_call_chains -分析方法调用链
  • find_type_usages -查找某一类型的所有用法
  • analyze_call_patterns -分析方法调用模式
  • analyze_inheritance -分析类型继承
  • find_circular_dependencies -查找循环依赖关系
  • find_unused_methods -查找未使用的方法
  • analyze_call_graph -分析调用图
  • find_recursive_calls -查找递归调用链
  • analyze_type_dependencies -分析类型依赖关系

代码质量:

  • code_quality_analyze -分析代码质量问题
  • code_quality_fix -应用自动修复
  • code_quality_profiles -列出可用的修复配置文件
  • extract_method -将代码提取到新方法

AI驱动工具(只读):

  • ask_codebase -使用人工智能询问有关代码库的自然语言问题(返回简洁的答案,而不是冗长的数据)

人工智能驱动的代码转换(基于Roslyn AST):

  • ai_suggest_fix -AI建议使用Roslyn转换修复错误(保证C#语法有效)
  • ai_refactor -具有语义感知的AI引导重构(保留程序行为)
  • ai_implement_feature -AI使用基于AST的代码生成实现功能(无字符串模板)

重要: AI转换工具使用Roslyn AST而不是文本操作(sed/regex/Python)来确保所有代码更改在语法上有效并保持编译完整性。总是更喜欢这些工具来修改C#代码。

发展

项目结构

MCPsharp/
├── src/
│   └── MCPsharp/           # Main MCP server
├── tests/
│   └── MCPsharp.Tests/     # xUnit tests
├── docs/                   # Documentation
│   ├── CONCEPT.md          # Design document
│   ├── MVP-PLAN.md         # Implementation plan
│   └── ARCHITECTURE-DECISION.md
├── .github/
│   └── workflows/
│       └── build.yml       # CI/CD workflow
└── MCPsharp.sln            # Solution file

运行测试

# Run all tests
dotnet test

# Run tests with detailed output
dotnet test --verbosity detailed

# Run specific test project
dotnet test tests/MCPsharp.Tests/MCPsharp.Tests.csproj

# Watch mode (re-run on file changes)
dotnet watch test

调试

# Run with debug output
dotnet run --project src/MCPsharp/MCPsharp.csproj --configuration Debug

# Attach debugger in VS Code or Rider

MCP工具(计划中)

阶段0:基本文件操作

  • project_open --打开C#项目目录
  • project_info --获取项目元数据
  • file_list --列出带有glob模式的文件
  • file_read --读取文件内容
  • file_write --写入文件内容
  • file_edit --应用文本编辑

第一阶段:语义C#操作

  • language_server_start --初始化Roslyn工作区
  • find_symbol --按名称查找类、方法、属性
  • get_symbol_info --获取详细的符号信息
  • get_class_structure --获取类成员和结构
  • add_class_property --使用正确的缩进将属性添加到类中
  • add_class_method --向类添加方法
  • find_references --查找对某个符号的所有引用

看 docs/MVP-PLAN.md 了解详细的工具规格。

依赖项

运行时依赖关系

  • 微软。代码分析。CSharp (4.11.0)--Roslyn C#编译器API
  • 微软。代码分析。CSharp。工作区 (4.11.0)--Roslyn工作区API
  • 微软。扩展。文件系统全局化 (9.0.0)——球形图案匹配
  • 微软。扩展。日志记录 (9.0.0)--测井基础设施

测试依赖

  • x单位 (2.9.2)——测试框架
  • 流畅的演讲 (6.12.1)——流畅断言库
  • 最小订货量 (4.20.72)——模拟框架
  • 盖子.收集器 (6.0.2)——代码覆盖率

CI/CD

GitHub Actions工作流在每次推送和PR上运行:

  • 基于Linux、macOS和Windows构建
  • 运行所有具有代码覆盖率的测试
  • 在主分支上发布自包含的二进制文件
  • 将覆盖范围上传到Codecov

路线图

  • ✅ 阶段0 (当前):具有文件操作的基本MCP服务器
  • 🚧 第一阶段 (下一篇):语义C#操作的Roslyn集成
  • 📋 第2阶段 (未来):项目/解决方案解析,多项目支持
  • 📋 第三期 (未来):配置分析、工作流验证
  • 📋 阶段4 (未来):数据库迁移、重构工具

贡献

这是@jas88的个人项目。欢迎投稿!

  1. 分叉存储库
  2. 创建要素分支
  3. 通过测试进行更改
  4. 提交拉取请求

许可证

[待定]

文档

支持

  • 问题:https://github.com/jas88/MCPsharp/issues
  • 讨论:https://github.com/jas88/MCPsharp/discussions