Claude Agent Skill · by Github

Winmd Api Search

This is a smart Windows API discovery tool that searches through cached WinMD metadata to find the right APIs for any desktop capability. Instead of hunting thr

Install
Terminal · npx
$npx skills add https://github.com/github/awesome-copilot --skill winmd-api-search
Works with Paperclip

How Winmd Api Search fits into a Paperclip company.

Winmd Api Search drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md192 lines
Expand
---name: winmd-api-searchdescription: 'Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI/ML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).'license: Complete terms in LICENSE.txt--- # WinMD API Search This skill helps you find the right Windows API for any capability and get its full details. It searches a local cache of all WinMD metadata from: - **Windows Platform SDK** — all `Windows.*` WinRT APIs (always available, no restore needed)- **WinAppSDK / WinUI** — bundled as a baseline in the cache generator (always available, no restore needed)- **NuGet packages** — any additional packages in restored projects that contain `.winmd` files- **Project-output WinMD** — class libraries (C++/WinRT, C#) that produce `.winmd` as build output Even on a fresh clone with no restore or build, you still get full Platform SDK + WinAppSDK coverage. ## When to Use This Skill - User wants to build a feature and you need to find which API provides that capability- User asks "how do I do X?" where X involves a platform feature (camera, files, notifications, sensors, AI, etc.)- You need the exact methods, properties, events, or enumeration values of a type before writing code- You're unsure which control, class, or interface to use for a UI or system task ## Prerequisites - **.NET SDK 8.0 or later** — required to build the cache generator. Install from [dotnet.microsoft.com](https://dotnet.microsoft.com/download) if not available. ## Cache Setup (Required Before First Use) All query and search commands read from a local JSON cache. **You must generate the cache before running any queries.** ```powershell# All projects in the repo (recommended for first run).\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 # Single project.\.github\skills\winmd-api-search\scripts\Update-WinMdCache.ps1 -ProjectDir <project-folder>``` No project restore or build is needed for baseline coverage (Platform SDK + WinAppSDK). For additional NuGet packages, the project needs `dotnet restore` (which generates `project.assets.json`) or a `packages.config` file. Cache is stored at `Generated Files\winmd-cache\`, deduplicated per-package+version. ### What gets indexed | Source | When available ||--------|----------------|| Windows Platform SDK | Always (reads from local SDK install) || WinAppSDK (latest) | Always (bundled as baseline in cache generator) || WinAppSDK Runtime | When installed on the system (detected via `Get-AppxPackage`) || Project NuGet packages | After `dotnet restore` or with `packages.config` || Project-output `.winmd` | After project build (class libraries that produce WinMD) | > **Note:** This cache directory should be in `.gitignore` — it's generated, not source. ## How to Use Pick the path that matches the situation: --- ### Discover — "I don't know which API to use" The user describes a capability in their own words. You need to find the right API. **0. Ensure the cache exists** If the cache hasn't been generated yet, run `Update-WinMdCache.ps1` first — see [Cache Setup](#cache-setup-required-before-first-use) above. **1. Translate user language → search keywords** Map the user's daily language to programming terms. Try multiple variations: | User says | Search keywords to try (in order) ||-----------|-----------------------------------|| "take a picture" | `camera`, `capture`, `photo`, `MediaCapture` || "load from disk" | `file open`, `picker`, `FileOpen`, `StorageFile` || "describe what's in it" | `image description`, `Vision`, `Recognition` || "show a popup" | `dialog`, `flyout`, `popup`, `ContentDialog` || "drag and drop" | `drag`, `drop`, `DragDrop` || "save settings" | `settings`, `ApplicationData`, `LocalSettings` | Start with simple everyday words. If results are weak or irrelevant, try the more technical variation. **2. Run searches** ```powershell.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action search -Query "<keyword>"``` This returns ranked namespaces with top matching types and the **JSON file path**. If results have **low scores (below 60) or are irrelevant**, fall back to searching online documentation: 1. Use web search to find the right API on Microsoft Learn, for example:   - `site:learn.microsoft.com/uwp/api <capability keywords>` for `Windows.*` APIs   - `site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <capability keywords>` for `Microsoft.*` WinAppSDK APIs2. Read the documentation pages to identify which type matches the user's requirement.3. Once you know the type name, come back and use `-Action members` or `-Action enums` to get the exact local signatures. **3. Read the JSON to choose the right API** Read the file at the path(s) from the top results. The JSON has all types in that namespace — full members, signatures, parameters, return types, enumeration values. Read and decide which types and members fit the user's requirement. **4. Look up official documentation for context** The cache contains only signatures — no descriptions or usage guidance. For explanations, examples, and remarks, look up the type on Microsoft Learn: | Namespace prefix | Documentation base URL ||-----------------|----------------------|| `Windows.*` | `https://learn.microsoft.com/uwp/api/{fully.qualified.typename}` || `Microsoft.*` (WinAppSDK) | `https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/{fully.qualified.typename}` | For example, `Microsoft.UI.Xaml.Controls.NavigationView` maps to:`https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview` **5. Use the API knowledge to answer or write code** --- ### Lookup — "I know the API, show me the details" You already know (or suspect) the type or namespace name. Go direct: ```powershell# Get all members of a known type.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action members -TypeName "Microsoft.UI.Xaml.Controls.NavigationView" # Get enum values.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action enums -TypeName "Microsoft.UI.Xaml.Visibility" # List all types in a namespace.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action types -Namespace "Microsoft.UI.Xaml.Controls" # Browse namespaces.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action namespaces -Filter "Microsoft.UI"``` If you need full detail beyond what `-Action members` shows, use `-Action search` to get the JSON file path, then read the JSON file directly. --- ### Other Commands ```powershell# List cached projects.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action projects # List packages for a project.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action packages # Show stats.\.github\skills\winmd-api-search\scripts\Invoke-WinMdQuery.ps1 -Action stats``` > If only one project is cached, `-Project` is auto-selected.> If multiple projects exist, add `-Project <name>` (use `-Action projects` to see available names).> In scan mode, manifest names include a short hash suffix to avoid collisions; you can pass the base project name without the suffix if it's unambiguous. ## Search Scoring The search ranks type names and member names against your query: | Score | Match type | Example ||-------|-----------|---------|| 100 | Exact name | `Button` → `Button` || 80 | Starts with | `Navigation` → `NavigationView` || 60 | Contains | `Dialog` → `ContentDialog` || 50 | PascalCase initials | `ASB` → `AutoSuggestBox` || 40 | Multi-keyword AND | `navigation item` → `NavigationViewItem` || 20 | Fuzzy character match | `NavVw` → `NavigationView` | Results are grouped by namespace. Higher-scored namespaces appear first. ## Troubleshooting | Issue | Fix ||-------|-----|| "Cache not found" | Run `Update-WinMdCache.ps1` || "Multiple projects cached" | Add `-Project <name>` || "Namespace not found" | Use `-Action namespaces` to list available ones || "Type not found" | Use fully qualified name (e.g., `Microsoft.UI.Xaml.Controls.Button`) || Stale after NuGet update | Re-run `Update-WinMdCache.ps1` || Cache in git history | Add `Generated Files/` to `.gitignore` | ## References - [Windows Platform SDK API reference](https://learn.microsoft.com/uwp/api/) — documentation for `Windows.*` namespaces- [Windows App SDK API reference](https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/) — documentation for `Microsoft.*` WinAppSDK namespaces