WinCode
WinCode is a local MCP server for AI coding agents that combines Windows UI inspection with .NET/code navigation and analysis.\n\n- Workspace analysis: Open a project workspace, detect project types, solution files, languages, git status, and architecture layers.\n- Code discovery: Find symbols (classes, interfaces, methods) and references across the workspace with signatures and line numbers.\n- Context preparation: Extract concise, decision-ready code context using semantic distillation and optional Tree-sitter compression.\n- Change safety: Analyze downstream impact, affected callers, and risk before modifying code.\n- Refactoring guidance: Get structured step-by-step refactoring plans with safety boundaries.\n- Safe file cleanup: Move obsolete files to a trash/ directory with metadata instead of permanent deletion.\n- Environment diagnostics: Check .NET/Windows SDK readiness, solution files, and development prerequisites.\n- Connectivity check: Verify the Gateway is online via wincode_hello_world.\n- UI inspection: (Described in README) Read controls in running Windows apps without activating the window, returning structured JSON for text-only LLMs.\n- UI-to-source mapping: Inspect controls and find candidate XAML/C# source locations with file paths, line numbers, and hashes.
Provides tools for analyzing .NET project and solution structure, searching code symbols and references, preparing scoped code context, planning refactorings, and correlating running Windows desktop UI controls with XAML source declarations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WinCodeWhat's the blast radius if I rename GetUserById in UserRepository.cs?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WinCode
Setup / 配置指南 · Code / 代码分析 · UI inspection / UI 检查 · Changelog / 版本记录
English
WinCode is a local server implementing the Model Context Protocol (MCP) for AI coding agents. It combines Windows UI Automation (UIA), code navigation and .NET project analysis, so an agent can inspect a running application and investigate its source code through the same connection.
Features
Background UI inspection: Read controls in a running application without activating its window or changing keyboard focus. Continue working in other applications while the agent inspects the target window.
Support for text-only LLMs: Control names, hierarchy, properties and states are returned as structured JSON. Through an MCP-capable agent client, models such as DeepSeek used without image input can inspect desktop interfaces. Screenshots are optional.
UI inspection with source navigation: Inspect a control, find candidate XAML declarations and related C# code, then read the relevant source lines. File paths, line numbers and content hashes make the findings traceable.
Faster, more accurate inspection in everyday use: In our day-to-day Windows/.NET development, WinCode makes UI inspection and source navigation faster and more accurate than screenshot-based Computer Use workflows. Direct access to structured control properties and source locations reduces reliance on image interpretation and repeated interaction. Targeted queries and compact responses also reduce the amount of data the model needs to process.
Project and code analysis: Explore declared solution and project references, search text and symbols, read selected code, and assess change impact. Built-in text analysis works by default; optional Roslyn integration provides compiler-backed C# symbol and reference analysis.
A recorded test with a 222-node window reduced response text from approximately 62 KB to 1.6 KB by querying a specific control instead of returning the full tree. See the test record.
Example: Investigate a disabled Save button
Find the application's window, check whether the Save button is enabled without bringing the window to the foreground, and locate the relevant XAML and C# code.
The agent can complete this investigation using text output:
Call
wincode_ui_list_windowswithprocessNameortitleContainsto obtain the target process ID (pid) and window handle (hwnd).Call
wincode_ui_reviewwith the target control and relevant source files. If those files are not yet known, locate them with the code navigation tools first.
{
"pid": 12345,
"hwnd": "0x123456",
"backgroundOnly": true,
"capture": "none",
"responseFormat": "compact",
"query": { "automationId": "SaveButton", "controlType": "Button" },
"maxDepth": 3,
"maxNodes": 30,
"candidateFiles": ["Views/MainWindow.xaml"],
"candidateCodeFiles": ["ViewModels/MainWindowViewModel.cs"]
}Read the returned control properties and source candidates. For example,
isEnabled: falsereports that the control is disabled. Follow the returnednextRequestarguments withwincode_prepare_contextto inspect the candidate declaration or assignment.Check the source before explaining the behavior. A matching binding or command name identifies code to investigate; it does not by itself establish the active
DataContextor the reason the button is disabled.
The IDs and paths above are placeholders. Use values from the actual window and workspace. When only the control tree is needed, use wincode_ui_inspect without the source-file arguments. Add readStates: true for toggle, selection or expand/collapse states; use capture: "annotated" when a numbered screenshot is useful for visual review.
Quick start
Requirements: Windows x64, Git 2.36 or later, Node.js >=22 (24 primary, 22 compatible), and .NET SDK 10.0.303. The SDK version is pinned in global.json with roll-forward disabled. The published UI helper and optional Tray require the .NET 10 Windows Desktop runtime. Windows 11 x64 is the development and test baseline.
1. Build and verify WinCode
git clone https://github.com/linnnn89/WinCode.git
cd WinCode
npm ci
npm run check
npm run delivery:verifyRunning npm run check builds the Gateway and native components, runs core regression and stdio integration tests, and verifies the delivery manifest. Desktop tests are available separately.
2. Configure the MCP connection
For Codex with persistent terminal support, the Skill on-demand mode starts WinCode only when needed and reuses one connection throughout the task. Install the Skill, disable the native WinCode MCP entry, and refresh the client connection before using this mode. The Skill starts dist/Client/SkillSessionCli.js in an interactive execution session; results remain available as full JSON and image files. It requires an extra file read per result. Other clients can use the native stdio configuration below.
For clients that support mcpServers, add the following stdio configuration. Explicitly setting --workspace is recommended:
{
"mcpServers": {
"wincode": {
"command": "node",
"args": ["C:/path/to/WinCode/dist/index.js", "--workspace", "C:/path/to/project"]
}
}
}Replace both paths with existing absolute paths. The WinCode installation directory and your project directory may be different. Ensure node is available in PATH, or use its absolute executable path.
For a graphical configuration interface, use type stdio, command node, and three separate argument entries: the dist/index.js path, --workspace, and the project path. Do not add surrounding quotes to individual argument entries, even when a path contains spaces. No additional environment variables are required for the default configuration.
3. Verify the connection and try a query
After connecting, ask the agent to call wincode_hello_world and confirm that health.workspaceBinding.root matches your project. Then try:
Summarize this project's structure, list the contents of
src, and locate the code responsible for saving data.
The agent can use workspace_open to obtain the project summary, wincode_list_directory to browse a directory, and wincode_search_text to locate code. For UI inspection, start the target application in your interactive Windows desktop session and use the example above.
Each connection is bound to one workspace for its lifetime. workspace_open confirms or recovers that workspace; it does not switch projects. A different root returns WORKSPACE_MISMATCH. Use a separately configured connection for another project. If --workspace is omitted, the connection binds to the server's launch directory.
See the Skill and MCP setup guide for client configuration and the optional agent Skill. After rebuilding, reconnect the client's MCP server to load the updated process and tool schemas.
Common workflows and tools
Code navigation: Start with a known directory, file or symbol. wincode_search_text searches within scopePaths using plain strings rather than regular expressions; wincode_file_outline returns a file's declarations and line count. Both provide follow-up arguments for reading source with wincode_prepare_context.
{
"task": "Review the save logic",
"lineRanges": [{ "file": "src/Service.cs", "startLine": 50, "endLine": 80 }],
"maxTokens": 2000
}Use actual paths and line numbers from the search result. lineRanges selects known lines; scopeFiles limits reading to known files. candidateFiles prioritizes files during discovery and is not an exclusive scope. Check returned ranges, coverage and truncation before deciding whether more code is needed. maxTokens is an estimate based on UTF-16 character count, not a model-specific token count.
UI inspection: Select a window, query the relevant control or subtree, and request source candidates when needed. responseFormat: "compact" retains control IDs, names, hierarchy and states while omitting per-node geometry and class names. Use full when coordinates or additional detail are needed. Unsupported or unknown control states are distinct from false.
C# semantic analysis: Enable Roslyn explicitly, search for a symbol, and pass its returned location unchanged as symbolLocation to reference, impact or refactoring tools. Search again when the tool reports a stale location. The default local-text provider offers text-based navigation and reports its semantic limitations.
Tool | Purpose |
| Confirm or recover the fixed workspace and return a compact project summary. |
| Browse a directory with depth, entry-count and output limits. |
| Read solution structure and declared project references. |
| Find literal text within selected files or directories. |
| Read a file's local declarations and observed line count. |
| Read selected source excerpts with paths, line ranges and coverage information. |
| Search symbols using the configured provider. |
| Find references and report known totals, returned counts and truncation. |
| Assess potential change impact and report uncertainty when evidence is incomplete. |
| Suggest checks and verification steps for a proposed refactoring. |
| Move validated workspace files to |
| List visible top-level windows with process and title filters. |
| Read controls and optional states or screenshots. |
| Inspect UI and return candidate XAML/C# source locations. |
| Read instance identity, workspace binding, capabilities and known status. |
| Actively check SDKs, Git and the local environment. |
wincode_analyze_change_impact is an alias of analyze_change_impact. Detailed parameters and workflows: code analysis, UI inspection, diagnostics. To inspect a tool's schema in the running connection, pass its name as toolName to wincode_hello_world.
Optional configuration
Roslyn: Add
--roslyn-configfollowed by an absolute configuration-file path. This enables the C# Code Host and requires explicit authorization for MSBuild project evaluation. Configuration, input tracking and recovery are described in the code guide.Connection configuration: Run
node C:/path/to/WinCode/dist/index.js --print-connection --workspace C:/path/to/projectto generate a project's stdio configuration without starting its Gateway or changing client settings. This generates the default local-text configuration; add any Roslyn or Tray options separately.Tray and memory management: Add
--trayto the Gateway arguments, reconnect, and manually starttools/WinCode.Tray/bin/Release/net10.0-windows/win-x64/publish/WinCode.Tray.exe --show. In 设置 / 内存管理, select an idle instance and choose 释放 Roslyn 内存. The next explicit symbol search reloads the project; previous symbol locations become invalid. Automatic idle release is disabled. Exiting Tray leaves MCP running. See the diagnostics guide.Agent Skill: After updating WinCode, use
npm run skill:check -- <absolute-skill-directory>to check the installed Skill.npm run skill:sync -- <absolute-skill-directory>backs up and synchronizes the Skill documents managed by the sync script. It does not change MCP configuration or restart a connection.
Scope and limitations
Desktop access: UI inspection is read-only. It does not click controls, type text or read input-field values. Background mode requires both PID and HWND, supports non-minimized windows, and does not activate or restore the target. UI inspection requires an interactive Windows desktop session and does not support headless operation.
UIA and visual rendering: Available properties depend on the application's UIA provider. WPF is covered by the project's desktop tests; other frameworks and custom-rendered controls may expose less information. Colors, icons and rendering quality require visual review. Background screenshots use
PrintWindowwithout screen-capture fallback; check the returned capture-quality indicators.Source mapping: XAML and C# matches identify candidate source locations, with
runtimeSourceVerified: false. The tool does not verify that the running build matches the source, resolve dynamic bindings or runtime templates, or determine the activeDataContext.Analysis coverage: Project structure analysis reads
.slnand.csprojdeclarations without MSBuild evaluation. Text-based references are heuristic. Review completeness, omissions and diagnostics before drawing conclusions; no matches in a limited scan do not establish absence across the project.Resource limits: Requests, traversal and response size have explicit limits. Overload returns
SERVER_BUSY; queue time counts toward the timeout. Output limits do not represent process memory limits. Full concurrency, cache and process-lifecycle details are in the architecture guide.Inspection notice: During inspection, a semi-transparent
REC / WinCodingstatus overlay is displayed without taking focus, and minimal local audit metadata is recorded under%LOCALAPPDATA%/WinCode/logs/ui-audit. See the diagnostics guide for audit-log maintenance.
Development and documentation
Current source version: 0.15.0. See CHANGELOG for version history and migration notes. Windows 11 x64 is the reference platform; ports to other operating systems require adaptation and separate validation.
npm run check # Builds, core regression, stdio integration and delivery verification
npm run check:desktop # WPF and UI-to-source tests; requires an interactive Windows desktop
npm run delivery:verify # Verify Gateway, native components and managed Skill artifacts
npm run test:inventory # Verify automated-test suite registration
npm run benchmark:agent -- 1 # Run one iteration of the optional scripted benchmarkCI runs on Windows with Node.js 22 and 24 and the pinned .NET SDK. The Node.js 22 job includes additional native and integration checks; desktop tests run separately. Benchmark reports measure scripted scenarios, including calls, response size and execution time. See the linked records for test conditions and results.
Contributing: builds, test suites and delivery requirements.
Architecture and data flow: components, interfaces, resource limits and lifecycle management.
Skill and MCP setup: installation and client configuration.
Work log and remaining test plan: historical verification, known issues and pending validation.
Related MCP server: ACE-MCP
简体中文
WinCode 是面向 AI 编程智能体的本地模型上下文协议(Model Context Protocol,MCP)服务器,集成 Windows UI Automation(UIA)、代码导航和 .NET 项目分析功能。智能体可以通过同一连接检查正在运行的应用,并查阅相关源码。
核心功能
**后台 UI 检查:**无需激活目标窗口或切换键盘焦点,即可读取运行中应用的控件信息。智能体检查目标窗口时,用户可以继续使用其他应用。
**支持纯文本大语言模型:**以结构化 JSON 返回控件名称、层级、属性和状态。通过支持 MCP 的智能体客户端,DeepSeek 等以纯文本方式使用的模型也能检查桌面界面,无需输入图像;截图为可选功能。
**结合源码分析 UI:**检查运行时控件,查找可能对应的 XAML 声明和相关 C# 代码,再读取具体源码。结果包含文件路径、行号和内容哈希,便于核查。
**实际使用中更快、更准确:**在日常 Windows/.NET 开发中,使用 WinCode 检查 UI 和定位源码,比基于截图的 Computer Use 工作流更快、更准确。通过直接获取结构化的控件属性和源码位置,可以减少对图像识别的依赖和反复交互;配合定向查询与精简响应,还能减少模型需要处理的数据量。
**项目与代码分析:**查看解决方案和项目中声明的引用关系,搜索文本与符号,按需读取代码,并评估变更影响。默认提供内置文本分析,可选的 Roslyn 集成支持基于编译器语义的 C# 符号与引用分析。
在包含 222 个节点的窗口测试中,仅查询指定控件即可将返回文本量从约 62 KB 减少至 1.6 KB。详见 测试记录。
使用示例:排查“保存”按钮被禁用的问题
查找应用窗口,在不切换前台窗口的情况下检查“保存”按钮是否启用,并定位相关 XAML 和 C# 代码。
智能体可以通过纯文本输出完成以下排查流程:
调用
wincode_ui_list_windows,通过processName或titleContains获取目标进程 ID(pid)和窗口句柄(hwnd)。调用
wincode_ui_review,指定目标控件和相关源码文件。如果尚不知道文件位置,先使用代码导航工具定位。
{
"pid": 12345,
"hwnd": "0x123456",
"backgroundOnly": true,
"capture": "none",
"responseFormat": "compact",
"query": { "automationId": "SaveButton", "controlType": "Button" },
"maxDepth": 3,
"maxNodes": 30,
"candidateFiles": ["Views/MainWindow.xaml"],
"candidateCodeFiles": ["ViewModels/MainWindowViewModel.cs"]
}查看返回的控件属性和源码候选位置。例如,
isEnabled: false表示控件处于禁用状态。根据返回的nextRequest参数调用wincode_prepare_context,读取候选声明或赋值语句。核查源码后再解释界面行为。匹配到绑定或命令名称,可以确定下一步需要检查的代码,但仅凭名称匹配无法确定当前
DataContext或按钮被禁用的原因。
上述 ID 和路径均为示例,使用时应替换为实际窗口和工作区中的值。如果只需读取控件树,可使用 wincode_ui_inspect,无需传入源码文件参数。需要勾选、选中或展开/折叠状态时,添加 readStates: true;需要结合编号截图检查视觉效果时,使用 capture: "annotated"。
快速开始
**环境要求:**Windows x64、Git 2.36 及以上、Node.js >=22(推荐 24,兼容 22),以及 .NET SDK 10.0.303。SDK 版本已在 global.json 中锁定,并通过 rollForward: "disable" 要求使用完全匹配的版本。发布的 UI 辅助程序和可选托盘程序均依赖 .NET 10 Windows Desktop 运行时。开发和测试的基准平台为 Windows 11 x64。
1. 构建并验证 WinCode
git clone https://github.com/linnnn89/WinCode.git
cd WinCode
npm ci
npm run check
npm run delivery:verify运行 npm run check 会构建 Gateway 和原生组件,执行核心回归测试与 stdio 集成测试,并验证交付清单。桌面测试单独执行。
2. 配置 MCP 连接
支持持久终端的 Codex 可使用 Skill 按需模式:首次需要时才启动 WinCode,任务内复用同一连接。先安装 Skill、禁用原生 WinCode MCP 条目,并刷新客户端连接。Skill 通过交互执行会话启动 dist/Client/SkillSessionCli.js,完整结果保存为 JSON 和图片文件,每次结果需要额外读取文件。其他客户端可使用下列原生 stdio 配置。
对于支持 mcpServers 的客户端,添加以下 stdio 配置。建议显式设置 --workspace:
{
"mcpServers": {
"wincode": {
"command": "node",
"args": ["C:/path/to/WinCode/dist/index.js", "--workspace", "C:/path/to/project"]
}
}
}将两个路径替换为实际存在的绝对路径。WinCode 安装目录与目标项目目录可以不同。确保 node 位于 PATH 中,或将命令改为其可执行文件的绝对路径。
使用图形化配置界面时,类型选择 stdio,命令填写 node,依次添加三个独立参数:dist/index.js 的路径、--workspace、目标项目路径。即使路径包含空格,也不要为独立参数额外添加引号。默认配置不需要额外环境变量。
3. 验证连接并执行首次查询
连接后,让智能体调用 wincode_hello_world,确认 health.workspaceBinding.root 与目标项目一致,然后尝试:
概述项目结构,列出
src目录中的内容,并查找负责保存数据的代码。
智能体可以使用 workspace_open 获取项目摘要,使用 wincode_list_directory 浏览目录,再通过 wincode_search_text 定位代码。检查 UI 时,先在交互式 Windows 桌面会话中启动目标应用,再参考前面的使用示例。
每条连接在其生命周期内固定对应一个工作区。workspace_open 用于确认或恢复该工作区,不能切换项目;请求其他根目录会返回 WORKSPACE_MISMATCH。访问其他项目时,应使用单独配置的连接。如果省略 --workspace,连接将固定到服务器的启动目录。
客户端配置和可选的智能体 Skill 安装方式见 Skill 与 MCP 配置指南。重新构建后,需要重新连接客户端中的 MCP 服务器,才能加载更新后的进程和工具参数定义。
常用工作流与工具
**代码导航:**从已知目录、文件或符号开始。通过 wincode_search_text 在 scopePaths 指定的范围内按普通字符串搜索,不使用正则表达式;通过 wincode_file_outline 查看文件中的声明和行数。两者均提供后续调用 wincode_prepare_context 读取源码所需的参数。
{
"task": "核查保存逻辑",
"lineRanges": [{ "file": "src/Service.cs", "startLine": 50, "endLine": 80 }],
"maxTokens": 2000
}使用搜索结果中的实际路径和行号。通过 lineRanges 指定要读取的行号范围,通过 scopeFiles 将读取范围限制在指定文件内。candidateFiles 仅用于优先搜索候选文件,不排除其他文件。根据返回的行号、coverage 和截断信息判断是否需要继续读取。maxTokens 设置的是按 UTF-16 字符数估算的 Token 预算,并非具体模型的精确 Token 数。
**UI 检查:**选择窗口,查询相关控件或子树,必要时查找源码候选位置。设置 responseFormat: "compact" 后,响应中会保留控件 ID、名称、层级和状态,省略各节点的几何信息和类名;需要坐标或更多细节时使用 full。结果中会明确区分不支持读取、未知和 false 等状态。
**C# 语义分析:**显式启用 Roslyn 后,先搜索符号,再将返回的完整 location 作为 symbolLocation 传给引用、变更影响或重构工具。工具提示位置已过期时,应重新搜索。默认的 local-text 提供基于文本的代码导航,并说明其语义分析限制。
工具 | 用途 |
| 确认或恢复固定工作区,返回精简的项目摘要。 |
| 浏览指定目录,支持深度、条目数和输出限制。 |
| 读取解决方案结构及声明的项目引用。 |
| 在指定文件或目录中按普通字符串搜索。 |
| 通过本地文本分析提取文件中的声明,并返回实际行数。 |
| 读取指定源码片段,提供路径、行号范围和覆盖情况。 |
| 使用已配置的分析后端搜索符号。 |
| 查找引用,报告已知总数、返回数量和截断情况。 |
| 评估潜在变更影响,并在信息不完整时报告不确定性。 |
| 为拟议的重构提供检查和验证建议。 |
| 将通过路径校验的工作区文件移至 |
| 列出可见顶层窗口,支持按进程和标题筛选。 |
| 读取控件信息,以及可选的状态或截图。 |
| 检查 UI 并返回 XAML/C# 源码候选位置。 |
| 读取实例身份、工作区绑定、能力及已知状态。 |
| 主动检查 SDK、Git 和本地环境。 |
wincode_analyze_change_impact 是 analyze_change_impact 的别名。详细参数与工作流见 代码分析手册、UI 检查手册 和 诊断手册。如需查看当前连接中某个工具的参数定义,可将工具名作为 toolName 传给 wincode_hello_world。
可选配置
**Roslyn:**在启动参数中添加
--roslyn-config及配置文件的绝对路径,以启用 C# Code Host。启用前需要明确授权进行 MSBuild 项目评估。配置方式、输入跟踪与恢复流程见 代码分析手册。**连接配置生成:**运行
node C:/path/to/WinCode/dist/index.js --print-connection --workspace C:/path/to/project,可生成对应项目的 stdio 配置,不启动 Gateway,也不修改客户端设置。生成结果采用默认的 local-text 配置;Roslyn 或托盘选项需要单独添加。**托盘与内存管理:**为 Gateway 添加
--tray参数并重新连接,然后手动运行tools/WinCode.Tray/bin/Release/net10.0-windows/win-x64/publish/WinCode.Tray.exe --show。在“设置 / 内存管理”中选择空闲实例,点击“释放 Roslyn 内存”。下一次显式符号搜索会重新加载项目,旧的符号位置随之失效。自动空闲释放处于禁用状态;退出托盘不会停止 MCP。详见 诊断手册。**智能体 Skill:**更新 WinCode 后,可运行
npm run skill:check -- <Skill绝对目录>检查已安装的 Skill。运行npm run skill:sync -- <Skill绝对目录>会备份并更新由同步脚本管理的 Skill 文档,不会修改 MCP 配置或重启连接。
适用范围与限制
**桌面访问:**UI 检查为只读操作,不点击控件、不输入文本,也不读取输入框的值。后台模式需同时指定 PID 和 HWND,仅支持未最小化的窗口,检查过程中不激活或还原目标窗口。该功能需要交互式 Windows 桌面会话,不支持在无头环境(Headless)中运行。
**UIA 与视觉效果:**可读取的属性取决于目标应用的 UIA 提供程序。项目的桌面测试覆盖 WPF,其他框架和自绘控件可能提供较少的信息。颜色、图标和渲染质量需要结合图像检查。后台截图使用
PrintWindow,不回退到屏幕截图;应检查返回的截图质量提示。**源码映射:**XAML 和 C# 的匹配结果提供了可能相关的源码位置,
runtimeSourceVerified为false。工具不验证运行版本与源码是否一致,不解析动态绑定或运行时模板,也不确定当前的DataContext。**分析范围:**项目结构分析仅静态读取
.sln和.csproj中的声明,不进行 MSBuild 项目评估。文本引用搜索采用启发式方法。应结合完整性、省略项和诊断信息判断结果;在有限范围内未找到匹配,并不代表整个项目中不存在匹配内容。**资源限制:**请求数量、遍历范围和响应大小均有限制。超过处理容量时返回
SERVER_BUSY,排队时间计入超时。输出限制不等于进程内存上限。并发、缓存与进程生命周期的详细说明见 架构文档。**检查提示:**检查期间会显示半透明的
REC / WinCoding状态浮层(Overlay),不会获取键盘焦点。同时,将最小必要的审计元数据记录到本地目录%LOCALAPPDATA%/WinCode/logs/ui-audit。审计日志维护方式见 诊断手册。
开发与文档
当前源码版本为 0.15.0。版本历史和迁移说明见 CHANGELOG。项目以 Windows 11 x64 为基准平台,移植至其他操作系统需要适配并单独验证。
npm run check # 构建、核心回归、stdio 集成和交付校验
npm run check:desktop # WPF 与 UI 源码关联测试,需要交互式 Windows 桌面
npm run delivery:verify # 校验 Gateway、原生组件和交付清单中的 Skill 文件
npm run test:inventory # 核对自动化测试的套件注册情况
npm run benchmark:agent -- 1 # 执行一轮可选的脚本化基准测试CI 在 Windows 环境中使用 Node.js 22、24 和固定版本的 .NET SDK 运行。在 Node.js 22 的任务中,还会额外执行原生组件与集成检查;桌面测试单独运行。基准报告记录脚本化场景中的调用次数、响应大小和执行时间,具体测试条件及结果见以下文档。
贡献指南:构建、测试套件和交付要求。
架构与数据流:组件、接口、资源限制和生命周期管理。
Skill 与 MCP 配置指南:安装与客户端配置。
Acknowledgements / 致谢
WinCode uses or has drawn ideas from these open-source projects:
FlaUI — The Windows UI Automation library used by the UI helper.
Serena — A reference for semantic code search and symbol navigation in coding agents.
Repomix — An optional tool for packing repository contents as code context.
WinCode 使用或参考了以下开源项目:
FlaUI:UI 辅助进程使用的 Windows UI Automation 库。
Serena:为代码语义搜索和符号导航提供了设计参考。
Repomix:可选的代码仓库打包工具,用于准备代码上下文。
License / 许可
Available Tools
11 toolsanalyze_change_impactA
Analyzes downstream blast radius, affected caller components, risk rating, and architectural decoupling recommendations before modifying code (AI change safety guard).
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Name of the class, component, or file to evaluate (e.g. "MemoryService" or "MemoryService.cs"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It communicates that the tool analyzes impact and acts as a safety guard, implying read-only analysis, but it does not explicitly state that it never modifies code, nor does it describe any side effects or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose and output dimensions, then adds the usage context and safety guard framing. Every phrase earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter analysis tool with no output schema, the description covers the key output categories: blast radius, affected callers, risk rating, and recommendations. It does not describe the exact return format or risk rating scale, but the core purpose and usage are sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already fully documented. The description adds contextual color about affected callers and risk, but no additional semantic detail about the target parameter beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('analyzes'), resource ('downstream blast radius, affected caller components, risk rating, and architectural decoupling recommendations'), and its role as an AI change safety guard. This distinguishes it from siblings like wincode_find_references and wincode_plan_refactoring, despite the similar name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it should be used 'before modifying code.' It does not explicitly name alternatives or state when not to use it, but the purpose is specific enough for an agent to infer the right invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_analyze_change_impactA
Alias for analyze_change_impact. Analyzes blast radius, affected callers, and risk rating before modifying code.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Name of the class, method, or component to evaluate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It indicates the tool analyzes rather than modifies and names the analysis dimensions, but it does not explicitly state whether it is read-only, what output shape to expect, or any permission/performance considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The alias relationship is front-loaded and the functional behavior is stated immediately, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter analysis tool, the description gives the core purpose and context, but because there is no output schema, it should more explicitly describe what the returned analysis contains or how risk rating is represented. This leaves a meaningful gap for an agent deciding how to use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already defines target as the class, method, or component to evaluate. The tool description adds no new parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('analyzes') and resource ('change impact') and enumerates concrete outputs: blast radius, affected callers, and risk rating. This clearly separates it from sibling tools such as wincode_find_references or wincode_plan_refactoring, and the alias note explains its relation to analyze_change_impact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before modifying code' gives an explicit temporal use case. It does not explicitly list when-not-to-use or direct the agent to an alternative beyond the alias equivalence, but the context is clear enough for selecting this analysis tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_analyze_workspaceA
High-level workspace and architecture analysis. Detects project types, .NET solutions, architecture layers, and key entry points without dumping raw files.
| Name | Required | Description | Default |
|---|---|---|---|
| maxDepth | No | Maximum directory tree depth to inspect (default 2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly says the tool does not dump raw files and instead 'detects' high-level structures, which conveys that it is a read-only, summarizing analysis. It could add more about output shape or limits, but the non-dumping behavior and detection focus are genuinely transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tightly written two-sentence definition with no filler. Every sentence earns its place: the first states the high-level purpose and the second lists concrete detections while adding the important boundary of not dumping raw files.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is largely complete: it tells the agent what kind of results to expect and what content is deliberately excluded. It does not need to document return values in detail, though slightly more context about maximum depth or output granularity would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter maxDepth with a clear description including its default. The tool description adds no additional meaning about how depth affects the analysis, but since the schema fully documents the parameter, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool performs high-level workspace and architecture analysis and specifies concrete outputs: project types, .NET solutions, architecture layers, and key entry points. This distinguishes it from sibling tools that look up symbols, references, or change impact rather than giving a workspace-level overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'High-level workspace and architecture analysis' implies this tool is for an architectural overview rather than deep code investigation, and 'without dumping raw files' suggests when it should not be used. However, there is no explicit guidance about choosing this over sibling tools like wincode_diagnose_project or wincode_plan_refactoring, so the routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_diagnose_projectB
Diagnoses project health, Windows/.NET SDK readiness, solution files, and development prerequisites.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. 'Diagnoses' implies a read-only analysis, but the description does not state whether the tool modifies anything, what environment checks it performs, whether it requires prerequisites, or what output it produces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that starts with the main action and immediately lists the key diagnostic targets. Every word adds meaning and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally viable for a zero-argument tool: it names the diagnostic scope, but it lacks any indication of return values, output shape, or which sibling scenarios it is meant for. Since no output schema exists, more detail about what the agent should expect would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter schema to clarify. The baseline of 4 applies because there is no param information the description needs to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Diagnoses') and identifies concrete resources: project health, Windows/.NET SDK readiness, solution files, and development prerequisites. It is clear about what the tool inspects, though it does not explicitly differentiate itself from sibling tools like wincode_analyze_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. Sibling tools such as wincode_analyze_workspace and wincode_prepare_context could plausibly overlap in purpose, but no conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_find_code_symbolA
Locates code symbols (classes, interfaces, methods, functions) across the workspace with signatures and line numbers (powered by Serena code intelligence).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional filter: class, interface, method, function, type, enum. | |
| query | Yes | Symbol name or search query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. 'Locates' implies a non-mutating read operation, and the description notes it searches across the workspace and returns signatures and line numbers. However, it does not disclose behavior on no matches, indexing limitations, or whether any workspace state changes occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with the primary verb and object at the start. The parenthetical 'powered by Serena code intelligence' adds vendor context but is not essential to tool invocation, so it is not perfectly taut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, two documented parameters, and no output schema, the description is reasonably complete for a simple symbol lookup. It names the resource, scope, symbol types, and result highlights, though it could be more complete by describing the expected output structure or handling of ambiguous queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents both query and kind, so the description adds little parameter-level information. The listed symbol types map loosely to the kind filter, but the description does not clarify query syntax, matching behavior, or how kind interacts with query beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Locates'), a specific resource ('code symbols'), and enumerates the types covered (classes, interfaces, methods, functions). It also specifies the key outputs (signatures and line numbers), which distinguishes it from reference-finding and analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: an agent would use this when looking for symbol definitions with signatures and line numbers. However, the description does not explicitly state when to prefer this over siblings such as wincode_find_references or wincode_analyze_workspace, nor does it mention exclusions or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_find_referencesA
Finds all call sites and usages of a specified symbol across the repository.
| Name | Required | Description | Default |
|---|---|---|---|
| symbolName | Yes | Exact name of the symbol to trace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. The verb 'Finds' clearly indicates a non-mutating, read-only operation, and the scope 'across the repository' sets expectations about breadth. It does not go into detail about performance or output shape, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that states the action, the object, and the scope without any filler. It is front-loaded with the primary verb and resource, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and a simple query-like purpose, the description is largely complete. It would be improved by noting what the returned references look like (e.g., file paths with line numbers), but the lack of an output schema is mitigated by the clarity of the described behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter, symbolName, is already described as the 'Exact name of the symbol to trace.' The description adds very little beyond saying 'a specified symbol,' so by the baseline rule this is a 3—the schema carries the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Finds') and a specific resource ('all call sites and usages of a specified symbol across the repository'). It clearly indicates the tool's function and distinguishes it from sibling tools like wincode_find_code_symbol by emphasizing call sites and usages rather than symbol definitions or broader analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the description: an agent would use this when it needs to trace where a symbol is referenced. However, there is no explicit guidance about when to use this tool versus siblings such as wincode_find_code_symbol or analyze_change_impact, and no exclusions or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_hello_worldA
Minimal connectivity and heartbeat verification tool for AI coding agents (Codex, Claude, etc.). Confirms WinCode Gateway is online.
| Name | Required | Description | Default |
|---|---|---|---|
| greeting | No | Optional custom greeting message to echo back. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. 'Heartbeat verification' and 'confirms online' suggest a read-only probe with no side effects, but the description does not explicitly state that it performs no mutations, what it returns, or how it signals failure. Some inference is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the core purpose is front-loaded and the audience is clarified in the same breath. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial one-optional-parameter tool, the description is nearly complete: it names the purpose, the checked resource, and the parameter behavior via the schema. It could be slightly more explicit about the response format or offline behavior, but nothing essential is missing for invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the greeting parameter already has a description ('Optional custom greeting message to echo back'). The tool description adds no additional parameter semantics beyond what the input schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a clear purpose with a specific verb and resource: 'Minimal connectivity and heartbeat verification tool' that 'Confirms WinCode Gateway is online.' This distinguishes it from the sibling analysis and workspace tools, whose purposes are entirely different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage as a lightweight connectivity/health check before deeper work, but it never states when to prefer it over siblings or when not to use it. There are no explicit alternatives or exclusion conditions, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_plan_refactoringB
Provides structured refactoring guidance, step-by-step breakdown, and safety boundaries for a component.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | Goal or rationale for the refactoring. | |
| target | Yes | Component or symbol name to refactor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It does suggest a planning/advisory nature by saying it 'Provides... guidance, step-by-step breakdown, and safety boundaries,' which implies non-mutating behavior. However, it never explicitly states that no code is modified, what permissions are required, or how the guidance is delivered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core purpose and listing three specific outputs. Every word contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with only two required parameters and no output schema, the description conveys the overall purpose and expected output categories. However, it doesn't define what 'safety boundaries' mean, how the refactoring plan is returned, or when this tool is preferable to sibling analysis tools, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so target and goal are already documented in the input schema. The description adds no additional meaning about parameter formats, relationships, or constraints, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (refactoring guidance) and scope ('for a component') and lists three concrete deliverables: structured guidance, step-by-step breakdown, and safety boundaries. The verb 'Provides' is generic, and it does not explicitly distinguish from siblings like analyze_change_impact, but the purpose is still understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over alternatives such as wincode_analyze_change_impact or wincode_diagnose_project. There are no prerequisites, no excluded cases, and no conditional selection criteria; the only hint is 'for a component,' which leaves usage context largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_prepare_contextB
Prepares concise, high-semantic, decision-ready context snapshot for an agent task using Repomix and semantic distillation. Extracts relevant symbols, architectures, and packs essential files.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Description of the coding task or query the agent is working on (e.g. "分析这个项目架构"). | |
| compress | No | Whether to extract essential code structures (classes, methods, interfaces) using Tree-sitter compression. | |
| focusAreas | No | Optional subdirectories or glob patterns to focus on (e.g. ["src/Core"]). | |
| outputFormat | No | Output format of packed snapshot (default: markdown). | |
| candidateFiles | No | Optional list of candidate file paths to prioritize. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of explaining behavior. It does disclose the process: Repomix-based packing and semantic distillation, and what is extracted: 'relevant symbols, architectures, and essential files.' However, it does not state whether the tool writes files to disk, returns the snapshot inline, requires external dependencies, or has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the primary purpose before explaining the method. It is reasonably concise, though phrases like 'high-semantic' and 'semantic distillation' are somewhat jargon-heavy. No unnecessary filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are documented and the core purpose is clear, but there is no output schema and the description does not describe what the agent will actually receive or where the packed snapshot goes. Given the tool is meant to prepare context, return format and side effects are relevant missing pieces. Still, the description is adequate for a basic first selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-specific detail beyond what the schema already provides; it only loosely maps to task and candidateFiles. It does not clarify how compress, focusAreas, or outputFormat affect the resulting snapshot beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'Prepares' a 'context snapshot' for an agent task, using Repomix and semantic distillation. This makes it distinguishable from siblings like wincode_analyze_workspace and wincode_diagnose_project, which are more analytical. However, it does not explicitly call out any sibling to differentiate itself from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when an agent needs a 'decision-ready context snapshot' before working on a task. There is no explicit guidance on when not to use it or how it compares to alternatives like wincode_find_code_symbol or wincode_plan_refactoring. The usage context is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wincode_safe_move_to_trashA
Safely moves an obsolete or deleted file into the project trash/ directory with metadata instead of permanent deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Reason for removal. | |
| filePath | Yes | Relative or absolute path of the file to move to trash. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It does so by stating that the tool moves the file rather than permanently deleting it, writes metadata, and targets the project trash/ directory. It does not cover edge-case behaviors like missing files or permissions, but the essential non-destructive behavior is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with the primary action and destination front-loaded. Every phrase contributes meaning: 'safely', 'obsolete or deleted file', 'project trash/ directory', 'with metadata', and 'instead of permanent deletion'. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with full schema coverage and no output schema, the description is largely complete: it identifies the target file type, the destination, the metadata behavior, and the safety rationale. It omits minor contextual details such as whether the trash directory is auto-created or what exact metadata is stored, but these are not severe gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter meanings are already fully documented. The description adds the context that metadata is associated with the move, but it does not explicitly map the optional 'reason' parameter to that metadata. This meets the baseline but does not add significant semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: safely moving an obsolete or deleted file into the project trash/ directory. It also conveys the key distinction from permanent deletion, which separates it from any destructive alternative. None of the sibling tools appear to handle deletion or file moving, so this description makes the tool's purpose immediately identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: use this tool when a file is obsolete or should be removed, but permanent deletion is undesirable. It does not explicitly enumerate alternatives or conditions when not to use it, but the 'instead of permanent deletion' phrasing provides strong practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_openB
Opens and analyzes a project workspace directory. Identifies project type (dotnet, node, python, etc.), solution file, project count, primary language, git status, metadata, and file tree.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the workspace project directory to open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of explaining side effects. The output list strongly implies a read-only analysis operation, but the tool does not explicitly state that it leaves the workspace unmodified or what 'opens' means in behavioral terms. It partially covers transparency but not fully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the main action front-loaded and the analysis outputs compactly listed. Every sentence earns its place and there is no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter and no annotations, the description is reasonably complete and does list expected output categories. However, there is no output schema and the description does not clarify how results are returned, nor does it address the obvious overlap with wincode_analyze_workspace. It is usable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear and complete description for the single required parameter, and schema description coverage is 100%. The tool description mostly restates that the path points to a project workspace directory without adding meaningful new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action ('opens and analyzes') plus a resource ('project workspace directory') and lists concrete analysis outputs. It is clear about what the tool does, but it does not differentiate itself from the sibling wincode_analyze_workspace, which appears to cover a nearly identical capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only implies a general use case of analyzing a workspace; it gives no explicit when-to-use guidance or exclusions. Given the sibling list includes wincode_analyze_workspace and several other analysis-related tools, the lack of alternative routing is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
analyze_change_impact - First observed
wincode_analyze_change_impact - First observed
wincode_analyze_workspace - First observed
wincode_diagnose_project - First observed
wincode_find_code_symbol - First observed
wincode_find_references - First observed
wincode_hello_world - First observed
wincode_plan_refactoring - First observed
wincode_prepare_context - First observed
wincode_safe_move_to_trash - First observed
workspace_open
TDQS
Scored across 11 tools
Several tools have unclear boundaries: workspace_open and wincode_analyze_workspace both perform overlapping workspace/project analysis, and analyze_change_impact is duplicated by wincode_analyze_change_impact as an exact alias. This creates real misselection risk for agents.
Most tools follow a wincode_verb_noun convention, but workspace_open and analyze_change_impact break the prefix pattern. The alias pair wincode_analyze_change_impact/analyze_change_impact also mixes prefixed and unprefixed names for the same operation.
11 tools is a reasonable count for a coding-assistant workspace toolkit. However, the set is slightly padded by the alias duplicate and by two workspace-analysis tools that could likely be consolidated.
The toolset covers workspace analysis, symbol lookup, reference finding, change impact, diagnostics, refactoring planning, and safe deletion. It lacks direct file read/edit/build operations, but those may be intentionally outside its analysis-and-planning scope.
Maintenance
Related MCP Connectors
Governed app access for AI agents: 1,000+ apps & 12,000+ tools via Code Mode MCP.
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Let AI agents query data and act across all your business apps via MCP.
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEmpower any MCP-compatible AI Agent(MCP Client) with engineering-grade capabilities to understand, modify, run, and deliver real-world code repositories.1,061Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceProvides code intelligence for AI coding agents by indexing repositories into a hybrid knowledge graph, enabling agents to query dependencies, impact, and context through 28 MCP tools.3Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to control local Windows development tools by exposing project files, code search, file editing, test execution, Git operations, and resource viewing through a secure MCP interface with permission controls.10Apache 2.0