使用说明
🔌 .net mcp服务器
A. 模型上下文协议(MCP) 服务器构建于 .NET 8 它将企业工具暴露给人工智能助手,如Claude Desktop、VS Code(Copilot/Continue/Cline)、Cursor、Windsurf等。
MCP是Anthropic的开放协议,允许AI助手连接到外部数据源和工具。该项目将MCP引入。NET生态系统。它与 任何兼容MCP的客户端 --不仅仅是克劳德桌面。
📖 全部文件 --入门指南、工具参考、插件指南
什么是MCP?
这 模型上下文协议 允许AI助手:
- 🔍 查询您的数据库
- 📁 从系统中读取文件
- 🌐 调用外部API
- ⏰ 获取实时信息
AI可以直接访问所需的工具,而不是将数据复制到提示中。
特性
此服务器提供九种企业就绪工具:
| 工具 | 说明 |
|---|---|
| 🕐 日期时间 | 获取当前时间,在时区之间转换 |
| 📁 文件系统 | 读取文件,列出目录(在允许的路径内) |
| 🗄️ sqlquery | 对配置的数据库执行只读SQL查询 |
| 🌐 http_request | 向允许的API发出GET/POST请求 |
| 📝 文本 | 正则表达式匹配/替换、字数、文本差异、格式JSON/XML |
| 🔄 数据转换 | JSON查询、CSV/JSON/XML转换、base64、哈希 |
| 🌍 环境 | 获取/列出/检查环境变量(敏感值被屏蔽) |
| 💻 系统信息 | 操作系统详细信息、运行进程、网络接口 |
| 🔀 版本控制系统 | 只读Git:状态、日志、差异、分支、责备 |
安全功能
- ✅ 文件访问受限 仅限于已配置的目录
- ✅ SQL查询是只读的 (仅限选择,危险关键字被阻止)
- ✅ HTTP请求受限 到允许的主机
- ✅ 环境变量 带有敏感值掩码(密码、令牌、密钥)
- ✅ Git操作是只读的 具有路径验证和参数净化功能
- ✅ Regex超时保护 抵御ReDoS攻击
- ✅ XXE预防 在XML解析中
- ✅ 无任意代码执行
🚀 Quick Start
先决条件
- .NET 8 SDK
- 任何MCP客户端(参见 支持的客户 在......下面
Option A — Install as a Global Tool (Recommended)
dotnet tool install -g DotnetMcpServer
然后运行交互式安装向导以创建配置:
dotnet-mcp-server --init
巫师写道 appsettings.json 到您的用户配置目录:
- 窗户:
%APPDATA%\dotnet-mcp-server\appsettings.json - Linux/macOS:
~/.config/dotnet-mcp-server/appsettings.json
配置后,您可以验证一切是否正常:
dotnet-mcp-server --validate
要稍后更新到最新版本,请执行以下操作:
dotnet tool update -g DotnetMcpServer
Option B — Clone and Build
git clone https://github.com/Argha713/dotnet-mcp-server.git
cd dotnet-mcp-server
dotnet build
配置(仅选项B)
编辑 src/McpServer/appsettings.json:
{
"FileSystem": {
"AllowedPaths": [
"C:\\Users\\YourName\\Documents",
"C:\\Projects"
]
},
"Sql": {
"Connections": {
"MyDB": {
"ConnectionString": "Server=localhost;Database=MyDB;Trusted_Connection=True;",
"Description": "My local database"
}
}
},
"Http": {
"AllowedHosts": [
"api.github.com",
"jsonplaceholder.typicode.com"
]
}
}
Option C — Docker (No .NET Required)
在容器中运行服务器,并与演示SQL server一起运行——否。您的计算机上需要.NET SDK。
第一步: 复制示例配置和环境文件:
cp docker/appsettings.example.json docker/appsettings.json
cp .env.example .env
第二步: 编辑 docker/appsettings.json 设置允许的路径、SQL连接和HTTP主机。编辑 .env 设置一个强大的 SQL_SA_PASSWORD.
步骤3: 构建映像并启动这两个服务:
docker-compose up --build
这 docker build 该步骤运行所有测试——如果任何测试失败,构建将中止。
Claude桌面集成 (docker运行模式):
{
"mcpServers": {
"dotnet-mcp-server": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/docker/appsettings.json:/home/app/.config/dotnet-mcp-server/appsettings.json:ro",
"dotnet-mcp-server"
]
}
}
}
注: 替换
/path/to/docker/appsettings.json与你的绝对路径docker/appsettings.json文件。在Windows上使用正斜杠或转义反斜杠。
Connect to Your MCP Client
在 支持的客户 请参阅下面的部分,并按照设置说明进行操作。
注: 所有客户端配置示例都使用全局工具命令
dotnet-mcp-server。如果您使用的是选项B(克隆和构建),请替换"command": "dotnet-mcp-server"随着"command": "dotnet", "args": ["run", "--project", "C:\\path\\to\\dotnet-mcp-server\\src\\McpServer"]相反。
🖥️ Supported Clients
Claude Desktop
配置文件位置:
| 操作系统 | 路径 |
|---|---|
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
将以下内容添加到配置文件中:
{
"mcpServers": {
"dotnet-mcp-server": {
"command": "dotnet-mcp-server"
}
}
}
重新启动克劳德桌面。您应该在聊天中看到可用的工具。
VS Code — GitHub Copilot (Built-in)
VS代码具有 原生MCP支持 通过GitHub Copilot(代理模式)。无需扩展——只需启用副驾驶的VS Code 1.99+。
第一步: 在VS Code中打开您的项目。
第二步: 创建一个 .vscode/mcp.json 工作区根目录中的文件:
{
"servers": {
"dotnet-mcp-server": {
"command": "dotnet-mcp-server"
}
}
}
步骤3: 打开 副驾驶聊天 面板(Ctrl+Shift+I 或 Cmd+Shift+I).
步骤4: 切换到 代理模式 (点击聊天面板顶部的下拉菜单,选择“Agent”)。
步骤5: 您应该看到列出的MCP工具。问副驾驶问题,比如 “东京现在几点了?” 或 “列出我的文档文件夹中的文件”.
提示: 您还可以通过VS Code设置全局添加服务器(
settings.json):{ "mcp": { "servers": { "dotnet-mcp-server": { "command": "dotnet-mcp-server" } } } }
VS Code — Continue.dev (Open Source)
继续 是VS Code和JetBrains的免费开源AI编码助手。
第一步: 安装 继续 VS Code Marketplace的扩展。
第二步: 打开继续配置:按 Ctrl+Shift+P → type Continue: Open Config → 选择它。
步骤3: 这将打开 ~/.continue/config.json.在下面添加MCP服务器 mcpServers:
{
"mcpServers": [
{
"name": "dotnet-mcp-server",
"command": "dotnet-mcp-server"
}
]
}
步骤4: 重新加载VS代码(Ctrl+Shift+P → Developer: Reload Window).
步骤5: 打开继续聊天面板。这些工具将在代理模式下可用。
VS Code — Cline (Open Source)
克莱恩 是VS Code的免费开源自主AI编码代理。
第一步: 安装 克莱恩 VS Code Marketplace的扩展。
第二步: 打开Cline设置:单击侧栏中的Cline图标→ 点击 齿轮图标 → go to MCP服务器.
步骤3: 点击 “编辑MCP设置” 哪个打开 ~/Documents/Cline/cline_mcp_settings.json.添加:
{
"mcpServers": {
"dotnet-mcp-server": {
"command": "dotnet-mcp-server"
}
}
}
步骤4: 重新启动Cline。这些工具应出现在MCP服务器部分。
Cursor
光标 是一款内置MCP支持的AI优先代码编辑器。
第一步: 打开光标设置→ go to 主控程序 部分(或新闻 Ctrl+Shift+J).
第二步: 点击 “添加新的MCP服务器”.
步骤3: 或者,创建/编辑 ~/.cursor/mcp.json:
{
"mcpServers": {
"dotnet-mcp-server": {
"command": "dotnet-mcp-server"
}
}
}
步骤4: 重新启动游标。使用Composer(代理模式)中的工具。
Windsurf (Codeium)
帆板运动 是Codeium的一款支持MCP的AI编辑器。
第一步: 打开Windsurf,前往 设置 → 主控程序.
第二步: 点击 “添加服务器” 并配置:
{
"mcpServers": {
"dotnet-mcp-server": {
"command": "dotnet-mcp-server"
}
}
}
步骤3: 重新启动Windsurf。Cascade(AI聊天)中提供了工具。
Claude Code (CLI)
克劳德代码 是Anthropic的CLI工具。它原生支持MCP服务器。
claude mcp add dotnet-mcp-server dotnet-mcp-server
就是这样——Claude Code会在需要时自动启动服务器。
ChatGPT Desktop
OpenAI的ChatGPT桌面应用程序支持MCP服务器(需要Plus计划)。
第一步: 打开ChatGPT桌面→ 设置 → 测试版功能 → 启用 MCP服务器.
第二步: 首选 设置 → MCP服务器 → click “添加服务器”.
步骤3: 配置:
- 姓名:
dotnet-mcp-server - 命令:
dotnet-mcp-server - 论据: (留空)
步骤4: 重新启动ChatGPT。聊天中会出现工具。
Manual Testing (No Client Needed)
您可以直接从任何终端测试服务器:
dotnet run --project src/McpServer
然后逐行粘贴JSON-RPC消息:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"manual-test","version":"1.0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/list"}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"datetime","arguments":{"action":"now"}}}
注: 替换
C:\path\to\dotnet-mcp-server上面所有示例中克隆仓库的实际路径。
💬 Tool Usage Examples
DateTime Tool
问克劳德:
- “东京现在几点了?”
- “将美国东部时间下午3点转换为印度标准时间”
- “当前UTC时间是多少?”
File System Tool
问克劳德:
- “列出我的文档文件夹中的文件”
- “阅读README.md的内容”
- “在我的项目中搜索所有.cs文件”
SQL Query Tool
问克劳德:
- “显示MyDB数据库中的表”
- “按收入查询前10名客户”
- “描述订单表的结构”
HTTP Tool
问克劳德:
- “获取我的GitHub个人资料信息”
- “从JSONPlaceholder API获取最新帖子”
- “您可以访问哪些API?”
Text Tool
问克劳德:
- “查找此文本中的所有电子邮件地址”
- “在我的配置中将localhost:3000替换为api.prod.com”
- “这份文件有多少个单词?”
- “让我看看这两个配置之间的区别”
- “漂亮地打印这个缩小的JSON”
Data Transform Tool
问克劳德:
- “将此CSV转换为JSON”
- “从该JSON中提取所有用户电子邮件”
- “Base64编码此字符串”
- “生成此文本的SHA256哈希值”
- “将此XML响应转换为JSON”
Environment Tool
问克劳德:
- “我的JAVA_HOME设置为什么?”
- “显示所有与节点相关的环境变量”
- “是否配置了DOCKER_HOST?”
System Info Tool
问克劳德:
- “我有多少磁盘空间?”
- “哪些进程使用的内存最多?”
- “我的操作系统版本和.NET运行时是什么?”
- “显示我的网络接口”
Git Tool
问克劳德:
- “我在这个仓库中更改了哪些文件?”
- “显示最后10个提交”
- “我目前的变化有什么不同?”
- “谁最后修改了Program.cs的第42行?”
⚙️ Configuration Reference
Example Profiles
中提供了即用型配置文件 examples/configs/:
| 文件 | 最适合 |
|---|---|
developer.json |
软件开发人员——本地仓库、开发数据库、GitHub/npm/docs API |
data-analyst.json |
数据分析师——数据目录、分析数据库、公共数据API |
api-integrator.json |
API集成商—广泛的外部API访问,最少的文件系统 |
将其中一个复制到您的配置目录并编辑以匹配您的环境。
File System Settings
{
"FileSystem": {
"AllowedPaths": [
"/home/user/documents",
"/projects"
]
}
}
SQL Settings
{
"Sql": {
"Connections": {
"Production": {
"ConnectionString": "Server=...;Database=...;",
"Description": "Production database (read-only)"
},
"Analytics": {
"ConnectionString": "Server=...;Database=...;",
"Description": "Analytics warehouse"
}
}
}
}
HTTP Settings
{
"Http": {
"AllowedHosts": [
"api.github.com",
"api.stripe.com",
"your-internal-api.com"
],
"TimeoutSeconds": 30
}
}
🏗️ Architecture
┌──────────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐
│Claude Desktop│ │ VS Code │ │ Cursor │ │ ChatGPT │
│ │ │(Copilot/ │ │ │ │ Desktop │
│ │ │Continue/ │ │ │ │ │
│ │ │ Cline) │ │ │ │ │
└──────┬───────┘ └────┬─────┘ └───┬────┘ └────┬─────┘
│ │ │ │
└──────────────┴─────┬─────┴────────────┘
│ JSON-RPC over stdio
▼
┌─────────────────────┐
│ dotnet-mcp-server │
│ (MCP Server) │
├─────────────────────┤
│ ┌───────────────┐ │
│ │ DateTime Tool │ │
│ ├───────────────┤ │
│ │ FileSystem │ │
│ ├───────────────┤ │
│ │ SQL Query │ │
│ ├───────────────┤ │
│ │ HTTP Tool │ │
│ ├───────────────┤ │
│ │ Text Tool │ │
│ ├───────────────┤ │
│ │ Data Transform│ │
│ ├───────────────┤ │
│ │ Environment │ │
│ ├───────────────┤ │
│ │ System Info │ │
│ ├───────────────┤ │
│ │ Git Tool │ │
│ └───────────────┘ │
└─────────────────────┘
│
┌────┬───┬───┴───┬────┐
▼ ▼ ▼ ▼ ▼
Files SQL APIs Git OS
📂 Project Structure
dotnet-mcp-server/
├── src/
│ └── McpServer/
│ ├── Protocol/ # MCP/JSON-RPC types
│ ├── Tools/ # Tool implementations
│ ├── Configuration/ # Settings classes
│ ├── McpServerHandler.cs # Main server logic
│ └── Program.cs # Entry point
├── tests/
│ └── McpServer.Tests/ # Unit tests
├── docker/
│ └── appsettings.example.json # Docker config template
├── examples/
│ ├── configs/
│ │ ├── developer.json # Developer profile
│ │ ├── data-analyst.json # Data analyst profile
│ │ └── api-integrator.json # API integrator profile
│ └── SamplePlugin/ # Reference plugin implementation
├── Dockerfile # Multi-stage Alpine build
├── docker-compose.yml # mcp-server + SQL Server 2022
├── .env.example # SQL SA password template
└── README.md
🔧 Adding Custom Tools
创建一个新类来实现 ITool:
public class MyCustomTool : ITool
{
public string Name => "my_tool";
public string Description => "Does something useful";
public JsonSchema InputSchema => new()
{
Type = "object",
Properties = new Dictionary<string, JsonSchemaProperty>
{
["input"] = new() { Type = "string", Description = "Input value" }
},
Required = new List<string> { "input" }
};
public async Task<ToolCallResult> ExecuteAsync(
Dictionary<string, object>? arguments,
CancellationToken cancellationToken)
{
var input = arguments?["input"]?.ToString();
// Do something...
return new ToolCallResult
{
Content = new List<ContentBlock>
{
new() { Type = "text", Text = $"Result: {input}" }
}
};
}
}
注册于 Program.cs:
services.AddSingleton<ITool, MyCustomTool>();
🔌 Plugin Development
您可以使用自己的工具扩展服务器,无需分叉或修改核心项目。插件很简单。NET类库实现 ITool 然后掉进 plugins/ 文件夹。
Scaffold a plugin in one command
第一步: 安装模板包(一次):
dotnet new install DotnetMcpServer.Templates
第二步: 构建一个新的插件项目:
dotnet new mcp-tool -n WeatherTool
cd WeatherTool
步骤3: 实施您的工具--打开 WeatherTool.cs 并遵循TODO标记。
步骤4: 构建和安装:
dotnet build -c Release
窗户:
copy bin\Release\net8.0\WeatherTool.dll "$env:APPDATA\dotnet-mcp-server\plugins\"
Linux/macOS:
cp bin/Release/net8.0/WeatherTool.dll ~/.config/dotnet-mcp-server/plugins/
重新启动服务器——您的工具出现在 tools/list 自动。
Plugin configuration
通过以下方式将值传递给您的插件 appsettings.json:
{
"Plugins": {
"Config": {
"my_api_key": "your-value-here"
}
}
}
使用 PluginContext 工具类中的构造函数模式,用于读取这些值(scaffold文件包含一个注释掉的示例)。
🔍 Troubleshooting
| 问题 | 解决方案 |
|---|---|
| 客户端看不到工具 | 检查配置文件路径是否正确。重新启动客户端。确保路径 dotnet-mcp-server 是绝对的。 |
| “拒绝访问”错误 | 将路径添加到 AllowedPaths 在 appsettings.json |
| SQL连接失败 | 请验证连接字符串。确保SQL Server正在运行。 |
| HTTP请求被阻止 | 将主机添加到 AllowedHosts 在 appsettings.json |
| “服务器未初始化”错误 | 您的客户端必须发送 initialize 在调用工具之前。大多数客户会自动执行此操作。 |
| VS Code Copilot不显示工具 | 请确保您在 代理模式 (非询问/编辑模式)。检查 .vscode/mcp.json 语法。 |
| 工具未加载到游标中 | 转到设置→ MCP并检查服务器是否显示绿色状态。如果需要,重新启动Cursor。 |
查看日志
日志被写入stderr。要查看它们:
dotnet run 2> log.txt
路线图
✅ Phase 1 — Security & Stability
- [x] 文件系统工具的路径遍历预防
- [x] SQL注入预防(仅限SELECT强制执行)
- [x] 支持子域的HTTP主机分配列表验证
- [x] XML解析中的XXE预防
- [x] 带有正则表达式超时的ReDoS保护
- [x] 环境变量敏感值屏蔽
✅ Phase 2 — New Tools
- [x] 文本工具(正则表达式匹配/替换、字数统计、差异、格式JSON/XML)
- [x] 数据转换工具(JSON查询、CSV↔JSON↔XML转换、base64、哈希)
- [x] 环境工具(使用掩码获取/列出/检查环境变量)
- [x] 系统信息工具(操作系统详细信息、进程、磁盘、网络)
- [x] Git工具(只读:状态、日志、差异、分支、责备)
✅ Phase 3 — Production Readiness
- [x] 3.1--具有自包含二进制发布的CI/CD管道
- [x] 3.2--
--validate配置健康检查标志 - [x] 3.3--
--init交互式设置向导 - [x] 3.4--NuGet全局工具(
dotnet tool install -g DotnetMcpServer) - [x] 3.5——带有测试门的Docker多阶段Alpine构建
✅ Phase 4 — MCP Protocol Completeness
- [x] 4.1——资源协议(
resources/list,resources/read) - [x] 4.2——提示协议(
prompts/list,prompts/get) - [x] 4.3——记录协议(
logging/setLevel,日志转发到客户端) - [x] 4.4——进度通知(每个工具流式进度令牌)
✅ Phase 5 — Developer Experience
- [x] 5.1——插件架构(插入式DLL插件)
- [x] 5.2--
dotnet new mcp-tool模板 - [x] 5.3--示例配置文件(开发人员、数据分析师、api集成商)
- [x] 5.4--CONTRIBUTING.md和GitHub问题模板
- [x] 5.5--GitHub Pages文档网站(MkDocs材料)
✅ Phase 6 — Advanced Features
- [x] 6.1--多数据库支持(SQL Server、PostgreSQL、MySQL、SQLite)
- [x] 6.2--审计日志记录(滚动JSONL文件并进行参数净化)
- [x] 6.3——每工具滑动窗口速率限制
- [x] 6.4--具有可配置TTL的每工具响应缓存
✅ Phase 7 — Tool-level Authentication & Permissions
- [x] 7.1-API密钥认证通过
MCP_API_KEY环境变量 - [x] 7.2--按键工具分配列表(将键限制为特定工具)
- [x] 7.3--按键操作列表(将一个键限制为工具中的特定操作)
- [x] 7.4--审核记录包括客户身份名称
Phase 8 ✅ — Document Processing Tool
- [x] 8.1——通过PdfPig读取PDF(文本提取、元数据、搜索)
- [x] 8.2--通过OpenXml+ClosedXML创建Office文档(Word.docx、Excel.xlsx、PowerPoint.pptx)
- [x] 8.3--表格提取(Word+PDF)、带行/列计数的Excel表格列表、进度报告
Phase 9 — Notification & Communication Tool
- []9.1--通过SMTP(MailKit)发送电子邮件通知,收件人分配列表
- []9.2--Microsoft Teams+Slack webhook通知
- []9.3——通用HTTP webhook+Markdown到自适应卡/块工具包模板
贡献
欢迎Bug报告、功能请求和拉取请求!请阅读 贡献.md 在提交之前。
相关项目
- netsragapi --RAG系统中。净值8
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
作者
阿加·萨卡尔
⭐ 如果你觉得这个项目有帮助,请给它一颗星!