______________________________________________________________________
书名:罗斯林·斯通 表情符号🪨 颜色来源:灰色 颜色致:蓝色 sdk:docker 应用端口:7860 固定:false 标签:
- 主控程序
- C#
- 罗斯林
- 交互式解释器
- 建设mcp轨道企业
______________________________________________________________________
罗斯林·斯通
备注该项目与GitHub Copilot合作构建,拥抱人工智能辅助开发的未来。
一个对开发人员和LLM友好的C#沙箱,用于通过模型上下文协议(MCP)创建单文件实用程序。Roslyn Stone被命名为对帮助解码语言的古代人工制品Rosetta Stone的俏皮致敬,Roslyn Stone帮助人工智能系统使用基于文件的应用程序(顶级语句)创建可运行的C#程序。
使用Roslyn编译器的强大功能构建完整、可运行的.cs文件。通过MCP执行C#代码、验证语法、加载NuGet包和查找文档,以便与Claude code、VS code和其他AI驱动的开发工具无缝集成。
非常适合创建命令行实用程序、数据处理脚本、自动化工具和快速C#程序,而无需项目脚手架。
Docker快速入门
最快的入门方法是使用预构建的Docker容器和您最喜欢的启用MCP的编辑器:
克劳德代码/VS代码/光标
将以下内容添加到MCP配置文件中:
Linux/macOS: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json\ 视窗: %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" 在命令字段中。
克劳德桌面
增添 ~/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分离:资源(数据)与工具(操作)\ 文档访问 -查询。NET类型/方法文档通过 doc:// 资源URI(包括System.String等核心SDK类型)\ NuGet集成 -通过以下方式搜索套餐 nuget:// 资源、工具加载、完全依赖树解析\ MCP协议 -具有stdio和HTTP传输的官方ModelContextProtocol SDK\ 双重运输 -支持stdio(本地)和HTTP(远程)MCP连接\ AI友好 -通过模型上下文协议为LLM交互而设计\ 令牌优化提示 -使用创建实用程序的有效指导。NET 10指令示例\ 容器化 -Docker支持。NET Aspire编排\ 开放遥测 -内置日志、指标和跟踪的可观察性
建筑
Roslyn Stone实现了模型上下文协议(MCP),以帮助LLM创建单文件C#实用程序。它遵循最佳实践,正确区分:
- 资源 (被动数据源):基于URI的文档只读访问(
doc://),NuGet包(nuget://),以及执行状态(repl://) - 工具 (主动操作):用于构建实用程序的代码执行、验证和包加载
- 提示 (优化模板):创建基于文件的C#应用程序的令牌高效指南
该解决方案遵循干净的架构原则和函数式编程模式。它实现了动态代码编译和执行的最佳实践,包括正确使用AssemblyLoadContext进行内存管理。
关键组件
- 上下文管理:具有自动清理功能的线程安全会话生命周期(超时30分钟)
- 正式执行:变量和类型在迭代开发的会话中保持不变
- 资源发现:执行前查询文档、包和状态,以实现高效的工作流
- 令牌优化:提示引导LLM创建完整、可运行的.cs文件
看 MCP_ARCHITECTURE.md 详细的设计文件和 DYNAMIC_COMPILATION_BEST_PRACTICES.md 有关编译详细信息。
RoslynStone/
├── src/
│ ├── RoslynStone.Api/ # Console Host with MCP Server
│ ├── RoslynStone.Core/ # Domain models (ExecutionResult, PackageMetadata, etc.)
│ ├── RoslynStone.Infrastructure/ # MCP Tools, Roslyn services, functional helpers
│ ├── RoslynStone.ServiceDefaults/# OpenTelemetry and Aspire defaults
│ └── RoslynStone.AppHost/ # Aspire orchestration
└── tests/
├── RoslynStone.Tests/ # xUnit unit and integration tests
├── RoslynStone.Benchmarks/ # BenchmarkDotNet performance tests
└── RoslynStone.LoadTests/ # HTTP load and concurrency tests建筑原理
- 函数式编程:利用LINQ、纯函数和函数组合
- 直接服务电话:MCP工具直接调用服务,无需抽象层
- 线程安全:静态和实例级同步,以实现可靠的并行执行
- 不可变模型:在适当的情况下使用记录和只读属性
MCP资源(只读数据访问)
资源提供对被动数据源的基于URI的访问:
doc://{symbolName}- .NET XML文档查找
- 例子: doc://System.String, doc://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工具(主动操作)
工具执行操作并可以修改状态。所有工具都支持可选的上下文管理:
执行工具:
- EvaluateCharp -执行C#代码以创建和测试单文件实用程序
- 可选的 contextId 迭代开发参数 - 退货 contextId 用于会话连续性
- 验证竖琴 -执行前验证C#语法和语义
- 可选的 contextId 用于上下文感知验证
- ResetRepl -重置执行会话
- 可选的 contextId 重置特定会话或所有会话
- GetReplInfo 的 -获取执行环境信息和功能
- 可选的 contextId 用于会话特定状态 - 返回框架版本、功能、提示和示例
NuGet工具:
- LoadNuGetPackage -将NuGet包加载到REPL环境中
- 包在会话中持续存在,直到重置
- 搜索NuGet软件包 -搜索NuGet包
- 参数: query, skip, take 用于分页 - 替代方案 nuget://search 为没有资源支持的客户端提供资源
- GetNuGetPackage版本 -获取包的所有版本
- 参数: packageId - 替代方案 nuget://packages/{id}/versions 资源
- GetNuGetPackageReadme -获取包README内容
- 参数: packageId,可选 version - 替代方案 nuget://packages/{id}/readme 资源
文档工具:
- Get文档 -获取的XML文档。NET类型/方法
- 参数: symbolName,可选 packageId - 替代方案 doc:// 为没有资源支持的客户端提供资源 - 示例:GetDocument(“System.String”)或GetDocumentation(“JsonConvert”、“Newtonsoft.Json”)
注: 提供资源和工具是为了实现最大的客户端兼容性。资源是被动数据访问的首选,而工具则适用于所有MCP客户端。
MCP提示
Roslyn Stone内置了提示,帮助LLM创建单文件C#实用程序:
- 从CsharpRepl开始 -全面介绍基于文件的C#应用程序、开发工作流程和最佳实践
- ReplBestPractices -创建单文件实用程序的模式及完整示例
- 使用软件包 -如何在实用程序中发现、评估和使用NuGet包
- 软件包集成指南 -通过详细的实用程序示例深入了解包集成
这些提示提供了创建可运行的.cs文件的详细指导,包括示例、常见模式和成功提示。
它能做什么?
配置后,您的AI助手可以帮助您创建与对齐的单文件C#实用程序。NET 10的基于文件的应用程序功能:
构建一个简单的实用程序:
User: "Create a utility that lists files in the current directory"
Assistant: [Calls EvaluateCsharp with complete file-based app code]
→ Returns complete .cs file using top-level statements
→ Can be run directly with: dotnet run utility.cs使用软件包创建自包含的应用程序:
User: "Create a JSON formatter utility"
Assistant:
1. [Searches packages: nuget://search?q=json]
2. [Tests with nugetPackages parameter: EvaluateCsharp(..., nugetPackages: [{packageName: "Newtonsoft.Json", version: "13.0.3"}])]
3. [Returns complete json-formatter.cs with #:package directive]
→ Complete self-contained app:
#:package Newtonsoft.Json@13.0.3
using Newtonsoft.Json;
// ... utility code ...
→ Run with: dotnet run json-formatter.cs (no .csproj needed!)查询文档。NET类型:
User: "Show me how to use System.String.Split"
Assistant: [Option 1: Reads doc://System.String.Split resource]
[Option 2: Calls GetDocumentation("System.String.Split")]
→ Returns XML documentation with summary, parameters, examples执行前验证:
User: "Check if this C# code is valid: "
Assistant: [Calls ValidateCsharp with code]
→ Returns syntax validation results with detailed diagnostics带上下文的迭代开发:
User: "Start a CSV processor utility"
Assistant: [EvaluateCsharp with createContext=true, nugetPackages: CsvHelper]
→ Returns contextId for session
User: "Add filtering by date"
Assistant: [EvaluateCsharp with contextId, adds filtering logic]
→ Builds incrementally on previous codeAI助手使用创建完整、可运行的单文件C#程序。NET10的现代语法——不需要类、Main方法或项目文件样板。
对于开发者
想要贡献、从源代码运行或了解更多内部信息吗?查看我们的综合 入门指南 用于:
- 从源头构建
- 开发环境设置
- 运行测试和基准测试
- 添加新的MCP工具
- 使用MCP检查器进行调试
- 建筑细部
安全考虑
⚠️ 重要:这是一个代码执行服务。采用适当的安全措施进行部署:
- 在隔离的容器/沙箱中运行
- 实施速率限制
- 添加身份验证/授权
- 限制网络访问
- 监控资源使用情况
- 尽可能使用只读文件系统
未来的增强功能
- \[x\] 完整的NuGet包解析和加载
- \[x\] Docker容器支持
- \[x\] OpenTetry集成
- \[\]具有用户隔离的持久REPL会话
- \[\]代码段历史和缓存
- \[\]语法高亮显示和IntelliSense数据
- \[\]WebSocket支持交互式会话
- \[\]多架构容器映像(amd64、arm64)
贡献
欢迎投稿!请查看我们的 入门指南 获取开发设置说明。请随时提交问题和拉取请求。
许可证
看 许可证 文件以获取详细信息。
推荐配对:微软学习MCP
为了获得创建C#实用程序的最佳体验, 我们建议将Roslyn Stone与Microsoft Learn MCP服务器一起使用 ().
为什么要配对这些工具?
- 罗斯林·斯通:为构建实用程序提供C#代码执行、验证和包加载
- 微软学习MCP:提供全面。NET文档、API参考资料以及来自Microsoft官方学习的代码示例
它们共同实现了:
- 搜索官方文档 (微软学习MCP)→ 查找API → 用C#代码测试 (罗斯林·斯通)
- 获取代码示例 (微软学习)→ 执行并验证 (罗斯林·斯通)→ 构建实用程序
- 查找NET类型 (两者)→ 了解用法 (学习文档)→ 测试实施 (罗斯林·斯通)
工作流程示例:
User: "Create a utility to parse JSON files"
Assistant:
1. [microsoft-learn MCP: Searches for JSON documentation]
2. [microsoft-learn MCP: Gets System.Text.Json code samples]
3. [roslyn-stone: Tests code with EvaluateCsharp]
4. [roslyn-stone: Returns complete json-parser.cs]
→ Best of both worlds: Official docs + live execution设置两台服务器:
{
"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#执行,提供终极实用程序开发体验。
了解更多
- 入门指南 -发展与贡献指南
- MCP架构 -基于文件的C#应用程序的详细设计文档
- 模型上下文协议(MCP)
- 微软学习MCP -官方。NET文档MCP服务器(建议配对)
- Roslyn脚本API
- 动态编译最佳实践
- .NET 10基于文件的应用程序 -官方博客文章关于
dotnet run app.cs
