返回市场
罗森石

罗森石

作者:dylanlangston2 星标更新:2025-11-24

项目介绍


title: Roslyn Stone emoji: 🪨 colorFrom: 灰色 colorTo: 蓝色 sdk: docker app_port: 7860 pinned: false tags:

  • mcp
  • csharp
  • roslyn
  • repl
  • building-mcp-track-enterprise

Roslyn-Stone

注意:此项目是与GitHub Copilot合作构建的,拥抱未来的人工智能辅助开发。

一个面向开发人员和大型语言模型(LLM)友好的C#沙箱,通过模型上下文协议(MCP)创建单文件实用程序程序。以罗塞塔石碑——帮助解码古代语言的文物——为灵感命名,Roslyn-Stone帮助AI系统使用基于文件的应用程序(顶级语句)创建可运行的C#程序。

利用Roslyn编译器的强大功能构建完整的、可运行的.cs文件。执行C#代码,验证语法,加载NuGet包,并通过MCP查询文档,实现与Claude Code、VS Code和其他人工智能驱动开发工具的无缝集成。

非常适合创建命令行实用程序、数据处理脚本、自动化工具以及无需项目框架的快速C#程序。

快速开始使用Docker

最快的方式是使用预构建的Docker容器与您喜欢的MCP启用编辑器:

Claude Code / VS Code / Cursor

在您的MCP配置文件中添加以下内容:

Linux/macOS: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Windows: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json

{
   "mcpServers": {
       "roslyn-stone": {
           "command": "docker",
           "args": [
               "run",
               "-i",
               "--rm",
               "-e", "DOTNET_USE_POLLING_FILE_WATCHER=1",
               "ghcr.io/dylanlangston/roslyn-stone:latest"
           ]
       }
   }
}

**使用Podman?**只需将命令字段中的"docker"替换为"podman"

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或等效位置添加以下内容:

{
   "mcpServers": {
       "roslyn-stone": {
           "command": "docker",
           "args": [
               "run",
               "-i",
               "--rm",
               "-e", "DOTNET_USE_POLLING_FILE_WATCHER=1",
               "ghcr.io/dylanlangston/roslyn-stone:latest"
           ]
       }
   }
}

就这样!容器提供了最小设置和增强安全性的隔离C#代码执行环境。

功能

基于文件的C#应用程序 - 使用顶级语句创建单文件实用程序,符合.NET 10的dotnet run app.cs特性
内联包加载 - 使用nugetPackages参数在测试期间加载包,最终使用#:package指令创建自包含应用
通过Roslyn执行C# - 执行和测试C#代码,支持完整的.NET 10和递归NuGet依赖解析
迭代开发 - 增量构建程序,可选状态会话和上下文管理
实时错误反馈 - 获取详细的编译错误和警告,附带操作信息
资源与工具 - 正确的MCP分离:资源(数据)与工具(操作)
文档访问 - 通过doc://资源URI查询.NET类型/方法文档(包括核心SDK类型如System.String)
NuGet集成 - 通过nuget://资源搜索包,使用工具加载,解决完整的依赖树
MCP协议 - 官方ModelContextProtocol SDK,支持stdio和HTTP传输
双传输 - 支持stdio(本地)和HTTP(远程)MCP连接
AI友好 - 通过模型上下文协议设计用于LLM交互
优化提示 - 高效指导创建带有.NET 10指令示例的实用程序程序
容器化 - 支持Docker和.NET Aspire编排
OpenTelemetry - 内置可观测性,包括日志、指标和跟踪

架构

Roslyn-Stone实现了模型上下文协议(MCP),帮助LLMs创建单文件C#实用程序程序。它遵循最佳实践,正确区分:

  • 资源(被动数据源):基于URI的只读访问文档(doc://)、NuGet包(nuget://)和执行状态(repl://
  • 工具(主动操作):代码执行、验证和包加载,用于构建实用程序程序
  • 提示(优化模板):高效的指导创建基于文件的C#应用程序

解决方案遵循干净架构原则和函数式编程模式。它实现了动态代码编译和执行的最佳实践,包括适当的AssemblyLoadContext使用以进行内存管理。

关键组件

  • 上下文管理:线程安全的会话生命周期,自动清理(30分钟超时)
  • 有状态执行:变量和类型在会话中持久存在,支持迭代开发
  • 资源发现:在执行前查询文档、包和状态,以实现高效的工作流程
  • 令牌优化:提示引导LLMs创建完整的、可运行的.cs文件

详见MCP_ARCHITECTURE.md的设计文档和DYNAMIC_COMPILATION_BEST_PRACTICES.md的编译细节。

RoslynStone/
├── src/
│   ├── RoslynStone.Api/            # 控制台主机与MCP服务器
│   ├── RoslynStone.Core/           # 域模型(ExecutionResult, PackageMetadata等)
│   ├── RoslynStone.Infrastructure/ # MCP工具、Roslyn服务、功能性助手
│   ├── RoslynStone.ServiceDefaults/# OpenTelemetry和Aspire默认设置
│   └── RoslynStone.AppHost/        # Aspire编排
└── tests/
    ├── RoslynStone.Tests/          # xUnit单元和集成测试
    ├── RoslynStone.Benchmarks/     # BenchmarkDotNet性能测试
    └── RoslynStone.LoadTests/      # HTTP负载和并发测试

架构原则

  • 函数式编程:利用LINQ、纯函数和函数组合
  • 直接服务调用:MCP工具直接调用服务,不使用抽象层
  • 线程安全:静态和实例级别的同步,确保可靠的并行执行
  • 不可变模型:适当使用记录和只读属性

MCP资源(只读数据访问)

资源提供基于URI的被动数据源访问:

  • doc://{symbolName} - 查找.NET XML文档
    • 示例:doc://System.Stringdoc://System.Linq.Enumerable.Select
    • 新功能:支持NuGet包:doc://{packageId}@{symbolName}
    • 示例:doc://Newtonsoft.Json@Newtonsoft.Json.JsonConvert
  • nuget://search?q={query} - 搜索NuGet包
    • 示例:nuget://search?q=json&take=10
  • nuget://packages/{id}/versions - 获取包版本列表
    • 示例:nuget://packages/Newtonsoft.Json/versions
  • nuget://packages/{id}/readme - 获取包README
    • 示例:nuget://packages/Newtonsoft.Json/readme?version=13.0.3
  • repl://state - 通用REPL信息和能力
  • repl://sessions - 列出活动的REPL会话
  • repl://sessions/{contextId}/state - 会话特定元数据

MCP工具(主动操作)

工具执行操作并可以修改状态。所有工具都支持可选的上下文管理:

执行工具:

  • EvaluateCsharp - 执行C#代码以创建和测试单文件实用程序程序
    • 可选contextId参数用于迭代开发
    • 返回contextId以维持会话连续性
  • ValidateCsharp - 在执行前验证C#语法和语义
    • 可选contextId用于上下文感知验证
  • ResetRepl - 重置执行会话
    • 可选contextId以重置特定会话或所有会话
  • GetReplInfo - 获取执行环境信息和能力
    • 可选contextId用于会话特定状态
    • 返回框架版本、能力、提示和示例

NuGet工具:

  • LoadNuGetPackage - 将NuGet包加载到REPL环境中
    • 包在会话中持续存在直到重置
  • SearchNuGetPackages - 搜索NuGet包
    • 参数:queryskiptake用于分页
    • 对于没有资源支持的客户端,替代nuget://search资源
  • GetNuGetPackageVersions - 获取包的所有版本
    • 参数:packageId
    • 对于没有资源支持的客户端,替代nuget://packages/{id}/versions资源
  • GetNuGetPackageReadme - 获取包README内容
    • 参数:packageId,可选version
    • 对于没有资源支持的客户端,替代nuget://packages/{id}/readme资源

文档工具:

  • GetDocumentation - 获取.NET类型/方法的XML文档
    • 参数:symbolName,可选packageId
    • 对于没有资源支持的客户端,替代doc://资源
    • 示例:GetDocumentation("System.String") 或 GetDocumentation("JsonConvert", "Newtonsoft.Json")

注意:为了最大限度地兼容客户端,同时提供了资源和工具。资源适用于被动数据访问,而工具适用于所有MCP客户端。

MCP提示

Roslyn-Stone内置了提示,帮助LLMs创建单文件C#实用程序程序:

  • GetStartedWithCsharpRepl - 全面介绍基于文件的C#应用程序、开发工作流和最佳实践
  • ReplBestPractices - 创建单文件实用程序的模式,附带完整示例
  • WorkingWithPackages - 如何发现、评估和使用NuGet包在实用程序程序中
  • PackageIntegrationGuide - 深入了解包集成,附带详细的实用程序示例

这些提示提供了创建可运行的.cs文件的详细指导,包括示例、常见模式和成功技巧。

它能做什么?

一旦配置好,您的AI助手可以帮助您创建与.NET 10的基于文件的应用程序特性对齐的单文件C#实用程序程序:

构建一个简单的实用程序:

用户:"创建一个列出当前目录文件的实用程序"
助手:[调用EvaluateCsharp,使用完整的基于文件的应用程序代码]
→ 返回使用顶级语句的完整.cs文件
→ 可以直接运行:dotnet run utility.cs

创建带有包的自包含应用:

用户:"创建一个JSON格式化实用程序"
助手:
  1. [搜索包:nuget://search?q=json]
  2. [使用nugetPackages参数测试:EvaluateCsharp(..., nugetPackages: [{packageName: "Newtonsoft.Json", version: "13.0.3"}])]
  3. [返回带有#:package指令的完整json-formatter.cs]
→ 完整的自包含应用:
  #:package Newtonsoft.Json@13.0.3
  using Newtonsoft.Json;
  // ... 实用程序代码 ...
→ 运行:dotnet run json-formatter.cs(不需要.csproj!)

查询.NET类型的文档:

用户:"展示如何使用System.String.Split"
助手:[选项1:读取doc://System.String.Split资源]
         [选项2:调用GetDocumentation("System.String.Split")]
→ 返回带有摘要、参数和示例的XML文档

执行前验证:

用户:"检查这段C#代码是否有效:<code>"
助手:[调用ValidateCsharp进行代码验证]
→ 返回详细的语法验证结果

具有上下文的迭代开发:

用户:"开始一个CSV处理器实用程序"
助手:[EvaluateCsharp,使用createContext=true,nugetPackages: CsvHelper]
→ 返回contextId以维持会话
用户:"添加按日期过滤"
助手:[EvaluateCsharp,使用contextId,添加过滤逻辑]
→ 在先前代码的基础上增量构建

AI助手使用.NET 10的现代语法创建完整的、可运行的单文件C#程序——无需类、Main方法或项目文件样板代码。

开发者指南

想要贡献代码、从源代码运行或了解更多内部细节?查看我们的全面入门指南,包括:

  • 从源代码构建
  • 开发环境设置
  • 运行测试和基准测试
  • 添加新的MCP工具
  • 使用MCP Inspector调试
  • 架构细节

安全注意事项

⚠️ 重要:这是一个代码执行服务。部署时应采取适当的安全措施:

  • 在隔离容器/沙箱中运行
  • 实现速率限制
  • 添加身份验证/授权
  • 限制网络访问
  • 监控资源使用情况
  • 尽可能使用只读文件系统

未来改进

  • 完整的NuGet包解析和加载
  • Docker容器支持
  • OpenTelemetry集成
  • 用户隔离的持久REPL会话
  • 代码片段历史和缓存
  • 语法高亮和IntelliSense数据
  • WebSocket支持用于交互式会话
  • 多架构容器镜像(amd64, arm64)

贡献

欢迎贡献!请参阅我们的入门指南获取开发设置说明。随时提交问题和拉取请求。

许可证

详情见LICENSE文件。

推荐搭配:Microsoft Learn MCP

为了获得最佳体验创建C#实用程序程序,我们推荐将Roslyn-Stone与Microsoft Learn MCP服务器github.com/microsoftdocs/mcp)一起使用。

为什么搭配这些工具?

  • Roslyn-Stone:提供C#代码执行、验证和包加载,用于构建实用程序
  • Microsoft Learn MCP:提供全面的.NET文档、API参考和官方Microsoft Learn代码示例

结合它们可以实现:

  1. 搜索官方文档(Microsoft Learn MCP)→ 查找API使用C#代码测试(Roslyn-Stone)
  2. 获取代码示例(Microsoft Learn)→ 执行和验证(Roslyn-Stone)→ 构建实用程序
  3. 查找.NET类型(两者)→ 理解用法(Learn文档)→ 测试实现(Roslyn-Stone)

示例工作流程:

用户:"创建一个解析JSON文件的实用程序"
助手:
  1. [microsoft-learn MCP:搜索JSON文档]
  2. [microsoft-learn MCP:获取System.Text.Json代码示例]
  3. [roslyn-stone:使用EvaluateCsharp测试代码]
  4. [roslyn-stone:返回完整的json-parser.cs]
→ 结合两者的优势:官方文档+实时执行

设置两个服务器:

{
  "mcpServers": {
    "roslyn-stone": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/dylanlangston/roslyn-stone:latest"]
    },
    "microsoft-learn": {
      "command": "npx",
      "args": ["-y", "@microsoft/docs-mcp-server"]
    }
  }
}

这种组合提供了全面的.NET文档和实时C#执行,带来终极的实用程序程序开发体验。

更多学习