MCP C#启动器
    
使用官方csharpsdk的C#中功能完整的模型上下文协议(MCP)服务器模板。这个初学者演示了利用干净、惯用的C#代码的所有主要MCP功能。NET 8和依赖注入。
📚 文档
✨ 特性
| 类别 | 功能 | 描述 |
|---|---|---|
| 工具 | hello | 带注释的基本工具 |
get_weather | 返回结构化JSON的工具 | |
ask_llm | 调用LLM采样的工具 | |
long_task | 带有进度更新的工具 | |
load_bonus_tool | 动态加载新工具 | |
bonus_calculator | 计算器(动态加载) | |
| 资源 | info://about | 静态信息资源 |
file://example.md | 基于文件的标记资源 | |
| 模板 | greeting://{name} | 个性化问候 |
data://items/{id} | 按ID查找数据 | |
| 提示 | greet | 各种风格的问候 |
code_review | 重点领域代码审查 |
🚀 快速开始
先决条件
安装
# Clone the repository
git clone https://github.com/SamMorrowDrums/mcp-csharp-starter.git
cd mcp-csharp-starter
# Restore packages
dotnet restore运行服务器
stdio传输 (地方发展):
dotnet runHTTP传输 (用于远程/web部署):
dotnet run -- --http
# Or with custom port:
dotnet run -- --http --port 8080
# Server runs on http://localhost:3000 by default🔧 VS代码集成
该项目包括用于无缝开发的VS代码配置:
- 在VS Code中打开项目
- MCP配置位于
.vscode/mcp.json - 构建于
Ctrl+Shift+B(或Cmd+Shift+B在Mac上) - 使用F5进行调试(两种传输的配置)
- 使用VS Code的MCP工具测试服务器
使用DevContainers
- 安装 开发容器扩展
- 打开命令面板:“开发容器:在容器中重新打开”
- 一切都是预先配置好的,随时可以使用!
📁 项目结构
.
├── Program.cs # Main entry point (stdio/HTTP)
├── Tools/
│ └── AllTools.cs # All tool definitions
├── Resources/
│ └── AllResources.cs # All resource definitions
├── Prompts/
│ └── AllPrompts.cs # All prompt definitions
├── .vscode/
│ ├── mcp.json # MCP server configuration
│ ├── tasks.json # Build/run tasks
│ ├── launch.json # Debug configurations
│ └── extensions.json
├── .devcontainer/
│ └── devcontainer.json
├── McpCSharpStarter.csproj
├── global.json
└── appsettings.json🛠️ 发展
# Development with live reload (recommended)
dotnet watch run
# Build
dotnet build
# Run tests
dotnet test
# Format code
dotnet format
# Clean
dotnet clean
# Publish for production
dotnet publish -c Release实时重新加载
这 dotnet watch run 命令在开发过程中提供自动重建。 更改任何 .cs 文件将自动重建并重新启动服务器。
🔍 MCP检查员
这 MCP检查员 是测试和调试MCP服务器的重要开发工具。
运行检查器
npx @modelcontextprotocol/inspector -- dotnet run -- --stdio检查员提供什么
- 工具选项卡:列出并调用所有已注册的带有参数的工具
- 资源选项卡:浏览和阅读资源和模板
- 提示选项卡:查看和测试提示模板
- 日志选项卡:请参阅客户端和服务器之间的JSON-RPC消息
- 模式验证:验证工具输入/输出模式
调试提示
- 在连接IDE/客户端之前启动检查器
- 使用“日志”选项卡查看确切的请求/响应有效载荷
- 测试工具注释(ReadOnlyHint等)已正确公开
- 验证是否显示进度通知
long_task - 检查McpServer注入是否适用于采样工具
📖 功能示例
具有属性的工具
[McpServerToolType]
public class GreetingTools
{
[McpServerTool(Name = "hello", Title = "Say Hello")]
[Description("A friendly greeting tool")]
public static string Hello(
[Description("The name to greet")] string name)
{
return $"Hello, {name}!";
}
}资源模板
[McpServerResourceType]
public class StaticResources
{
[McpServerResource(
UriTemplate = "greeting://{name}",
Name = "Personalized Greeting",
MimeType = "text/plain")]
public static string Greeting(string name)
{
return $"Hello, {name}!";
}
}带取样的工具
[McpServerTool(Name = "ask_llm")]
public static async Task AskLlm(
McpServer server,
[Description("The prompt")] string prompt,
CancellationToken cancellationToken)
{
var result = await server.SampleAsync(
new CreateMessageRequestParams
{
Messages = [
new SamplingMessage
{
Role = Role.User,
Content = [new TextContentBlock { Text = prompt }]
}
],
MaxTokens = 100
},
cancellationToken: cancellationToken);
return result.Content.OfType()
.FirstOrDefault()?.Text ?? "";
}快速定义
[McpServerPromptType]
public class CodeReviewPrompts
{
[McpServerPrompt(Name = "code_review", Title = "Code Review")]
public static IEnumerable
CodeReview(
[Description("The code to review")] string code,
[Description("Programming language")] string language)
{
return [
new PromptMessage
{
Role = Role.User,
Content = new TextContentBlock
{
Text = $"Review this {language} code:\n```{language}\n{code}\n```"
}
}
];
}
}🔐 配置
通过配置 appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}🤝 贡献
欢迎投稿!请确保您的更改与其他语言初学者保持功能对等。
📄 许可证
MIT许可证-请参阅 许可证 了解详情。
