@olib-ai/owl-browser-mcp 2.0.5 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +327 -35
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -20369,11 +20369,11 @@ var openapi_default = {
20369
20369
  info: {
20370
20370
  title: "Owl Browser API",
20371
20371
  description: "REST API for browser automation with anti-detection capabilities",
20372
- version: "1.0.8"
20372
+ version: "1.0.9"
20373
20373
  },
20374
20374
  servers: [
20375
20375
  {
20376
- url: "http://localhost",
20376
+ url: "http://127.0.0.1:8080",
20377
20377
  description: "Current server"
20378
20378
  }
20379
20379
  ],
@@ -21005,10 +21005,54 @@ var openapi_default = {
21005
21005
  }
21006
21006
  }
21007
21007
  },
21008
+ "/api/execute/browser_set_content": {
21009
+ post: {
21010
+ summary: "Browser Set Content",
21011
+ description: "Set the page's HTML content directly. Replaces the current page content with the provided HTML. The page URL will be 'about:blank'. Useful for rendering HTML templates, testing, or injecting content without making a network request.",
21012
+ tags: [
21013
+ "General"
21014
+ ],
21015
+ requestBody: {
21016
+ required: true,
21017
+ content: {
21018
+ "application/json": {
21019
+ schema: {
21020
+ type: "object",
21021
+ properties: {
21022
+ context_id: {
21023
+ type: "string",
21024
+ description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
21025
+ },
21026
+ html: {
21027
+ type: "string",
21028
+ description: "The HTML content to set as the page body. Can be a full HTML document or a fragment. The page URL will be set to 'about:blank'"
21029
+ }
21030
+ },
21031
+ required: [
21032
+ "context_id",
21033
+ "html"
21034
+ ]
21035
+ }
21036
+ }
21037
+ }
21038
+ },
21039
+ responses: {
21040
+ "200": {
21041
+ description: "Successful response"
21042
+ },
21043
+ "400": {
21044
+ description: "Bad request"
21045
+ },
21046
+ "401": {
21047
+ description: "Unauthorized"
21048
+ }
21049
+ }
21050
+ }
21051
+ },
21008
21052
  "/api/execute/browser_click": {
21009
21053
  post: {
21010
21054
  summary: "Browser Click",
21011
- description: "Click on an element using CSS selector, XY coordinates, or natural language description. Supports semantic element finding using AI - describe what you want to click (e.g., 'login button', 'search icon') and the system will locate the right element. Simulates a real mouse click with proper event dispatch.",
21055
+ description: "Click on an element using CSS selector, XY coordinates, or natural language description. Supports semantic element finding using AI - describe what you want to click (e.g., 'login button', 'search icon') and the system will locate the right element. Simulates a real mouse click with proper event dispatch. Optionally hold the mouse button for press-and-hold interactions using hold_ms.",
21012
21056
  tags: [
21013
21057
  "General"
21014
21058
  ],
@@ -21026,6 +21070,14 @@ var openapi_default = {
21026
21070
  selector: {
21027
21071
  type: "string",
21028
21072
  description: "Target element to click. Accepts: CSS selector (e.g., '#submit-btn', '.nav-link'), XY coordinates as 'Xx Y' (e.g., '100x200'), or natural language description (e.g., 'login button', 'search icon'). Semantic descriptions use AI to find the element"
21073
+ },
21074
+ hold_ms: {
21075
+ type: "string",
21076
+ description: "Duration in milliseconds to hold the mouse button down before releasing. Use for press-and-hold interactions (e.g., long press menus, drag initiation). Default: 0 (immediate click)"
21077
+ },
21078
+ index: {
21079
+ type: "string",
21080
+ description: "When multiple elements match the selector, click the Nth element (0-based). Uses querySelectorAll()[index] instead of querySelector(). Default: -1 (first match)"
21029
21081
  }
21030
21082
  },
21031
21083
  required: [
@@ -21052,7 +21104,7 @@ var openapi_default = {
21052
21104
  "/api/execute/browser_type": {
21053
21105
  post: {
21054
21106
  summary: "Browser Type",
21055
- description: "Type text into an input field with human-like keystroke simulation. Target the field using CSS selector, coordinates, or natural language (e.g., 'email field'). Note: Does NOT clear existing content - use browser_clear_input first if you need to replace text rather than append.",
21107
+ description: "Type text into an input field with human-like keystroke simulation. Target the field using CSS selector, coordinates, or natural language (e.g., 'email field'). When selector is omitted, types into the currently focused element. Note: Does NOT clear existing content - use browser_clear_input first if you need to replace text rather than append.",
21056
21108
  tags: [
21057
21109
  "General"
21058
21110
  ],
@@ -21069,16 +21121,19 @@ var openapi_default = {
21069
21121
  },
21070
21122
  selector: {
21071
21123
  type: "string",
21072
- description: `Target input field. Accepts: CSS selector (e.g., '#email', 'input[name="username"]'), XY coordinates (e.g., '100x200'), or natural language description (e.g., 'email field', 'search box')`
21124
+ description: `Target input field. Accepts: CSS selector (e.g., '#email', 'input[name="username"]'), XY coordinates (e.g., '100x200'), or natural language description (e.g., 'email field', 'search box'). When omitted, types into the currently focused element (document.activeElement)`
21073
21125
  },
21074
21126
  text: {
21075
21127
  type: "string",
21076
21128
  description: "The text to type into the input field. Simulates real keystrokes with human-like timing. Existing content is NOT cleared - use browser_clear_input first if needed"
21129
+ },
21130
+ index: {
21131
+ type: "string",
21132
+ description: "When multiple elements match the selector, target the Nth element (0-based). Uses querySelectorAll()[index] instead of querySelector(). Default: -1 (first match)"
21077
21133
  }
21078
21134
  },
21079
21135
  required: [
21080
21136
  "context_id",
21081
- "selector",
21082
21137
  "text"
21083
21138
  ]
21084
21139
  }
@@ -21150,7 +21205,7 @@ var openapi_default = {
21150
21205
  "/api/execute/browser_press_key": {
21151
21206
  post: {
21152
21207
  summary: "Browser Press Key",
21153
- description: "Press a special keyboard key like Enter, Tab, Escape, or arrow keys. The key is sent to the currently focused element. Common uses: Enter to submit forms, Tab to move between fields, Escape to close modals, Arrow keys for navigation in menus or sliders.",
21208
+ description: "Press a keyboard key. Supports special keys (Enter, Tab, Escape, arrow keys, etc.) and single characters (a-z, A-Z, 0-9). The key is sent to the currently focused element. Common uses: Enter to submit forms, Tab to move between fields, Escape to close modals, Arrow keys for navigation in menus or sliders, or single characters for keyboard shortcuts.",
21154
21209
  tags: [
21155
21210
  "General"
21156
21211
  ],
@@ -21167,30 +21222,7 @@ var openapi_default = {
21167
21222
  },
21168
21223
  key: {
21169
21224
  type: "string",
21170
- description: "Special key to press. Common uses: 'Enter' to submit forms, 'Tab' to move focus, 'Escape' to close modals, 'ArrowDown/Up' for navigation. The key is sent to the currently focused element",
21171
- enum: [
21172
- "Enter",
21173
- "Return",
21174
- "Tab",
21175
- "Escape",
21176
- "Esc",
21177
- "Backspace",
21178
- "Delete",
21179
- "Del",
21180
- "ArrowUp",
21181
- "Up",
21182
- "ArrowDown",
21183
- "Down",
21184
- "ArrowLeft",
21185
- "Left",
21186
- "ArrowRight",
21187
- "Right",
21188
- "Space",
21189
- "Home",
21190
- "End",
21191
- "PageUp",
21192
- "PageDown"
21193
- ]
21225
+ description: "Key to press. Supports special keys: 'Enter', 'Tab', 'Escape', 'Backspace', 'Delete', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Space', 'Home', 'End', 'PageUp', 'PageDown'. Also supports single characters: 'a'-'z', 'A'-'Z', '0'-'9'. The key is sent to the currently focused element"
21194
21226
  }
21195
21227
  },
21196
21228
  required: [
@@ -21453,6 +21485,10 @@ var openapi_default = {
21453
21485
  selector: {
21454
21486
  type: "string",
21455
21487
  description: "CSS selector, position coordinates (e.g., '100x200'), or natural language description of the element to hover over"
21488
+ },
21489
+ index: {
21490
+ type: "string",
21491
+ description: "When multiple elements match the selector, target the Nth element (0-based). Default: -1 (first match)"
21456
21492
  }
21457
21493
  },
21458
21494
  required: [
@@ -21497,6 +21533,10 @@ var openapi_default = {
21497
21533
  selector: {
21498
21534
  type: "string",
21499
21535
  description: "CSS selector, position coordinates (e.g., '100x200'), or natural language description of the element to double-click"
21536
+ },
21537
+ index: {
21538
+ type: "string",
21539
+ description: "When multiple elements match the selector, target the Nth element (0-based). Default: -1 (first match)"
21500
21540
  }
21501
21541
  },
21502
21542
  required: [
@@ -21541,6 +21581,10 @@ var openapi_default = {
21541
21581
  selector: {
21542
21582
  type: "string",
21543
21583
  description: "CSS selector, position coordinates (e.g., '100x200'), or natural language description of the element to right-click"
21584
+ },
21585
+ index: {
21586
+ type: "string",
21587
+ description: "When multiple elements match the selector, target the Nth element (0-based). Default: -1 (first match)"
21544
21588
  }
21545
21589
  },
21546
21590
  required: [
@@ -21585,6 +21629,10 @@ var openapi_default = {
21585
21629
  selector: {
21586
21630
  type: "string",
21587
21631
  description: "CSS selector or natural language description of the input element to clear"
21632
+ },
21633
+ index: {
21634
+ type: "string",
21635
+ description: "When multiple elements match the selector, target the Nth element (0-based). Default: -1 (first match)"
21588
21636
  }
21589
21637
  },
21590
21638
  required: [
@@ -21629,6 +21677,10 @@ var openapi_default = {
21629
21677
  selector: {
21630
21678
  type: "string",
21631
21679
  description: "CSS selector or natural language description of the element to focus"
21680
+ },
21681
+ index: {
21682
+ type: "string",
21683
+ description: "When multiple elements match the selector, target the Nth element (0-based). Default: -1 (first match)"
21632
21684
  }
21633
21685
  },
21634
21686
  required: [
@@ -21854,6 +21906,10 @@ var openapi_default = {
21854
21906
  selector: {
21855
21907
  type: "string",
21856
21908
  description: "CSS selector or natural language description of the element to check visibility for"
21909
+ },
21910
+ index: {
21911
+ type: "string",
21912
+ description: "When multiple elements match the selector, check the Nth element (0-based). Default: -1 (first match)"
21857
21913
  }
21858
21914
  },
21859
21915
  required: [
@@ -21898,6 +21954,10 @@ var openapi_default = {
21898
21954
  selector: {
21899
21955
  type: "string",
21900
21956
  description: "CSS selector or natural language description of the element to check enabled state for"
21957
+ },
21958
+ index: {
21959
+ type: "string",
21960
+ description: "When multiple elements match the selector, check the Nth element (0-based). Default: -1 (first match)"
21901
21961
  }
21902
21962
  },
21903
21963
  required: [
@@ -21942,6 +22002,10 @@ var openapi_default = {
21942
22002
  selector: {
21943
22003
  type: "string",
21944
22004
  description: "CSS selector or natural language description of the checkbox or radio button to check"
22005
+ },
22006
+ index: {
22007
+ type: "string",
22008
+ description: "When multiple elements match the selector, check the Nth element (0-based). Default: -1 (first match)"
21945
22009
  }
21946
22010
  },
21947
22011
  required: [
@@ -21965,6 +22029,151 @@ var openapi_default = {
21965
22029
  }
21966
22030
  }
21967
22031
  },
22032
+ "/api/execute/browser_is_editable": {
22033
+ post: {
22034
+ summary: "Browser Is Editable",
22035
+ description: "Check if an element is editable (not disabled AND not readOnly). Returns 'editable' if the element can accept user input, 'not_editable' if it is disabled or read-only. More comprehensive than browser_is_enabled which only checks the disabled attribute.",
22036
+ tags: [
22037
+ "General"
22038
+ ],
22039
+ requestBody: {
22040
+ required: true,
22041
+ content: {
22042
+ "application/json": {
22043
+ schema: {
22044
+ type: "object",
22045
+ properties: {
22046
+ context_id: {
22047
+ type: "string",
22048
+ description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
22049
+ },
22050
+ selector: {
22051
+ type: "string",
22052
+ description: "CSS selector or natural language description of the element to check editability for"
22053
+ },
22054
+ index: {
22055
+ type: "string",
22056
+ description: "When multiple elements match the selector, check the Nth element (0-based). Default: -1 (first match)"
22057
+ }
22058
+ },
22059
+ required: [
22060
+ "context_id",
22061
+ "selector"
22062
+ ]
22063
+ }
22064
+ }
22065
+ }
22066
+ },
22067
+ responses: {
22068
+ "200": {
22069
+ description: "Successful response"
22070
+ },
22071
+ "400": {
22072
+ description: "Bad request"
22073
+ },
22074
+ "401": {
22075
+ description: "Unauthorized"
22076
+ }
22077
+ }
22078
+ }
22079
+ },
22080
+ "/api/execute/browser_count_elements": {
22081
+ post: {
22082
+ summary: "Browser Count Elements",
22083
+ description: "Count the number of elements matching a CSS selector. Returns the count as an integer. Useful for checking how many items exist (e.g., list items, search results, table rows) without extracting full element data.",
22084
+ tags: [
22085
+ "General"
22086
+ ],
22087
+ requestBody: {
22088
+ required: true,
22089
+ content: {
22090
+ "application/json": {
22091
+ schema: {
22092
+ type: "object",
22093
+ properties: {
22094
+ context_id: {
22095
+ type: "string",
22096
+ description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
22097
+ },
22098
+ selector: {
22099
+ type: "string",
22100
+ description: `CSS selector to count matching elements (e.g., 'li.item', 'input[type="text"]', 'table tr')`
22101
+ }
22102
+ },
22103
+ required: [
22104
+ "context_id",
22105
+ "selector"
22106
+ ]
22107
+ }
22108
+ }
22109
+ }
22110
+ },
22111
+ responses: {
22112
+ "200": {
22113
+ description: "Successful response"
22114
+ },
22115
+ "400": {
22116
+ description: "Bad request"
22117
+ },
22118
+ "401": {
22119
+ description: "Unauthorized"
22120
+ }
22121
+ }
22122
+ }
22123
+ },
22124
+ "/api/execute/browser_dispatch_event": {
22125
+ post: {
22126
+ summary: "Browser Dispatch Event",
22127
+ description: "Dispatch a DOM event on an element. Programmatically triggers events like 'input', 'change', 'focus', 'blur', 'submit', etc. Useful for triggering event handlers after programmatic value changes, or for simulating user interactions that don't involve mouse/keyboard input.",
22128
+ tags: [
22129
+ "General"
22130
+ ],
22131
+ requestBody: {
22132
+ required: true,
22133
+ content: {
22134
+ "application/json": {
22135
+ schema: {
22136
+ type: "object",
22137
+ properties: {
22138
+ context_id: {
22139
+ type: "string",
22140
+ description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
22141
+ },
22142
+ selector: {
22143
+ type: "string",
22144
+ description: "CSS selector or natural language description of the element to dispatch the event on"
22145
+ },
22146
+ event_type: {
22147
+ type: "string",
22148
+ description: "The DOM event type to dispatch (e.g., 'click', 'input', 'change', 'focus', 'blur', 'submit', 'mouseenter', 'mouseleave'). Any valid DOM event name is accepted"
22149
+ },
22150
+ bubbles: {
22151
+ type: "boolean",
22152
+ description: "Whether the event should bubble up through the DOM tree. Default: true"
22153
+ }
22154
+ },
22155
+ required: [
22156
+ "context_id",
22157
+ "selector",
22158
+ "event_type"
22159
+ ]
22160
+ }
22161
+ }
22162
+ }
22163
+ },
22164
+ responses: {
22165
+ "200": {
22166
+ description: "Successful response"
22167
+ },
22168
+ "400": {
22169
+ description: "Bad request"
22170
+ },
22171
+ "401": {
22172
+ description: "Unauthorized"
22173
+ }
22174
+ }
22175
+ }
22176
+ },
21968
22177
  "/api/execute/browser_get_attribute": {
21969
22178
  post: {
21970
22179
  summary: "Browser Get Attribute",
@@ -21990,6 +22199,10 @@ var openapi_default = {
21990
22199
  attribute: {
21991
22200
  type: "string",
21992
22201
  description: "The attribute name to retrieve (e.g., 'href', 'src', 'value', 'data-id', 'class')"
22202
+ },
22203
+ index: {
22204
+ type: "string",
22205
+ description: "When multiple elements match the selector, get attribute from the Nth element (0-based). Default: -1 (first match)"
21993
22206
  }
21994
22207
  },
21995
22208
  required: [
@@ -22035,6 +22248,10 @@ var openapi_default = {
22035
22248
  selector: {
22036
22249
  type: "string",
22037
22250
  description: "CSS selector or natural language description of the element to get position and size for"
22251
+ },
22252
+ index: {
22253
+ type: "string",
22254
+ description: "When multiple elements match the selector, get bounding box of the Nth element (0-based). Default: -1 (first match)"
22038
22255
  }
22039
22256
  },
22040
22257
  required: [
@@ -22356,7 +22573,7 @@ var openapi_default = {
22356
22573
  "/api/execute/browser_extract_text": {
22357
22574
  post: {
22358
22575
  summary: "Browser Extract Text",
22359
- description: "Extract visible text content from the page or a specific element. Returns plain text stripped of HTML tags. Optionally target a specific element using CSS selector or natural language description. Optionally apply a regex pattern to filter/extract specific content from the text. Useful for reading page content, extracting article text, getting form values, or extracting specific data like numbers, emails, or prices.",
22576
+ description: "Extract visible text content from the page or a specific element. Returns plain text stripped of HTML tags. Optionally target a specific element using CSS selector or natural language description. When the selector matches multiple elements, returns a JSON array of text strings. Optionally apply a regex pattern to filter/extract specific content from the text (applied per-element when multiple matches). Useful for reading page content, extracting article text, getting form values, or extracting specific data like numbers, emails, or prices.",
22360
22577
  tags: [
22361
22578
  "General"
22362
22579
  ],
@@ -22373,7 +22590,7 @@ var openapi_default = {
22373
22590
  },
22374
22591
  selector: {
22375
22592
  type: "string",
22376
- description: "Optional CSS selector or natural language description to extract text from a specific element. If omitted, extracts all visible text from the entire page. Examples: '#main-content', 'article', 'the product description'"
22593
+ description: "Optional CSS selector or natural language description to extract text from a specific element. If omitted, extracts all visible text from the entire page. When the selector matches multiple elements, returns a JSON array of text strings (one per element). Examples: '#main-content', '.product-name', 'article'"
22377
22594
  },
22378
22595
  regex: {
22379
22596
  type: "string",
@@ -22382,6 +22599,10 @@ var openapi_default = {
22382
22599
  regex_group: {
22383
22600
  type: "string",
22384
22601
  description: "Which capture group to return from the regex match. 0 returns the full match (default), 1 returns the first capture group, 2 returns the second, etc. Example: with regex 'FP ID:\\\\s*(\\\\S+)' and regex_group=1, only the ID value is returned."
22602
+ },
22603
+ index: {
22604
+ type: "string",
22605
+ description: "When multiple elements match the selector, extract text from the Nth element (0-based) instead of returning all. Default: not set (returns all matches as array). Set to 0 for first, 1 for second, -1 for last."
22385
22606
  }
22386
22607
  },
22387
22608
  required: [
@@ -22489,6 +22710,10 @@ var openapi_default = {
22489
22710
  background_color: {
22490
22711
  type: "string",
22491
22712
  description: "CSS color for the highlight background (use alpha for transparency). Default: 'rgba(255, 0, 0, 0.2)'. Examples: 'rgba(0, 255, 0, 0.3)', 'transparent'"
22713
+ },
22714
+ index: {
22715
+ type: "string",
22716
+ description: "When multiple elements match the selector, highlight the Nth element (0-based). Default: -1 (first match)"
22492
22717
  }
22493
22718
  },
22494
22719
  required: [
@@ -22570,7 +22795,7 @@ var openapi_default = {
22570
22795
  "/api/execute/browser_get_html": {
22571
22796
  post: {
22572
22797
  summary: "Browser Get Html",
22573
- description: "Extract the page's HTML with configurable cleaning levels. 'minimal' preserves most structure, 'basic' removes scripts and styles, 'aggressive' strips to essential content. Useful for page analysis, content extraction, and feeding HTML to other processing tools.",
22798
+ description: "Extract HTML content with configurable cleaning levels. Optionally target a specific element using a CSS selector to get its innerHTML instead of the full page. When the selector matches multiple elements, returns a JSON array of HTML strings. 'minimal' preserves most structure, 'basic' removes scripts and styles, 'aggressive' strips to essential content. Useful for page analysis, content extraction, and feeding HTML to other processing tools.",
22574
22799
  tags: [
22575
22800
  "General"
22576
22801
  ],
@@ -22585,6 +22810,10 @@ var openapi_default = {
22585
22810
  type: "string",
22586
22811
  description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
22587
22812
  },
22813
+ selector: {
22814
+ type: "string",
22815
+ description: "Optional CSS selector to get innerHTML of a specific element (e.g., '#content', '.article-body'). When the selector matches multiple elements, returns a JSON array of HTML strings (one per element). When omitted, returns the full page HTML"
22816
+ },
22588
22817
  clean_level: {
22589
22818
  type: "string",
22590
22819
  description: "Level of HTML cleaning to apply. 'minimal': preserves most structure, 'basic': removes scripts/styles (default), 'aggressive': strips to essential content only. Choose based on how much structure you need",
@@ -22867,7 +23096,7 @@ var openapi_default = {
22867
23096
  "/api/execute/browser_extract_json": {
22868
23097
  post: {
22869
23098
  summary: "Browser Extract Json",
22870
- description: "Extract structured data from the page using predefined templates or auto-detection. Templates available for Google Search results, Wikipedia articles, Amazon products, GitHub repos, and more. Returns consistently structured JSON regardless of page layout changes.",
23099
+ description: "Extract structured data from the page as JSON. For known sites (Google, Amazon, Wikipedia, etc.) uses predefined templates. For unknown sites, uses smart DOM analysis to detect repeating items (products, posts, search results) and extract fields (title, link, image, price, rating, date, description). Use 'selector' to scope extraction to a specific container. Returns page type, items array, structured LD+JSON data, and meta tags.",
22871
23100
  tags: [
22872
23101
  "General"
22873
23102
  ],
@@ -22885,6 +23114,10 @@ var openapi_default = {
22885
23114
  template: {
22886
23115
  type: "string",
22887
23116
  description: "Extraction template name for known site types. Available: 'google_search', 'wikipedia', 'amazon_product', 'github_repo', 'twitter_feed', 'reddit_thread'. Leave empty for auto-detection based on URL"
23117
+ },
23118
+ selector: {
23119
+ type: "string",
23120
+ description: "CSS selector to scope extraction to a specific container (e.g., 'div.product-grid', '#results'). When set, only elements within this container are analyzed for repeating patterns"
22888
23121
  }
22889
23122
  },
22890
23123
  required: [
@@ -23485,6 +23718,10 @@ var openapi_default = {
23485
23718
  selector: {
23486
23719
  type: "string",
23487
23720
  description: "CSS selector or natural language description of the element to scroll into view. Examples: '#footer', '.product-reviews', 'the comments section'"
23721
+ },
23722
+ index: {
23723
+ type: "string",
23724
+ description: "When multiple elements match the selector, scroll to the Nth element (0-based). Default: -1 (first match)"
23488
23725
  }
23489
23726
  },
23490
23727
  required: [
@@ -23611,6 +23848,10 @@ var openapi_default = {
23611
23848
  timeout: {
23612
23849
  type: "string",
23613
23850
  description: "Maximum time to wait in milliseconds. Returns error if element doesn't appear within this time. Default: 5000 (5 seconds)"
23851
+ },
23852
+ index: {
23853
+ type: "string",
23854
+ description: "When multiple elements match the selector, wait for the Nth element (0-based). Default: -1 (first match)"
23614
23855
  }
23615
23856
  },
23616
23857
  required: [
@@ -27164,6 +27405,57 @@ var openapi_default = {
27164
27405
  }
27165
27406
  }
27166
27407
  },
27408
+ "/api/execute/browser_get_page_map": {
27409
+ post: {
27410
+ summary: "Browser Get Page Map",
27411
+ description: "Get a compact structured map of all interactive elements on the page, grouped by sections. Returns a markdown table with numbered references, types, descriptions, current values, and selectors. Use element numbers as selectors in browser_click and browser_type (e.g., selector '5'). 10x cheaper than screenshots for AI agent page understanding.",
27412
+ tags: [
27413
+ "General"
27414
+ ],
27415
+ requestBody: {
27416
+ required: true,
27417
+ content: {
27418
+ "application/json": {
27419
+ schema: {
27420
+ type: "object",
27421
+ properties: {
27422
+ context_id: {
27423
+ type: "string",
27424
+ description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
27425
+ },
27426
+ intent: {
27427
+ type: "string",
27428
+ description: "Task description to boost matching elements (e.g., 'buy nvidia jetson')"
27429
+ },
27430
+ max_elements: {
27431
+ type: "string",
27432
+ description: "Maximum number of elements to return (0 = unlimited). Returns top N by importance score"
27433
+ },
27434
+ region: {
27435
+ type: "string",
27436
+ description: "Filter to specific page region: 'main', 'nav', 'header', 'footer', 'sidebar', 'article', 'form', 'dialog'. Empty = all regions"
27437
+ }
27438
+ },
27439
+ required: [
27440
+ "context_id"
27441
+ ]
27442
+ }
27443
+ }
27444
+ }
27445
+ },
27446
+ responses: {
27447
+ "200": {
27448
+ description: "Successful response"
27449
+ },
27450
+ "400": {
27451
+ description: "Bad request"
27452
+ },
27453
+ "401": {
27454
+ description: "Unauthorized"
27455
+ }
27456
+ }
27457
+ }
27458
+ },
27167
27459
  "/api/execute/browser_get_blocker_stats": {
27168
27460
  post: {
27169
27461
  summary: "Browser Get Blocker Stats",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olib-ai/owl-browser-mcp",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "MCP server for Owl Browser HTTP API - 157 browser automation tools with anti-detection",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",