docs: update generate-docs.ts tools output order (#1991)

Closes: #1932
This commit is contained in:
Nicholas Roscino
2026-05-05 10:31:59 +02:00
committed by GitHub
parent 510ec0f48b
commit 895fc65a1f
3 changed files with 186 additions and 45 deletions
+12 -4
View File
@@ -477,7 +477,7 @@ If you run into any issues, checkout our [troubleshooting guide](./docs/troubles
<!-- BEGIN AUTO GENERATED TOOLS -->
- **Input automation** (9 tools)
- **Input automation** (10 tools)
- [`click`](docs/tool-reference.md#click)
- [`drag`](docs/tool-reference.md#drag)
- [`fill`](docs/tool-reference.md#fill)
@@ -487,6 +487,7 @@ If you run into any issues, checkout our [troubleshooting guide](./docs/troubles
- [`press_key`](docs/tool-reference.md#press_key)
- [`type_text`](docs/tool-reference.md#type_text)
- [`upload_file`](docs/tool-reference.md#upload_file)
- [`click_at`](docs/tool-reference.md#click_at)
- **Navigation automation** (6 tools)
- [`close_page`](docs/tool-reference.md#close_page)
- [`list_pages`](docs/tool-reference.md#list_pages)
@@ -504,21 +505,28 @@ If you run into any issues, checkout our [troubleshooting guide](./docs/troubles
- **Network** (2 tools)
- [`get_network_request`](docs/tool-reference.md#get_network_request)
- [`list_network_requests`](docs/tool-reference.md#list_network_requests)
- **Debugging** (6 tools)
- **Debugging** (10 tools)
- [`evaluate_script`](docs/tool-reference.md#evaluate_script)
- [`get_console_message`](docs/tool-reference.md#get_console_message)
- [`lighthouse_audit`](docs/tool-reference.md#lighthouse_audit)
- [`list_console_messages`](docs/tool-reference.md#list_console_messages)
- [`take_screenshot`](docs/tool-reference.md#take_screenshot)
- [`take_snapshot`](docs/tool-reference.md#take_snapshot)
- [`execute_webmcp_tool`](docs/tool-reference.md#execute_webmcp_tool)
- [`list_webmcp_tools`](docs/tool-reference.md#list_webmcp_tools)
- [`screencast_start`](docs/tool-reference.md#screencast_start)
- [`screencast_stop`](docs/tool-reference.md#screencast_stop)
- **Memory** (4 tools)
- [`take_memory_snapshot`](docs/tool-reference.md#take_memory_snapshot)
- [`get_memory_snapshot_details`](docs/tool-reference.md#get_memory_snapshot_details)
- [`get_nodes_by_class`](docs/tool-reference.md#get_nodes_by_class)
- [`load_memory_snapshot`](docs/tool-reference.md#load_memory_snapshot)
- **Extensions** (5 tools)
- [`install_extension`](docs/tool-reference.md#install_extension)
- [`list_extensions`](docs/tool-reference.md#list_extensions)
- [`reload_extension`](docs/tool-reference.md#reload_extension)
- [`trigger_extension_action`](docs/tool-reference.md#trigger_extension_action)
- [`uninstall_extension`](docs/tool-reference.md#uninstall_extension)
- **Memory** (1 tools)
- [`take_memory_snapshot`](docs/tool-reference.md#take_memory_snapshot)
<!-- END AUTO GENERATED TOOLS -->
+124 -31
View File
@@ -2,7 +2,7 @@
# Chrome DevTools MCP Tool Reference (~7010 cl100k_base tokens)
- **[Input automation](#input-automation)** (9 tools)
- **[Input automation](#input-automation)** (10 tools)
- [`click`](#click)
- [`drag`](#drag)
- [`fill`](#fill)
@@ -12,6 +12,7 @@
- [`press_key`](#press_key)
- [`type_text`](#type_text)
- [`upload_file`](#upload_file)
- [`click_at`](#click_at)
- **[Navigation automation](#navigation-automation)** (6 tools)
- [`close_page`](#close_page)
- [`list_pages`](#list_pages)
@@ -29,21 +30,28 @@
- **[Network](#network)** (2 tools)
- [`get_network_request`](#get_network_request)
- [`list_network_requests`](#list_network_requests)
- **[Debugging](#debugging)** (6 tools)
- **[Debugging](#debugging)** (10 tools)
- [`evaluate_script`](#evaluate_script)
- [`get_console_message`](#get_console_message)
- [`lighthouse_audit`](#lighthouse_audit)
- [`list_console_messages`](#list_console_messages)
- [`take_screenshot`](#take_screenshot)
- [`take_snapshot`](#take_snapshot)
- [`execute_webmcp_tool`](#execute_webmcp_tool)
- [`list_webmcp_tools`](#list_webmcp_tools)
- [`screencast_start`](#screencast_start)
- [`screencast_stop`](#screencast_stop)
- **[Memory](#memory)** (4 tools)
- [`take_memory_snapshot`](#take_memory_snapshot)
- [`get_memory_snapshot_details`](#get_memory_snapshot_details)
- [`get_nodes_by_class`](#get_nodes_by_class)
- [`load_memory_snapshot`](#load_memory_snapshot)
- **[Extensions](#extensions)** (5 tools)
- [`install_extension`](#install_extension)
- [`list_extensions`](#list_extensions)
- [`reload_extension`](#reload_extension)
- [`trigger_extension_action`](#trigger_extension_action)
- [`uninstall_extension`](#uninstall_extension)
- **[Memory](#memory)** (1 tools)
- [`take_memory_snapshot`](#take_memory_snapshot)
## Input automation
@@ -150,6 +158,19 @@
---
### `click_at`
**Description:** Clicks at the provided coordinates (requires flag: --experimentalVision=true)
**Parameters:**
- **x** (number) **(required)**: The x coordinate
- **y** (number) **(required)**: The y coordinate
- **dblClick** (boolean) _(optional)_: Set to true for double clicks. Default is false.
- **includeSnapshot** (boolean) _(optional)_: Whether to include a snapshot in the response. Default is false.
---
## Navigation automation
### `close_page`
@@ -396,55 +417,40 @@ in the DevTools Elements panel (if any).
---
## Extensions
### `execute_webmcp_tool`
> NOTE: Extensions are not active by default. Use the '--categoryExtensions' flag
### `install_extension`
**Description:** Installs a Chrome extension from the given path.
**Description:** Executes a WebMCP tool exposed by the page. (requires flag: --experimentalWebmcp=true)
**Parameters:**
- **path** (string) **(required)**: Absolute path to the unpacked extension folder.
- **toolName** (string) **(required)**: The name of the WebMCP tool to execute
- **input** (string) _(optional)_: The JSON-stringified parameters to pass to the WebMCP tool
---
### `list_extensions`
### `list_webmcp_tools`
**Description:** Lists all the Chrome extensions installed in the browser. This includes their name, ID, version, and enabled status.
**Description:** Lists all WebMCP tools the page exposes. (requires flag: --experimentalWebmcp=true)
**Parameters:** None
---
### `reload_extension`
### `screencast_start`
**Description:** Reloads an unpacked Chrome extension by its ID.
**Description:** Starts recording a screencast (video) of the selected page in specified format. (requires flag: --experimentalScreencast=true)
**Parameters:**
- **id** (string) **(required)**: ID of the extension to reload.
- **filePath** (string) _(optional)_: Output file path (.webm,.mp4 are supported). Uses mkdtemp to generate a unique path if not provided.
---
### `trigger_extension_action`
### `screencast_stop`
**Description:** Triggers the default action of an extension by its ID.
**Description:** Stops the active screencast recording on the selected page. (requires flag: --experimentalScreencast=true)
**Parameters:**
- **id** (string) **(required)**: ID of the extension to trigger the action for.
---
### `uninstall_extension`
**Description:** Uninstalls a Chrome extension by its ID.
**Parameters:**
- **id** (string) **(required)**: ID of the extension to uninstall.
**Parameters:** None
---
@@ -459,3 +465,90 @@ in the DevTools Elements panel (if any).
- **filePath** (string) **(required)**: A path to a .heapsnapshot file to save the heapsnapshot to.
---
### `get_memory_snapshot_details`
**Description:** Loads a memory heapsnapshot and returns all available information including statistics, static data, and aggregated node information. Supports pagination for aggregates. (requires flag: --experimentalMemory=true)
**Parameters:**
- **filePath** (string) **(required)**: A path to a .heapsnapshot file to read.
- **pageIdx** (number) _(optional)_: The page index for pagination of aggregates.
- **pageSize** (number) _(optional)_: The page size for pagination of aggregates.
---
### `get_nodes_by_class`
**Description:** Loads a memory heapsnapshot and returns instances of a specific class with their stable IDs. (requires flag: --experimentalMemory=true)
**Parameters:**
- **filePath** (string) **(required)**: A path to a .heapsnapshot file to read.
- **uid** (number) **(required)**: The unique UID for the class, obtained from aggregates listing.
- **pageIdx** (number) _(optional)_: The page index for pagination.
- **pageSize** (number) _(optional)_: The page size for pagination.
---
### `load_memory_snapshot`
**Description:** Loads a memory heapsnapshot and returns snapshot summary stats. (requires flag: --experimentalMemory=true)
**Parameters:**
- **filePath** (string) **(required)**: A path to a .heapsnapshot file to read.
---
## Extensions
> NOTE: Extensions are not active by default. Use the '--categoryExtensions' flag
### `install_extension`
**Description:** Installs a Chrome extension from the given path. (requires flag: --categoryExtensions=true)
**Parameters:**
- **path** (string) **(required)**: Absolute path to the unpacked extension folder.
---
### `list_extensions`
**Description:** Lists all the Chrome extensions installed in the browser. This includes their name, ID, version, and enabled status. (requires flag: --categoryExtensions=true)
**Parameters:** None
---
### `reload_extension`
**Description:** Reloads an unpacked Chrome extension by its ID. (requires flag: --categoryExtensions=true)
**Parameters:**
- **id** (string) **(required)**: ID of the extension to reload.
---
### `trigger_extension_action`
**Description:** Triggers the default action of an extension by its ID. (requires flag: --categoryExtensions=true)
**Parameters:**
- **id** (string) **(required)**: ID of the extension to trigger the action for.
---
### `uninstall_extension`
**Description:** Uninstalls a Chrome extension by its ID. (requires flag: --categoryExtensions=true)
**Parameters:**
- **id** (string) **(required)**: ID of the extension to uninstall.
---
+50 -10
View File
@@ -131,6 +131,20 @@ function addCrossLinks(text: string, tools: ToolWithAnnotations[]): string {
return result;
}
function sortTools(a: ToolWithAnnotations, b: ToolWithAnnotations): number {
const aHasConditions = Boolean(a.annotations?.conditions?.length > 0);
const bHasConditions = Boolean(b.annotations?.conditions?.length > 0);
if (aHasConditions && !bHasConditions) {
return 1;
}
if (!aHasConditions && bHasConditions) {
return -1;
}
return a.name.localeCompare(b.name);
}
function generateToolsTOC(
categories: Record<string, ToolWithAnnotations[]>,
sortedCategories: string[],
@@ -143,7 +157,7 @@ function generateToolsTOC(
toc += `- **${categoryName}** (${categoryTools.length} tools)\n`;
// Sort tools within category for TOC
categoryTools.sort((a: Tool, b: Tool) => a.name.localeCompare(b.name));
categoryTools.sort(sortTools);
for (const tool of categoryTools) {
const anchorLink = tool.name.toLowerCase();
toc += ` - [\`${tool.name}\`](docs/tool-reference.md#${anchorLink})\n`;
@@ -341,7 +355,7 @@ async function generateReference(
markdown += `- **[${categoryName}](#${anchorName})** (${categoryTools.length} tools)\n`;
// Sort tools within category for TOC
categoryTools.sort((a: Tool, b: Tool) => a.name.localeCompare(b.name));
categoryTools.sort(sortTools);
for (const tool of categoryTools) {
// Generate proper markdown anchor link: backticks are removed, keep underscores, lowercase
const anchorLink = tool.name.toLowerCase();
@@ -363,7 +377,7 @@ async function generateReference(
}
// Sort tools within category
categoryTools.sort((a: Tool, b: Tool) => a.name.localeCompare(b.name));
categoryTools.sort(sortTools);
for (const tool of categoryTools) {
markdown += `### \`${tool.name}\`\n\n`;
@@ -372,6 +386,23 @@ async function generateReference(
// Escape HTML tags but preserve JS function syntax
let escapedDescription = escapeHtmlTags(tool.description);
const requiredFlags: string[] = [];
const isOffByDefault = OFF_BY_DEFAULT_CATEGORIES.includes(category);
if (isOffByDefault) {
const categoryFlag = buildFlag(category);
requiredFlags.push(`--${categoryFlag}=true`);
}
const conditions = tool.annotations?.conditions || [];
for (const condition of conditions) {
requiredFlags.push(`--${condition}=true`);
}
if (requiredFlags.length > 0) {
escapedDescription += ` (requires flag: ${requiredFlags.join(', ')})`;
}
// Add cross-links to mentioned tools
escapedDescription = addCrossLinks(
escapedDescription,
@@ -448,16 +479,17 @@ function getToolsAndCategories(tools: any) {
const toolsWithAnnotations: ToolWithAnnotations[] = tools
.filter(tool => {
// Skipping in_page tools as they are not launched yet
if (tool.annotations.category.includes('experimental')) {
if (tool.annotations.category === ToolCategory.IN_PAGE) {
return false;
}
if (!tool.annotations.conditions) {
return true;
// Skipping internal interop tools not meant for public documentation
const skipTools = ['get_tab_id'];
if (skipTools.includes(tool.name)) {
return false;
}
// Only include unconditional tools.
return tool.annotations.conditions.length === 0;
return true;
})
.map(tool => {
const properties: Record<string, TypeInfo> = {};
@@ -497,8 +529,16 @@ function getToolsAndCategories(tools: any) {
// Sort categories using the enum order
const categoryOrder = Object.values(ToolCategory);
const sortedCategories = Object.keys(categories).sort((a, b) => {
const aIndex = categoryOrder.indexOf(a);
const bIndex = categoryOrder.indexOf(b);
const aOff = OFF_BY_DEFAULT_CATEGORIES.includes(a as ToolCategory);
const bOff = OFF_BY_DEFAULT_CATEGORIES.includes(b as ToolCategory);
if (aOff !== bOff) {
return aOff ? 1 : -1;
}
const aIndex = categoryOrder.indexOf(a as ToolCategory);
const bIndex = categoryOrder.indexOf(b as ToolCategory);
// Put known categories first, unknown categories last
if (aIndex === -1 && bIndex === -1) {
return a.localeCompare(b);