---
name: workspace-commands
description: The shell commands and task tools available in this workspace.
---
# Available commands
Python (`python` or `python3`), Perl, JavaScript/Node.js, and TypeScript
runtimes are unavailable. Use the shell commands and task CLIs documented
below; do not probe for or attempt to install other runtimes.
Standard Unix commands, among them:
cat head tail ls find grep wc sort uniq cut tr sed awk
diff tee xargs jq unzip
with pipes, `>` redirection, `$(...)` substitution and `$'...'`.
The task CLIs below are registered with this shell rather than installed
as files; do not inspect them with `which`, `file` or `/usr/bin`.
## web-search
Use `web-search <command> '<JSON arguments>'`. Run
`web-search <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `web-search web-search` | `{query: str, num_results?: int = 10}` | Search the web using Google Serper API with concurrency control and retry mechanisms. Supports various Google search operators. — `query`: Search query with optional Google search operators.; `num_results`: Number of results to return, default 10, max 50 |
## browser
Use `browser <command> '<JSON arguments>'`. Run `browser <command> --help`
to get more information.
| Command | Arguments | Description |
|---|---|---|
| `browser close` | `{}` | Close the page |
| `browser resize` | `{width: number, height: number}` | Resize the browser window — `width`: Width of the browser window; `height`: Height of the browser window |
| `browser console-messages` | `{}` | Returns all console messages |
| `browser handle-dialog` | `{accept: bool, promptText?: str}` | Handle a dialog — `accept`: Whether to accept the dialog.; `promptText`: The text of the prompt in case of a prompt dialog. |
| `browser evaluate` | `{function: str, element?: str, ref?: str}` | Evaluate JavaScript expression on page or element — `function`: () => { /* code */ } or (element) => { /* code */ } when element is provided; `element`: Human-readable element description used to obtain permission to interact with the element; `ref`: Exact target element reference from the page snapshot |
| `browser file-upload` | `{paths: list[str]}` | Upload one or multiple files — `paths`: The absolute paths to the files to upload. Can be a single file or multiple files. |
| `browser install` | `{}` | Install the browser specified in the config. Call this if you get an error about the browser not being installed. |
| `browser press-key` | `{key: str}` | Press a key on the keyboard — `key`: Name of the key to press or a character to generate, such as `ArrowLeft` or `a` |
| `browser type` | `{element: str, ref: str, text: str, submit?: bool, slowly?: bool}` | Type text into editable element — `element`: Human-readable element description used to obtain permission to interact with the element; `ref`: Exact target element reference from the page snapshot; `text`: Text to type into the element; `submit`: Whether to submit entered text (press Enter after); `slowly`: Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once. |
| `browser navigate` | `{url: str}` | Navigate to a URL — `url`: The URL to navigate to |
| `browser navigate-back` | `{}` | Go back to the previous page |
| `browser navigate-forward` | `{}` | Go forward to the next page |
| `browser network-requests` | `{}` | Returns all network requests since loading the page |
| `browser take-screenshot` | `{raw?: bool, filename?: str, element?: str, ref?: str, fullPage?: bool}` | Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions. — `raw`: Whether to return without compression (in PNG format). Default is false, which returns a JPEG image.; `filename`: File name to save the screenshot to. Defaults to `page-{timestamp}.{png\|jpeg}` if not specified.; `element`: Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.; `ref`: Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.; `fullPage`: When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots. |
| `browser snapshot` | `{}` | Capture accessibility snapshot of the current page. The snapshot is divided into manageable spans (configurable via --span-size, default 2000 characters, or use -1 to show complete snapshot) and shows the first span by default. Use browser_snapshot_navigate_* tools to view other spans or browser_snapshot_search to find content across all spans. This provides structured element data with ref attributes for interaction, making it better than screenshots for automation. |
| `browser click` | `{element: str, ref: str, doubleClick?: bool, button?: "left" \| "right" \| "middle"}` | Perform click on a web page — `element`: Human-readable element description used to obtain permission to interact with the element; `ref`: Exact target element reference from the page snapshot; `doubleClick`: Whether to perform a double click instead of a single click; `button`: Button to click, defaults to left |
| `browser drag` | `{startElement: str, startRef: str, endElement: str, endRef: str}` | Perform drag and drop between two elements — `startElement`: Human-readable source element description used to obtain the permission to interact with the element; `startRef`: Exact source element reference from the page snapshot; `endElement`: Human-readable target element description used to obtain the permission to interact with the element; `endRef`: Exact target element reference from the page snapshot |
| `browser hover` | `{element: str, ref: str}` | Hover over element on page — `element`: Human-readable element description used to obtain permission to interact with the element; `ref`: Exact target element reference from the page snapshot |
| `browser select-option` | `{element: str, ref: str, values: list[str]}` | Select an option in a dropdown — `element`: Human-readable element description used to obtain permission to interact with the element; `ref`: Exact target element reference from the page snapshot; `values`: Array of values to select in the dropdown. This can be a single value or multiple values. |
| `browser snapshot-navigate-to-span` | `{spanIndex: int}` | Navigate to a specific span in the current page snapshot by index. Each span contains a portion of the page content (limited by span size). Use this when you know the exact span number you want to view, typically after using browser_snapshot_search to locate content. — `spanIndex`: The span index to navigate to (0-based) |
| `browser snapshot-navigate-to-first-span` | `{}` | Navigate to the first span of the current page snapshot. This shows the beginning of the page content and is useful for starting from the top of the page when exploring content sequentially. |
| `browser snapshot-navigate-to-last-span` | `{}` | Navigate to the last span of the current page snapshot. This shows the end of the page content and is useful for accessing footer content, final form elements, or bottom navigation. |
| `browser snapshot-navigate-to-next-span` | `{}` | Navigate to the next span in the current page snapshot. If already at the last span, stays at the last span. Use this for sequential exploration of page content from top to bottom. |
| `browser snapshot-navigate-to-prev-span` | `{}` | Navigate to the previous span in the current page snapshot. If already at the first span, stays at the first span. Use this for sequential exploration of page content from bottom to top. |
| `browser snapshot-navigate-to-line` | `{globalLineNumber: int, contextLines?: int}` | Navigate to a specific global line number in the current page snapshot with configurable surrounding context lines. Shows which spans contain the context lines. The target line is marked with ">>>". Use this to quickly jump to specific content found via search results. — `globalLineNumber`: The global line number to navigate to (1-based); `contextLines`: Number of context lines to show before and after the target line (default: 3) |
| `browser snapshot-search` | `{pattern: str, flags?: str}` | Search for a pattern across all spans of the current page snapshot using regular expressions. Returns matches with both global line numbers (across entire snapshot) and in-span line numbers (within each span). Shows which spans contain matches for navigation. Supports regex flags like "gi" for global case-insensitive search. — `pattern`: The regex pattern to search for; `flags`: Optional regex flags (e.g., "gi" for global case-insensitive) |
| `browser tab-list` | `{}` | List browser tabs |
| `browser tab-new` | `{url?: str}` | Open a new tab — `url`: The URL to navigate to in the new tab. If not provided, the new tab will be blank. |
| `browser tab-select` | `{index: number}` | Select a tab by index — `index`: The index of the tab to select |
| `browser tab-close` | `{index?: number}` | Close a tab — `index`: The index of the tab to close. Closes current tab if not provided. |
| `browser wait-for` | `{time?: number, text?: str, textGone?: str}` | Wait for text to appear or disappear or a specified time to pass — `time`: The time to wait in seconds; `text`: The text to wait for; `textGone`: The text to wait for to disappear |
## fetch
Use `fetch <command> '<JSON arguments>'`. Run `fetch <command> --help` to
get more information.
| Command | Arguments | Description |
|---|---|---|
| `fetch html` | `{url: str, headers?: dict}` | Fetch a website and return the content as HTML — `url`: URL of the website to fetch; `headers`: Optional headers to include in the request |
| `fetch markdown` | `{url: str, headers?: dict}` | Fetch a website and return the content as Markdown — `url`: URL of the website to fetch; `headers`: Optional headers to include in the request |
| `fetch txt` | `{url: str, headers?: dict}` | Fetch a website, return the content as plain text (no HTML) — `url`: URL of the website to fetch; `headers`: Optional headers to include in the request |
| `fetch json` | `{url: str, headers?: dict}` | Fetch a JSON file from a URL — `url`: URL of the JSON to fetch; `headers`: Optional headers to include in the request |
## google-sheet
Use `google-sheet <command> '<JSON arguments>'`. Run
`google-sheet <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `google-sheet get-sheet-data` | `{spreadsheet_id: str, sheet: str, range?: str = null, include_grid_data?: bool = false}` | Get data from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all data. include_grid_data: If True, includes cell formatting and other metadata in the response. Note: Setting this to True will significantly increase the response size and token usage when parsing the response, as it includes detailed cell formatting information. Default is False (returns values only, more efficient). Returns: Grid data structure with either full metadata or just values from Google Sheets API, depending on include_grid_data parameter |
| `google-sheet get-sheet-formulas` | `{spreadsheet_id: str, sheet: str, range?: str = null}` | Get formulas from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all formulas from the sheet. Returns: A 2D array of the sheet formulas. |
| `google-sheet update-cells` | `{spreadsheet_id: str, sheet: str, range: str, data: list[list]}` | Update cells in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Cell range in A1 notation (e.g., 'A1:C10') data: 2D array of values to update Returns: Result of the update operation |
| `google-sheet batch-update-cells` | `{spreadsheet_id: str, sheet: str, ranges: dict}` | Batch update multiple ranges in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet ranges: Dictionary mapping range strings to 2D arrays of values e.g., {'A1:B2': [[1, 2], [3, 4]], 'D1:E2': [['a', 'b'], ['c', 'd']]} Returns: Result of the batch update operation |
| `google-sheet add-rows` | `{spreadsheet_id: str, sheet: str, count: int, start_row?: int = null}` | Add rows to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of rows to add start_row: 0-based row index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
| `google-sheet add-columns` | `{spreadsheet_id: str, sheet: str, count: int, start_column?: int = null}` | Add columns to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of columns to add start_column: 0-based column index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
| `google-sheet list-sheets` | `{spreadsheet_id: str}` | List all sheets in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) Returns: List of sheet names |
| `google-sheet copy-sheet` | `{src_spreadsheet: str, src_sheet: str, dst_spreadsheet: str, dst_sheet: str}` | Copy a sheet from one spreadsheet to another. Args: src_spreadsheet: Source spreadsheet ID src_sheet: Source sheet name dst_spreadsheet: Destination spreadsheet ID dst_sheet: Destination sheet name Returns: Result of the operation |
| `google-sheet rename-sheet` | `{spreadsheet: str, sheet: str, new_name: str}` | Rename a sheet in a Google Spreadsheet. Args: spreadsheet: Spreadsheet ID sheet: Current sheet name new_name: New sheet name Returns: Result of the operation |
| `google-sheet get-multiple-sheet-data` | `{queries: list[dict]}` | Get data from multiple specific ranges in Google Spreadsheets. Args: queries: A list of dictionaries, each specifying a query. Each dictionary should have 'spreadsheet_id', 'sheet', and 'range' keys. Example: [{'spreadsheet_id': 'abc', 'sheet': 'Sheet1', 'range': 'A1:B5'}, {'spreadsheet_id': 'xyz', 'sheet': 'Data', 'range': 'C1:C10'}] Returns: A list of dictionaries, each containing the original query parameters and the fetched 'data' or an 'error'. |
| `google-sheet get-multiple-spreadsheet-summary` | `{spreadsheet_ids: list[str], rows_to_fetch?: int = 5}` | Get a summary of multiple Google Spreadsheets, including sheet names, headers, and the first few rows of data for each sheet. Args: spreadsheet_ids: A list of spreadsheet IDs to summarize. rows_to_fetch: The number of rows (including header) to fetch for the summary (default: 5). Returns: A list of dictionaries, each representing a spreadsheet summary. Includes spreadsheet title, sheet summaries (title, headers, first rows), or an error. |
| `google-sheet create-spreadsheet` | `{title: str, folder_id?: str = null}` | Create a new Google Spreadsheet. Args: title: The title of the new spreadsheet folder_id: Optional Google Drive folder ID where the spreadsheet should be created. If not provided, uses the configured default folder or creates in root. Returns: Information about the newly created spreadsheet including its ID |
| `google-sheet create-sheet` | `{spreadsheet_id: str, title: str}` | Create a new sheet tab in an existing Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet title: The title for the new sheet Returns: Information about the newly created sheet |
| `google-sheet list-spreadsheets` | `{folder_id?: str = null}` | List all spreadsheets in the specified Google Drive folder. If no folder is specified, uses the configured default folder or lists from 'My Drive'. Args: folder_id: Optional Google Drive folder ID to search in. If not provided, uses the configured default folder or searches 'My Drive'. Returns: List of spreadsheets with their ID and title |
| `google-sheet share-spreadsheet` | `{spreadsheet_id: str, recipients: list[dict], send_notification?: bool = true}` | Share a Google Spreadsheet with multiple users via email, assigning specific roles. Args: spreadsheet_id: The ID of the spreadsheet to share. recipients: A list of dictionaries, each containing 'email_address' and 'role'. The role should be one of: 'reader', 'commenter', 'writer'. Example: [ {'email_address': 'user1@example.com', 'role': 'writer'}, {'email_address': 'user2@example.com', 'role': 'reader'} ] send_notification: Whether to send a notification email to the users. Defaults to True. Returns: A dictionary containing lists of 'successes' and 'failures'. Each item in the lists includes the email address and the outcome. |
| `google-sheet list-folders` | `{parent_folder_id?: str = null}` | List all folders in the specified Google Drive folder. If no parent folder is specified, lists folders from 'My Drive' root. Args: parent_folder_id: Optional Google Drive folder ID to search within. If not provided, searches the root of 'My Drive'. Returns: List of folders with their ID, name, and parent information |
| `google-sheet search-spreadsheets` | `{query: str, max_results?: int = 20}` | Search for spreadsheets in Google Drive by name or content. Args: query: Search query string. Searches in file name and content. Examples: "budget 2024", "sales report", "project tracker" max_results: Maximum number of results to return (default 20, max 100) Returns: List of matching spreadsheets with their ID, name, and metadata |
| `google-sheet find-in-spreadsheet` | `{spreadsheet_id: str, query: str, sheet?: str = null, case_sensitive?: bool = false, max_results?: int = 50}` | Find cells containing a specific value in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) query: The text to search for in cell values sheet: Optional sheet name to search in. If not provided, searches all sheets. case_sensitive: Whether the search should be case-sensitive (default False) max_results: Maximum number of results to return (default 50) Returns: List of found cells with their location (sheet, cell in A1 notation) and value |
| `google-sheet batch-update` | `{spreadsheet_id: str, requests: list[dict]}` | Execute a batch update on a Google Spreadsheet using the full batchUpdate endpoint. This provides access to all batchUpdate operations including adding sheets, updating properties, inserting/deleting dimensions, formatting, and more. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) requests: A list of request objects. Each request object can contain any valid batchUpdate operation. Common operations include: - addSheet: Add a new sheet - updateSheetProperties: Update sheet properties (title, grid properties, etc.) - insertDimension: Insert rows or columns - deleteDimension: Delete rows or columns - updateCells: Update cell values and formatting - updateBorders: Update cell borders - addConditionalFormatRule: Add conditional formatting - deleteConditionalFormatRule: Remove conditional formatting - updateDimensionProperties: Update row/column properties - and many more... Example requests: [ { "addSheet": { "properties": { "title": "New Sheet" } } }, { "updateSheetProperties": { "properties": { "sheetId": 0, "title": "Renamed Sheet" }, "fields": "title" } }, { "insertDimension": { "range": { "sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3 } } } ] Returns: Result of the batch update operation, including replies for each request |
| `google-sheet add-chart` | `{spreadsheet_id: str, sheet: str, chart_type: str, data_range: str, title?: str = null, x_axis_label?: str = null, y_axis_label?: str = null, position_x?: int = 0, position_y?: int = 0, width?: int = 600, height?: int = 400}` | Add a chart to a Google Spreadsheet. Creates a chart from the specified data range with customizable type, title, and positioning. The chart is added as a floating element on the sheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet containing the data chart_type: Type of chart to create. Supported types: - COLUMN: Vertical bar chart - BAR: Horizontal bar chart - LINE: Line chart - AREA: Area chart - PIE: Pie chart - SCATTER: Scatter plot - COMBO: Combination chart - HISTOGRAM: Histogram data_range: A1 notation range for chart data (e.g., 'A1:C10'). The first row is typically treated as headers. title: Optional title for the chart x_axis_label: Optional label for the X axis (bottom axis) y_axis_label: Optional label for the Y axis (left axis) position_x: Horizontal position offset in pixels from the top-left corner (default: 0) position_y: Vertical position offset in pixels from the top-left corner (default: 0) width: Width of the chart in pixels (default: 600) height: Height of the chart in pixels (default: 400) Returns: Result of the chart creation operation Examples: Create a column chart showing sales data: add_chart( spreadsheet_id="abc123", sheet="Sales", chart_type="COLUMN", data_range="A1:B13", title="Monthly Sales", x_axis_label="Month", y_axis_label="Revenue ($)" ) Create a pie chart for market share: add_chart( spreadsheet_id="abc123", sheet="Market", chart_type="PIE", data_range="A1:B5", title="Market Share by Product" ) |
## arxiv-local
Use `arxiv-local <command> '<JSON arguments>'`. Run
`arxiv-local <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `arxiv-local search-papers` | `{query: str, max_results?: int, date_from?: str, date_to?: str, categories?: list[str]}` | Search for papers on arXiv with advanced filtering |
| `arxiv-local download-paper` | `{paper_id: str, check_status?: bool = false}` | Download a paper and create a resource for it — `paper_id`: The arXiv ID of the paper to download; `check_status`: If true, only check conversion status without downloading |
| `arxiv-local list-papers` | `{}` | List all existing papers available as resources |
| `arxiv-local read-paper` | `{paper_id: str}` | Read the full content of a stored paper in markdown format — `paper_id`: The arXiv ID of the paper to read |
## hf
Use `hf --help` for Hugging Face repository, download and upload commands. Repository paths and revisions identify the same files as upstream. Use `huggingface` for the upstream MCP search and Dataset Viewer operations.
## huggingface
Use `huggingface <command> '<JSON arguments>'`. Run
`huggingface <command> --help` to get more information.
| Command | Arguments | Description |
|---|---|---|
| `huggingface hf-whoami` | `{}` | Inspect the current Hugging Face authentication context, including the account, visible organization memberships, and credential access details. Read-only and never returns credential values. |
| `huggingface hub-repo-search` | `{query?: str, repo_types?: list["model" \| "dataset" \| "space"] = ["model", "dataset"], author?: str, filters?: list[str], sort?: "trendingScore" \| "downloads" \| "likes" \| "createdAt" \| "lastModified", limit?: number = 20}` | Search Hugging Face repositories with a shared query interface. You can target models, datasets, spaces, or aggregate across multiple repo types in one call. Include links to repositories in your response. — `query`: Search term. Leave blank and specify sort + limit to browse trending or recent repositories.; `repo_types`: Repository types to search. Defaults to ["model", "dataset"]. space uses keyword search via /api/spaces.; `author`: Organization or user namespace to filter by (e.g. 'google', 'meta-llama', 'huggingface').; `filters`: Optional hub filter tags. Applied to each selected repo type (e.g. ["text-generation"], ["language:en"], ["mcp-server"]).; `sort`: Sort order (descending): trendingScore, downloads, likes, createdAt, lastModified; `limit`: Maximum number of results to return per selected repo type |
| `huggingface hub-repo-details` | `{repo_ids: list[str], repo_type?: "model" \| "dataset" \| "space", operations?: list["overview" \| "dataset_structure" \| "dataset_preview"], config?: str, split?: str, offset?: int, limit?: int}` | Get details for one or more Hugging Face repos (model, dataset, or space). Auto-detects type unless specified. For datasets, use operations: overview, dataset_structure, dataset_preview. Use dataset_structure first to discover configs, splits, sizes, and schema. Use dataset_preview only when config and split are known, unless the dataset has a single config/split. — `repo_ids`: Repo IDs for (models\|dataset/space) - usually in author/name format (e.g. openai/gpt-oss-120b); `repo_type`: Specify lookup type; otherwise auto-detects; `operations`: Details to return. Defaults to ["overview"]. For datasets, prefer ["overview", "dataset_structure"] first; then call ["dataset_preview"] with config and split.; `config`: Dataset Viewer config. Required for dataset_preview when the dataset has multiple config/split options. Discover via dataset_structure.; `split`: Dataset Viewer split. Required for dataset_preview when the dataset has multiple config/split options. Discover via dataset_structure.; `offset`: Row offset for dataset_preview. Defaults to 0.; `limit`: Row count for dataset_preview. Defaults to 5 and is clamped to 1-100. |
| `huggingface hf-fs` | `{operations: list[{cmd: "ls" \| "cat" \| "attach" \| "stat" \| "find" \| "search", args: list[str]}]}` | When to use: Hugging Face Hub models, datasets, Spaces, collections, papers, daily papers, today's trending models, current paper leaderboard, docs, and repository files. Examples: {"operations":[{"cmd":"ls","args":["hf://models/trending","--limit","10"]}]} {"operations":[{"cmd":"ls","args":["hf://papers/trending"]}]} {"operations":[{"cmd":"ls","args":["hf://papers/daily/latest"]}]} Use hf_fs for Hugging Face Hub filesystem operations. Call it with operations, an array of {cmd, args} items; multiple operations may be submitted together. Usage: {"operations":[{"cmd":"ls","args":["hf://models/org/repo"]}]} Grammar; each string below is one args array item: ls URI [--recursive] [--glob GLOB] [--type TYPE] [--sort SORT] [--limit N] cat URI [--offset N] [--max-bytes N] attach URI [--max-bytes N] stat URI find URI [--name GLOB] [--path GLOB] [--type TYPE] [--limit N] search URI [QUERY] [--type TYPE] [--sort SORT] [--tag TAG] [--kind mcp] [--limit N] COMMAND = ls\|cat\|attach\|stat\|find\|search. TYPE = file\|dir\|repo\|bucket\|collection\|paper\|link. SORT = createdAt\|downloads\|likes\|lastModified\|likes30d\|trendingScore\|mainSize\|id\|trending\|upvotes. URI is a canonical hf:// URI. QUERY and GLOB are each one string. Use search for discovery, ls for a known directory, find for recursive matching within a known scope, stat for filesystem metadata or an uncertain target type, cat for text contents, and attach for a complete JPEG, PNG, or WebP image. When the request gives an exact text-file URI, use cat directly; do not add ls or stat first. stat does not read the contents of JSON, Markdown, or other text files. Search scopes: hf://models\|datasets\|spaces[/OWNER], hf://collections[/OWNER], hf://papers, and hf://docs[/...]. Paper and documentation search require QUERY. Repeat --tag only for search hf://spaces; --kind mcp selects MCP Spaces. Use ls hf://models/trending, hf://datasets/trending, hf://spaces/trending, or hf://papers/trending for trending listings. For a named paper.md or metadata.json, use cat directly. Use ls on a paper only to discover an unnamed related VFS. Omit --limit, --sort, and --type unless the request requires them. Limits and path-specific behavior are documented at hf://README.md. Issue one hf_fs call. — `operations.cmd`: Command to execute.; `operations.args`: Command arguments. First item must be an hf:// URI, not a local path or bare filename. One argument per array item. |
| name | workspace-commands |
|---|
| description | The shell commands and task tools available in this workspace. |
|---|
Available commands
Python (python or python3), Perl, JavaScript/Node.js, and TypeScript runtimes are unavailable. Use the shell commands and task CLIs documented below; do not probe for or attempt to install other runtimes.
Standard Unix commands, among them:
cat head tail ls find grep wc sort uniq cut tr sed awk
diff tee xargs jq unzip
with pipes, > redirection, $(...) substitution and $'...'.
The task CLIs below are registered with this shell rather than installed as files; do not inspect them with which, file or /usr/bin.
web-search
Use web-search <command> '<JSON arguments>'. Run web-search <command> --help to get more information.
| Command | Arguments | Description |
|---|
web-search web-search | {query: str, num_results?: int = 10} | Search the web using Google Serper API with concurrency control and retry mechanisms. Supports various Google search operators. — query: Search query with optional Google search operators.; num_results: Number of results to return, default 10, max 50 |
browser
Use browser <command> '<JSON arguments>'. Run browser <command> --help to get more information.
| Command | Arguments | Description |
|---|
browser close | {} | Close the page |
browser resize | {width: number, height: number} | Resize the browser window — width: Width of the browser window; height: Height of the browser window |
browser console-messages | {} | Returns all console messages |
browser handle-dialog | {accept: bool, promptText?: str} | Handle a dialog — accept: Whether to accept the dialog.; promptText: The text of the prompt in case of a prompt dialog. |
browser evaluate | {function: str, element?: str, ref?: str} | Evaluate JavaScript expression on page or element — function: () => { /* code */ } or (element) => { /* code */ } when element is provided; element: Human-readable element description used to obtain permission to interact with the element; ref: Exact target element reference from the page snapshot |
browser file-upload | {paths: list[str]} | Upload one or multiple files — paths: The absolute paths to the files to upload. Can be a single file or multiple files. |
browser install | {} | Install the browser specified in the config. Call this if you get an error about the browser not being installed. |
browser press-key | {key: str} | Press a key on the keyboard — key: Name of the key to press or a character to generate, such as ArrowLeft or a |
browser type | {element: str, ref: str, text: str, submit?: bool, slowly?: bool} | Type text into editable element — element: Human-readable element description used to obtain permission to interact with the element; ref: Exact target element reference from the page snapshot; text: Text to type into the element; submit: Whether to submit entered text (press Enter after); slowly: Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once. |
browser navigate | {url: str} | Navigate to a URL — url: The URL to navigate to |
browser navigate-back | {} | Go back to the previous page |
browser navigate-forward | {} | Go forward to the next page |
browser network-requests | {} | Returns all network requests since loading the page |
browser take-screenshot | {raw?: bool, filename?: str, element?: str, ref?: str, fullPage?: bool} | Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions. — raw: Whether to return without compression (in PNG format). Default is false, which returns a JPEG image.; filename: File name to save the screenshot to. Defaults to `page-{timestamp}.{png\ | jpeg} if not specified.; element: Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.; ref: Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.; fullPage`: When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots. |
browser snapshot | {} | Capture accessibility snapshot of the current page. The snapshot is divided into manageable spans (configurable via --span-size, default 2000 characters, or use -1 to show complete snapshot) and shows the first span by default. Use browser_snapshot_navigate_* tools to view other spans or browser_snapshot_search to find content across all spans. This provides structured element data with ref attributes for interaction, making it better than screenshots for automation. |
browser click | `{element: str, ref: str, doubleClick?: bool, button?: "left" \ | "right" \ | "middle"}` | Perform click on a web page — element: Human-readable element description used to obtain permission to interact with the element; ref: Exact target element reference from the page snapshot; doubleClick: Whether to perform a double click instead of a single click; button: Button to click, defaults to left |
browser drag | {startElement: str, startRef: str, endElement: str, endRef: str} | Perform drag and drop between two elements — startElement: Human-readable source element description used to obtain the permission to interact with the element; startRef: Exact source element reference from the page snapshot; endElement: Human-readable target element description used to obtain the permission to interact with the element; endRef: Exact target element reference from the page snapshot |
browser hover | {element: str, ref: str} | Hover over element on page — element: Human-readable element description used to obtain permission to interact with the element; ref: Exact target element reference from the page snapshot |
browser select-option | {element: str, ref: str, values: list[str]} | Select an option in a dropdown — element: Human-readable element description used to obtain permission to interact with the element; ref: Exact target element reference from the page snapshot; values: Array of values to select in the dropdown. This can be a single value or multiple values. |
browser snapshot-navigate-to-span | {spanIndex: int} | Navigate to a specific span in the current page snapshot by index. Each span contains a portion of the page content (limited by span size). Use this when you know the exact span number you want to view, typically after using browser_snapshot_search to locate content. — spanIndex: The span index to navigate to (0-based) |
browser snapshot-navigate-to-first-span | {} | Navigate to the first span of the current page snapshot. This shows the beginning of the page content and is useful for starting from the top of the page when exploring content sequentially. |
browser snapshot-navigate-to-last-span | {} | Navigate to the last span of the current page snapshot. This shows the end of the page content and is useful for accessing footer content, final form elements, or bottom navigation. |
browser snapshot-navigate-to-next-span | {} | Navigate to the next span in the current page snapshot. If already at the last span, stays at the last span. Use this for sequential exploration of page content from top to bottom. |
browser snapshot-navigate-to-prev-span | {} | Navigate to the previous span in the current page snapshot. If already at the first span, stays at the first span. Use this for sequential exploration of page content from bottom to top. |
browser snapshot-navigate-to-line | {globalLineNumber: int, contextLines?: int} | Navigate to a specific global line number in the current page snapshot with configurable surrounding context lines. Shows which spans contain the context lines. The target line is marked with ">>>". Use this to quickly jump to specific content found via search results. — globalLineNumber: The global line number to navigate to (1-based); contextLines: Number of context lines to show before and after the target line (default: 3) |
browser snapshot-search | {pattern: str, flags?: str} | Search for a pattern across all spans of the current page snapshot using regular expressions. Returns matches with both global line numbers (across entire snapshot) and in-span line numbers (within each span). Shows which spans contain matches for navigation. Supports regex flags like "gi" for global case-insensitive search. — pattern: The regex pattern to search for; flags: Optional regex flags (e.g., "gi" for global case-insensitive) |
browser tab-list | {} | List browser tabs |
browser tab-new | {url?: str} | Open a new tab — url: The URL to navigate to in the new tab. If not provided, the new tab will be blank. |
browser tab-select | {index: number} | Select a tab by index — index: The index of the tab to select |
browser tab-close | {index?: number} | Close a tab — index: The index of the tab to close. Closes current tab if not provided. |
browser wait-for | {time?: number, text?: str, textGone?: str} | Wait for text to appear or disappear or a specified time to pass — time: The time to wait in seconds; text: The text to wait for; textGone: The text to wait for to disappear |
fetch
Use fetch <command> '<JSON arguments>'. Run fetch <command> --help to get more information.
| Command | Arguments | Description |
|---|
fetch html | {url: str, headers?: dict} | Fetch a website and return the content as HTML — url: URL of the website to fetch; headers: Optional headers to include in the request |
fetch markdown | {url: str, headers?: dict} | Fetch a website and return the content as Markdown — url: URL of the website to fetch; headers: Optional headers to include in the request |
fetch txt | {url: str, headers?: dict} | Fetch a website, return the content as plain text (no HTML) — url: URL of the website to fetch; headers: Optional headers to include in the request |
fetch json | {url: str, headers?: dict} | Fetch a JSON file from a URL — url: URL of the JSON to fetch; headers: Optional headers to include in the request |
google-sheet
Use google-sheet <command> '<JSON arguments>'. Run google-sheet <command> --help to get more information.
| Command | Arguments | Description |
|---|
google-sheet get-sheet-data | {spreadsheet_id: str, sheet: str, range?: str = null, include_grid_data?: bool = false} | Get data from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all data. include_grid_data: If True, includes cell formatting and other metadata in the response. Note: Setting this to True will significantly increase the response size and token usage when parsing the response, as it includes detailed cell formatting information. Default is False (returns values only, more efficient). Returns: Grid data structure with either full metadata or just values from Google Sheets API, depending on include_grid_data parameter |
google-sheet get-sheet-formulas | {spreadsheet_id: str, sheet: str, range?: str = null} | Get formulas from a specific sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Optional cell range in A1 notation (e.g., 'A1:C10'). If not provided, gets all formulas from the sheet. Returns: A 2D array of the sheet formulas. |
google-sheet update-cells | {spreadsheet_id: str, sheet: str, range: str, data: list[list]} | Update cells in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet range: Cell range in A1 notation (e.g., 'A1:C10') data: 2D array of values to update Returns: Result of the update operation |
google-sheet batch-update-cells | {spreadsheet_id: str, sheet: str, ranges: dict} | Batch update multiple ranges in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet ranges: Dictionary mapping range strings to 2D arrays of values e.g., {'A1:B2': [[1, 2], [3, 4]], 'D1:E2': [['a', 'b'], ['c', 'd']]} Returns: Result of the batch update operation |
google-sheet add-rows | {spreadsheet_id: str, sheet: str, count: int, start_row?: int = null} | Add rows to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of rows to add start_row: 0-based row index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
google-sheet add-columns | {spreadsheet_id: str, sheet: str, count: int, start_column?: int = null} | Add columns to a sheet in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet count: Number of columns to add start_column: 0-based column index to start adding. If not provided, adds at the beginning. Returns: Result of the operation |
google-sheet list-sheets | {spreadsheet_id: str} | List all sheets in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) Returns: List of sheet names |
google-sheet copy-sheet | {src_spreadsheet: str, src_sheet: str, dst_spreadsheet: str, dst_sheet: str} | Copy a sheet from one spreadsheet to another. Args: src_spreadsheet: Source spreadsheet ID src_sheet: Source sheet name dst_spreadsheet: Destination spreadsheet ID dst_sheet: Destination sheet name Returns: Result of the operation |
google-sheet rename-sheet | {spreadsheet: str, sheet: str, new_name: str} | Rename a sheet in a Google Spreadsheet. Args: spreadsheet: Spreadsheet ID sheet: Current sheet name new_name: New sheet name Returns: Result of the operation |
google-sheet get-multiple-sheet-data | {queries: list[dict]} | Get data from multiple specific ranges in Google Spreadsheets. Args: queries: A list of dictionaries, each specifying a query. Each dictionary should have 'spreadsheet_id', 'sheet', and 'range' keys. Example: [{'spreadsheet_id': 'abc', 'sheet': 'Sheet1', 'range': 'A1:B5'}, {'spreadsheet_id': 'xyz', 'sheet': 'Data', 'range': 'C1:C10'}] Returns: A list of dictionaries, each containing the original query parameters and the fetched 'data' or an 'error'. |
google-sheet get-multiple-spreadsheet-summary | {spreadsheet_ids: list[str], rows_to_fetch?: int = 5} | Get a summary of multiple Google Spreadsheets, including sheet names, headers, and the first few rows of data for each sheet. Args: spreadsheet_ids: A list of spreadsheet IDs to summarize. rows_to_fetch: The number of rows (including header) to fetch for the summary (default: 5). Returns: A list of dictionaries, each representing a spreadsheet summary. Includes spreadsheet title, sheet summaries (title, headers, first rows), or an error. |
google-sheet create-spreadsheet | {title: str, folder_id?: str = null} | Create a new Google Spreadsheet. Args: title: The title of the new spreadsheet folder_id: Optional Google Drive folder ID where the spreadsheet should be created. If not provided, uses the configured default folder or creates in root. Returns: Information about the newly created spreadsheet including its ID |
google-sheet create-sheet | {spreadsheet_id: str, title: str} | Create a new sheet tab in an existing Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet title: The title for the new sheet Returns: Information about the newly created sheet |
google-sheet list-spreadsheets | {folder_id?: str = null} | List all spreadsheets in the specified Google Drive folder. If no folder is specified, uses the configured default folder or lists from 'My Drive'. Args: folder_id: Optional Google Drive folder ID to search in. If not provided, uses the configured default folder or searches 'My Drive'. Returns: List of spreadsheets with their ID and title |
google-sheet share-spreadsheet | {spreadsheet_id: str, recipients: list[dict], send_notification?: bool = true} | Share a Google Spreadsheet with multiple users via email, assigning specific roles. Args: spreadsheet_id: The ID of the spreadsheet to share. recipients: A list of dictionaries, each containing 'email_address' and 'role'. The role should be one of: 'reader', 'commenter', 'writer'. Example: [ {'email_address': 'user1@example.com', 'role': 'writer'}, {'email_address': 'user2@example.com', 'role': 'reader'} ] send_notification: Whether to send a notification email to the users. Defaults to True. Returns: A dictionary containing lists of 'successes' and 'failures'. Each item in the lists includes the email address and the outcome. |
google-sheet list-folders | {parent_folder_id?: str = null} | List all folders in the specified Google Drive folder. If no parent folder is specified, lists folders from 'My Drive' root. Args: parent_folder_id: Optional Google Drive folder ID to search within. If not provided, searches the root of 'My Drive'. Returns: List of folders with their ID, name, and parent information |
google-sheet search-spreadsheets | {query: str, max_results?: int = 20} | Search for spreadsheets in Google Drive by name or content. Args: query: Search query string. Searches in file name and content. Examples: "budget 2024", "sales report", "project tracker" max_results: Maximum number of results to return (default 20, max 100) Returns: List of matching spreadsheets with their ID, name, and metadata |
google-sheet find-in-spreadsheet | {spreadsheet_id: str, query: str, sheet?: str = null, case_sensitive?: bool = false, max_results?: int = 50} | Find cells containing a specific value in a Google Spreadsheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) query: The text to search for in cell values sheet: Optional sheet name to search in. If not provided, searches all sheets. case_sensitive: Whether the search should be case-sensitive (default False) max_results: Maximum number of results to return (default 50) Returns: List of found cells with their location (sheet, cell in A1 notation) and value |
google-sheet batch-update | {spreadsheet_id: str, requests: list[dict]} | Execute a batch update on a Google Spreadsheet using the full batchUpdate endpoint. This provides access to all batchUpdate operations including adding sheets, updating properties, inserting/deleting dimensions, formatting, and more. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) requests: A list of request objects. Each request object can contain any valid batchUpdate operation. Common operations include: - addSheet: Add a new sheet - updateSheetProperties: Update sheet properties (title, grid properties, etc.) - insertDimension: Insert rows or columns - deleteDimension: Delete rows or columns - updateCells: Update cell values and formatting - updateBorders: Update cell borders - addConditionalFormatRule: Add conditional formatting - deleteConditionalFormatRule: Remove conditional formatting - updateDimensionProperties: Update row/column properties - and many more... Example requests: [ { "addSheet": { "properties": { "title": "New Sheet" } } }, { "updateSheetProperties": { "properties": { "sheetId": 0, "title": "Renamed Sheet" }, "fields": "title" } }, { "insertDimension": { "range": { "sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3 } } } ] Returns: Result of the batch update operation, including replies for each request |
google-sheet add-chart | {spreadsheet_id: str, sheet: str, chart_type: str, data_range: str, title?: str = null, x_axis_label?: str = null, y_axis_label?: str = null, position_x?: int = 0, position_y?: int = 0, width?: int = 600, height?: int = 400} | Add a chart to a Google Spreadsheet. Creates a chart from the specified data range with customizable type, title, and positioning. The chart is added as a floating element on the sheet. Args: spreadsheet_id: The ID of the spreadsheet (found in the URL) sheet: The name of the sheet containing the data chart_type: Type of chart to create. Supported types: - COLUMN: Vertical bar chart - BAR: Horizontal bar chart - LINE: Line chart - AREA: Area chart - PIE: Pie chart - SCATTER: Scatter plot - COMBO: Combination chart - HISTOGRAM: Histogram data_range: A1 notation range for chart data (e.g., 'A1:C10'). The first row is typically treated as headers. title: Optional title for the chart x_axis_label: Optional label for the X axis (bottom axis) y_axis_label: Optional label for the Y axis (left axis) position_x: Horizontal position offset in pixels from the top-left corner (default: 0) position_y: Vertical position offset in pixels from the top-left corner (default: 0) width: Width of the chart in pixels (default: 600) height: Height of the chart in pixels (default: 400) Returns: Result of the chart creation operation Examples: Create a column chart showing sales data: add_chart( spreadsheet_id="abc123", sheet="Sales", chart_type="COLUMN", data_range="A1:B13", title="Monthly Sales", x_axis_label="Month", y_axis_label="Revenue ($)" ) Create a pie chart for market share: add_chart( spreadsheet_id="abc123", sheet="Market", chart_type="PIE", data_range="A1:B5", title="Market Share by Product" ) |
arxiv-local
Use arxiv-local <command> '<JSON arguments>'. Run arxiv-local <command> --help to get more information.
| Command | Arguments | Description |
|---|
arxiv-local search-papers | {query: str, max_results?: int, date_from?: str, date_to?: str, categories?: list[str]} | Search for papers on arXiv with advanced filtering |
arxiv-local download-paper | {paper_id: str, check_status?: bool = false} | Download a paper and create a resource for it — paper_id: The arXiv ID of the paper to download; check_status: If true, only check conversion status without downloading |
arxiv-local list-papers | {} | List all existing papers available as resources |
arxiv-local read-paper | {paper_id: str} | Read the full content of a stored paper in markdown format — paper_id: The arXiv ID of the paper to read |
hf
Use hf --help for Hugging Face repository, download and upload commands. Repository paths and revisions identify the same files as upstream. Use huggingface for the upstream MCP search and Dataset Viewer operations.
huggingface
Use huggingface <command> '<JSON arguments>'. Run huggingface <command> --help to get more information.
| Command | Arguments | Description |
|---|
huggingface hf-whoami | {} | Inspect the current Hugging Face authentication context, including the account, visible organization memberships, and credential access details. Read-only and never returns credential values. |
huggingface hub-repo-search | `{query?: str, repo_types?: list["model" \ | "dataset" \ | "space"] = ["model", "dataset"], author?: str, filters?: list[str], sort?: "trendingScore" \ | "downloads" \ | "likes" \ | "createdAt" \ | "lastModified", limit?: number = 20}` | Search Hugging Face repositories with a shared query interface. You can target models, datasets, spaces, or aggregate across multiple repo types in one call. Include links to repositories in your response. — query: Search term. Leave blank and specify sort + limit to browse trending or recent repositories.; repo_types: Repository types to search. Defaults to ["model", "dataset"]. space uses keyword search via /api/spaces.; author: Organization or user namespace to filter by (e.g. 'google', 'meta-llama', 'huggingface').; filters: Optional hub filter tags. Applied to each selected repo type (e.g. ["text-generation"], ["language:en"], ["mcp-server"]).; sort: Sort order (descending): trendingScore, downloads, likes, createdAt, lastModified; limit: Maximum number of results to return per selected repo type |
huggingface hub-repo-details | `{repo_ids: list[str], repo_type?: "model" \ | "dataset" \ | "space", operations?: list["overview" \ | "dataset_structure" \ | "dataset_preview"], config?: str, split?: str, offset?: int, limit?: int}` | Get details for one or more Hugging Face repos (model, dataset, or space). Auto-detects type unless specified. For datasets, use operations: overview, dataset_structure, dataset_preview. Use dataset_structure first to discover configs, splits, sizes, and schema. Use dataset_preview only when config and split are known, unless the dataset has a single config/split. — repo_ids: Repo IDs for (models\ | dataset/space) - usually in author/name format (e.g. openai/gpt-oss-120b); repo_type: Specify lookup type; otherwise auto-detects; operations: Details to return. Defaults to ["overview"]. For datasets, prefer ["overview", "dataset_structure"] first; then call ["dataset_preview"] with config and split.; config: Dataset Viewer config. Required for dataset_preview when the dataset has multiple config/split options. Discover via dataset_structure.; split: Dataset Viewer split. Required for dataset_preview when the dataset has multiple config/split options. Discover via dataset_structure.; offset: Row offset for dataset_preview. Defaults to 0.; limit: Row count for dataset_preview. Defaults to 5 and is clamped to 1-100. |
huggingface hf-fs | `{operations: list[{cmd: "ls" \ | "cat" \ | "attach" \ | "stat" \ | "find" \ | "search", args: list[str]}]}` | When to use: Hugging Face Hub models, datasets, Spaces, collections, papers, daily papers, today's trending models, current paper leaderboard, docs, and repository files. Examples: {"operations":[{"cmd":"ls","args":["hf://models/trending","--limit","10"]}]} {"operations":[{"cmd":"ls","args":["hf://papers/trending"]}]} {"operations":[{"cmd":"ls","args":["hf://papers/daily/latest"]}]} Use hf_fs for Hugging Face Hub filesystem operations. Call it with operations, an array of {cmd, args} items; multiple operations may be submitted together. Usage: {"operations":[{"cmd":"ls","args":["hf://models/org/repo"]}]} Grammar; each string below is one args array item: ls URI [--recursive] [--glob GLOB] [--type TYPE] [--sort SORT] [--limit N] cat URI [--offset N] [--max-bytes N] attach URI [--max-bytes N] stat URI find URI [--name GLOB] [--path GLOB] [--type TYPE] [--limit N] search URI [QUERY] [--type TYPE] [--sort SORT] [--tag TAG] [--kind mcp] [--limit N] COMMAND = ls\ | cat\ | attach\ | stat\ | find\ | search. TYPE = file\ | dir\ | repo\ | bucket\ | collection\ | paper\ | link. SORT = createdAt\ | downloads\ | likes\ | lastModified\ | likes30d\ | trendingScore\ | mainSize\ | id\ | trending\ | upvotes. URI is a canonical hf:// URI. QUERY and GLOB are each one string. Use search for discovery, ls for a known directory, find for recursive matching within a known scope, stat for filesystem metadata or an uncertain target type, cat for text contents, and attach for a complete JPEG, PNG, or WebP image. When the request gives an exact text-file URI, use cat directly; do not add ls or stat first. stat does not read the contents of JSON, Markdown, or other text files. Search scopes: hf://models\ | datasets\ | spaces[/OWNER], hf://collections[/OWNER], hf://papers, and hf://docs[/...]. Paper and documentation search require QUERY. Repeat --tag only for search hf://spaces; --kind mcp selects MCP Spaces. Use ls hf://models/trending, hf://datasets/trending, hf://spaces/trending, or hf://papers/trending for trending listings. For a named paper.md or metadata.json, use cat directly. Use ls on a paper only to discover an unnamed related VFS. Omit --limit, --sort, and --type unless the request requires them. Limits and path-specific behavior are documented at hf://README.md. Issue one hf_fs call. — operations.cmd: Command to execute.; operations.args: Command arguments. First item must be an hf:// URI, not a local path or bare filename. One argument per array item. |