使用说明
# MCP2
Windows上用于Claude Desktop的单个二进制MCP服务器。63个工具,涵盖文件编辑、代码搜索、SQLite、MySQL、SSH/SFTP、MSBuild、HTTP和shell。用C#写的。NET框架4.8--一个 MCP2.exe,没有运行时需要安装,没有Node,没有Python,没有Docker。
adriancs2 / Claude-MCP Unlicense · C# · .NET 4.8
它的形状
Claude Desktop ──stdin/stdout JSON-RPC──► MCP2.exe
│
├─ Tools/ (63 ITool classes, auto-discovered)
├─ Services/ (file ops, backup, diff, SSH, MySQL, SQLite)
└─ Core/ (protocol, config, caller check)
每个工具都是一个 .cs 实现一个接口的文件:
public interface ITool
{
string Name { get; }
string Description { get; }
ToolParamList Params { get; }
ToolResult Execute(JObject args);
}
在启动时, ToolDiscovery 反映程序集,实例化实现的所有内容 ITool,并提供它。放下一个新的 .cs 鱼贯而入 Tools/,重新构建,重新启动Claude Desktop——工具显示出来。没有注册表,没有清单,没有手工编写的JSON模式。模式是由fluent生成的 ToolParamList 工具本身的定义。
两种编辑范式,都是一流的
文件编辑是克劳德接触最多的部分,所以这就是设计的回报所在。
内容匹配编辑 通过以下方式定位变化点 文本,而不是行号——这样当之前的编辑移动线条时,它们就不会断裂。 replace_string 是集合中最安全的工具:默认情况下,如果 old_string 出现0或2+次,返回 AMBIGUOUS_MATCH 准确解释如何恢复的错误(添加上下文,切换到 replace_string_nth,或设置 must_be_unique=false).
replace_string must-be-unique, errors on 0 or 2+ matches
replace_string_all every occurrence
replace_string_nth the Nth occurrence, 1-based
replace_string_regex .NET regex with $1, $2, ${name} substitutions
针对线条的编辑 更适合范围工作——“删除第50-80行”,“用这个12行块替换这个30行块”。
replace_line single line
replace_lines range
insert_after_line use line=0 for top-of-file
delete_lines range
batch_edit_lines many edits, one file, one call
batch_edit_lines 是最有趣的一个。您传递了几个引用文件的编辑 当前的 行号。在内部,它在应用之前自下而上对它们进行排序,这样行号在整个批处理过程中都是有效的——没有手动偏移算法。无论编辑次数如何,每个文件都有一个备份,您将获得一个整合的统一差异。
每次编辑都会返回一个统一的差异
这不是装饰。差值由基于LCS的差值计算得出(Services/UnifiedDiff.cs,与 CompareFiles 使用完整的DP表进行两个文件比较)。它正确对齐未更改的行——在600行文件的顶部插入一行会产生一个diff块,而不是599个移位行。预处理在LCS之前修剪了常见的前缀和后缀,行被散列为整数以实现快速相等,并且有一个25M的单元内存保护,因此病理性的50K×50K比较不会对主机造成OOM。
所以每次编辑后,克劳德都会看到这样的东西:
@@ -7,6 +7,7 @@
{
public string Name { get; set; }
public int Count { get; set; }
+ public DateTime CreatedAt { get; set; }
public string Render()
{
克劳德可以在继续之前验证更改是否与意图相匹配,你也可以在对话记录中验证。
默认情况下会进行备份
每个文件修改工具调用 BackupService.CreateBackup 在写作之前。备份土地 ./backups exe(可配置)旁边有时间戳,如 markers.txt.20260514_095422.bak。快速连续编辑可获得毫秒级分辨率,因此不会覆盖任何内容。 undo_last_edit 从最近的备份中恢复。 list_backups 显示可用的内容。 clear_backups 按年龄回收磁盘空间。
create_backup: false 当您真的想跳过它时,支持每次通话。
SSH记住状态
ssh_open 使用来自的命名配置文件打开持久连接 mcp-config.json. ssh_send 在该会话中发出命令-- cd、环境变量、shell状态,所有这些都在调用之间传递。 ssh_close 结束会话。
凭据从不出现在工具参数中。在config中定义一次:
"ssh_profiles": {
"myvps": {
"host": "vps.example.com",
"port": 22,
"username": "root",
"private_key_path": "C:\\Users\\you\\.ssh\\id_rsa",
"passphrase": ""
}
}
然后在对话中: ssh_open("myvps") 你就成功了。配置文件名兼作会话id,所以Claude不必跟踪令牌。
对于单次传输, ssh_upload 和 ssh_download 完全跳过打开/关闭的舞蹈——传递文件和目录的混合(目录递归传输),SFTP连接在一次调用中打开、传输和关闭。
自动发现Visual Studio的MSBuild
msbuild(project: "src/MyApp.sln", target: "Rebuild", configuration: "Release")
没有配置。工具扫描 C:\Program Files\Microsoft Visual Studio\{version}\{edition}\MSBuild\Current\Bin\MSBuild.exe,选择最高版本号,检查社区→ 专业的→ 企业按此顺序,并缓存进程的路径。升级Visual Studio,它就会继续工作。
输出经过后处理:错误始终显示,警告默认汇总为计数(show_warnings: true 扩大)。警告线正则表达式处理4元组跨度(VS 2022+), N> 多进程前缀,以及 MSBUILD : warning MSBxxxx 线。
支持 Build, Rebuild, Clean, Restore 上 .csproj, .sln,以及 .slnx.
MySQL,支持批处理和变量传递
八个MySQL工具,一个连接字符串 mcp-config.json.有趣的是:
batch_mysql_queries_with_variables 让一系列查询共享状态-- @last_id := LAST_INSERT_ID() 步骤1中的信息在步骤2中可用。适用于FK依赖于新PK而无需额外往返的多步插入。
mysql_schema 报表数据库/表/列/ CREATE TABLE 在一个工具中,通过以下方式切换 info_type. batch_mysql_schema 在一次调用中拉取多个表的结构——当Claude在编写查询之前读取多个相关表时非常方便。
mysql_select 返回结果集, mysql_execute 返回受影响的行, mysql_scalar 返回一个值(for COUNT(*), MAX(...)单独的工具意味着Claude选择了正确的形状,并且响应保持较小。
SQLite、零配置和完全信任
四个SQLite工具,专为Claude Code构建。与MySQL不同,不需要配置连接字符串——每次调用都直接获取一个文件路径,可以直接物理访问生产数据库文件。
sqlite_query 是一个结合了读写功能的工具。传递单曲 sql 字符串或数组 statements 在单个事务中以原子方式运行——任何失败都会回滚整个批处理并命名违规语句。 SELECT/PRAGMA 返回格式化行(默认值为50,用覆盖 max_rows); INSERT/UPDATE/DELETE/DDL报告影响了行。输出有四种格式-- ascii, json (键入值,未字符串化), csv, markdown.
sqlite_schema 报告列、索引和 CREATE 一张表、几张表或 ["*"] 为了所有人。 sqlite_list_databases 递归发现 .db/.sqlite/.sqlite3/.db3 目录下的文件。 sqlite_create_database 显式创建一个新文件——与 sqlite_query 因此,一个拼写错误的路径不能悄无声息地生成一个杂散的数据库。
由...支持 Stub.System.Data.SQLite.Core --本机引擎以二进制形式提供,无需安装外部SQLite。
进程身份检查
CallerValidator 启动时运行一次,通过WMI向上遍历两级父进程,并根据Claude Desktop安装模式检查可执行路径:
C:\Users\{user}\AppData\Local\AnthropicClaude\app-{n}.{n}.{n}\claude.exe
C:\Program Files\WindowsApps\Claude_{version}_{arch}__{hash}\app\Claude.exe
传统和MSIX安装路径都可以识别。如果父母不是Claude Desktop(祖父母也不是,因为Claude可以通过 cmd.exe),启动抛出,进程退出。有一个 MCP_BYPASS_VALIDATION 如果你需要从其他地方集成env-var,但默认行为使二进制文件不会成为机器上另一个应用程序可以外壳到的通用exec-owny端点。
自动发现和零注册
ToolDiscovery.DiscoverTools() 30行。它反映了装配,找到了每一块混凝土 ITool,调用无参数构造函数,按以下方式注册 Name。如果一个工具在构建过程中抛出,它会登录到stderr并继续运行——一个损坏的工具不会杀死服务器。
MCP协议的JSON模式由相同的 ToolParamList 你用C#来声明参数:
public ToolParamList Params => new ToolParamList()
.String("path", "Full path to the file", required: true)
.String("old_string", "Text to find...", required: true)
.String("new_string", "Replacement text...", required: true)
.Bool("must_be_unique", "...", defaultValue: true)
.Bool("case_sensitive", "Case-sensitive match", defaultValue: true);
ToolDiscovery.GenerateToolDefinitions 遍历同一列表,发出具有正确类型、默认值、枚举和必填字段的JSON模式。描述、模式和运行时验证都共享一个源。
完整的工具列表
文件操作(11): read_file · count_lines · find_pattern · find_all_occurrences · write_file · append_to_file · copy_file · move_file · delete_file · file_exists · get_file_info
文件编辑(9): replace_line · replace_lines · insert_after_line · delete_lines · batch_edit_lines · replace_string · replace_string_all · replace_string_nth · replace_string_regex
目录(6): list_directory · create_directory · copy_directory · move_directory · delete_directory · batch_copy_files
搜索(2): find_in_files · replace_in_files (预设排除: dotnet, web, python)
备份与差异(6): backup_file · undo_last_edit · list_backups · compare_files · diff_preview · clear_backups
批读取(1): batch_read_files --一次调用中的完整文件或每个条目行范围
MySQL(8): mysql_execute · mysql_select · mysql_scalar · mysql_schema · mysql_test · batch_mysql_schema · batch_mysql_queries · batch_mysql_queries_with_variables
SQLite(4): sqlite_query · sqlite_schema · sqlite_list_databases · sqlite_create_database
HTTP(3): http_get · http_post · http_request
拉链(5): zip_file · zip_folder · extract_zip · extract_zip_content · list_zip_contents
图片(1): view_image --base64往返,这样克劳德就可以看到磁盘上的图像
外壳(1): run_command --PowerShell、cmd或任何可执行文件;stdout/stderr返回
构建(1): msbuild
SSH(5): ssh_open · ssh_send · ssh_close · ssh_upload · ssh_download
设置
1.获得构建
Grab MCP2.zip 从 发布,或打开 src/MCP2.slnx 在Visual Studio中,您可以自己构建它。
2.把它扔到某个地方
D:\Claude Files\MCP2\
├─ MCP2.exe
├─ mcp-config.json (auto-generated on first run if missing)
└─ backups\ (created on first edit)
3.配置(所有字段均为可选)
{
"mysql_connection_string": "Server=localhost;Database=mydb;User=root;Password=secret;",
"gc_memory_threshold_mb": 150,
"debug_logging": false,
"backup_directory": null,
"ssh_profiles": {
"myserver": {
"host": "192.168.1.100",
"port": 22,
"username": "admin",
"password": "your-password"
}
}
}
如果不使用MySQL,请跳过MySQL字符串。跳过 ssh_profiles 如果你不使用SSH。MySQL工具在没有连接字符串的情况下调用时会礼貌地出错——它们不会使服务器崩溃。
4.指向克劳德桌面
编辑 claude_desktop_config.json (%APPDATA%\Claude\ 或MSIX等效物):
{
"mcpServers": {
"mcp2": {
"command": "D:\\Claude Files\\MCP2\\MCP2.exe",
"args": []
}
}
}
重新启动克劳德桌面。问它 list_directory 在任何文件夹上进行确认。
添加工具
创建 Tools/Misc/EchoTool.cs:
using MCP2.Core;
using Newtonsoft.Json.Linq;
namespace MCP2.Tools.Misc
{
public class EchoTool : ITool
{
public string Name => "echo";
public string Description => "Echo a string back. Useful for sanity-checking the connection.";
public ToolParamList Params => new ToolParamList()
.String("text", "Text to echo", required: true);
public ToolResult Execute(JObject args)
{
string text = args.Value<string>("text") ?? "";
return ToolResult.Success(text);
}
}
}
重建。重新启动克劳德桌面。 echo 现在在工具列表中。没有注册,没有清单,没有模式创作—— ToolParamList fluent构建器是模式。
依赖项
| 包装 | 用途 |
|---|---|
| Newtonsoft。JSON | JSON-RPC解析 |
| MySQL连接器 | MySQL访问 |
| 树桩。系统。数据。SQLite。核心 | SQLite访问(捆绑原生引擎) |
| SSH。网 | SSH+SFTP |
就是这样。其他一切——差异算法、备份管理、MSBuild发现、调用者验证、JSON模式生成——都是项目代码 src/MCP2/.
延伸阅读
许可证
无执照 --公共领域。接受、分叉、发货、出售。无需注明出处。
