VS MCP服务器
Visual Studio的模型上下文协议(MCP)服务器 --使Claude Code等AI代理能够控制Visual Studio的功能,包括调试、构建、编辑和UI自动化。
这是一个 测试版发布。欢迎在以下网址提供反馈和错误报告 .
100%人工智能生成 --这个项目中的所有代码都完全由AI(Claude)生成。
特性
VS MCP服务器公开 111工具 涵盖以下类别:
| 类别 | 工具 | 描述 |
|---|
| 常规 | 3 | 执行VS命令,获取IDE状态,查看工具帮助 |
| 解决方案和项目 | 5 | 打开/关闭解决方案,列出/检查项目 |
| 构建 | 6 | 构建解决方案/项目、清理、重建、获取构建错误、切换配置 |
| 编辑器 | 7 | 打开/关闭/读/写/编辑文件,在文件中查找 |
| 编辑预览 | 4 | 使用VS差异查看器进行差异预览、批准/拒绝编辑 |
| 代码导航 | 3 | 转到定义,查找引用,转到实现 |
| 解决方案资源管理器 | 6 | 添加/删除项目、文件和引用 |
| 调试器 | 13 | 启动/停止/重新启动、附加、步进、调用堆栈、本地、线程、求值、不调试运行 |
| 断点 | 4 | 设置/删除/列出、启用/禁用断点 |
| 输出和诊断 | 5 | 读/写/清除输出窗格、错误列表、XAML绑定错误 |
| 控制台 | 3 | 读取控制台输出,发送输入/按键,获取调试应用程序的控制台信息 |
| UI自动化 | 10 | 捕获屏幕截图,检查UI树,查找/单击/右键单击/拖动/调用元素 |
| Web | 12 | 通过Chrome CDP和Firefox RDP实现浏览器自动化——导航、DOM、控制台、网络、屏幕截图 |
| 测试 | 3 | 发现、运行和查看测试结果 |
| NuGet | 5 | 搜索、安装、更新、删除NuGet包 |
| 高级调试 | 20 | 监视、线程/进程管理、即时窗口、寄存器、内存、并行堆栈 |
工具详细信息
将军
| 工具 | 说明 |
|---|
execute_command | 按名称执行Visual Studio命令 |
get_status | 获取当前Visual Studio状态,包括解决方案状态、活动文档和调试器模式 |
get_help | 获取所有可用vs mcp工具的分类列表及其说明 |
解决方案
| 工具 | 说明 |
|---|
solution_open | 在Visual Studio中打开解决方案或项目文件 |
solution_close | 关闭当前解决方案 |
solution_info | 获取有关当前打开的解决方案的信息 |
项目
| 工具 | 说明 |
|---|
project_list | 列出当前解决方案中的所有项目 |
project_info | 获取特定项目的详细信息 |
构建
| 工具 | 说明 |
|---|
build_solution | 构建整个解决方案(如果处于活动状态,则自动停止调试器) |
build_project | 构建特定项目(如果处于活动状态,则自动停止调试器) |
clean | 清理解决方案生成输出(如果处于活动状态,则自动停止调试器) |
rebuild | 清理并重建整个解决方案(如果调试器处于活动状态,则会自动停止调试器) |
get_build_errors | 从Visual Studio错误列表中获取生成错误和警告列表 |
build_configuration | 获取或设置活动解决方案构建配置和平台(例如调试/发布、任何CPU/x64) |
编辑
| 工具 | 说明 |
|---|
file_open | 在Visual Studio编辑器中打开文件 |
file_close | 在编辑器中关闭文件 |
file_read | 读取具有可选行范围的文件内容 |
file_write | 将内容写入文件,替换其全部内容 |
file_edit | 通过用新文本替换特定文本来编辑文件 |
get_active_document | 获取编辑器中当前活动文档的信息 |
find_in_files | 在解决方案中的文件中搜索文本 |
编辑预览
| 工具 | 说明 |
|---|
edit_preview | 在VS中显示拟议更改的差异预览,并创建待批准的编辑 |
edit_approve | 批准待处理的编辑并将更改应用于文件 |
edit_reject | 拒绝待处理的编辑并放弃更改 |
edit_list_pending | 列出所有待定的编辑预览及其状态 |
代码导航
| 工具 | 说明 |
|---|
code_goto_definition | 导航到指定位置的符号定义 |
code_find_references | 在指定位置查找符号的所有引用 |
code_goto_implementation | 导航到接口或抽象成员的实现 |
解决方案资源管理器
| 工具 | 说明 |
|---|
solution_add_project | 将现有项目添加到当前解决方案 |
solution_remove_project | 从当前解决方案中删除项目 |
project_add_file | 将现有文件添加到项目中 |
project_remove_file | 从项目中删除文件 |
project_add_reference | 将项目添加到项目引用 |
project_remove_reference | 从项目中删除引用 |
调试器
| 工具 | 说明 |
|---|
debug_start | 开始调试启动项目(相当于F5) |
debug_start_without_debugging | 启动启动项目,不附加调试器(相当于Ctrl+F5) |
debug_stop | 停止调试当前会话 |
debug_restart | 重新启动调试当前会话 |
debug_attach | 按名称或PID将调试器附加到正在运行的进程 |
debug_break | 在当前执行点中断(暂停)调试器 |
debug_continue | 在断点或中断后继续(恢复)执行 |
debug_step | 遍历代码(方向:越过、进入或退出) |
debug_get_callstack | 获取活动线程的当前调用堆栈 |
debug_get_locals | 获取当前堆栈帧中的局部变量 |
debug_get_threads | 获取当前调试会话中的所有线程 |
debug_get_mode | 获取当前调试器模式(设计、运行或中断) |
debug_evaluate | 在当前调试上下文中计算表达式(仅在中断模式下有效) |
断点
| 工具 | 说明 |
|---|
breakpoint_set | 设置断点(位置、条件、点击次数或函数断点) |
breakpoint_remove | 删除特定文件和行处的断点 |
breakpoint_list | 列出当前解决方案中的所有断点 |
breakpoint_enable | 在特定文件和行上启用或禁用断点 |
输出和诊断
| 工具 | 说明 |
|---|
output_write | 将文本写入Visual Studio输出窗格 |
output_read | 读取Visual Studio输出窗口窗格的内容(支持正则表达式模式过滤) |
output_clear | 清除Visual Studio输出窗口窗格的内容 |
error_list_get | 从Visual Studio错误列表窗口获取所有项目 |
diagnostics_binding_errors | 从调试输出窗格中提取XAML/WPF绑定错误 |
控制台
| 工具 | 说明 |
|---|
console_read | 读取已调试控制台应用程序的控制台输出缓冲区 |
console_send | 将文本输入或特殊键发送到调试的控制台应用程序的控制台 |
console_get_info | 获取已调试控制台应用程序的控制台缓冲区大小、光标位置和窗口信息 |
用户界面自动化
| 工具 | 说明 |
|---|
ui_capture_window | 捕获已调试应用程序主窗口的屏幕截图(即使在被遮挡的情况下,也使用WGC进行可靠的捕获;在调试中断期间工作) |
ui_capture_region | 捕获调试应用程序窗口特定区域的屏幕截图 |
ui_snapshot | 在一次调用中捕获一个紧凑的语义快照(修剪的UIA树+截图+焦点);针对LLM驱动的UI测试进行了优化 |
ui_get_tree | 获取已调试应用程序主窗口的UI元素树 |
ui_find_elements | 查找符合指定条件的UI元素(支持 exact/contains/regex 匹配模式, hasPattern 过滤器,以及 ancestorAutomationId 范围界定) |
ui_get_element | 通过特定UI元素的Automation Id获取其详细属性 |
ui_click | 按Automation Id、Name或屏幕坐标单击UI元素 |
ui_double_click | 按Automation Id、Name或屏幕坐标双击UI元素 |
ui_right_click | 按Automation Id、Name或屏幕坐标右键单击UI元素 |
ui_drag | 从开始坐标到结束坐标执行拖放操作 |
ui_set_value | 使用ValuePattern设置UI元素的值 |
ui_invoke | 使用InvokePattern调用UI元素上的默认操作 |
ui_send_keys | 发送键盘输入(快捷键如 ctrl+f,文本键入)到调试的应用程序 |
ui_wait_for_element | 等待UI元素达到给定状态(appears/disappears/enabled/focused)超时 |
ui_wait_idle | 等待UI自动化树在安静期内停止更改(在触发异步UI更新后有用) |
手表
| 工具 | 说明 |
|---|
watch_add | 添加一个监视表达式并返回其当前值(仅在中断模式下有效) |
watch_remove | 按值或索引删除监视表达式 |
watch_list | 列出所有观察表达式及其当前值 |
线程
| 工具 | 说明 |
|---|
thread_switch | 按线程ID切换活动(当前)线程 |
thread_set_frozen | 冻线或解冻线 |
thread_get_callstack | 按ID获取特定线程的调用堆栈 |
过程
| 工具 | 说明 |
|---|
process_list_debugged | 列出当前正在调试的所有进程 |
process_list_local | 列出可用于附加调试器的本地进程 |
process_detach | 将调试器与特定进程分离 |
process_terminate | 终止正在调试的进程 |
立即
| 工具 | 说明 |
|---|
immediate_execute | 在调试器上下文中执行具有副作用的表达式(如即时窗口) |
模块
| 工具 | 说明 |
|---|
module_list | 列出当前调试会话中加载的所有模块(DLL/程序集) |
注册
| 工具 | 说明 |
|---|
register_list | 获取常见CPU寄存器的值(在本机或混合模式调试中效果最佳) |
register_get | 按名称获取特定CPU寄存器的值 |
异常
| 工具 | 说明 |
|---|
exception_settings_get | 获取异常中断设置 |
exception_settings_set | 配置特定异常类型的中断时间 |
记忆
| 工具 | 说明 |
|---|
memory_read | 读取地址表达式中的内存字节或获取变量的内存表示 |
并行
| 工具 | 说明 |
|---|
parallel_stacks | 在树视图中获取所有线程的调用堆栈,对共享公共堆栈帧的线程进行分组 |
parallel_watch | 在所有线程上计算相同的表达式并比较结果 |
parallel_tasks_list | 列出TPL(任务并行库)任务信息 |
网络
| 工具 | 说明 |
|---|
web_connect | 连接到浏览器进行web调试(通过CDP连接Chrome/Edge,通过RDP连接Firefox) |
web_disconnect | 断开与浏览器的连接 |
web_status | 获取当前浏览器连接状态,包括控制台/网络消息计数 |
web_navigate | 将浏览器导航到URL |
web_screenshot | 捕获当前页面的屏幕截图 |
web_dom_get | 获取当前页面的DOM树,深度可配置 |
web_dom_query | 使用CSS选择器查询DOM元素 |
web_console | 管理浏览器控制台消息(启用/获取/清除) |
web_js_execute | 在浏览器页面上下文中执行JavaScript |
web_network | 管理网络监控(启用/获取/清除) |
web_element_click | 单击CSS选择器找到的DOM元素 |
web_element_set_value | 设置CSS选择器找到的输入元素的值 |
测试
| 工具 | 说明 |
|---|
test_discover | 发现解决方案或特定项目中的所有测试 |
test_run | 运行测试并获取结果,可选择按测试名称/类别进行筛选 |
test_results | 获取上次测试运行的详细结果(或特定TRX文件) |
纽吉特
| 工具 | 说明 |
|---|
nuget_list | 列出特定项目的已安装NuGet包 |
nuget_search | 在NuGet.org上搜索NuGet包 |
nuget_install | 将NuGet包安装到项目中 |
nuget_update | 将NuGet包更新到特定版本 |
nuget_uninstall | 从项目中删除NuGet包 |
需求
- Visual Studio 2019 (16.0或更高), Visual Studio 2022,或 视觉工作室2026 --社区版、专业版或企业版
- 视窗
- .NET Framework 4.8
- .NET 8.0运行时 (适用于StdioProxy组件)
安装
- 重新启动Visual Studio
- 当Visual Studio启动时,MCP服务器会自动启动
设置——与Claude代码连接
注: %LOCALAPPDATA% 在bash中无法识别。您必须指定完整的绝对路径(例如。 C:\Users\\AppData\Local\...).
选项A --CLI命令:
claude mcp add vs-mcp -- "C:\Users\\AppData\Local\VsMcp\bin\VsMcp.StdioProxy.exe"
选项B --手动配置(添加到MCP配置JSON中):
{
"mcpServers": {
"vs-mcp": {
"command": "C:\\Users\\\\AppData\\Local\\VsMcp\\bin\\VsMcp.StdioProxy.exe"
}
}
}
建筑
该扩展在Visual Studio中运行基于HTTP的MCP服务器。轻量级的StdioProxy将基于stdio的MCP客户端(如Claude Code)连接到HTTP服务器,实现无缝通信。
Claude Code ──stdio──▶ StdioProxy ──HTTP──▶ VS Extension
(relay) (MCP server)
当Visual Studio未运行时,StdioProxy为基本协议操作提供脱机响应,并返回缓存的工具定义。
多个VS实例
VS MCP服务器支持同时运行多个Visual Studio实例。每个VS实例都通过端口文件注册自己(%LOCALAPPDATA%\VsMcp\server. .port)包含其HTTP端口和当前打开的解决方案路径。
实例选择
StdioProxy根据命令行参数选择要连接的VS实例:
| 论点 | 行为 |
|---|
| *(无)* | 自动检测--从当前工作目录向上查找 .sln 文件并连接到匹配的VS实例。如果没有,则回退到最近启动的VS实例 .sln 找到了。 |
| `--sln |
| ` | 连接到已打开指定解决方案的VS实例 |
| `--pid |
| ` | 使用指定的进程ID连接到VS实例 |
基于CWD的自动检测
当否 --sln 或 --pid 如果提供了参数,StdioProxy会自动发现 .sln 从当前工作目录向上移动文件。这意味着在大多数情况下, 不需要显式配置 --简单地从项目目录中启动Claude Code就足够了。
| 场景 | 行为 |
|---|
1 .sln found | 使用该解决方案自动连接到VS实例 |
多个 .sln 找到,1在VS中打开 | 连接到匹配的VS实例 |
多个 .sln 找到,多个在VS中打开 | 连接到最接近的匹配项(最接近CWD),并在 initialize 回应 |
多个 .sln 找到,VS中没有打开 | 返回默认行为,并包含提示用户选择的提示 |
没有 .sln found | 返回到最近启动的VS实例 |
配置示例
单个实例 (自动检测,无需额外配置):
claude mcp add vs-mcp -- "C:\Users\\AppData\Local\VsMcp\bin\VsMcp.StdioProxy.exe"
多个实例 (基于显式解决方案——在CWD自动检测不足时有用):
{
"mcpServers": {
"vs-mcp-frontend": {
"command": "C:\\Users\\\\AppData\\Local\\VsMcp\\bin\\VsMcp.StdioProxy.exe",
"args": ["--sln", "C:\\Projects\\Frontend\\Frontend.sln"]
},
"vs-mcp-backend": {
"command": "C:\\Users\\\\AppData\\Local\\VsMcp\\bin\\VsMcp.StdioProxy.exe",
"args": ["--sln", "C:\\Projects\\Backend\\Backend.sln"]
}
}
}
工具筛选
使用 --tools 参数仅加载所需的工具类别。这减少了暴露给AI代理的工具数量,从而提高了令牌效率和响应相关性。
| 预设 | 类别 |
|---|
core | 常规、解决方案、项目、构建、编辑器、编辑预览、输出、导航、NuGet、解决方案资源管理器、测试 |
debug | 调试器、断点、监视、线程、进程、立即、模块、寄存器、异常、内存、并行、诊断、控制台 |
web | Web |
ui | UI |
示例:
claude mcp add vs-mcp -- "C:\Users\\AppData\Local\VsMcp\bin\VsMcp.StdioProxy.exe" --tools core,debug
{
"mcpServers": {
"vs-mcp": {
"command": "C:\\Users\\\\AppData\\Local\\VsMcp\\bin\\VsMcp.StdioProxy.exe",
"args": ["--tools", "core,debug"]
}
}
}
您还可以指定单个类别名称(例如。 --tools General,Build,Debugger).省略 --tools 加载所有工具。
重新连接
- 如果重新启动VS,StdioProxy将在下一次重新连接
tools/call 请求。 - 在发现过程中,来自崩溃或关闭的VS实例的过时端口文件会自动清理。
捆绑的Claude代码技能
VS扩展提供了一小部分克劳德代码技能,以补充MCP 工具。它们在扩展启动时自动部署到 %USERPROFILE%\.claude\skills\,因此Claude Code无需手动设置即可拾取它们。
| 技能 | 目的 |
|---|
vs-ui-explore | VS调试对象的自主UI抓取——通过以下方式驱动应用程序 ui_snapshot, ui_find_elements,以及 ui_wait_* 原语,然后报告崩溃、错误对话框、无法访问的屏幕和禁用但预期的状态。使用“抓取UI并报告错误”等提示触发它。 |
源文件位于 src/VsMcp.Extension/Skills/;在那里编辑它们和 扩展将在下次启动时重新部署更新的副本(它比较文件 内容并跳过未更改的文件)。
贡献
拉取请求不被接受。
对于功能请求和错误报告,请使用 .
许可证
MIT许可证